次の方法で共有


作業項目フォームにカスタム コントロールを追加する

Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022

ユーザー設定コントロールを使用すると、ユーザーが作業項目フォームのフィールドを表示および操作する方法を変更できます。 次の記事では、このサンプル カスタム コントロールの作成方法について説明します。 この記事では、独自のカスタム コントロールを構築する方法について説明します。

ヒント

テーマ設定や VSS からの移行など、最新の拡張機能開発ガイダンスについて説明します。SDK については、 Azure DevOps Extension SDK 開発者ポータルを参照してください。

前提条件

プロジェクトに azure-devops-extension-sdk を含めます。

  1. npm: npm install azure-devops-extension-sdk を使用して SDK をインストールします。

  2. JavaScript コードで初期化して下さい。

    import * as SDK from "azure-devops-extension-sdk";
    SDK.init();
    

コントロールの寄与を追加する

拡張機能マニフェストに、種類ms.vss-work-web.work-item-form-controlでターゲットms.vss-work-web.work-item-formに対するコントリビューションを追加します。

"contributions": [
    {  
        "id": "sample-work-item-form-control",
        "type": "ms.vss-work-web.work-item-form-control",
        "description": "Custom work item form control",
        "targets": [
            "ms.vss-work-web.work-item-form"
        ],
        "properties": {
            "name": "My Control",
            "uri": "workItemControl.html",
            "height": 600
        }
    }
],
"manifestVersion": 1.0,
    "scopes": [
        "vso.work"
    ]

作業項目フォームは、IFrame にカスタム コントロールを読み込みます。

コントロールのプロパティ

プロパティ 説明
name グループに表示されるテキスト。
uri IFrame に読み込まれた HTML ページへの URI。
height (省略可能)IFrame の高さ (ピクセル単位)。 既定値は 50 です。
inputs フォームにコントロールを追加するときにユーザーが指定する値。

IFrame のサイズを動的に変更するには、SDK で resize メソッドを使用します。

カスタム コントロールは、グループとページコントリビューションに似た投稿の種類です。 主な違いは、コントロールコントリビューションはユーザー入力を受け入れるのに対し、グループとページのコントリビューションは受け入れないということです。

コントリビューション入力を制御する

コントリビューション オブジェクトの inputs プロパティを使用して、コントロールの構成可能な入力を定義します。

次の例では、2 つの入力を定義します。 FieldName コントロールが関連付けられている作業項目フィールドを指定し、 Colors どの色がどのフィールド値にマップするかを構成します。 ユーザーは、フォームにコントロールを追加するときにこれらの値を指定し、値は読み込み時にコントロールに渡されます。

"inputs": [
    {
        "id": "FieldName",
        "description": "The field associated with the control.",
        "type": "WorkItemField",
        "properties": {
            "workItemFieldTypes": ["String"]
        },
        "validation": {
            "dataType": "String",
            "isRequired": true
        }
    },
    {
        "id": "Colors",
        "description": "The colors that match the values in the control.",
        "type": "string",
        "validation": {
            "dataType": "String",
            "isRequired": false
        }
    }
]

入力プロパティ

次のプロパティは、ユーザー入力を定義します。

プロパティ 説明
ID 入力の一意の ID。
説明 入力の簡単な説明。
type (省略可能)入力の種類。 WorkItemFieldを使用して、値を作業項目フィールド参照名にする必要があることを示します。
プロパティ (省略可能)カスタム プロパティ。 workItemFieldTypesを使用して、有効なフィールドの種類 (StringIntegerDateTimeBooleanなど) を制限します。
検証 検証ルール。 dataType (StringNumberBoolean、またはField) とisRequired (trueまたはfalse) を設定します。

サポートされている workItemFieldTypes 値: StringIntegerDateTimePlainTextHTMLTreePathHistoryDoubleGuidBooleanIdentityPicklistStringPicklistIntegerPicklistDouble

JavaScript のサンプル

カスタム コントロール拡張機能は、グループまたはページ拡張機能と同様に機能し、 SDK.getConfiguration().witInputsを介してユーザー入力値を読み取ります。 次の例では、作業項目フォーム イベントに応答するプロバイダーを登録します。

import { Control } from "control";
import * as SDK from "azure-devops-extension-sdk";
import * as ExtensionContracts from "azure-devops-extension-api/WorkItemTracking/WorkItemTracking";

let control;

const provider = () => {
    return {
        onLoaded: (workItemLoadedArgs) => {
            // create the control
            const config = SDK.getConfiguration();
            const fieldName = config.witInputs["FieldName"];
            const colors = config.witInputs["Colors"];
            control = new Control(fieldName, colors);
        },
        onFieldChanged: (fieldChangedArgs) => {
            const changedValue = fieldChangedArgs.changedFields[control.getFieldName()];
            if (changedValue !== undefined) {
                control.updateExternal(changedValue);
            }
        }
    };
};

SDK.init();
SDK.ready().then(() => {
    SDK.register(SDK.getContributionId(), provider);
});

次のスクリーンショットは、 Priority フィールドのカスタム作業項目コントロールの例を示しています。

作業項目フォームのカスタム コントロールのスクリーンショット。