Azure Logic Apps中Trigger actions的conditions属性是否已弃用?
问题描述
我尝试在Azure Logic App工作流的触发器操作中添加条件,仅在收到包含特定值(例如'ABC')的事件时才触发。当前触发器代码如下:
"Event_Received": { "inputs": { "body": { "properties": { "destination": { "endpointType": "webhook", "properties": { "endpointUrl": "@{listCallbackUrl()}" } }, "topic": "/subscriptions/<REDACTED>/resourceGroups/rg1/providers/Microsoft.EventGrid/domains/MyDomain/topics/MyTopic" } }, "host": { "connection": { "name": "@parameters('$connections')['azureeventgrid']['connectionId']" } }, "path": "/subscriptions/<REDACTED>/providers/@{encodeURIComponent('Microsoft.EventGrid.Domains.Topics')}/resource/eventSubscriptions", "queries": { "x-ms-api-version": "2017-09-15-preview" } }, "runAfter": {}, "type": "ApiConnectionWebhook" }
我尝试添加conditions属性来检查事件数据:
"conditions": [ { "expression": "@equals(triggerBody()?['name'], 'ABC')" } ]
但保存时收到错误:conditions属性自2016年起已弃用。注意到其他案例中该属性用于启动应用的触发器可正常使用,但我的触发器是工作流启动后触发的Webhook类型。
解决方案
方法1:在Event Grid事件订阅中添加筛选器(推荐)
对于Event Grid这类Webhook触发器,最优做法是直接在事件订阅层面设置筛选规则,避免不必要的事件发送到Logic App,减少资源消耗。你需要修改触发器的inputs.body,添加filter属性定义筛选条件:
"Event_Received": { "inputs": { "body": { "properties": { "destination": { "endpointType": "webhook", "properties": { "endpointUrl": "@{listCallbackUrl()}" } }, "topic": "/subscriptions/<REDACTED>/resourceGroups/rg1/providers/Microsoft.EventGrid/domains/MyDomain/topics/MyTopic", "filter": { "advancedFilters": [ { "operatorType": "StringEquals", "key": "name", "value": "ABC" } ] } } }, "host": { "connection": { "name": "@parameters('$connections')['azureeventgrid']['connectionId']" } }, "path": "/subscriptions/<REDACTED>/providers/@{encodeURIComponent('Microsoft.EventGrid.Domains.Topics')}/resource/eventSubscriptions", "queries": { "x-ms-api-version": "2017-09-15-preview" } }, "runAfter": {}, "type": "ApiConnectionWebhook" }
通过advancedFilters设置name字段等于ABC的规则后,只有符合条件的事件才会被发送到Logic App的Webhook端点。
方法2:在Logic App中添加触发后条件判断
如果无法修改Event Grid订阅筛选,可以在触发器之后添加条件控制操作,判断事件数据是否符合要求,不符合则终止工作流:
- 在
Event_Received触发器之后添加「条件」操作 - 设置条件表达式为
@equals(triggerBody()?['name'], 'ABC') - 在「如果是」分支中执行后续业务逻辑,「如果否」分支添加「终止」操作(状态选择「已取消」)
为什么conditions属性不可用
conditions属性仅适用于轮询型触发器(比如Blob存储触发器、定时触发器这类主动启动工作流的触发器),而你的触发器是ApiConnectionWebhook类型的被动Webhook触发器,这类触发器不支持conditions属性,因此会提示已弃用。
内容的提问来源于stack exchange,提问作者quincy783
相关产品推荐
相关产品推荐

