2016-04-18 15 views
0

tabsからTFSRisksフィールドを取得しようとしていますが、Fieldsをすべて印刷するとRisksが表示されません。WorkItemのすべてのフィールドを取得する方法は?

私はWorkItem.Fields["FieldName"]で直接アクセスしようとしましたが、不運です。

アイデア?

+0

デバッグを試しましたか? – silkfire

+0

@silkfireはい、アクセス可能なフィールドの参照名をすべて印刷していますが、何らかの理由でリスクが流れません – Stefan

+0

カスタマイズされたフィールドですか? –

答えて

0

WIQL Queriesを使用すると、すべてのフィールドの値を取得できます。以下はすべてWork item field indexのリストです。以下は、すべての作業項目および特定のプロジェクトのためにすべてのフィールドを取得する方法のサンプルです:

using Microsoft.TeamFoundation.WorkItemTracking.Client; 

Query query = new Query(
    workItemStore, 
    "select * from issue where System.TeamProject = @project", 
    new Dictionary<string, string>() { { "project", project.Name } } 
); 

var workItemCollection = query.RunQuery(); 
foreach(var workItem in workItemCollection) 
{ 
    /*Get work item properties you are interested in*/ 
    foreach(var field in workItem.Fields) 
    { 
     /*Get field value*/ 
     info += String.Format("Field name: {0} Value: {1}\n", field.name, field.Value); 
    } 
} 
0

は、私は少し遅れています、私は推測するが、それはまだ誰かを助けるかもしれないので、私はこれを掲示するつもりですいずれかの方法。指定しなかった場合でも、フロントエンドまたはバックエンドにいる場合。

tl; dr:要求内のフィールドパラメータを省略してください。

背景:私はTamperMonkey用のusercriptを作成したので、プルリクエストの詳細ビューで作業項目の詳細を提供したかったのです。つまり、私はJavaScript経由でフロントエンドにアクセスしているだけなので、私はTFSへの「直接」アクセス権を持っていません。

あなたのように、TFSがすべてのフィールドを出力しないことに気付きました。それを解決するため、私はfields-parameterを省略するためにjQueryを使ってTFSのajaxリクエストを修正しました。その後、TFSは作業項目の既存のフィールドをすべて返すようになりました。

私はTFS documentation for work-items

フィールド(列)
各作業項目を取得するには、最大100のフィールドのカンマ区切りリストで情報を見つけました。 指定しない場合、すべてのフィールドが返されます。

// by Joel Richard -> http://stackoverflow.com/a/26849194/4524280 
function parseParams(str) { 
    return str.split('&').reduce(function (params, param) { 
     var paramSplit = param.split('=').map(function (value) { 
      return decodeURIComponent(value.replace('+', ' ')); 
     }); 
     params[paramSplit[0]] = paramSplit[1]; 
     return params; 
    }, {}); 
} 

$.ajaxPrefilter(function(options, originalOptions, jqXHR) { 
    // Modify ajax request to return all fields... definitely not a hack :D 
    if(options && options.url && options.url.indexOf('_apis/wit/workItems') >= 0) { 
     var parsedData = parseParams(options.data); 
     delete parsedData.fields; 
     options.data = $.param(parsedData); 
    } 
}); 

$(document).ajaxComplete(function(event, request, settings) { 
    // trigger after ajax is complete to get values 
    if(settings && settings.url && settings.url.indexOf('_apis/wit/workItems') >= 0 && request.responseJSON) { 
     var workItemsData = request.responseJSON.value; 
     // -> workItemsData.fields contains all existing fields 
    } 
}); 

だけのプロトコルのために:私は誰にもないと思う実際にあなたのユースケースである場合には

、私はまた、私はAJAXリクエストを修正するために書いたスクリプトを提供しています"通常の"ユースケースでは$ .ajaxPrefilterを使うべきですが、この場合は多くのオプションがありませんでした。

関連する問題