2012-05-29 1 views
2

Я пытаюсь создать пользовательское приложение HTML в ралли, чтобы создать пользовательскую историю, созданную с помощью компонента «Добавить новый» и используя данные из внешнего источника, используя JQuery с запросом YQL JQL ,onPreCreate with Owner, извлеченный из внешнего источника

Этот процесс заставляет задуматься о предварительно заполненном имени, описании и заметках. Тем не менее, единственный способ в настоящий момент, когда владелец работает предварительно, - это использовать раскрывающийся список объектов, чтобы вручную выбрать пользователя. Я хочу иметь возможность вытащить Владельца из того же внешнего источника.

В настоящее время это фиктивный код для проверки теории:

var statement = "select * from html where url='" + value + "' and xpath='//h1'"; 
     document.getElementById('statement').innerHTML = statement; 
     $.queryYQL(statement, "json", function (data) { 
      var item = data.query.results.h1; 
      for(var i=0;i<item.length;i++){ 
       title = item[i].content; 
       style = item[i].style; 
       output += "<h3>"+title +"<br />"+ style +"</h3>"; 
      } 
      document.getElementById('results').innerHTML = output; 
     }); 

function onAddNewPreCreate(addNew, eventArgs) { 
     eventArgs.item["Name"] = title; 
     eventArgs.item["Description"] = output; 
     eventArgs.item["Notes"] = style; 
     eventArgs.item["Owner"] = user; 
    } 

переменной «значения» устанавливаются через текстовое поле, в котором пользователь может ввести URL-адрес, где они хотят, чтобы захватить внешние данные.

Пользовательская переменная устанавливается в раскрывающемся списке. Я попытался заменить пользовательскую переменную тем же отображаемым именем, что и пользователь в Rally, например eventArgs.item ["Owner"] = "User Name"; но это приводит к пробелу для Владельца Истории Пользователя при его создании.

Любые идеи о том, как это может быть достигнуто?

ответ

0

Поскольку пользователи являются объектами в ралли, вы не можете установить атрибут владельца Artifact как строку имени пользователя Rally, а вы должны установить для Владельца ссылку на действительного пользователя Rally в форме ссылки : /user/12345678910, где длинное целое число - это ИД объекта Пользователя, представляющего интерес. Вы можете использовать rallyDataSource и AppSDK для выполнения запроса по строковому значению имени пользователя Rally и получить необходимый номер ссылки.

Я включил базовый пример, иллюстрирующий идею ввода имени пользователя, отформатированного по электронной почте, и запрос Ралли для ссылки на необходимый объект пользователя. В примере используется простой компонент DOM <select> для имитации «внешнего» источника данных имени пользователя (в вашем случае, заполненном через JQuery с помощью YQL JSON). Примеры делают это вместо AppSDK ObjectDropdown, который, хотя и является самым простым способом выполнить это, как вы заметили, не соответствует вашим потребностям, поскольку вы проводите опрос внешнего источника в качестве источника вашего пользовательского селектора.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<!-- Copyright (c) 2011 Rally Software Development Corp. All rights reserved --> 
<html> 
<head> 
    <title>Component Example: Add New User Story, &quotExternal&quot User Chooser</title> 
    <meta name="Name" content="Component Example: Add New User Story, 'External' User Chooser" /> 
    <meta name="Version" content="2012.1" /> 
    <meta name="Vendor" content="Rally Labs" /> 
    <script type="text/javascript" src="https://rally1.rallydev.com/apps/1.26/sdk.js"></script> 
    <script type="text/javascript"> 

     // Global variables to store Reference to selected User 
     var userRef = null; 
     var rallyDataSource; 

    var getUserRef = function(results) {  
     var user = results.users[0]; 
     userRef = user._ref; 
    }; 

    function userSelectChanged() { 

     var userChooser = document.getElementById("userChooser"); 
     var strUser = userChooser.options[userChooser.selectedIndex].value; 

     queryString = '(UserName = "' + strUser + '")'; 

     var userQueryConfig = { 
      type : 'user', 
      key : 'users', 
      fetch: 'UserName,DisplayName,Role', 
      query: queryString 
     }; 

     rallyDataSource.findAll(userQueryConfig, getUserRef); 
    } 

    function onAddNewAdd(addNew, eventArgs){  
     var createdItem = eventArgs.item; 
     var createdFormattedId = createdItem.FormattedID;  
     alert("Created new User Story with Formatted ID: " + createdFormattedId); 
    } 

    function onAddNewPreCreate(addNew, eventArgs) 
    { 
     // Grab Rally ref of User selected in HTML dropdown 
     // set it as Owner attribute of created User Story 
     eventArgs.item["Owner"] = userRef; 
    } 
    function onLoad() { 

     rallyDataSource = new rally.sdk.data.RallyDataSource('__WORKSPACE_OID__', 
       '__PROJECT_OID__', 
       '__PROJECT_SCOPING_UP__', 
       '__PROJECT_SCOPING_DOWN__'); 

     var addNewConfig = { 
      types : ["HierarchicalRequirement"] 
     }; 

     // Populate userRef from Rally for default selected user: 
     userSelectChanged(); 

     var addNew = new rally.sdk.ui.AddNewArtifact(addNewConfig, rallyDataSource); 
     addNew.addEventListener("onAdd",onAddNewAdd); 
     addNew.addEventListener('onPreCreate', onAddNewPreCreate); 
     addNew.display("addNewDiv"); 


    } 

    rally.addOnLoad(onLoad); 

    </script> 
</head> 
<body> 
<div id="addNewDiv"></div> 
<div id="userChooserDiv"> 
Select a Rally User as Story Owner: 
<select id="userChooser" onChange="userSelectChanged()"> 
    <option selected value="[email protected]">[email protected]</option> 
    <option value="[email protected]">[email protected]y.com</option> 
    <option value="[email protected]">[email protected]</option> 
</select> 
</body> 
</html> 
+0

Hi @Markw. Ваше решение отлично. Спасибо, кучи! – Mia