Condividi tramite


Aggiungere un controllo personalizzato al modulo dell'elemento di lavoro

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

I controlli personalizzati consentono di modificare il modo in cui gli utenti visualizzano e interagiscono con un campo nel modulo dell'elemento di lavoro. L'articolo seguente illustra come è stato compilato questo controllo personalizzato di esempio. Questo articolo illustra come creare un controllo personalizzato.

Suggerimento

Per le linee guida più recenti per lo sviluppo di estensioni, incluse la tematizzazione e la migrazione da VSS.SDK, vedere il portale per sviluppatori di Azure DevOps Extension SDK.

Prerequisiti

Includere azure-devops-extension-sdk nel progetto:

  1. Installare l'SDK tramite npm: npm install azure-devops-extension-sdk.

  2. Inizializzarlo nel codice JavaScript:

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

Aggiungi il contributo di controllo

Aggiungi un contributo al manifesto dell'estensione di tipo ms.vss-work-web.work-item-form-control destinato a 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"
    ]

Il modulo dell'elemento di lavoro carica il controllo personalizzato in un IFrame.

Proprietà del controllo

Proprietà Descrizione
name Testo visualizzato nel gruppo.
uri URI alla pagina HTML caricata nell'IFrame.
height (Facoltativo) Altezza dell'IFrame in pixel. Il valore predefinito è 50.
inputs Valori forniti dagli utenti durante l'aggiunta del controllo al form.

Per ridimensionare dinamicamente l'IFrame, usare il resize metodo nell'SDK.

Un controllo personalizzato è un tipo di contributo simile ai contributi di gruppo e pagina. La differenza principale è che i contributi di controllo accettano input utente, mentre i contributi di gruppo e pagina non lo sono.

Controllare le immissioni dei contributi

Utilizzare la inputs proprietà nell'oggetto del contributo per definire input configurabili per il controllo.

L'esempio seguente definisce due input: FieldName specifica il campo dell'elemento di lavoro a cui è associato il controllo e Colors configura i colori mappati ai valori dei campi. Gli utenti forniscono questi valori quando aggiungono il controllo al form e i valori vengono passati al controllo in fase di caricamento.

"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
        }
    }
]

Proprietà di input

Le proprietà seguenti definiscono un input utente:

Proprietà Descrizione
ID ID univoco per l'input.
descrizione Breve descrizione dell'input.
type (Opzionale) Tipo di input. Usare WorkItemField per indicare che il valore deve essere un nome di riferimento al campo dell'elemento di lavoro.
proprietà (Facoltativo) Proprietà personalizzate. Usare workItemFieldTypes per limitare i tipi di campo validi, ad esempio , StringIntegerDateTime, , . Boolean
Convalida Regole di convalida. Impostare dataType (String, Number, Booleano Field) e isRequired (true o false).

Valori supportatiworkItemFieldTypes: String, IntegerDateTime, PlainText, HTML, TreePath, History. DoubleGuidBooleanIdentityPicklistStringPicklistIntegerPicklistDouble

Esempio in JavaScript

Un'estensione di controllo personalizzata funziona come un gruppo o un'estensione di pagina, con l'aggiunta che legge i valori di input dell'utente tramite SDK.getConfiguration().witInputs. Nell'esempio seguente viene registrato un provider che risponde agli eventi del modulo dell'elemento di lavoro:

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

Lo screenshot seguente mostra un controllo dell'elemento di lavoro personalizzato di esempio per il campo Priorità .

Screenshot del controllo personalizzato nel modulo dell'elemento di lavoro.