2012-05-29 30 views
2

我正在嘗試在拉力賽中創建自定義HTML應用程序,以通過添加新組件創建用戶素材,並使用JQL和YQL JSON查詢從外部源繪製數據。onPreCreate與所有者從外部來源

這個過程對於預先填寫的名稱,描述和註釋是一個奇蹟。但是,所有者預先填充的唯一方法是使用對象下拉菜單手動選擇用戶。我希望能夠從相同的外部來源拉動所有者。

目前這是僞代碼來測試理論:

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。

用戶變量通過下拉菜單設置。我嘗試用與用戶在拉力賽中完全相同的顯示名稱替換用戶變量,如eventArgs.item [「Owner」] =「User Name」;但是在創建用戶故事的所有者時,這會導致空白。

關於如何實現這一點的任何想法?

回答

0

由於用戶是Rally中的對象,因此您不能將Artifact的所有者屬性設置爲拉力賽用戶名的字符串,相反,您必須將所有者設置爲對有效拉力賽用戶的引用,形式爲ref :/user/12345678910其中長整數是感興趣的用戶的對象ID。您可以使用rallyDataSource和AppSDK對拉力賽用戶名的字符串值進行查詢,並獲取所需的參考。

我已經包含了一個基本示例,它演示了採用電子郵件格式化用戶名的想法,並查詢Rally是否需要引用所需的用戶對象。該示例使用一個簡單的DOM <select>組件來模擬用戶名數據的「外部」來源(在您的情況下通過JQL使用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]</option> 
    <option value="[email protected]">[email protected]</option> 
</select> 
</body> 
</html> 
+0

Hi @Markw。 您的解決方案非常棒。 感謝堆! – Mia