Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Serviços de DevOps do Azure | Azure DevOps Server | Azure DevOps Server 2022
Os controles personalizados permitem alterar a forma como os usuários visualizam e interagem com um campo no formulário de item de trabalho. O artigo a seguir orienta você sobre como esse controle personalizado de exemplo foi criado. Este artigo mostra como criar seu próprio controle personalizado.
Gorjeta
Para as mais recentes orientações de desenvolvimento de extensões, incluindo tema e migração do VSS. SDK, consulte o portal para programadores do Azure DevOps Extension SDK.
Pré-requisitos
Inclua o azure-devops-extension-sdk em seu projeto:
Instale o SDK via npm:
npm install azure-devops-extension-sdk.Inicialize-o no seu código JavaScript:
import * as SDK from "azure-devops-extension-sdk"; SDK.init();
Adicionar a contribuição de controlo
Adicione uma contribuição ao seu manifesto de extensão especificando o tipo ms.vss-work-web.work-item-form-control e direcionando para 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"
]
O formulário do item de trabalho carrega o controlo personalizado num IFrame.
Propriedades de controlo
| Propriedade | Descrição |
|---|---|
name |
Texto que aparece no grupo. |
uri |
URI para a página HTML carregada no IFrame. |
height |
(Opcional) Altura do IFrame em pixels. O valor predefinido é 50. |
inputs |
Valores que os utilizadores fornecem ao adicionar o controlo ao formulário. |
Para redimensionar dinamicamente o IFrame, use o método resize no SDK.
Um controlo personalizado é um tipo de contribuição semelhante às contribuições de grupo e página. A principal diferença é que as contribuições de controlo aceitam entradas do utilizador, enquanto as contribuições de grupo e página não.
Controle de entradas de contribuição
Use a inputs propriedade no objeto de contribuição para definir entradas configuráveis para o seu controlo.
O exemplo seguinte define duas entradas: FieldName especifica a que campo de item de trabalho o controlo está associado e Colors configura que cores correspondem a que valores de campo. Os utilizadores fornecem estes valores quando adicionam o controlo ao formulário, e os valores são passados ao controlo no momento do carregamento.
"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
}
}
]
Propriedades de entrada
As seguintes propriedades definem uma entrada do utilizador:
| Propriedade | Descrição |
|---|---|
| ID | ID único para a entrada. |
| descrição | Breve descrição da entrada. |
| type | (Opcional) Tipo de entrada. Use WorkItemField para indicar que o valor deve ser o nome de referência do campo de trabalho. |
| propriedades | (Opcional) Propriedades personalizadas. Use workItemFieldTypes para restringir quais os tipos de campos válidos (por exemplo, String, Integer, DateTime, Boolean). |
| validação | Regras de validação. Defina dataType (String, Number, Boolean, ou Field) e isRequired (true ou false). |
Valores suportadosworkItemFieldTypes: String, Integer, DateTimePlainText, HTML, TreePath, History, , Double, Guid, Boolean, Identity. PicklistStringPicklistIntegerPicklistDouble
Exemplo de JavaScript
Uma extensão de controlo personalizada funciona como uma extensão de grupo ou de página, com a adição de que lê valores de entrada do utilizador através de SDK.getConfiguration().witInputs. O exemplo seguinte regista um fornecedor que responde a eventos do formulário de item de trabalho:
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);
});
A captura de tela a seguir mostra um exemplo de controle de item de trabalho personalizado para o campo Prioridade .