次の方法で共有


作業項目フォームの拡張

Azure DevOps Services |Azure DevOps Server 2022 および Azure DevOps Server 2019

この記事では、拡張機能を使用して、作業項目フォームをユーザーに表示する方法をカスタマイズする方法について説明します。 Azure DevOps の作業項目フォームにアクション、オブザーバー、グループ、またはページを追加するなど、作業項目の追跡を拡張できます。

完全なソース コードについては、GitHub の Azure DevOps 拡張機能サンプルUI の例を参照してください。

グループを追加する

作業項目フォームのツール バー項目を示すスクリーンショット。

メイン ページにグループを追加するには、拡張機能マニフェストに投稿を追加します。 このコントリビューションの種類は ms.vss-work-web.work-item-form-group し、 ms.vss-work-web.work-item-form コントリビューションをターゲットにする必要があります。

"contributions": [
   {  
       "id": "sample-work-item-form-group",
       "type": "ms.vss-work-web.work-item-form-group",
       "description": "Custom work item form group",
       "targets": [
           "ms.vss-work-web.work-item-form"
       ],
       "properties": {
           "name": "My Group",
           "uri": "workItemGroup.html",
           "height": 600
       }
   }
]

プロパティ

プロパティ 説明
name グループに表示されるテキスト。
uri 作業項目フォームとそのスクリプトに表示される HTML をホストするページへの URI。
height (省略可能)グループの高さを定義します。 省略すると、100% になります。

JavaScript のサンプル

この例では、投稿されたグループに影響する可能性がある作業項目フォームでイベントが発生したときに呼び出されるオブジェクトを登録する方法を示します。

import { IWorkItemFormService, WorkItemTrackingServiceIds } from "azure-devops-extension-api/WorkItemTracking";
import * as SDK from "azure-devops-extension-sdk";

// Get the WorkItemFormService.  This service allows you to get/set fields/links on the 'active' work item (the work item
// that currently is displayed in the UI).
async function getWorkItemFormService()
{
    const workItemFormService = await SDK.getService<IWorkItemFormService>(WorkItemTrackingServiceIds.WorkItemFormService);
    return workItemFormService;
}

// Register a listener for the work item group contribution after initializing the SDK.
SDK.register(SDK.getContributionId(), function () {
    return {
        // Called when the active work item is modified
        onFieldChanged: function(args) {
            $(".events").append($("<div/>").text("onFieldChanged - " + JSON.stringify(args)));
        },
        
        // Called when a new work item is being loaded in the UI
        onLoaded: function (args) {

            getWorkItemFormService().then(function(service) {            
                // Get the current values for a few of the common fields
                service.getFieldValues(["System.Id", "System.Title", "System.State", "System.CreatedDate"]).then(
                    function (value) {
                        $(".events").append($("<div/>").text("onLoaded - " + JSON.stringify(value)));
                    });
            });
        },
        
        // Called when the active work item is being unloaded in the UI
        onUnloaded: function (args) {
            $(".events").empty();
            $(".events").append($("<div/>").text("onUnloaded - " + JSON.stringify(args)));
        },
        
        // Called after the work item has been saved
        onSaved: function (args) {
            $(".events").append($("<div/>").text("onSaved - " + JSON.stringify(args)));
        },
        
        // Called when the work item is reset to its unmodified state (undo)
        onReset: function (args) {
            $(".events").append($("<div/>").text("onReset - " + JSON.stringify(args)));
        },
        
        // Called when the work item has been refreshed from the server
        onRefreshed: function (args) {
            $(".events").append($("<div/>").text("onRefreshed - " + JSON.stringify(args)));
        }
    }
});

イベント

イベント イベントの説明 引数 引数の説明
onFieldChanged フィールドが変更された後に発生します。 フィールド変更で他のフィールドを更新するルールが実行された場合、これらの変更はすべて 1 つのイベントに含まれます。 身分証明書 作業項目の ID
changedFields 変更されたすべてのフィールドの参照名を持つ配列。 身分証明書 作業項目の ID
onLoaded 作業項目フォームにデータが読み込まれた後、ユーザーが作業項目を開いたとき、またはユーザーがトリアージ ビューで別の作業項目に移動したときに発生します。 身分証明書 作業項目の ID
onReset ユーザーが作業項目への変更を元に戻した後に発生します。 身分証明書 作業項目の ID
onRefreshed ユーザーが作業項目を手動で更新した後に発生します。 身分証明書 作業項目の ID
onSaved 作業項目が保存された後に発生します。 ダイアログ内の作業項目の場合は、イベントが確実に発生するようにするため、ms.vss-work-web.work-item-notifications の種類をターゲットにする必要があります。なぜなら、ダイアログが閉じるとこの種類のコントリビューションがアンロードされるからです。 詳細については、「 Listen for events」を参照してください。 身分証明書 作業項目の ID
onUnloaded ユーザーがダイアログを閉じる前、またはユーザーがトリアージ ビューの別の作業項目に移動する前に発生します。 身分証明書 作業項目の ID

ページを追加

新しいページが作業項目フォームのタブとしてレンダリングされます。 [ 詳細 ] タブの横に新しいページが表示されます。

作業項目フォームのタブとして新しいページを示すスクリーンショット。

作業項目フォームにページを追加するには、拡張機能マニフェストに投稿を追加します。 このコントリビューションの種類は ms.vss-work-web.work-item-form-page し、 ms.vss-work-web.work-item-form コントリビューションをターゲットにする必要があります。

"contributions": [
    {  
        "id": "sample-work-item-form-page",
        "type": "ms.vss-work-web.work-item-form-page",
        "description": "Custom work item form page",
        "targets": [
            "ms.vss-work-web.work-item-form"
        ],
        "properties": {
            "name": "My Page",
            "uri": "workItemPage.html"
        } 
    }
]

プロパティ

プロパティ 説明
名前 タブ ページに表示されるテキスト。
URI 作業項目フォームとそのスクリプトに表示される HTML をホストするページへの URI。

JavaScript のサンプル

フォーム グループセクションの JavaScript サンプルを参照してください。 登録されているオブジェクトの名前は、コントリビューションの id と一致する必要があります。

イベント

イベント イベントの説明 引数 引数の説明
onFieldChanged フィールドが変更された後に発生します。 フィールド変更で他のフィールドを更新するルールが実行された場合、これらの変更はすべて 1 つのイベントに含まれます。 身分証明書 作業項目の ID
changedFields 変更されたすべてのフィールドの参照名を持つ配列。 身分証明書 作業項目の ID
onLoaded 作業項目フォームにデータが読み込まれた後、ユーザーが作業項目を開いたとき、またはユーザーがトリアージ ビューで別の作業項目に移動したときに発生します。 身分証明書 作業項目の ID
onReset ユーザーが作業項目への変更を元に戻した後に発生します。 身分証明書 作業項目の ID
onRefreshed ユーザーが作業項目を手動で更新した後に発生します。 身分証明書 作業項目の ID
onSaved 作業項目が保存された後に発生します。 ダイアログ内の作業項目の場合は、イベントが確実に発生するようにするため、ms.vss-work-web.work-item-notifications の種類をターゲットにする必要があります。なぜなら、ダイアログが閉じるとこの種類のコントリビューションがアンロードされるからです。 詳細については、「 Listen for events」を参照してください。 身分証明書 作業項目の ID
onUnloaded ユーザーがダイアログを閉じる前、またはユーザーがトリアージ ビューの別の作業項目に移動する前に発生します。 身分証明書 作業項目の ID

作業項目フォームでコントリビューションを構成する

Azure DevOps Services では、既定では、グループ拡張機能はフォームの 2 列目の末尾に表示され、すべての作業項目フォーム ページの後にタブとしてページコントリビューションが表示されます。コントロールの投稿は既定ではフォームに表示されないため、ユーザーは手動でフォームに追加する必要があります。 Azure DevOps Server で、作業項目フォームでコントロール、グループ、およびページのコントリビューションを表示/非表示または移動するには、「作業項目フォーム拡張機能の構成 を参照してください

メニュー アクションの追加

作業項目ツール バーに項目を追加する方法を示すスクリーンショット。

作業項目ツール バーに項目を追加するには、拡張機能マニフェストにこのコントリビューションを追加します。 作業項目フォームで垂直方向の省略記号を選択すると、ドロップダウン メニューが表示されます。

"contributions": [
   {  
      "id": "sample-work-item-menu",  
      "type": "ms.vss-web.action",  
      "description": "Sample toolbar item which updates the title of a work item",  
      "targets": [  
          "ms.vss-work-web.work-item-context-menu"  
      ],  
      "properties": {  
          "text": "Try me!",  
          "title": "Updates the title of the work item from the extension",  
          "toolbarText": "Try me!",  
          "icon": "images/show-properties.png",  
          "uri": "menu-workItemToolbarButton.html"  
      }  
   }
]

プロパティ

プロパティ 説明
text ツール バー項目に表示されるテキスト。
title メニュー項目に表示されるツールヒント テキスト。
toolbarText 項目にカーソルを合わせると表示されるテキスト。
uri ツール バー アクション ハンドラーを登録するページへの URI。
icon メニュー項目に表示されるアイコンの URL。 相対 URL は、 baseUriを使用して解決されます。
group 他のユーザーに関連するメニュー項目が表示される場所を決定します。 同じグループ名のツール バー項目は、グループ化され、残りの項目の区切り記号で分割されます。
registeredObjectId (省略可能)登録済みのメニュー アクション ハンドラーの名前。 既定値はコントリビューション ID です。

イベントをリッスンする

作業項目のイベントを監視するオブザーバーを追加するには、このコントリビューションを拡張機能マニフェストに追加してください。 作業項目フォームには、オブザーバー向けの視覚化機能がありません。 作業項目フォームのonSavedイベントをリッスンする最適な方法はこれです。オブザーバーがフォーム外に存在するため、フォームが保存された直後に閉じても破棄されません。

"contributions": [
   {  
       "id": "sample-work-item-form-observer",
       "type": "ms.vss-work-web.work-item-notifications",
       "description": "Gets events about the current work item form for the 'Try Me!' toolbar button",
       "targets": [
           "ms.vss-work-web.work-item-form"
       ],
       "properties": {
           "uri": "myformobserver.html"
       }
   }
]

プロパティ

プロパティ 説明
uri イベントをリッスンするスクリプトをホストするページへの URI。

イベント

イベント イベントの説明 引数 引数の説明
onFieldChanged フィールドが変更された後に発生します。 フィールド変更で他のフィールドを更新するルールが実行された場合、これらの変更はすべて 1 つのイベントに含まれます。 身分証明書 作業項目の ID
changedFields 変更されたすべてのフィールドの参照名を持つ配列。 身分証明書 作業項目の ID
onLoaded 作業項目フォームにデータが読み込まれた後、ユーザーが作業項目を開いたとき、またはユーザーがトリアージ ビューで別の作業項目に移動したときに発生します。 身分証明書 作業項目の ID
onReset ユーザーが作業項目への変更を元に戻した後に発生します。 身分証明書 作業項目の ID
onRefreshed ユーザーが作業項目を手動で更新した後に発生します。 身分証明書 作業項目の ID
onSaved 作業項目が保存された後に発生します。 ダイアログ内の作業項目の場合は、イベントが確実に発生するようにするため、ms.vss-work-web.work-item-notifications の種類をターゲットにする必要があります。なぜなら、ダイアログが閉じるとこの種類のコントリビューションがアンロードされるからです。 詳細については、「 Listen for events」を参照してください。 身分証明書 作業項目の ID
onUnloaded ユーザーがダイアログを閉じる前、またはユーザーがトリアージ ビューの別の作業項目に移動する前に発生します。 身分証明書 作業項目の ID

HTML/JavaScript サンプル

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Work item extension page sample</title>
</head>

<body>
    <script src="sdk/scripts/SDK.js"></script>

    <script>
        SDK.init({
            usePlatformScripts: true
        });
        
        SDK.ready(function () {
             // Register a listener for the work item page contribution.
            SDK.register(SDK.getContributionId(), function () {
                return {
                    // Called when the active work item is modified
                    onFieldChanged: function(args) {
                        
                    },
                    
                    // Called when a new work item is being loaded in the UI
                    onLoaded: function (args) {
            
                    },
                    
                    // Called when the active work item is being unloaded in the UI
                    onUnloaded: function (args) {
            
                    },
                    
                    // Called after the work item has been saved
                    onSaved: function (args) {
            
                    },
                    
                    // Called when the work item is reset to its unmodified state (undo)
                    onReset: function (args) {
            
                    },
                    
                    // Called when the work item has been refreshed from the server
                    onRefreshed: function (args) {
            
                    }
                }
            });    
        });
     </script>
</body>
</html>    

新しい Boards Hub での変更

メモ

新しい Boards Hub 機能は、既定で有効になっています。 互換性を確保するために、New Boards Hub で内部拡張機能をテストすることを強くお勧めします。

最新の SDK を使用する

拡張機能で最新バージョンの azure-devops-extension-sdk が使用されていることを確認します

新しい SDK を使用する場合は、REST API 用の azure-devops-extension-api パッケージも使用する必要があります。 すべてのスプリントに最新の機能がすべて含まれるように、メソッドとインターフェイスを更新します。

action と action-provider の使い分け

メニュー ハンドラーでms.vss-web.action-providerを使用してメニュー項目を動的に読み込む場合は、getMenuItemsを使用します。 メニュー項目が静的であり、マニフェストで定義されている場合は、 ms.vss-web.action-provider を使用しないでください。 代わりに、 ms.vss-web.action を使用する必要があります。

パッケージ require("VSS/Events/Document") はサポートされなくなりました

require("VSS/Events/Document") インポートは、新しい Boards Hub ではサポートされなくなりました。