使用表达式访问运行时值

已完成

表达式可使策略模板参数从运行时数据获取相应值。 这些函数可以访问并转换来自 API 请求标头、查询和正文以及响应的运行时数据。 通常也可以使用表达式来访问连接器连接属性中的数据。 例如,@connectionParameters('HostUrl') 可获取为连接属性 HostUrl 配置的值,使制作者能够在连接过程中更改服务 URL,这类似于测试与生产 API 方案。 本单元将介绍一些可与策略模板一起使用的常见表达式。

表达式基础知识

在运行时计算表达式。 表达式是一个或多个函数、运算符或显式值组成的序列。 在参数中定义表达式时,使用 @ 符号作为表达式的前缀。 如果表达式的结果是一个数值,而预期输入是字符串,则可以使用大括号 ({}) 表示法,它会自动将数值转换为字符串。

以下示例演示了这两种表示法的使用方式:

@{connectionParameters('HostPortNumber')}

为确保表达式不会因属性为空而失败,请确保路径中的任何内容都不为空。 如果 summary 为空,则以下示例将失败:

@body().summary.amount

如果表达式中包含显式值(字符串文本),则使用单引号。 请勿使用双引号,因为它会与表达式周围使用的标记发生冲突。

处理响应正文

可以在运行时使用 body() 函数访问响应正文。 例如,列出发票操作返回以下数据:

{ “invoices”: [ { “invoiceid”:”1234”}] }

在本示例中,body() 函数引用外部大括号 ({}),其 invoice 属性为数组。

您可以使用以下逻辑生成一个引用 invoices 数组的表达式:

@body().invoices

还可以使用以下逻辑生成一个访问该数组第一个项目的 invoiceid 的表达式:

@body().invoices[0].invoiceid

处理标头值

借助 @headers('headerName') 表达式,您可以访问标头中的值。 如果使用的是根据 URL 设置标头策略模板,还可以将 @headers 表达式用作目标模板参数。 本方法支持从 URL 检索值,然后在标头中设置该值。 例如,连接器可以使用本表达式从服务获取访问令牌以允许发布到页面。 以下示例显示了用于获取访问令牌以执行发布到页面操作的策略模板配置可能的外观。

策略模板配置的屏幕截图示例。

处理查询值

与处理标头类似,您可以使用 @queryParameters('queryParameterName') 表达式访问请求的查询参数。 以下示例与上一个有关标头的示例相似;但是,本示例将检索到的令牌置于查询参数中。

策略模板配置的屏幕截图示例,其中检索到的令牌位于查询参数中。

处理连接值

借助 @connectionParameters('connectionParameterName') 表达式,您可以访问为自定义连接器设置连接时输入的值。 本表达式支持您收集自定义连接器用户的信息,如身份验证或主机 URL 值。 可以使用这些参数值生成 URL 并填写其他特定于连接的配置值。

在 apiProperties.json 文件中配置的连接参数用于生成用户在创建新连接时需填写的连接对话框。

在自定义连接器上配置身份验证时,它会自动编辑 apiProperties,以便您可以添加必要的身份验证属性。 如果已使用 paconn 下载了连接器定义,且已配置了 API 密钥身份验证,则查看 apiProperties.json 文件时,您会发现已添加以下逻辑。

"api_key": {
        "type": "securestring",
        "uiDefinition": {
          "displayName": "API Key",
          "description": "The API Key for your environment",
          "tooltip": "Provide your API Key",
          "constraints": {
            "tabIndex": 2,
            "clearText": false,
            "required": "true"
          }
        }

因此,在创建连接时,您会看到以下输入字段。

API 密钥输入对话框的屏幕截图。

可以手动添加其他输入字段以收集对每个自定义连接器用户唯一的其他数据。 例如,可以添加常见字段主机 URL,以便允许连接器处理基础 API 的多个终结点。 以下示例显示的 apiProperties.json 文件中,除了 API 密钥之外,您还可以输入主机 URL 和计费代码。

"properties": {
    "connectionParameters": {
      "hostUrl": {
        "type": "string",
        "uiDefinition": {
          "constraints": {
            "required": "true"
          },
          "description": "Specify your API URl e.g. https://test.contoso.com",
          "displayName": "API URL",
          "tooltip": "Specify your API URl e.g. https://test.contoso.com"
        }
      },
      "billingCode": {
        "type": "string",
        "uiDefinition": {
          "constraints": {
            "required": "true"
          },
          "description": "billing code",
          "displayName": "Billing Code",
          "tooltip": "Billing Code"
        }
      },
      "api_key": {
        "type": "securestring",
        "uiDefinition": {
          "displayName": "API Key",
          "description": "The API Key for your environment",
          "tooltip": "Provide your API Key",
          "constraints": {
            "tabIndex": 2,
            "clearText": false,
            "required": "true"
          }
        }
      }
    }

使用本配置后,会显示以下连接对话框。

使用本配置时的连接对话框的屏幕截图。

然后,可以使用 @connectionParameters('hostUrl')@connectionParameters('billingCode') 表达式来使用策略模板配置中的值。

本模块的其余部分演示了表达式的使用示例,同时进一步介绍了策略模板的使用方式。