Compartir vía


Extender el formulario del elemento de trabajo

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

Obtenga información sobre cómo personalizar cómo se presenta el formulario de elemento de trabajo a los usuarios a través de contribuciones realizadas a través de una extensión.

Consulte el ejemplo de interfaz de usuario en ejemplos de extensión de Azure DevOps en GitHub para obtener el origen completo.

Agregar un grupo

Elemento de barra de herramientas en el formulario de elemento de trabajo.

Para agregar un grupo a la página principal, agregue una contribución al manifiesto de extensión. El tipo de esta contribución debe ser ms.vss-work-web.work-item-form-group y debe tener como destino la ms.vss-work-web.work-item-form contribución.

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

Propiedades

Property Descripción
name Texto que aparece en el grupo.
uri URI a una página que hospeda el html que se muestra en el formulario de elemento de trabajo y sus scripts.
height (Opcional) Define el alto del grupo. Cuando se omite, es del 100 %.

Ejemplo de JavaScript

En este ejemplo se muestra cómo registrar un objeto al que se llama cuando se producen eventos en el formulario de elemento de trabajo que puede afectar al grupo contribuido.

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

Eventos

Evento Descripción del evento Argument Descripción del argumento
onFieldChanged Se desencadena después de que un campo haya cambiado. Si el cambio de campo ejecutó reglas que actualizaron otros campos, todos estos cambios forman parte de un único evento. ID El identificador del elemento de trabajo.
changedFields Matriz con el nombre de referencia de todos los campos modificados. ID El identificador del elemento de trabajo.
onLoaded Se desencadena después de cuando los datos se cargan en el formulario de elemento de trabajo, cuando el usuario abre un elemento de trabajo o cuando el usuario navega a otro elemento de trabajo en la vista de evaluación de prioridades. ID El identificador del elemento de trabajo.
onReset Se desencadena después de que el usuario deshaga los cambios en el elemento de trabajo. ID El identificador del elemento de trabajo.
onRefreshed Se desencadena después de que el usuario actualice el elemento de trabajo manualmente. ID El identificador del elemento de trabajo.
onSaved Se desencadena después de guardar un elemento de trabajo. En el caso de los elementos de trabajo de un cuadro de diálogo, debe tener como destino el tipo "ms.vss-work-web.work-item-notifications" para asegurarse de que el evento se activa desde que se cierra el cuadro de diálogo, este tipo de contribución se descarga. Para obtener más información, consulte Escucha de eventos. ID El identificador del elemento de trabajo.
onUnloaded Se desencadena antes de que el usuario cierre el cuadro de diálogo o antes de que el usuario se mueva a otro elemento de trabajo en la vista de evaluación de prioridades. ID El identificador del elemento de trabajo.

Agregar una página

Una nueva página se representa como una pestaña en el formulario de elemento de trabajo. Las páginas nuevas aparecen junto a la pestaña Detalles.

Nueva página como pestaña en el formulario de elemento de trabajo.

Para agregar una página al formulario de elemento de trabajo, agregue una contribución al manifiesto de extensión. El tipo de esta contribución debe ser ms.vss-work-web.work-item-form-page y debe tener como destino la ms.vss-work-web.work-item-form contribución.

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

Propiedades

Property Descripción
nombre Texto que aparece en la página de pestañas.
uri URI a una página que hospeda el html que se muestra en el formulario de elemento de trabajo y sus scripts.

Ejemplo de JavaScript

Consulte el ejemplo de JavaScript en la sección grupo de formularios. El nombre del objeto registrado debe coincidir con el id de la contribución.

Eventos

Evento Descripción del evento Argument Descripción del argumento
onFieldChanged Se desencadena después de que un campo haya cambiado. Si el cambio de campo ejecutó reglas que actualizaron otros campos, todos estos cambios forman parte de un único evento. ID El identificador del elemento de trabajo.
changedFields Matriz con el nombre de referencia de todos los campos modificados. ID El identificador del elemento de trabajo.
onLoaded Se desencadena después de cuando los datos se cargan en el formulario de elemento de trabajo, cuando el usuario abre un elemento de trabajo o cuando el usuario navega a otro elemento de trabajo en la vista de evaluación de prioridades. ID El identificador del elemento de trabajo.
onReset Se desencadena después de que el usuario deshaga los cambios en el elemento de trabajo. ID El identificador del elemento de trabajo.
onRefreshed Se desencadena después de que el usuario actualice el elemento de trabajo manualmente. ID El identificador del elemento de trabajo.
onSaved Se desencadena después de guardar un elemento de trabajo. En el caso de los elementos de trabajo de un cuadro de diálogo, debe tener como destino el tipo "ms.vss-work-web.work-item-notifications" para asegurarse de que el evento se activa desde que se cierra el cuadro de diálogo, este tipo de contribución se descarga. Para obtener más información, consulte Escucha de eventos. ID El identificador del elemento de trabajo.
onUnloaded Se desencadena antes de que el usuario cierre el cuadro de diálogo o antes de que el usuario se mueva a otro elemento de trabajo en la vista de evaluación de prioridades. ID El identificador del elemento de trabajo.

Configurar contribuciones en el formulario de elemento de trabajo

En Azure DevOps Services, de forma predeterminada, las extensiones de grupo aparecen al final de la segunda columna del formulario y las contribuciones de página después de todas las páginas del formulario del elemento de trabajo como una pestaña. Las contribuciones de control no se muestran en el formulario de forma predeterminada, por lo que los usuarios tienen que agregarlas manualmente al formulario. En Azure DevOps Server, para mostrar u ocultar o mover el control, las contribuciones de grupo y página en el formulario de elemento de trabajo, consulte Configuración de extensiones de formulario de elemento de trabajo.

Agregar acción de menú

Agregue un elemento a la barra de herramientas del elemento de trabajo.

Para agregar un elemento a la barra de herramientas del elemento de trabajo, agregue esta contribución al manifiesto de extensión. El elemento aparece en ... desplegable en la parte superior derecha del formulario de elemento de trabajo.

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

Propiedades

Property Descripción
text Texto que aparece en el elemento de la barra de herramientas.
title Texto de información sobre herramientas que aparece en el elemento de menú.
toolbarText Texto que aparece cuando se mantiene el puntero sobre el elemento.
uri URI en una página que registra el controlador de acciones de la barra de herramientas.
Icono Dirección URL a un icono que aparece en el elemento de menú. Las direcciones URL relativas se resuelven mediante baseUri.
group Determina dónde aparece el elemento de menú, relacionado con otros usuarios. Los elementos de la barra de herramientas con el mismo nombre de grupo se agrupan y se dividen por un separador del resto de los elementos.
registeredObjectId (Opcional) Nombre del controlador de acción de menú registrado. El valor predeterminado es el identificador de contribución.

Escucha de eventos

Para agregar un observador al elemento de trabajo, que escucha los eventos del elemento de trabajo, agregue esta contribución al manifiesto de extensión. No hay ninguna visualización para los observadores en el formulario de elemento de trabajo. Esta es la mejor manera de escuchar el formulario de elemento de trabajo en El evento guardado, ya que el observador reside fuera del formulario y no se destruye cuando se cierra el formulario, lo que puede ocurrir justo después de guardar.

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

Propiedades

Property Descripción
uri URI a una página que hospeda los scripts que escuchan eventos.

Eventos

Evento Descripción del evento Argument Descripción del argumento
onFieldChanged Se desencadena después de que un campo haya cambiado. Si el cambio de campo ejecutó reglas que actualizaron otros campos, todos estos cambios forman parte de un único evento. ID El identificador del elemento de trabajo.
changedFields Matriz con el nombre de referencia de todos los campos modificados. ID El identificador del elemento de trabajo.
onLoaded Se desencadena después de cuando los datos se cargan en el formulario de elemento de trabajo, cuando el usuario abre un elemento de trabajo o cuando el usuario navega a otro elemento de trabajo en la vista de evaluación de prioridades. ID El identificador del elemento de trabajo.
onReset Se desencadena después de que el usuario deshaga los cambios en el elemento de trabajo. ID El identificador del elemento de trabajo.
onRefreshed Se desencadena después de que el usuario actualice el elemento de trabajo manualmente. ID El identificador del elemento de trabajo.
onSaved Se desencadena después de guardar un elemento de trabajo. En el caso de los elementos de trabajo de un cuadro de diálogo, debe tener como destino el tipo "ms.vss-work-web.work-item-notifications" para asegurarse de que el evento se activa desde que se cierra el cuadro de diálogo, este tipo de contribución se descarga. Para obtener más información, consulte Escucha de eventos. ID El identificador del elemento de trabajo.
onUnloaded Se desencadena antes de que el usuario cierre el cuadro de diálogo o antes de que el usuario se mueva a otro elemento de trabajo en la vista de evaluación de prioridades. ID El identificador del elemento de trabajo.

Ejemplo de 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>    

Cambios con el nuevo concentrador de paneles

Nota:

New Boards Hub está actualmente en versión preliminar, pero está disponible para todos los usuarios. Le recomendamos encarecidamente que habilite inmediatamente New Boards Hub y pruebe las extensiones internas.

Uso de los SDK más recientes

Asegúrese de que la extensión usa la versión más reciente de azure-devops-extension-sdk

Al usar el nuevo SDK, también debe usar el paquete azure-devops-extension-api para las API REST. Actualizamos los métodos e interfaces de cada sprint para asegurarnos de que incluye todas las características más recientes.

Cuándo usar acción o proveedor de acciones

Úselo ms.vss-web.action-provider al cargar dinámicamente elementos de menú mediante getMenuItems en el controlador de menús. Evite usar ms.vss-web.action-provider cuando los elementos de menú sean estáticos y definidos en el manifiesto. En su lugar ms.vss-web.action , debe usarse.

Package require("VSS/Events/Document") ya no se admite

require("VSS/Events/Document") la importación ya no se admite con El nuevo concentrador de paneles.