Aracılığıyla paylaş


İş öğesi formunu genişletme

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

İş öğesi formunun kullanıcılara bir uzantı aracılığıyla yapılan katkılar aracılığıyla nasıl sunulduğunu özelleştirmeyi öğrenin.

Tam kaynak için GitHub'daki Azure DevOps Uzantı Örnekleri'ndeki kullanıcı arabirimi örneğine bakın.

Grup ekleme

İş öğesi formundaki araç çubuğu öğesi.

Ana sayfaya grup eklemek için uzantı bildiriminize bir katkı ekleyin. Bu katkının türü olmalı ms.vss-work-web.work-item-form-group ve katkıyı ms.vss-work-web.work-item-form hedeflemelidir.

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

Özellikler

Özellik Açıklama
name Grupta görüntülenen metin.
uri İş öğesi formunda ve betiklerinde görüntülenen html'yi barındıran bir sayfaya URI.
height (İsteğe bağlı) Grubun yüksekliğini tanımlar. Atlandığında %100 olur.

JavaScript örneği

Bu örnek, katkıda bulunan grubunuzu etkileyebilecek iş öğesi formunda olaylar gerçekleştiğinde çağrılan bir nesnenin nasıl kaydedildiğini gösterir.

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

Ekinlikler

Etkinlik Olay açıklaması Bağımsız değişken Bağımsız değişken tanımı
onFieldChanged Bir alan değiştikten sonra tetiklenir. Alan değişikliği diğer alanları güncelleştiren çalıştırılan kurallarsa, tüm bu değişiklikler tek bir olayın parçasıdır. Kimlik İş öğesinin kimliği.
changedFields Tüm değiştirilen alanların başvuru adına sahip dizi. Kimlik İş öğesinin kimliği.
onLoaded Veriler iş öğesi formunda yüklendiğinde, kullanıcı bir iş öğesini açtığında veya kullanıcı önceliklendirme görünümünde başka bir iş öğesine gittiğinde tetiklendi. Kimlik İş öğesinin kimliği.
onReset Kullanıcı iş öğesindeki değişiklikleri geri aldıktan sonra tetiklenir. Kimlik İş öğesinin kimliği.
onRefreshed Kullanıcı iş öğesini el ile yeniledikten sonra tetiklendi. Kimlik İş öğesinin kimliği.
onSaved Bir iş öğesi kaydedildikten sonra tetiklenir. İletişim kutusundaki iş öğeleri için, iletişim kutusu kapandığında bu katkı türü kaldırıldığından olayın tetiklendiğinden emin olmak için "ms.vss-work-web.work-item-notifications" türünü hedeflemeniz gerekir. Daha fazla bilgi için bkz . Olayları dinleme. Kimlik İş öğesinin kimliği.
onUnloaded Kullanıcı iletişim kutusunu kapatmadan önce veya kullanıcı önceliklendirme görünümünde başka bir iş öğesine geçmeden önce tetiklendi. Kimlik İş öğesinin kimliği.

Sayfa ekleyin

Yeni bir sayfa, iş öğesi formunda sekme olarak işlenir. Ayrıntılar sekmesinin yanında yeni sayfalar görüntülenir.

İş öğesi formunda sekme olarak yeni sayfa.

İş öğesi formuna sayfa eklemek için uzantı bildiriminize bir katkı ekleyin. Bu katkının türü olmalı ms.vss-work-web.work-item-form-page ve katkıyı ms.vss-work-web.work-item-form hedeflemelidir.

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

Özellikler

Özellik Açıklama
Adı Sekme sayfasında görüntülenen metin.
uri İş öğesi formunda ve betiklerinde görüntülenen html'yi barındıran bir sayfaya URI.

JavaScript örneği

Form grubu bölümündeki JavaScript örneğine bakın. Kayıtlı nesnenin adı, katkının adıyla eşleşmelidir id .

Ekinlikler

Etkinlik Olay açıklaması Bağımsız değişken Bağımsız değişken tanımı
onFieldChanged Bir alan değiştikten sonra tetiklenir. Alan değişikliği diğer alanları güncelleştiren çalıştırılan kurallarsa, tüm bu değişiklikler tek bir olayın parçasıdır. Kimlik İş öğesinin kimliği.
changedFields Tüm değiştirilen alanların başvuru adına sahip dizi. Kimlik İş öğesinin kimliği.
onLoaded Veriler iş öğesi formunda yüklendiğinde, kullanıcı bir iş öğesini açtığında veya kullanıcı önceliklendirme görünümünde başka bir iş öğesine gittiğinde tetiklendi. Kimlik İş öğesinin kimliği.
onReset Kullanıcı iş öğesindeki değişiklikleri geri aldıktan sonra tetiklenir. Kimlik İş öğesinin kimliği.
onRefreshed Kullanıcı iş öğesini el ile yeniledikten sonra tetiklendi. Kimlik İş öğesinin kimliği.
onSaved Bir iş öğesi kaydedildikten sonra tetiklenir. İletişim kutusundaki iş öğeleri için, iletişim kutusu kapandığında bu katkı türü kaldırıldığından olayın tetiklendiğinden emin olmak için "ms.vss-work-web.work-item-notifications" türünü hedeflemeniz gerekir. Daha fazla bilgi için bkz . Olayları dinleme. Kimlik İş öğesinin kimliği.
onUnloaded Kullanıcı iletişim kutusunu kapatmadan önce veya kullanıcı önceliklendirme görünümünde başka bir iş öğesine geçmeden önce tetiklendi. Kimlik İş öğesinin kimliği.

İş öğesi formunda katkıları yapılandırma

Azure DevOps Services'da grup uzantıları varsayılan olarak formun ikinci sütununun sonunda, sayfa katkıları ise tüm iş öğesi form sayfalarından sonra sekme olarak görünür. Denetim katkıları varsayılan olarak formda gösterilmez, bu nedenle kullanıcıların bunları forma el ile eklemesi gerekir. Azure DevOps Server'da denetim, grup ve sayfa katkılarını iş öğesi biçiminde göstermek/gizlemek veya taşımak için bkz . İş öğesi form uzantılarını yapılandırma.

Menü ekle eylemi

İş öğesi araç çubuğuna bir öğe ekleyin.

İş öğesi araç çubuğuna bir öğe eklemek için uzantı bildiriminize bu katkıyı ekleyin. Öğe,... iş öğesi formunun sağ üst kısmındaki açılan menü.

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

Özellikler

Özellik Açıklama
text Araç çubuğu öğesinde görüntülenen metin.
başlık Menü öğesinde görüntülenen araç ipucu metni.
toolbarText Öğe üzerine gelindiğinde görüntülenen metin.
uri Araç çubuğu eylem işleyicisini kaydeden bir sayfaya URI.
ikon Menü öğesinde görünen simgenin URL'si. Göreli URL'ler baseUri kullanılarak çözümlenir.
group Diğerleriyle ilgili olarak menü öğesinin nerede görüneceğini belirler. Aynı grup adına sahip araç çubuğu öğeleri gruplandırılır ve öğelerin geri kalanından bir ayırıcıya bölünür.
registeredObjectId (İsteğe bağlı) Kayıtlı menü eylem işleyicisinin adı. Varsayılan olarak katkı kimliğini kullanır.

Olayları dinleme

İş öğesi olaylarını dinleyen iş öğesine gözlemci eklemek için uzantı bildiriminize bu katkıyı ekleyin. İş öğesi formunda gözlemciler için görselleştirme yoktur. Gözlemci formun dışında yaşadığından ve form kapandığında yok edilmediğinden, kaydedilen olayda iş öğesi formunu dinlemenin en iyi yolu budur. Bu, kaydetmeden hemen sonra gerçekleşebilir.

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

Özellikler

Özellik Açıklama
uri Olayları dinleyen betikleri barındıran bir sayfaya URI.

Ekinlikler

Etkinlik Olay açıklaması Bağımsız değişken Bağımsız değişken tanımı
onFieldChanged Bir alan değiştikten sonra tetiklenir. Alan değişikliği diğer alanları güncelleştiren çalıştırılan kurallarsa, tüm bu değişiklikler tek bir olayın parçasıdır. Kimlik İş öğesinin kimliği.
changedFields Tüm değiştirilen alanların başvuru adına sahip dizi. Kimlik İş öğesinin kimliği.
onLoaded Veriler iş öğesi formunda yüklendiğinde, kullanıcı bir iş öğesini açtığında veya kullanıcı önceliklendirme görünümünde başka bir iş öğesine gittiğinde tetiklendi. Kimlik İş öğesinin kimliği.
onReset Kullanıcı iş öğesindeki değişiklikleri geri aldıktan sonra tetiklenir. Kimlik İş öğesinin kimliği.
onRefreshed Kullanıcı iş öğesini el ile yeniledikten sonra tetiklendi. Kimlik İş öğesinin kimliği.
onSaved Bir iş öğesi kaydedildikten sonra tetiklenir. İletişim kutusundaki iş öğeleri için, iletişim kutusu kapandığında bu katkı türü kaldırıldığından olayın tetiklendiğinden emin olmak için "ms.vss-work-web.work-item-notifications" türünü hedeflemeniz gerekir. Daha fazla bilgi için bkz . Olayları dinleme. Kimlik İş öğesinin kimliği.
onUnloaded Kullanıcı iletişim kutusunu kapatmadan önce veya kullanıcı önceliklendirme görünümünde başka bir iş öğesine geçmeden önce tetiklendi. Kimlik İş öğesinin kimliği.

HTML/JavaScript örneği

<!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>    

Yeni Boards Hub ile değişiklikler

Not

Yeni Boards Hub şu anda önizleme aşamasındadır ancak herkes tarafından kullanılabilir durumdadır. New Boards Hub'ı hemen etkinleştirmenizi ve dahili uzantılarınızı test etmenizi kesinlikle öneririz.

En son SDK'ları kullanma

Uzantınızın azure-devops-extension-sdk'nın en son sürümünü kullandığından emin olun

Yeni SDK'yı kullanırken REST API'leri için azure-devops-extension-api paketini de kullanıyor olmanız gerekir. En son özelliklerin tümünü içerdiğinden emin olmak için her sprint'te yöntemleri ve arabirimleri güncelleştiriyoruz.

Eylem veya eylem sağlayıcısı ne zaman kullanılır?

menü işleyicisini kullanarak getMenuItems menü öğelerini dinamik olarak yüklerken kullanınms.vss-web.action-provider. Menü öğeleriniz statik olduğunda ve bildiriminizde tanımlandığında kullanmaktan ms.vss-web.action-provider kaçının. Bunun yerine ms.vss-web.action kullanılmalıdır.

Paket gereksinimi("VSS/Olaylar/Belge") artık desteklenmiyor

require("VSS/Events/Document") içeri aktarma artık New Boards Hub ile desteklenmemektedir.