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
Cet article explique comment utiliser des extensions pour personnaliser le formulaire d’élément de travail. Vous pouvez ajouter une action, un observateur, un groupe ou une page au formulaire d’élément de travail dans Azure DevOps.
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 à la page principale
- Ajouter une page (onglet)
- Ajouter une action au menu contextuel
- Ajouter un contrôle personnalisé
- Écouter les événements sur le formulaire
- Configurer des contributions dans un formulaire d’élément de travail
Pour obtenir le code source complet, consultez l’exemple d’interface utilisateur dans les exemples d’extension Azure DevOps sur GitHub.
Ajouter un groupe
Pour ajouter un groupe à la page principale, ajoutez une contribution à votre manifeste d’extension. Le type de cette contribution doit être ms.vss-work-web.work-item-form-group et il doit cibler la ms.vss-work-web.work-item-form contribution.
"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 une page qui héberge le code html qui s’affiche sur le formulaire d’élément de travail et ses scripts. |
height |
(Facultatif) Définit la hauteur du groupe. En cas d’omission, il est de 100 %. |
Exemple en JavaScript
Cet exemple montre comment inscrire un objet appelé lorsque des événements se produisent sur le formulaire d’élément de travail susceptibles d’affecter votre groupe contribué.
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)));
}
}
});
É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. | id | ID de l’élément de travail |
changedFields |
Tableau avec le nom de référence de tous les champs modifiés. | id | 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. | id | 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. | id | ID de l’élément de travail |
onRefreshed |
Déclenché après que l’utilisateur a actualisé manuellement l’élément de travail. | id | 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 d’une boîte de dialogue, vous devez cibler le ms.vss-work-web.work-item-notifications type 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. |
id | 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. | id | 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. Le type de cette contribution doit être ms.vss-work-web.work-item-form-page et il doit cibler la ms.vss-work-web.work-item-form contribution.
"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 |
|---|---|
| nom | Texte qui s’affiche sur la page de l’onglet. |
| URI | URI vers une page qui héberge le code html qui s’affiche sur le formulaire d’élément de travail et ses scripts. |
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. | id | ID de l’élément de travail |
changedFields |
Tableau avec le nom de référence de tous les champs modifiés. | id | 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. | id | 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. | id | ID de l’élément de travail |
onRefreshed |
Déclenché après que l’utilisateur a actualisé manuellement l’élément de travail. | id | 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 d’une boîte de dialogue, vous devez cibler le ms.vss-work-web.work-item-notifications type 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. |
id | 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. | id | ID de l’élément de travail |
Configurer des contributions dans un formulaire d’élément de travail
Dans Azure DevOps Services, par défaut, les extensions de groupe apparaissent à la fin de la deuxième colonne du formulaire et les contributions de page apparaissent après toutes les pages du formulaire d’élément de travail sous forme d’onglet. Les contributions de contrôle ne sont pas affichées dans le formulaire par défaut, les utilisateurs doivent donc les ajouter manuellement au formulaire. Dans Azure DevOps Server, pour afficher/masquer ou déplacer le contrôle, les contributions de groupe et de page dans le formulaire d’élément de travail, consultez Configurer les extensions de formulaire d’élément de travail.
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. Sélectionnez les points de suspension verticaux dans le formulaire de l’élément de travail pour afficher le menu déroulant.
"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 inscrit le gestionnaire d’actions de 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 l’emplacement d’affichage de l’élément de menu, associé à d’autres personnes. 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
Pour ajouter un observateur à l’élément de travail, qui écoute les événements d’élément de travail, ajoutez cette contribution à votre manifeste d’extension. Il n’existe aucune visualisation pour les observateurs sur le formulaire d’élément de travail. C’est la meilleure façon d’écouter l’élément de travail formulaire onSaved événement, car l’observateur vit en dehors du formulaire et n’est pas détruit à la fermeture du formulaire, ce qui peut se produire juste après l’enregistrement.
"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 à l’écoute des é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. | id | ID de l’élément de travail |
changedFields |
Tableau avec le nom de référence de tous les champs modifiés. | id | 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. | id | 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. | id | ID de l’élément de travail |
onRefreshed |
Déclenché après que l’utilisateur a actualisé manuellement l’élément de travail. | id | 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 d’une boîte de dialogue, vous devez cibler le ms.vss-work-web.work-item-notifications type 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. |
id | 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. | id | ID de l’élément de travail |
Exemple 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>
Modifications apportées au hub New Boards
Remarque
La fonctionnalité New Boards Hub est activée par défaut. Nous vous suggérons vivement de tester vos extensions internes avec le New Boards Hub pour garantir la compatibilité.
Utiliser les kits SDK les plus récents
Vérifiez que votre extension utilise la dernière version d’azure-devops-extension-sdk
Lorsque vous utilisez le nouveau SDK, vous devez également utiliser le package azure-devops-extension-api pour les API REST. Nous mettons à jour les méthodes et interfaces chaque sprint pour nous assurer qu’elles incluent toutes les fonctionnalités les plus récentes.
Quand utiliser une action ou un 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. Évitez d’utiliser ms.vss-web.action-provider lorsque vos éléments de menu sont statiques et définis dans votre manifeste. À la place ms.vss-web.action , vous devez utiliser.
Le package require("VSS/Events/Document") n’est plus pris en charge
L’importation require("VSS/Events/Document") n’est plus prise en charge avec le New Boards Hub.