ToB企服应用市场:ToB评测及商务社交产业平台

标题: Azure DevOps 中自定义控件的开发 [打印本页]

作者: tsx81429    时间: 2022-12-14 21:19
标题: Azure DevOps 中自定义控件的开发

Azure DevOps 插件: Field Unique Control

https://github.com/smallidea/azure-devops-extension-custom-control-sample
一. 概述

验证字段值的唯一性,如果相同类型的工作项使用了该值,将报错,当前工作项不能保存。
二. 快速开始

  1. git clone https://github.com/smallidea/azure-devops-extension-custom-control-sample.git
  2. cd azure-devops-extension-custom-control-sample
复制代码
建议使用chrome 70版本以上
三. 目录结构
  1. ├── CHANGELOG.md                            更新历史
  2. ├── README.md                              
  3. ├── details.md                              详细描述
  4. ├── images                                  一些公用的图片
  5. ├── src                                     源文件
  6. │   ├── common                              公共库
  7. │   │   ├── apiHelper.ts                    通过azure devops的api读取相关信息
  8. │   │   └── errorView.ts                    错误显示界面
  9. │   ├── static                              公用的资源文件
  10. │   │   ├── css
  11. │   │   └── images
  12. │   └── uniqueField                         主文件夹,单独放置的目的是方便一个工程发布多个插件
  13. │       ├── app.ts                          主文件
  14. │       ├── control.ts                     
  15. │       ├── index.html                      入口
  16. │       ├── model.ts                        
  17. │       ├── tsconfig.json                   typescript的配置文件
  18. │       └── view.ts
  19. ├── package.json                            包的配置文件,npm包、自定义npm run命令
  20. ├── tsconfig.json                           外层放置一个是避免调试的时候报错,因为tsconfig里面申明了vss-web-extension-sdk是一个types
  21. └── vss-extension-uniqueField.json          插件的配置文件
复制代码
在bash下面使用tree命令获取目录还不错: tree -L 3 -I 'node_module|out|dist|package-lock.json|.png|.css|license'
四. 使用vss-web-extension-sdk

使用 Microsoft VSS Web 扩展 SDK 包,vss-web-extension-sdk 英文全称 Visual Studio Services Web Extension SDK
,此 SDK 包括一个 JavaScript 库,该库提供与嵌入你的扩展插件的页面进行通信所需的 Api。
  1. import * as VSSService from "VSS/Service";
  2. import * as WitService from "TFS/WorkItemTracking/Services";
  3. import * as ExtensionContracts from "TFS/WorkItemTracking/ExtensionContracts";
  4. import * as Q from "q";
复制代码
API

API函数用途VSSServiceVSS.getConfiguration()可以获取到相应的配置WitServicegetService()返回一个服务器实例getFieldValue()获取当前工作项字段的值值setFieldValue()设置当前工作项字段的值getAllowedFieldValues()获取字段的允许的值,即在配工作项模版配置时的下拉框中的选项列表核心代码

  1. WitService.WorkItemFormService.getservice().then(
  2.     (service) => {
  3.         service.getAllowedFieldValues(this._fieldName), (allowedValues: string[]) => {
  4.             // do something
  5.         }
  6.     }
  7. )
复制代码
  1. WitService.WorkItemFormService.getService().then(
  2.     (service) => {
  3.         Q.spread<any, any>(
  4.             [service.getAllowedFieldValues(this._fieldName), service.getFieldValue(this._fieldName)],
  5.             (allowedValues: string[], currentValue: (string | number)) => {
  6.                 //do something
  7.             }
  8.         )
  9.     }
  10. )
复制代码
  1. WitService.WorkItemFormService.getService().then(
  2.             (service) => {
  3.                 // 验证唯一性
  4.                 this._validUniq(this._workItemId, value).then(isValid => {
  5.                     if (isValid == false) {
  6.                         service.setError(`${value} 已经在当前团队项目中被使用,请使用其他!`);
  7.                     } else {
  8.                         service.clearError();
  9.                         service.setFieldValue(this._fieldName, value).then(
  10.                             () => {
  11.                                 this._update(value);
  12.                             }, this._handleError);
  13.                     }
  14.                 });
  15.             },
  16.             this._handleError
  17.         );
复制代码
  1. import VSS_Service = require("VSS/Service");
  2. import TFS_Wit_Client = require("TFS/WorkItemTracking/RestClient");
  3. import TFS_Wit_Services = require("TFS/WorkItemTracking/Services");
  4. import TFS_Core_WebApi = require("TFS/Core/RestClient");
  5. var witClient = VSS_Service.getCollectionClient(TFS_Wit_Client.WorkItemTrackingHttpClient);
  6. const query = {
  7.             query: `SELECT [System.Id]
  8.                     FROM WorkItemLinks
  9.                     WHERE ([System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward')
  10.                         AND (Target.[System.TeamProject] = @project
  11.                         )  mode(Recursive, ReturnMatchingChildren)`
  12.         };
  13. let workItemQueryResult = await witClient.queryByWiql(query, project.name, null);
复制代码
五. 用于打包、发布的命令

六. 调试

TODO

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4