你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于:Azure 逻辑应用(标准)
在逻辑应用工作流中交换使用不同 XML 或 JSON 格式的消息时,必须指定如何转换数据或将数据从源格式转换为目标格式,例如在 XML 文档之间或 JSON 文档之间转换。 当源架构和目标架构中的数据结构之间存在差距时,这项任务尤其重要。 架构描述 XML 或 JSON 文档中的数据元素、属性和数据类型。
若要定义数据结构之间的转换并弥合任何差距,可以创建一个映射(.xslt 文件),用于指定源和目标架构中数据元素之间的关系。 可以在标准逻辑应用项目的上下文中将 Visual Studio Code 与 Azure 逻辑应用(标准)扩展配合使用,以便直观地创建和编辑映射。 数据映射器工具提供统一的体验,可让用户使用拖放手势进行映射和转换,并提供预生成的函数来生成表达式,以及在工作流中使用映射之前手动测试映射的方法。
创建映射后,可以直接从逻辑应用项目中的工作流或 Azure 门户中的标准逻辑应用工作流调用该映射。 对于此任务,可以在工作流中使用名为使用 Data Mapper XSLT 进行转换的 Data Mapper Operations 操作。
本操作指南介绍如何创建空数据映射、选择源架构和目标架构、在架构元素之间创建各种映射、保存和测试映射,然后从逻辑应用项目中的工作流调用该映射。
限制和已知问题
Data Mapper 目前仅适用于在 Windows 操作系统上运行的 Visual Studio Code。
Data Mapper 目前仅在 Visual Studio Code 中可用,不适用于 Azure 门户,并且仅在标准型逻辑应用项目中可用,不适用于消耗型逻辑应用项目。
数据映射器目前不支持使用逗号分隔值 (.csv) 文件格式的架构。
数据映射器中的“代码”窗格目前是只读的。
数据映射器中的布局和项位置目前是自动和只读的。
Filter 函数可以正确处理括在双引号中的数字条件,例如 ">=10"。 但是,此函数目前对于字符串比较的表现并不一致,例如检查项名称是否为 "= 'Pen'"。
在源架构和目标架构中的父数组元素之间创建映射时,映射器会自动添加一个循环来迭代数组项元素。 但是,仍然必须显式创建源数组项元素和目标数组项元素之间的映射。
若要调用使用数据映射器创建的映射,只能使用名为“使用数据映射器 XSLT 进行转换”的“数据映射器操作”操作。 对于由任何其他工具创建的映射,请使用名为转换 XML 的 XML Operations 操作。
若要将使用数据映射器创建的映射与 Azure 门户中的工作流配合使用,必须将其直接添加到标准逻辑应用资源。
此版本目前不支持自定义函数。
先决条件
使用 Visual Studio Code 和 Azure 逻辑应用(标准)扩展来创建标准型逻辑应用工作流。
注意
以前独立的数据映射器扩展现已与 Azure 逻辑应用(标准)扩展合并。 为了避免冲突,安装或更新 Azure 逻辑应用(标准)扩展时,应删除任何现有版本的 Data Mapper 扩展。 安装或更新扩展后,请重启 Visual Studio Code。
描述要转换的数据类型的源和目标架构文件。 这些文件可以具有以下格式之一:
- 具有 .xsd 文件扩展名的 XML 架构定义文件
- 具有 .json 文件扩展名的 JavaScript 对象表示法文件
包含至少具有一个触发器的有状态或无状态工作流的标准型逻辑应用项目。 如果没有项目,请按照 Visual Studio Code 中的以下步骤操作:
连接到 Azure 帐户(如果尚未连接)。
创建本地文件夹、本地标准型逻辑应用项目以及有状态或无状态工作流。 在创建工作流期间,选择“在当前窗口中打开”。
如果要测试映射并检查转换是否按预期工作,请对输入数据进行采样。
若要使用 Run XSLT 函数,XSLT 代码片段必须存在于使用 .xml 或 .xslt 文件扩展名的文件中。 必须将 XSLT 代码片段放入以下本地项目文件夹结构的 InlineXslt 文件夹中:Artifacts > DataMapper > Extensions > InlineXslt。 如果此文件夹结构不存在,请创建缺少的文件夹。
创建数据映射
在 Visual Studio Code 中,打开标准逻辑应用项目所在的文件夹。
在 Visual Studio Code 左侧菜单上,选择 Azure 图标。
在“Azure”窗口中的“数据映射器”下,选择“创建数据映射”。
Visual Studio Code 标题栏上会打开提示框,让你为映射提供一个名称。
在提示框中输入数据映射名称。
在本指南中,这些步骤使用名称 Example-data-map。
数据映射器将创建并打开一个空白数据映射。
按照以下步骤选择源架构和目标架构:
在“源”窗格中,选择“新增”>“浏览”以查找并上传源架构。
添加源架构后,“源”窗格将填充源架构中数据类型的 XML 元素“节点”,例如:
在“目标”窗格中,选择“新增”>“浏览”以查找并上传目标架构。
添加目标架构后,“目标”窗格将填充目标架构中数据类型的 XML 元素“节点”,例如:
提示
如果在加载架构时遇到问题,可以将源架构文件和目标架构文件本地添加到逻辑应用项目的“工件”/“架构”文件夹中。 在这种情况下,若要在数据映射器中指定源和目标架构,请在“源”和“目标”窗格中打开“选择现有”列表(而不是使用“新增”),然后选择你的架构。
架构数据类型
下表描述了可能出现在架构中的数据类型:
符号 | 类型 | 更多信息 |
---|---|---|
![]() |
复杂(数组) | 包含项或重复项节点。 数组元素还会显示以下连接点: ![]() |
![]() |
Bool | 仅 True 或 false |
![]() |
Complex | 具有子属性的 XML 对象,类似于对象 JSON 类型 |
![]() |
DateTime | |
![]() |
小数 | |
![]() |
Integer | 仅整数 |
![]() |
字符串 |
在元素之间创建直接映射
若要在源架构和目标架构中具有相同类型的元素之间指定直接转换,请执行以下步骤:
若要查看创建映射时代码中发生的情况,请在映射器的右上角选择“查看代码”。
在映射器表面的“源”窗格中,找到要映射的源元素。
默认情况下,父元素会自动展开以显示其子元素。
此示例从源元素开始映射,但你可以选择从目标元素开始映射。
将鼠标指针移到源元素名称旁边的圆圈上,直到指针变为加号 (+)。
此示例创建从 Employee ID 源元素开始的映射。
拖动绘制一条直线,使源元素与“目标”窗格中目标元素的圆圈相连。
此示例使用 ID 目标元素完成映射,该元素具有与源元素相同的数据类型。
现在,你已在具有相同数据类型的两个元素之间创建了直接映射。
“代码”窗格显示了创建的映射关系:
提示
若要检查映射是否存在问题,请选择“查看问题”。 例如,如果在数据类型不匹配的元素之间创建映射,则“警告”选项卡上的“问题”列表中会出现警告:
在元素之间创建复杂的映射
若要在源架构和目标架构中元素之间指定更复杂的转换(例如,要合并的或具有不同数据类型的元素),可以使用一个或多个函数来执行映射中所需的转换。
在映射器图面上,函数标签会根据函数组标色。 函数名称旁边会出现函数的符号,例如:
下表列出了可以使用的函数组和一些示例函数。 有关完整列表,请参阅数据映射器中的“函数”列表。
组 | 示例函数 |
---|---|
集合 | Average、Count、Direct Access、Distinct values、Filter、Index、Join、Maximum、Minimum、Reverse、Sort、Subsequence、Sum |
转换 | To Date、To Integer、To Number、To String |
日期和时间 | Add Days、Current Date、Current Time、Equals Date |
逻辑比较 | Equal、Exists、Greater、Greater or equal、If、If Else、Is Nil、Is Null、Is Number、Is String、Less、Less or Equal、Logical AND、Logical NOT、Logical OR、Not Equal |
数学 | Absolute、Add、Arctangent、Ceiling、Cosine、Divide、Exponential、Exponential (base 10)、Floor、Integer Divide、Log、Log (base 10)、Module、Multiply、Power、Round、Sine、Square Root、Subtract、Tangent |
字符串 | Codepoints to String、Concat、Contains、Ends with、Length、Lowercase、Name、Regular Expression Matches、Regular Expression Replace、Replace、Starts with、String to Codepoints、Substring、Substring after、Substring before、Trim、Trim Left、Trim Right、Uppercase |
Utility | Copy、Error、Execute XPath、Format DateTime、Format Number、Run XSLT |
添加不带映射的函数
本部分中的示例将源元素中的数据从 String 转换为 DateTime,后者是目标元素类型。 该示例一开始并未先创建映射,而是使用接受单个输入的 To Date 函数。
若要查看创建映射时代码中发生的情况,请在映射器的右上角选择“查看代码”。
在“函数”列表中,找到并选择要使用的函数,这样会将该函数添加到映射器图面。 如果“函数”列表处于折叠状态,请在映射器的左上角选择函数图标 (
)。
此示例选择了 To Date 函数,该函数位于 Conversion 函数组中。
注意
如果映射上不存在任何映射,或者在向映射添加函数时选择了映射,则函数会出现,但不会连接到任何元素或其他函数,例如:
将函数连接到源元素和目标元素。
在源元素和函数左边缘的圆圈之间拖动绘制一条直线。 可以从源元素或函数开始。
在函数的右边缘和目标元素之间拖动并绘制一条线。 可以从目标元素或函数开始。
“代码”窗格显示了创建的映射关系:
在映射器图面上,选择函数形状以查看函数详细信息。
在“输入”选项卡上,确认或编辑要使用的输入。
某些方案需要定义超出直接源元素和目标元素对的转换。 例如,若要定义一对数组及其项之间的转换,需要在数组之间创建循环。 或者,若要在元素的值满足条件时执行任务,需要在元素之间添加条件。
添加使用多个输入的函数
本部分中的示例将多个源元素作为输入进行连接,并将单个输出映射到目标元素。 该示例使用 Concat 函数,该函数可接受多个输入。
若要查看创建映射时代码中发生的情况,请在映射器的右上角选择“查看代码”。
在“函数”列表中,找到并选择要使用的函数,这样会将该函数添加到映射器图面。
如果“函数”列表处于折叠状态,请在映射器的左上角选择函数图标 (
)。
此示例选择了 Concat 函数,该函数位于 String 函数组中。
注意
如果映射上不存在任何映射,或者在向映射添加函数时选择了映射,则函数会出现,但不会连接到任何元素或其他函数,例如:
在映射器图面上,选择函数形状以查看函数详细信息。
在“输入”选项卡上,选择要用作输入的源架构元素。
此示例选择了 FirstName 和 LastName 源架构元素作为函数输入。 映射器会自动添加源元素和函数之间的相应映射。
若要完成映射,请在函数的右边缘和目标元素之间拖动绘制一条直线。 可以从目标元素或函数开始。
“代码”窗格显示了创建的映射关系:
迭代数组
如果源架构和目标架构包含数组,则可以创建一个循环来迭代数组的项。 本部分中的示例创建一个循环,该循环迭代 Employee 源数组和 Person 目标数组,以及数组项之间的映射。
若要查看创建映射时代码中发生的情况,请在映射器的右上角选择“查看代码”。
在映射器图面上的“源”和“目标”窗格中,找到要映射的数组。
在数组项对之间拖动绘制一条直线。 可以从“源”窗格或“目标”窗格开始。
以下示例从“源”窗格开始,映射 Employee 源数组中的 Name 项和 Person 目标数组中的 Name 项:
完成第一对数组项的映射后,映射器会自动在源数组父元素和目标数组父元素之间添加一个循环,其连接点类型如下:
以下示例突出显示了源 Employee 和目标 Person 父数组之间自动添加的循环:
“代码”窗格显示了已创建的映射和循环:
继续映射其他数组元素,例如:
评估条件以执行任务
假设想要添加一个映射,该映射评估一个条件并在满足该条件时执行一项任务。 对于这种情况,可以使用多个函数。
在以下示例中,当购买数量超过 20 件时,映射将使用以下函数来计算要应用的折扣:
函数组 | 函数 | 本示例的目的 |
---|---|---|
比较 | 更强大 | 检查购买数量是否大于 20。 |
比较 | If | 检查 Greater 函数是否返回 true。 |
数学 | 乘 | 如果条件为 true,则将商品价格乘以 10% 来计算折扣。 |
在“源”和“目标”窗格中,找到要在方案中映射的元素。
此示例使用以下元素:
“源”窗格:ItemPrice 和 ItemQuantity
“目标”窗格:ItemPrice、ItemQuantity 和 ItemDiscount
在“函数”列表中,找到并选择要使用的函数,这样会将该函数添加到映射器图面。
如果“函数”列表处于折叠状态,请在映射器的左上角选择函数图标 (
)。
如有必要,可移动映射器图面上的函数形状,以方便选择。
此示例向映射器图面添加了以下函数:Greater、If 和 Multiply
若要在创建映射时查看代码中发生的情况,请在映射器的右上角选择“查看代码”。
根据方案的需要,按照特定顺序连接源元素、函数和目标元素。
此示例按指定顺序连接以下项,以正确创建映射:
开始 结束 ItemPrice 源元素 ItemPrice 目标元素 ItemQuantity 源元素 位于形状左边缘处的 Greater 函数输入。 此输入为函数详细信息中的“值 1”字段提供数据。 位于形状右边缘处的 Greater 函数输出 位于形状左边缘处的 If 函数输入。 此输入为函数详细信息中的“条件”字段提供数据。 ItemPrice 源元素 位于形状左边缘处的 Multiply 函数输入。 此输入为函数详细信息中的“被乘数”字段提供数据。 位于形状右边缘处的 Multiply 函数输出。 位于形状左边缘处的 If 函数输入。 此输入为函数详细信息中的“值”字段提供数据。 位于形状右边缘处的 If 函数输出。 ItemDiscount 目标元素 以下示例显示此时间点的映射:
在以下函数详细信息中的“输入”选项卡中,确认或提供以下值:
函数 输入字段和值 更强大 - 值 1:ItemQuantity 源元素
- 值 2:20 作为自定义值乘 - 被乘数 1:ItemPrice 源元素
- 被乘数 2:.10 作为自定义值If - 条件:is-greater-than(ItemQuantity, 20)
- Value:multiply(ItemPrice, .10)以下映射显示了完成的示例:
“代码”窗格显示了已创建的映射:
保存映射
完成后,在映射工具栏上选择“保存”。
Visual Studio Code 将你的映射保存为以下工件:
- Artifacts>MapDefinitions 项目文件夹中的 <your-map-name>.lml 文件
- 一个 <your-map-name>.xslt 文件,在 Artifacts>Maps 项目文件夹中
测试映射
若要确认转换是否按预期工作,需要示例输入数据。
在测试映射之前,请保存映射以生成当前的 <your-map-name>.xslt 文件。
在映射工具栏上,选择“打开测试面板”。
在“测试映射”窗格中的“示例数据”框中,粘贴示例输入,然后选择“测试”。
“结果”框会显示测试结果。
从项目中的工作流调用映射
在 Visual Studio Code 的“活动”栏上,选择“资源管理器”(文件图标)查看逻辑应用项目结构。
展开具有你的工作流名称的文件夹。 从 workflow.json 文件的快捷菜单上,选择“打开设计器”。
在工作流设计器中,按照常规步骤添加名为“使用 Data Mapper XSLT 进行转换”的 Data Mapper Operations 内置操作。
在设计器中,选择“使用 Data Mapper XSLT 进行转换”操作。
在出现的“操作信息”窗格中,指定“内容”值,并将“映射源”设置为“逻辑应用”。
打开“映射名称”列表,然后选择你的映射(.xslt 文件)。
若要在 Azure 门户中使用相同的“使用 Data Mapper XSLT 进行转换”操作,必须将映射添加到标准型逻辑应用资源。
相关内容
- 有关在 Azure 逻辑应用中使用 B2B 操作的数据转换,请参阅使用 Azure 逻辑应用在工作流中添加转换映射