Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Utilisez des extensions pour personnaliser le formulaire d’élément de travail en ajoutant des groupes, des pages, des actions de menu, des observateurs ou des contrôles personnalisés.
Conseil / Astuce
Si vous démarrez une nouvelle extension Azure DevOps, essayez d'abord ces collections d'exemples maintenues : elles fonctionnent avec les builds de produit actuels et couvrent les scénarios modernes (par exemple, en ajoutant des onglets sur les pages de requête de tirage).
- Exemple d’extension Azure DevOps (GitHub) : exemple de démarrage compact qui illustre les modèles d’extension courants : https://github.com/microsoft/azure-devops-extension-sample
- Exemples d’extensions Azure DevOps (collection héritée et guide des contributions) : installez pour examiner les cibles de l'interface utilisateur, ou consultez la source : https://marketplace.visualstudio.com/items/ms-samples.samples-contributions-guidehttps://github.com/Microsoft/vso-extension-samples/tree/master/contributions-guide
- Exemples Microsoft Learn (parcourir des exemples Azure DevOps) : organisés, des exemples à jour dans les documents Microsoft : /samples/browse/?terms=azure%20devops%20extension
Si un exemple ne fonctionne pas dans votre organisation, installez-le dans une organisation personnelle ou de test et comparez les ID cibles et les versions d’API du manifeste d’extension avec les documents actuels. Pour obtenir des informations de référence et des API, consultez :
- Ajouter un groupe
- Ajouter une page (onglet)
- Ajouter une action de menu
- Ajouter un contrôle personnalisé
- Écouter les événements
- Configurer les contributions
Pour obtenir le code source complet, consultez l’exemple d’interface utilisateur dans les exemples d’extension Azure DevOps sur GitHub.
Conseil / Astuce
Pour obtenir les dernières instructions de développement d’extension, notamment les thèmes et la migration à partir de VSS. Sdk, consultez le portail du kit de développement logiciel (SDK) d’extension Azure DevOps.
Ajouter un groupe
Pour ajouter un groupe à la page principale, ajoutez une contribution à votre manifeste d’extension avec le type ms.vss-work-web.work-item-form-group ciblant 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
}
}
]
Propriétés
| Propriété | Descriptif |
|---|---|
name |
Texte qui apparaît sur le groupe. |
uri |
URI vers la page HTML chargée dans l’IFrame. |
height |
(Facultatif) Hauteur du groupe. La valeur par défaut est 100%. |
Exemple en JavaScript
Cet exemple enregistre un fournisseur qui répond aux événements de formulaire pour un élément de travail. Il utilise le WorkItemFormService pour lire les valeurs des champs lorsque l'élément de travail se charge.
import { IWorkItemFormService, WorkItemTrackingServiceIds } from "azure-devops-extension-api/WorkItemTracking";
import * as SDK from "azure-devops-extension-sdk";
async function getWorkItemFormService(): Promise<IWorkItemFormService> {
return await SDK.getService<IWorkItemFormService>(WorkItemTrackingServiceIds.WorkItemFormService);
}
SDK.init();
SDK.ready().then(() => {
SDK.register(SDK.getContributionId(), () => {
return {
// Called when the active work item is modified
onFieldChanged: (args) => {
console.log("onFieldChanged", JSON.stringify(args));
},
// Called when a new work item is being loaded in the UI
onLoaded: async (args) => {
const service = await getWorkItemFormService();
const values = await service.getFieldValues([
"System.Id", "System.Title", "System.State", "System.CreatedDate"
]);
console.log("onLoaded", JSON.stringify(values));
},
// Called when the active work item is being unloaded in the UI
onUnloaded: (args) => {
console.log("onUnloaded", JSON.stringify(args));
},
// Called after the work item has been saved
onSaved: (args) => {
console.log("onSaved", JSON.stringify(args));
},
// Called when the work item is reset to its unmodified state (undo)
onReset: (args) => {
console.log("onReset", JSON.stringify(args));
},
// Called when the work item has been refreshed from the server
onRefreshed: (args) => {
console.log("onRefreshed", JSON.stringify(args));
}
};
});
});
Événements
| Événement | Description de l'événement | Raisonnement | Description des arguments |
|---|---|---|---|
onFieldChanged |
Déclenché après la modification d’un champ. Si la modification de champ a exécuté des règles qui ont mis à jour d’autres champs, toutes ces modifications font partie d’un seul événement. | identifiant | ID de l’élément de travail |
changedFields |
Tableau avec le nom de référence de tous les champs modifiés. | identifiant | ID de l’élément de travail |
onLoaded |
Déclenché après le chargement des données dans le formulaire d’élément de travail, lorsque l’utilisateur ouvre un élément de travail ou lorsque l’utilisateur accède à un autre élément de travail dans la vue de triage. | identifiant | ID de l’élément de travail |
onReset |
Déclenché après que l’utilisateur annule les modifications apportées à l’élément de travail. | identifiant | ID de l’élément de travail |
onRefreshed |
Déclenché après que l’utilisateur a actualisé manuellement l’élément de travail. | identifiant | ID de l’élément de travail |
onSaved |
Déclenché après l’enregistrement d’un élément de travail. Pour les éléments de travail dans une boîte de dialogue, vous devez cibler le type ms.vss-work-web.work-item-notifications pour vous assurer que l'événement se déclenche, car une fois la boîte de dialogue fermée, ce type de contribution est déchargé. Pour plus d’informations, consultez Écouter les événements. |
identifiant | ID de l’élément de travail |
onUnloaded |
Déclenché avant que l’utilisateur ferme la boîte de dialogue, ou avant que l’utilisateur ne se déplace vers un autre élément de travail dans la vue de triage. | identifiant | ID de l’élément de travail |
Ajouter une page
Une nouvelle page est affichée sous la forme d’un onglet du formulaire d’élément de travail. De nouvelles pages s’affichent à côté de l’onglet Détails .
Pour ajouter une page au formulaire d'élément de travail, ajoutez une contribution à votre manifeste d'extension avec le type ms.vss-work-web.work-item-form-page ciblant 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"
}
}
]
Propriétés
| Propriété | Descriptif |
|---|---|
name |
Texte qui s’affiche sur la page de l’onglet. |
uri |
URI vers la page HTML chargée dans l’IFrame. |
Exemple en JavaScript
Consultez l’exemple JavaScript dans la section groupe de formulaires. Le nom de l’objet inscrit doit correspondre à id la contribution.
Événements
| Événement | Description de l'événement | Raisonnement | Description des arguments |
|---|---|---|---|
onFieldChanged |
Déclenché après la modification d’un champ. Si la modification de champ a exécuté des règles qui ont mis à jour d’autres champs, toutes ces modifications font partie d’un seul événement. | identifiant | ID de l’élément de travail |
changedFields |
Tableau avec le nom de référence de tous les champs modifiés. | identifiant | ID de l’élément de travail |
onLoaded |
Déclenché après le chargement des données dans le formulaire d’élément de travail, lorsque l’utilisateur ouvre un élément de travail ou lorsque l’utilisateur accède à un autre élément de travail dans la vue de triage. | identifiant | ID de l’élément de travail |
onReset |
Déclenché après que l’utilisateur annule les modifications apportées à l’élément de travail. | identifiant | ID de l’élément de travail |
onRefreshed |
Déclenché après que l’utilisateur a actualisé manuellement l’élément de travail. | identifiant | ID de l’élément de travail |
onSaved |
Déclenché après l’enregistrement d’un élément de travail. Pour les éléments de travail dans une boîte de dialogue, vous devez cibler le type ms.vss-work-web.work-item-notifications pour vous assurer que l'événement se déclenche, car une fois la boîte de dialogue fermée, ce type de contribution est déchargé. Pour plus d’informations, consultez Écouter les événements. |
identifiant | ID de l’élément de travail |
onUnloaded |
Déclenché avant que l’utilisateur ferme la boîte de dialogue, ou avant que l’utilisateur ne se déplace vers un autre élément de travail dans la vue de triage. | identifiant | ID de l’élément de travail |
Configurer les contributions
Dans Azure DevOps Services, les extensions de groupe apparaissent à la fin de la deuxième colonne par défaut, et les contributions de page apparaissent sous la forme du dernier onglet. Les contributions de contrôle ne sont pas affichées par défaut : les utilisateurs doivent les ajouter manuellement au formulaire. Dans Azure DevOps Server, consultez Configurer les extensions de formulaire d’élément de travail pour afficher, masquer ou déplacer des contributions.
Ajouter une action de menu
Pour ajouter un élément à la barre d’outils de l’élément de travail, ajoutez cette contribution à votre manifeste d’extension. L’élément apparaît dans le menu déroulant vertical des points de suspension (...).
"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"
}
}
]
Propriétés
| Propriété | Descriptif |
|---|---|
text |
Texte qui apparaît dans l’élément de barre d’outils. |
title |
Texte d’info-bulle qui s’affiche sur l’élément de menu. |
toolbarText |
Texte qui s’affiche lorsque l’élément est survolé. |
uri |
URI vers une page qui enregistre le gestionnaire d’actions de la barre d’outils. |
icon |
URL vers une icône qui apparaît dans l’élément de menu. Les URL relatives sont résolues à l’aide de baseUri. |
group |
Détermine la position de l’élément de menu par rapport aux autres. Les éléments de barre d’outils portant le même nom de groupe sont regroupés et divisés par un séparateur du reste des éléments. |
registeredObjectId |
(Facultatif) Nom du gestionnaire d’actions de menu inscrites. La valeur par défaut est l’ID de contribution. |
Écouter les événements
Les observateurs écoutent les événements des éléments de travail sans interface utilisateur sur le formulaire. Utilisez des observateurs pour écouter l’événement onSaved , car les observateurs vivent en dehors du formulaire et ne sont pas détruits lorsque le dialogue de formulaire se ferme.
"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"
}
}
]
Propriétés
| Propriété | Descriptif |
|---|---|
uri |
URI vers une page qui héberge les scripts qui surveillent les événements. |
Événements
| Événement | Description de l'événement | Raisonnement | Description des arguments |
|---|---|---|---|
onFieldChanged |
Déclenché après la modification d’un champ. Si la modification de champ a exécuté des règles qui ont mis à jour d’autres champs, toutes ces modifications font partie d’un seul événement. | identifiant | ID de l’élément de travail |
changedFields |
Tableau avec le nom de référence de tous les champs modifiés. | identifiant | ID de l’élément de travail |
onLoaded |
Déclenché après le chargement des données dans le formulaire d’élément de travail, lorsque l’utilisateur ouvre un élément de travail ou lorsque l’utilisateur accède à un autre élément de travail dans la vue de triage. | identifiant | ID de l’élément de travail |
onReset |
Déclenché après que l’utilisateur annule les modifications apportées à l’élément de travail. | identifiant | ID de l’élément de travail |
onRefreshed |
Déclenché après que l’utilisateur a actualisé manuellement l’élément de travail. | identifiant | ID de l’élément de travail |
onSaved |
Déclenché après l’enregistrement d’un élément de travail. Pour les éléments de travail dans une boîte de dialogue, vous devez cibler le type ms.vss-work-web.work-item-notifications pour vous assurer que l'événement se déclenche, car une fois la boîte de dialogue fermée, ce type de contribution est déchargé. Pour plus d’informations, consultez Écouter les événements. |
identifiant | ID de l’élément de travail |
onUnloaded |
Déclenché avant que l’utilisateur ferme la boîte de dialogue, ou avant que l’utilisateur ne se déplace vers un autre élément de travail dans la vue de triage. | identifiant | ID de l’élément de travail |
Exemple en JavaScript
L’exemple suivant inscrit un observateur à l’aide du Kit de développement logiciel (SDK) moderne :
import * as SDK from "azure-devops-extension-sdk";
SDK.init();
SDK.ready().then(() => {
SDK.register(SDK.getContributionId(), () => {
return {
onFieldChanged: (args) => {
// Handle field changes
},
onLoaded: (args) => {
// Handle work item loaded
},
onUnloaded: (args) => {
// Handle work item unloaded
},
onSaved: (args) => {
// Handle work item saved
},
onReset: (args) => {
// Handle work item reset (undo)
},
onRefreshed: (args) => {
// Handle work item refreshed
}
};
});
});
Notes de compatibilité
Action vs. fournisseur d’actions
Utilisez cette option ms.vss-web.action-provider lors du chargement dynamique des éléments de menu à l’aide getMenuItems du gestionnaire de menus. Utilisez ms.vss-web.action quand vos éléments de menu sont statiques et définis dans le manifeste.
Modèles déconseillés
Les modèles suivants ne sont plus pris en charge :
-
require("VSS/Events/Document")- non pris en charge avec New Boards Hub -
SDK.jsbalise de script avecusePlatformScripts: true- utiliser le packageazure-devops-extension-sdknpm à la place