如何在逻辑应用程序中获取查询参数?

How to get query parameters in a Logic App?

我正在尝试将额外的查询参数传递给 Azure 逻辑应用程序,以便我可以在逻辑应用程序工作流中处理以下数据

例如https://logicURL?SelectedData="%7BsiteURL%3AXYZ.sharepoint.com%2Fsites%2FXYZDev%7D"(编码字符串)

在 HTTP 操作中,我试图用下面的 JSON 模式处理上面传递的数据

{
    "kind": "Http",
    "inputs": {
        "schema": {
            "properties": {
                "selectedData": {
                    "type": "string"
                }
            },
            "type": "object"
        }
    } }

我没有获取 selectedData 值。我需要使用 decodecomponentURI,然后使用 JSON 值。

Azure logic app schema

在此处查找错误

Azure logic app run time error

首先,您需要将您的查询参数添加到现有参数中,例如

https://xyz.logic.azure.com:443/workflows/id/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=code&SelectedData="%7BsiteURL%3AXYZ.sharepoint.com%2Fsites%2FXYZDev%7D"

https://xyz.logic.azure.com:443/workflows/id/triggers/manual/paths/invoke
  ?api-version=2016-10-01
  &sp=%2Ftriggers%2Fmanual%2Frun
  &sv=1.0
  &sig=code
  &SelectedData="%7BsiteURL%3AXYZ.sharepoint.com%2Fsites%2FXYZDev%7D"

然后,您应该可以使用

在您的逻辑应用程序中获取它们
@triggerOutputs()['queries']['SelectedData']

如您所见,无需向 Http 触发器添加架构即可获取查询参数

上下文

  • MSFT Azure 逻辑应用程序
  • MSFT Logicapp 工作流定义语言
  • 2020-06-25 正式版04:56:31

问题

  • Logicapp 开发人员想要获取通过 HTTP GET
  • 传入的 URL 查询参数的值

解决方案

  • 此用例的解决方案是 在此 Whosebug 线程
  • 然而,这个插件答案重构了之前的解决方案
    • 它解决了在 MSFT 工作流定义语言中构造表达式的问题(在“代码”视图中查看逻辑应用程序时看到的基于 JSON 的源代码)

详情

  • 此 URL 扩展了原始问题和此 SO 线程中的另一个答案
  • 这里我们期望 FirstName LastNameFaveColor 属性
    https://xyz.logic.azure.com:443/workflows/id/triggers/manual/paths/invoke
      ?api-version=2016-10-01
      &sp=%2Ftriggers%2Fmanual%2Frun
      &sv=1.0
      &sig=code
      &FirstName=Huomer
      &LastName=Huimpson
      &FaveColor=     
  • 标准初始化:以下足以捕获所需的名称-值对
triggerOutputs()['queries']['FirstName']
triggerOutputs()['queries']['LastName']
triggerOutputs()['queries']['FaveColor']
  • Error-trap init: 以下足以捕获所需的名称-值对 如果有任何所需名称则抛出错误- 缺少值对(无错误捕获)
triggerOutputs()['queries']?['FirstName']
triggerOutputs()['queries']?['LastName']
triggerOutputs()['queries']?['FaveColor']
  • 使用默认值的错误陷阱初始化:以下足以错误陷阱初始化所需的名称-值对,并提供默认值 对于任何缺失值
coalesce(triggerOutputs()['queries']?['FirstName']  , 'Puomer'  )
coalesce(triggerOutputs()['queries']?['LastName']   , 'Puimpson' )
coalesce(triggerOutputs()['queries']?['FaveColor']  , 'Purple' )

重构的解决方案

  • 因此,原解可以重构如下
## BEFORE
@triggerOutputs()['queries']['SelectedData']

## AFTER
@{coalesce(triggerOutputs()['queries']?['SelectedData'] , '__blank__')}
  • 这种方法可以满足典型用例的要求,即:
    • 如果存在则获取值,
    • 否则提供默认值,并且
    • 如果参数被完全省略,不要让整个逻辑应用程序崩溃
    • 如果您直接编辑工作流定义语言,则可以使用 @{} 语法,但如果您在“表达式对话框”中输入它,则不能使用

另见

我发送查询字符串为:

https://prod-17.westindia.logic.azure.com:443/workflows/f3b63b086e61420e8d76b7478f4b3e39/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=nESqZWY2NyAKKhCkaM0VnfenHuTqi1NSBjJdl9M5jNA&UserName=SecretName&Password=Nikita@123

我想在逻辑应用中提取用户名。为此,我使用了 Compose 连接器并在表达式中使用了以下语句。

coalesce(triggerOutputs()['queries']?['UserName'] , 'blank')

我已经试过了::triggerOutputs()['queries']?['UserName']

但是我在输出中的 UserName 前面附加了一个空白 space。因此,即使 UserName 正确,我的条件也会变得错误。

如何删除不需要附加到前面的额外 space。

HTTP 连接器输出为: