Динамически заполнять раскрывающийся список в зависимости от типа пути к файлу в Azure Devops?

В Azure Devops я создаю одно расширение с задачей сборки, в которой поле списка выбора ввода зависит от другого поля пути к файлу ввода. Когда пользователь предоставляет входной путь к файлу, я хотел динамически читать и заполнять раскрывающийся список новыми элементами. Я пытался искать и внедрять, но не нашел способа. Любая помощь или руководство будут оценены. Я нашел приведенный ниже пример, чтобы помочь мне со статическими значениями.

{
   "name": "action",
   "type": "pickList",
   "label": "Action",
   "defaultValue": "Publish",
   "required": true,
   "helpMarkDown": "Select the Action to perform",
   "options": {
     "Publish": "Publish Changes",
     "Script": "Script Changes",
     "DeployReport": "Generate Deployment Report"
   }
 }

person vCillusion    schedule 21.12.2018    source источник


Ответы (1)


Стандартные задачи имеют открытый исходный код, поэтому вы можете просмотреть репозиторий, чтобы получить представление об используемых ими паттернах. Вот пример из Загрузить сборку Задание "Артефакты". Определение сборки зависит от определенного проекта.

{
        "name": "project",
        "type": "pickList",
        "label": "Project",
        "defaultValue": "",
        "required": true,
        "visibleRule": "buildType == specific",
        "properties": {
            "EditableOptions": "True",
            "DisableManageLink": "True"
        },
        "helpMarkDown": "The project from which to download the build artifacts"
    },
    {
        "name": "definition",
        "aliases": [
            "pipeline"
        ],
        "type": "pickList",
        "label": "Build pipeline",
        "defaultValue": "",
        "required": true,
        "visibleRule": "buildType == specific",
        "properties": {
            "EditableOptions": "True",
            "DisableManageLink": "True",
            "IsSearchable": "True"
        },
        "helpMarkDown": "Select the build pipeline name"
    },

Затем в разделе dataSourceBindings считают, что он использует цель из предыдущего выбора в качестве входных параметров.

"dataSourceBindings": [
    {
        "endpointId": "tfs:teamfoundation",
        "target": "project",
        "endpointUrl": "{{endpoint.url}}/_apis/projects?$skip={{skip}}&$top=1000",
        "resultSelector": "jsonpath:$.value[?(@.state=='wellFormed')]",
        "resultTemplate": "{ \"Value\" : \"{{{id}}}\", \"DisplayValue\" : \"{{{name}}}\" }",
        "callbackContextTemplate": "{\"skip\": \"{{add skip 1000}}\"}",
        "callbackRequiredTemplate": "{{isEqualNumber result.count 1000}}",
        "initialContextTemplate": "{\"skip\": \"0\"}"
    },
    {
        "endpointId": "tfs:teamfoundation",
        "target": "definition",
        "endpointUrl": "{{endpoint.url}}/{{project}}/_apis/build/definitions?api-version=3.0-preview&$top=500&continuationToken={{{continuationToken}}}&name=*{{name}}*&queryOrder=2",
        "resultSelector": "jsonpath:$.value[?(@.quality=='definition')]",
        "parameters": {
            "project": "$(project)",
            "name": "$(name)"
        },
        "resultTemplate": "{ \"Value\" : \"{{{id}}}\", \"DisplayValue\" : \"{{{name}}}\" }",
        "callbackContextTemplate": "{\"continuationToken\" : \"{{{headers.x-ms-continuationtoken}}}\"}",
        "callbackRequiredTemplate": "{{{#headers.x-ms-continuationtoken}}}true{{{/headers.x-ms-continuationtoken}}}",
        "initialContextTemplate": "{\"continuationToken\" : \"{{{system.utcNow}}}\"}"
    },
person Matt    schedule 27.12.2018
comment
Если у нас нет конкретного API и он ближе к формату XML, есть ли у нас возможность выбора конечных точек? Можем ли мы получить доступ к файлу исходного кода из API? - person vCillusion; 11.01.2019