首页 > 解决方案 > 无法访问工作项跟踪服务 Azure DevOps Extensions

问题描述

我正在使用工作项页面上呈现扩展

<WebpageControlOptions AllowScript="true" ReloadOnParamChange="true">
  <Link UrlRoot="http://.../extension/Validate-extension/1.0.69/assetbyname/workItemNotifications.html"/>
</WebpageControlOptions>

在此处输入图像描述

以下是 html/js 代码:

 var workItemID = 0;
   VSS.init({
            explicitNotifyLoaded: true,
            usePlatformScripts: true
        });
 VSS.ready(function () {
            var currentContext = VSS.getWebContext();
            VSS.register(VSS.getContribution().id, function (context) {
                return {
                    // event handlers, called when the active work item is loaded/unloaded/modified/saved
                    onFieldChanged: function (args) {
                        if (!changedFields[args.id]) {
                            changedFields[args.id] = [];
                            changedFieldCount[args.id] = 0;        
                        }
                        $.each(args.changedFields, function (key, value) {
                            if (!changedFields[args.id][key]) {                              
                                changedFields[args.id][key] = value;
                                changedFieldCount[args.id]++;
                            }
                        });                     
                    },
                    onLoaded: function (args) {
                        console.log("OnloadNotification");
                        VSS.require(["TFS/WorkItemTracking/Services"], function (workItemServices) {
                            workItemServices.WorkItemFormService.getService().then(function (workItemFormSvc) {
                                if (workItemFormSvc.hasActiveWorkItem()) {
                                    console.log("Active work item is available.");
                                    workItemFormSvc.getFieldValues(["System.Id"]).then(
                                        function (value) {
                                            var val = JSON.stringify(value);
                                            $.each(value, function (key, values) {
                                                 if(key == "System.Id"){
                                                    workItemID = values;                                                                          
                                                }                                                
                                            });
                                        });                                  
                                }
                                else {
                                    console.log("Active work item is NOT available.");
                                }
                            });
                        });
                    },
                    onUnloaded: function (args) {
                    },
                    onSaved: function (args) {
                        changedFieldCount[args.id] = 0;
                        changedFields[args.id] = [];                        
                    },
                    onReset: function (args) {
                        changedFieldCount[args.id] = 0;
                        changedFields[args.id] = [];
                    },
                    onRefreshed: function (args) {
                        changedFieldCount[args.id] = 0;
                        changedFields[args.id] = [];
                    }
                };
            });            
            VSS.notifyLoadSucceeded();
        });
       $(document).ready(function () {
            $("#btnValidate").click(function () {
                var getResponse = ValidateUser();                
                 VSS.require(["TFS/WorkItemTracking/Services"], function (_WorkItemServices) {
                     var wiServiceNew = _WorkItemServices.WorkItemFormService.getService();                                          
                     wiServiceNew.setFieldValue("System.Title", "Title set from your group extension!");
                 });
            });
        });

我想要实现的两件事

  1. 在按钮单击事件验证用户之后,我必须在成功验证后访问工作项字段。无法访问 _WorkItemServices。无法获取工作项字段。
  2. 当我设置 workItemID 变量 OnLoad 事件时,它会在单击选项卡时重置为 0,不会保留设置为 OnLoad 的值。

标签: tfsazure-devopsazure-devops-extensions

解决方案


您可以尝试与IWorkItemFormService服务交互。例如:

import {
  IWorkItemChangedArgs,
  IWorkItemFieldChangedArgs,
  IWorkItemFormService,
  IWorkItemLoadedArgs,
  WorkItemTrackingServiceIds
} from "azure-devops-extension-api/WorkItemTracking";

在此处查看示例:

https://github.com/microsoft/azure-devops-extension-sample/blob/master/src/Samples/WorkItemFormGroup/WorkItemFormGroup.tsx


推荐阅读