2

RallyでカスタムHTMLアプリを作成して、Add Newコンポーネントを介してユーザーストーリーを作成し、JQueryとYQLJSONクエリを使用して外部ソースからデータを描画しようとしています。

このプロセスは、事前に入力された名前、説明、およびメモに対して不思議に機能します。ただし、所有者が事前に入力された状態で作業する唯一の方法は、オブジェクトドロップダウンを使用してユーザーを手動で選択することです。同じ外部ソースから所有者をプルできるようにしたい。

現在、これは理論をテストするためのダミーコードです。

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;
    }

'value'変数は、ユーザーが外部データを取得する場所のURLを入力できるテキストボックスを介して設定されます。

ユーザー変数は、ドロップダウンを介して設定されます。user変数を、eventArgs.item ["Owner"] = "User Name";など、Rallyのユーザーとまったく同じ表示名に置き換えてみました。ただし、これにより、作成時にユーザーストーリーの所有者が空白になります。

これをどのように達成できるかについてのアイデアはありますか?

4

1 に答える 1

0

ユーザーはRallyのオブジェクトであるため、アーティファクトの所有者属性をRallyユーザー名の文字列に設定することはできません。代わりに、所有者をrefの形式で有効なRallyユーザーへの参照に設定する必要があります/user/12345678910。 integerは、対象のユーザーのオブジェクトIDです。rallyDataSourceとAppSDKを使用して、Rallyユーザー名の文字列値に対してクエリを実行し、必要な参照を取得できます。

電子メール形式のユーザー名を取得し、必要なUserオブジェクトへの参照をRallyに照会するというアイデアを示す基本的な例を含めました。この例では、単純なDOM<select>コンポーネントを使用して、ユーザー名データの「外部」ソースをシミュレートします(この場合、YQL JSONを使用してJQueryを介して入力されます)。例では、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="user1@company.com">user1@company.com</option>
  <option value="user2@company.com">user2@company.com</option>
  <option value="user3@company.com">user3@company.com</option>
</select>
</body>
</html>
于 2012-05-29T03:12:13.547 に答える