【问题标题】:Using Azure Rest API with Postman to Update Logic App Recurrence Frequency使用带有 Postman 的 Azure Rest API 更新逻辑应用重复频率
【发布时间】:2019-10-21 15:20:58
【问题描述】:

我们有一个逻辑应用,它每 30 分钟轮询一次服务总线以获取消息。我想使用 Postman 将轮询频率更新为 30 秒进行测试。

我可以使用 Azure API 获取与逻辑应用关联的工作流的详细信息,然后在该工作流中获取与轮询服务总线关联的触发器。这会返回 JSON 格式:

{
    "properties": {
        "provisioningState": "Succeeded",
        "createdTime": "2019-08-13T21:08:14.8768439Z",
        "changedTime": "2019-10-21T14:32:46.0204187Z",
        "state": "Enabled",
        "status": "Running",
        "lastExecutionTime": "2019-10-21T14:32:04.149971Z",
        "nextExecutionTime": "2019-10-21T14:32:46.285845Z",
        "recurrence": {
            "frequency": "Second",
            "interval": 30
        },
        "workflow": {
            "id": "/subscriptions/<subscription>/resourceGroups/<resource-group-name>/providers/Microsoft.Logic/workflows/<workflow-name>/versions/08586299385548076458",
            "name": "08586299385548076458",
            "type": "Microsoft.Logic/workflows/versions"
        }
    },
    "id": "/subscriptions/<subscription>/resourceGroups/<resource-group-name>/providers/Microsoft.Logic/workflows/<workflow-name>/triggers/When_a_message_is_received_in_a_topic_subscription_(auto-complete)",
    "name": "When_a_message_is_received_in_a_topic_subscription_(auto-complete)",
    "type": "Microsoft.Logic/workflows/triggers"
} 

在上面的结构中,我想 PATCH "recurrence" : { "frequency": "Second" } to "recurrence" : { "frequency": "Minute" }

通过查看REST API documentation,我不清楚这是否可能?我看到 Trigger 有一个 setState 选项,其中一个属性是 RecurrenceFrequency 但如果我尝试使用它,我会返回以下错误:

{
    "error": {
        "code": "WorkflowTriggerSetStateNotSupported",
        "message": "The workflow trigger 'When_a_message_is_received_in_a_topic_subscription_(auto-complete)' of type 'ApiConnection' does not support the set state action."
    }
}

如果有人能告诉我这是否可能,我做错了什么或指出一个例子,我将不胜感激。

【问题讨论】:

    标签: azure postman azure-logic-apps


    【解决方案1】:

    更新的答案和解决方法

    不幸的是,尽管 API 文档表明这是可能的,但您不能使用 setState 更新任何类型的触发器,无论是原生的还是托管的,启用与否。

    • 本机响应:

    {"error":{"code":"WorkflowTriggerSetStateNotSupported","message":"The workflow trigger 'Recurrence' of type 'Recurrence' does not support the set state action."}}

    • 托管响应:

    {"error":{"code":"WorkflowTriggerSetStateNotSupported","message":"The workflow trigger 'sbAuto' of type 'ApiConnection' does not support the set state action."}}

    您也不能使用 PATCH 动词来更新工作流:

    {"error":{"code":"PatchWorkflowPropertiesNotSupported","message":"The request to patch workflow 'XXXXXXX' is not supported. None of the fields inside the properties object can be patched."}}

    我已经向 Microsoft 提出了这个问题。

    但是...

    可能是使用 PUT 动词来更新工作流。

    为了实现这一点,最好使用 GET 动词检索工作流,更新 JSON 重复对象,然后使用 PUT(创建或更新)重新发布。

    下面的示例获取了我创建的工作流的定义tempotestla

    请求:

    GET https://management.azure.com/subscriptions/651a2541-8d19-42a0-85fe-89a9eee81c48/resourceGroups/TechSouth/providers/Microsoft.Logic/workflows/tempotestla?api-version=2016-06-01 HTTP/1.1
    User-Agent: Fiddler
    Host: management.azure.com
    Content-Type: application/json
    Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    Content-Length: 0
    

    回复:

    HTTP/1.1 200 OK
    Cache-Control: no-cache
    Pragma: no-cache
    Content-Length: 1431
    Content-Type: application/json; charset=utf-8
    Expires: -1
    Vary: Accept-Encoding
    x-ms-request-id: uksouth:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    Strict-Transport-Security: max-age=31536000; includeSubDomains
    x-ms-ratelimit-remaining-subscription-resource-requests: 19999
    x-ms-correlation-request-id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    x-ms-routing-request-id: UKSOUTH2:20191022T160012Z:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    X-Content-Type-Options: nosniff
    Date: Tue, 22 Oct 2019 16:00:11 GMT
    
    {
        "properties":{
            "provisioningState":"Succeeded",
            "createdTime":"2019-10-22T13:27:18.8425031Z",
            "changedTime":"2019-10-22T15:59:39.3684114Z",
            "state":"Disabled",
            "version":"xxxxxxxxxxxxxxxxxxxx",
            "accessEndpoint":"https://prod-00.uksouth.logic.azure.com:443/workflows/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "definition":{
                "$schema":"https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
                "contentVersion":"1.0.0.0",
                "parameters":{
    
                },
                "triggers":{
                    "Recurrence":{
                        "recurrence":{
                            "frequency":"Hour",
                            "interval":5
                        },
                        "type":"Recurrence"
                    }
                },
                "actions":{
                    "Terminate":{
                        "runAfter":{
    
                        },
                        "type":"Terminate",
                        "inputs":{
                            "runStatus":"Succeeded"
                        }
                    }
                },
                "outputs":{
    
                }
            },
            "parameters":{
    
            },
            "endpointsConfiguration":{
                "workflow":{
                    "outgoingIpAddresses":[
                        {
                            "address":"51.140.74.14"
                        },
                        {
                            "address":"51.140.73.85"
                        },
                        {
                            "address":"51.140.78.44"
                        },
                        {
                            "address":"51.140.137.190"
                        },
                        {
                            "address":"51.140.153.135"
                        },
                        {
                            "address":"51.140.28.225"
                        },
                        {
                            "address":"51.140.142.28"
                        },
                        {
                            "address":"51.140.158.24"
                        }
                    ],
                    "accessEndpointIpAddresses":[
                        {
                            "address":"51.140.79.109"
                        },
                        {
                            "address":"51.140.78.71"
                        },
                        {
                            "address":"51.140.84.39"
                        },
                        {
                            "address":"51.140.155.81"
                        }
                    ]
                },
                "connector":{
                    "outgoingIpAddresses":[
                        {
                            "address":"51.140.80.51"
                        },
                        {
                            "address":"51.140.148.0/28"
                        }
                    ]
                }
            }
        },
        "id":"/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/xxxxxxxxx/providers/Microsoft.Logic/workflows/tempotestla",
        "name":"tempotestla",
        "type":"Microsoft.Logic/workflows",
        "location":"uksouth",
        "tags":{
    
        }
    }
    

    这是我的工作流程概览页面:



    从这里开始,如果您使用的是面向对象的代码或脚本,您可以反序列化响应正文并更改间隔:

    objResponse.properties.definition.triggers.<TriggerType>.<TriggerName>.frequency = "Minute"
    

    然后,重新序列化您的对象并在 PUT 请求中将其发送回 API。在这里,我将小时数更改为天数:

    PUT https://management.azure.com/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/xxxxxxxxx/providers/Microsoft.Logic/workflows/tempotestla?api-version=2016-06-01 HTTP/1.1
    User-Agent: Fiddler
    Host: management.azure.com
    Content-Type: application/json
    Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    Content-Length: 1534
    
    {
        "properties":{
            "provisioningState":"Succeeded",
            "createdTime":"2019-10-22T15:25:16.1635472Z",
            "changedTime":"2019-10-22T15:25:16.153712Z",
            "state":"Disabled",
            "version":"08586298489693318400",
            "accessEndpoint":"https://prod-00.uksouth.logic.azure.com:443/workflows/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "definition":{
                "$schema":"https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
                "contentVersion":"1.0.0.0",
                "parameters":{
    
                },
                "triggers":{
                    "Recurrence":{
                        "recurrence":{
                            "frequency":"Day",
                            "interval":5
                        },
                        "type":"Recurrence"
                    }
                },
                "actions":{
                    "Terminate":{
                        "runAfter":{
    
                        },
                        "type":"Terminate",
                        "inputs":{
                            "runStatus":"Succeeded"
                        }
                    }
                },
                "outputs":{
    
                }
            },
            "parameters":{
    
            },
        },
        "id":"/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/xxxxxxxxx/providers/Microsoft.Logic/workflows/tempotestla",
        "name":"tempotestla",
        "type":"Microsoft.Logic/workflows",
        "location":"uksouth",
        "tags":{
    
        }
    }
    

    您应该在响应正文中获得更新的对象。

    这是我发出请求后的工作流程摘要页面:



    希望这会有所帮助。

    【讨论】:

    • 嗨,杰米,感谢您的回复。触发器是一个服务总线触发器 - 是否有一些文档可以告诉我它不能使用 SetState?我尝试使用您建议的格式更新触发器,但我仍然得到相同的响应“'ApiConnection' 不支持设置状态操作” - 我正在使用management.azure.com/subscriptions{{SubscriptionID}}/resourcegroups/{{OffResGroup}}/ providers/Microsoft.Logic/workflows/{{CmtLAName}}/triggers/{{TriggerName}}/setState?api-version=2016-06-01 来尝试这个。有什么想法吗?
    • 嗨,史蒂夫,请看我的更新。希望这能给你一个可行的解决方案:)
    • Jamie,非常感谢,它看起来会起作用(我只需要比逻辑应用程序贡献者更精细的权限,因为工作流必须更新一堆资源)。我会尽快将其标记为已回答。干杯!
    • 没问题。您可以使用操作 "Microsoft.Logic/workflows/write" 可分配范围 "/subscriptions/{{SubscriptionID}}/resourceGroups/{{OffResGroup}}/{{CmtLAName}}" 创建自定义角色定义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 2020-05-27
    • 1970-01-01
    相关资源
    最近更新 更多