如何使用数组结果处理x-ms-dynamic-schema?

时间:2017-10-12 13:28:48

标签: json azure-logic-apps microsoft-flow

我正在Microsoft Flow / Logic Apps中创建一个自定义连接器,基于带有Microsoft扩展的Swagger文件(x-ms-dynamic-schema和x-ms-dynamic-values)。

我现在想要获取一个对象数组。每个对象都具有相同的JSON模式。 使用x-ms-dynamic-schema扩展,可以说逻辑应用程序/流程设计器需要获取响应的JSON模式,以便您可以提供对象的属性。

我想要实现的目标是:

  • 我对我的连接器(" ListEntities")进行了操作,该操作获取了我感兴趣的某个实体(=对象类型)的对象数组。
  • 相同的操作会选择该实体类型的架构并显示响应的属性。

到目前为止我尝试了什么:

获取架构的操作:

    "/api/entitydefinitions/{type}": {
        "get": {
            "summary": "Get Entity Definition Schema",
            "description": "Gets the schema of an entity definition.",
            "operationId": "GetEntitySchemaByDefinition",
            "produces": [
                "application/json"
            ],
            "parameters": [
                {
                    "name": "type",
                    "type": "string",
                    "in": "path",
                    "description": "Select Entity you want to query",
                    "required": true,
                    "x-ms-summary": "Select Entity"
                }
            ],
            "responses": {
                "200": {
                    "description": "OK",
                    "schema": {
                        "type": "object"
                    }
                }
            }
        }
    }

获取实体列表的操作:

        "/api/entitydefinitions/{type-dynamic}/entities": {
        "get": {
            "summary": "List entities",
            "description": "Gets entities",
            "operationId": "ListEntitiesByDefinition",
            "parameters": [
                {
                    "name": "type-dynamic",
                    "type": "string",
                    "in": "path",
                    "description": "Select entity definition",
                    "required": true,
                    "x-ms-summary": "Entity Definition",
                    "x-ms-dynamic-values": {
                        "operationId": "ListEntityDefinitions",
                        "value-path": "name",
                        "value-title": "name",
                    }
                }
            ],
            "responses": {
                "200": {
                    "description": "OK",
                    "schema": {
                        "$ref": "#/definitions/ListEntitiesByDefinitionResponse"
                    }
                }
            }
        }
    }

上述

的响应定义
    "ListEntitiesByDefinitionResponse": {
        "type": "object",
        "x-ms-dynamic-schema": {
            "operationId": "GetEntitySchemaByDefinition",
            "parameters": {
                "type": {
                    "parameter": "type-dynamic"
                }
            },
            "value-path": "items"
        }
    },

现在,我的输出示例:

[
{
    "id": 4541,
    "identifier": "123456789",
    "Name": "Name 1",
    "Description": "",
},
{
    "id": 4542,
    "identifier": "987654321",
    "Name": "FromPostman",
    "Description": "",
}
]

我的架构:

{
    "type": "array",
    "items": {
        "title": "Example",
        "type": "object",
        "properties": {
            "id": {
                "type": "integer",
                "x-ms-summary": "id"
            },
            "identifier": {
                "type": "string",
                "x-ms-summary": "identifier"
            },
            "Name": {
                "type": "string",
                "x-ms-summary": "Name"
            },
            "Description": {
                "type": "string",
                "x-ms-summary": "Description"
            }
        },
        "required": []
    }
}

问题是我的流程应用确实在设计模式中显示了属性:

enter image description here

但是,我希望插入一个循环(适用于每个)

流程本身也不起作用,只是因为它没有循环数组中的对象。

enter image description here

已花了太多时间在这上面寻找你的帮助。

1 个答案:

答案 0 :(得分:0)

好吧..您可以反对Azure Flow设计...或者您可以决定使用它。

让我们尝试替换此输出:

[
    {
        "id": 4541,
        "identifier": "123456789",
        "Name": "Name 1",
        "Description": "",
    },
    {
        "id": 4542,
        "identifier": "987654321",
        "Name": "FromPostman",
        "Description": "",
    }
]

有了这个:

{
     "values":
     [
        {
            "id": 4541,
            "identifier": "123456789",
            "Name": "Name 1",
            "Description": "",
        },
        {
            "id": 4542,
            "identifier": "987654321",
            "Name": "FromPostman",
            "Description": "",
        }
    ]
}

我知道..它是“相同”的输出,但是使用不同的方法。这样,您可以在新的values动作中使用apply to each字段并从那里进行操作

  

但是,我希望插入一个循环(应用于每个循环)

正如您所说-如果您希望有机会使用该操作-首先将您的输出格式适合Azure Flow要求并从那里进行。

简而言之-尝试将架构定义更改为:

{
    "type": "object",
    "properties":
    {
         "values":
         {
             "type": "array"
             "items": "..."
         }
    }
}