你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于:Azure 逻辑应用(消耗型 + 标准型)
在企业集成中的B2B场景中,可能需要将XML在格式之间转换。 逻辑应用工作流可以使用转换 XML操作和预定义的映射来转换 XML。
例如,假设你定期从使用 YearMonthDay 日期格式(YYYYMMDD)的客户收到 B2B 订单或发票。 但是,你的组织使用 MonthDayYear 日期格式(MMDDYYYY)。 可以在将订单或发票详细信息存储在客户活动数据库中之前创建和使用将 YearMonthDay 格式转换为 MonthDayYear 格式的地图。
先决条件
一个 Azure 帐户和订阅。 如果还没有订阅, 请注册免费的 Azure 帐户。
一个逻辑应用工作流,已在开始时创建触发器,便于你在工作流中必要时添加“转换 XML”操作。
用于定义和存储项目(例如贸易合作伙伴、协议、证书等)的 集成帐户资源 ,用于企业集成和 B2B 工作流。 此资源必须满足以下要求:
与逻辑应用资源所在的同一个 Azure 订阅相关联。
与你计划在其中使用“转换 XML”操作的逻辑应用资源位于同一个位置或 Azure 区域。
如果使用消耗型逻辑应用资源和工作流,则集成帐户需要以下各项:
用于转换 XML 内容的 映射 。
如果使用的是 标准逻辑应用资源和工作流,则可以根据以下方案将集成帐户链接到逻辑应用资源、将映射直接上传到逻辑应用资源或两者:
如果已有一个包含所需或要使用的项目的集成帐户,则可以将集成帐户链接到多个标准逻辑应用资源,以便使用这些项目。 这样,就不必将映射上传到每个单独的逻辑应用。 有关详细信息,请查看 将逻辑应用资源链接到集成帐户。
如果您没有集成帐户,或者仅打算在同一逻辑应用资源内的多个工作流中使用您的工件,则可以通过 Azure 门户或 Visual Studio Code 直接将映射添加到逻辑应用资源中。
注释
通过 Liquid 内置连接器,可以选择先前上传到逻辑应用资源或链接的集成帐户的映射,但不能同时选择两者。
因此,如果您没有集成帐户,也不需要集成帐户,可以使用上传选项。 否则,您可以使用链接选项。 采用上述任一方式,都可以在同一逻辑应用资源中跨所有子工作流使用这些项目。
添加转换XML操作
在 Azure 门户中,打开设计器中的标准逻辑应用和工作流。
如果您有一个没有触发器的空白工作流,您可以按照以下常规步骤添加所需的触发器。 否则,继续执行下一步。
此示例使用 请求 触发器。
在要添加“转换 XML”操作的工作流步骤下,按照以下常规步骤添加名为“转换 XML”的操作。
在 “内容 ”框中,指定要使用在 HTTP 请求中接收的任何 XML 数据转换的 XML 内容。
若要从工作流中的先前作中选择输出,请在 “转换 XML ”作中单击“ 内容 ”框内,然后选择动态内容列表选项(闪电图标)。
从动态内容列表中,选择要转换的内容的令牌。
此示例从触发器中选择Body标记。
注释
请确保选择 XML 内容。 如果内容不是 XML 或 base64 编码的,则必须指定处理内容的表达式。 例如,可以使用 表达式函数,例如
base64ToBinary()解码内容或xml()将内容处理为 XML。
从映射源列表中选择您上传映射的位置,即您的LogicApp资源或IntegrationAccount。
从 “地图” 列表中选择地图。
完成后,保存工作流。
现在,你已完成设置 转换 XML 动作。 在实际应用中,你可能想要将转换后的数据存储在业务线(LOB)应用中,例如 SalesForce。 若要将转换后的输出发送至Salesforce,请新增一个Salesforce操作。
若要测试转换操作,请触发并运行工作流。 例如,对于请求触发器,将请求发送到触发器的终结点 URL。
转换 XML操作在工作流触发后并在 XML 内容可用于转换时运行。
高级功能
从地图中引用程序集或调用自定义代码
转换 XML 操作支持从映射中引用外部程序集,这些程序集支持从 XSLT 映射中直接调用自定义 .NET 代码。 有关详细信息,请参阅 在 Azure 逻辑应用中为工作流添加 XSLT 映射。
引用扩展对象
在标准工作流中,“转换 XML”操作支持指定要用于映射的 XML 扩展对象。
字节顺序标记
默认情况下,转换的响应以字节顺序标记(BOM)开头。 只有在代码视图编辑器中工作时,才能访问此功能。 若要禁用此功能,请将 transformOptions 属性设置为 disableByteOrderMark:
"Transform_XML": {
"inputs": {
"content": "@{triggerBody()}",
"integrationAccount": {
"map": {
"name": "TestMap"
}
},
"transformOptions": "disableByteOrderMark"
},
"runAfter": {},
"type": "Xslt"
}