我得到了一个用 Typescript 编写的 Azure 自定义任务。该任务在其 task.json 中定义了一个选择列表。
我希望能够根据另一个选项列表中选取的值填充选项列表。
有没有办法做这样的伪代码:
const options1 = { option1: value1, option2: value2, option3: value3 }
const options2 = { option1: othervalue1, option2: othervalue2, option3: othervalue3 }
let mainChoice = tl.getInput("firstpicklist", true);
let picklistObj = tl.getObject("secondPickList");
if(mainChoice==="1")
{
picklistObj.options = options1;
}
else
{
picklistObj.options = options1;
}
如果没有选项来填充直接对象,是否可以以某种方式从 Azure var 组中获取值?
这不是一个完整的答案,更多部分可能会帮助您找到正确的方向。另外,我认为下拉菜单没有刷新触发器。
你知道
dataSourceBindings
吗?
这是一个有点隐藏的功能。找不到这个详细记录。
它应该是同一级别的 task.json 文件的一部分,如 id
和 inputs
:
"dataSourceBindings": [
{
"target": "versionSpec",
"endpointId": "tfs:teamfoundation",
"endpointUrl": "{{endpoint.url}}/_apis/settings/entries/host/my-extensions-json-doc?api-version=7.1-preview",
"resultSelector": "jsonpath:$.value['Current'].versions[?(@.state > 0 && @.state < 6)]",
"resultTemplate": "{ \"Value\" : \"{{{id}}}\", \"DisplayValue\" : \"{{{name}}}\" }"
}
],
您会看到
target
属性指向 versionSpec
,这是选项列表的名称,如下所示:
"inputs": [
{
"name": "versionSpec",
"type": "pickList",
"label": "Some version",
"defaultValue": "default", <!-- set to the 'default' option in the options jsonstring below
"options": { "default": "Default (see version with * prefixed)" },
"properties": {
"EditableOptions": "False", <-- might be true for you
"PopulateDefaultValue": "True", <-- not sure what effect this has
"DisableManageLink": "True" <-- in task editor show some link
}
}
],
从绑定中选择数据源值之一后,yaml 编辑器可能会抱怨动态加载的值。不知道如何解决这个问题,猜想这是不可能的。
创建第二个输入和第二个数据源绑定,您可以在输入 1 和 2 之间交替以及可见性。但这仅在 yaml 的任务编辑器或经典定义中是动态的。 在两个输入上设置visibilityRule,如here所示。
顺便说一句。 EndpointId 也由 ADO 本身使用。使用 ADO 项目的当前上下文等。不确定这是否是好的做法,但对我来说它有效。 我想可以在这里提供您自己的 API,但我自己没有尝试过。我此时经常遇到的一个问题是这个。