使用.Azure devopsとの対話
17100 ワード
Dev BenjaminのUnsplashによる写真
私は使用します.NET対話型Azure devopsに接続し、1つのクエリの出力でMarkdownを生成します.
アジュールデビルズ
まず、認証のパットを設定しなければなりません.
レンダリングの変更
レンダリングを操作するには、型の特殊なフォーマッタを定義する必要があります.
Interesting post by Lady Nagaga .
これが助ける望み!
私は使用します.NET対話型Azure devopsに接続し、1つのクエリの出力でMarkdownを生成します.
アジュールデビルズ
まず、認証のパットを設定しなければなりません.
string pat = "<YOUR PAT>";
次に、局所的にWorkItemを表す型を定義する必要があります.class WorkItemPresentation
{
public string Id {get; set;}
public string Name {get; set;}
public string State {get; set;}
public string Description {get; set;}
}
最後に、クエリを呼び出し、出力をWorkItemMementationにマップして出力します.#r "nuget:Microsoft.TeamFoundationServer.Client"
#r "nuget:Microsoft.VisualStudio.Services.InteractiveClient,16.170.0"
#r "nuget:Microsoft.VisualStudio.Services.Client"
// https://www.nuget.org/packages/Microsoft.TeamFoundationServer.Client/
using Microsoft.TeamFoundation.WorkItemTracking.WebApi;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
// https://www.nuget.org/packages/Microsoft.VisualStudio.Services.InteractiveClient/
using Microsoft.VisualStudio.Services.Client;
using Microsoft.VisualStudio.Services.WebApi;
// https://www.nuget.org/packages/Microsoft.VisualStudio.Services.Client/
using Microsoft.VisualStudio.Services.Common;
VssConnection connection = new VssConnection(new Uri("https://XXX.visualstudio.com"), new VssBasicCredential(string.Empty, pat));
// Create instance of WorkItemTrackingHttpClient using VssConnection
WorkItemTrackingHttpClient witClient = connection.GetClient<WorkItemTrackingHttpClient>();
// Get 2 levels of query hierarchy items
List<QueryHierarchyItem> queryHierarchyItems = witClient.GetQueriesAsync("<PROJECT>", depth: 2).Result;
// Search for 'My Queries' folder
QueryHierarchyItem myQueriesFolder = queryHierarchyItems.FirstOrDefault(qhi => qhi.Name.Equals("My Queries"));
if (myQueriesFolder != null)
{
string queryName = "<QUERY_NAME>";
// See if our 'REST Sample' query already exists under 'My Queries' folder.
QueryHierarchyItem newBugsQuery = null;
if (myQueriesFolder.Children != null)
{
newBugsQuery = myQueriesFolder.Children.FirstOrDefault(qhi => qhi.Name.Equals(queryName));
}
var queryResult = witClient.QueryByIdAsync(newBugsQuery.Id).Result;
// need to get the list of our work item id's and put them into an array
int[] workItemIds = queryResult.WorkItems.Select<WorkItemReference, int>(wif => { return wif.Id; }).ToArray();
// build a list of the fields we want to see
string[] fields = new []
{
"System.Id",
"System.Title",
"System.State",
"System.Description"
};
IEnumerable<WorkItemPresentation> workItems = witClient.GetWorkItemsAsync(workItemIds, fields, queryResult.AsOf).Result.Select(w => new WorkItemPresentation(){Id=w.Fields["System.Id"].ToString(),
Name=w.Fields["System.Title"].ToString(),
State=w.Fields["System.State"].ToString(),
Description=w.Fields.ContainsKey("System.Description") ? w.Fields["System.Description"].ToString() : "" });
display(workItems);
}
レンダリングの変更
レンダリングを操作するには、型の特殊なフォーマッタを定義する必要があります.
using static Microsoft.DotNet.Interactive.Formatting.PocketViewTags;
using Microsoft.DotNet.Interactive.Formatting;
public string Clean(string content){
return content.Replace("[", " ").Replace("]", " ").Replace("(", " ").Replace(")", " ");
}
Formatter.ResetToDefault();
Formatter.Register<IEnumerable<WorkItemPresentation>>((workItems, writer) =>
{
foreach (var workItemPresentation in workItems)
{
writer.WriteLine("<br/>");
writer.WriteLine("---");
writer.WriteLine("<br/>");
writer.WriteLine("<br/>");
writer.WriteLine($"# {Clean(workItemPresentation.Name)}");
writer.WriteLine("<br/>");
writer.WriteLine("<br/>");
writer.WriteLine($"{Clean(!string.IsNullOrEmpty(workItemPresentation.Description) ? workItemPresentation.Description : workItemPresentation.Name)}");
writer.WriteLine("<br/>");
}
}, mimeType: "text/html");
フォーマットにはdocsを参照してください.Interesting post by Lady Nagaga .
これが助ける望み!
Reference
この問題について(使用.Azure devopsとの対話), 我々は、より多くの情報をここで見つけました https://dev.to/antoinega/use-net-interactive-with-azure-devops-2cihテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol