你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Visual Studio Code 创建映射以转换逻辑应用工作流中的数据

适用于: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 进行转换”的“数据映射器操作”操作对于由任何其他工具创建的映射,请使用名为转换 XMLXML Operations 操作

  • 若要将使用数据映射器创建的映射与 Azure 门户中的工作流配合使用,必须将其直接添加到标准逻辑应用资源

  • 此版本目前不支持自定义函数。

先决条件

  • 使用 Visual Studio Code 和 Azure 逻辑应用(标准)扩展来创建标准型逻辑应用工作流。

    注意

    以前独立的数据映射器扩展现已与 Azure 逻辑应用(标准)扩展合并。 为了避免冲突,安装或更新 Azure 逻辑应用(标准)扩展时,应删除任何现有版本的 Data Mapper 扩展。 安装或更新扩展后,请重启 Visual Studio Code。

  • 描述要转换的数据类型的源和目标架构文件。 这些文件可以具有以下格式之一:

    • 具有 .xsd 文件扩展名的 XML 架构定义文件
    • 具有 .json 文件扩展名的 JavaScript 对象表示法文件
  • 包含至少具有一个触发器的有状态或无状态工作流的标准型逻辑应用项目。 如果没有项目,请按照 Visual Studio Code 中的以下步骤操作:

    1. 连接到 Azure 帐户(如果尚未连接)。

    2. 创建本地文件夹、本地标准型逻辑应用项目以及有状态或无状态工作流。 在创建工作流期间,选择“在当前窗口中打开”。

  • 如果要测试映射并检查转换是否按预期工作,请对输入数据进行采样。

  • 若要使用 Run XSLT 函数,XSLT 代码片段必须存在于使用 .xml 或 .xslt 文件扩展名的文件中。 必须将 XSLT 代码片段放入以下本地项目文件夹结构的 InlineXslt 文件夹中:Artifacts > DataMapper > Extensions > InlineXslt。 如果此文件夹结构不存在,请创建缺少的文件夹。

创建数据映射

  1. 在 Visual Studio Code 中,打开标准逻辑应用项目所在的文件夹。

  2. 在 Visual Studio Code 左侧菜单上,选择 Azure 图标。

  3. 在“Azure”窗口中的“数据映射器”下,选择“创建数据映射”

    屏幕截图显示了 Visual Studio Code,其中包含“Azure”窗口并选择了“创建数据映射”按钮。

    Visual Studio Code 标题栏上会打开提示框,让你为映射提供一个名称。

  4. 在提示框中输入数据映射名称。

    在本指南中,这些步骤使用名称 Example-data-map

    屏幕截图显示了提示框和示例数据映射名称。

    数据映射器将创建并打开一个空白数据映射。

  5. 按照以下步骤选择源架构和目标架构:

    1. 在“源”窗格中,选择“新增”>“浏览”以查找并上传源架构

      屏幕截图显示了数据映射器和“源”窗格,其中选择了“新增”和“浏览”选项。

      添加源架构后,“源”窗格将填充源架构中数据类型的 XML 元素“节点”,例如

      屏幕截图显示了“源”窗格,其中填充了架构 XML 元素节点。

    2. 在“目标”窗格中,选择“新增”>“浏览”以查找并上传目标架构

      屏幕截图显示了数据映射器和“目标”窗格,其中选择了“新增”和“浏览”选项。

      添加目标架构后,“目标”窗格将填充目标架构中数据类型的 XML 元素“节点”,例如

      屏幕截图显示了“目标”窗格,其中填充了架构 XML 元素节点。

提示

如果在加载架构时遇到问题,可以将源架构文件和目标架构文件本地添加到逻辑应用项目的“工件”/“架构”文件夹中。 在这种情况下,若要在数据映射器中指定源和目标架构,请在“源”和“目标”窗格中打开“选择现有”列表(而不是使用“新增”),然后选择你的架构

架构数据类型

下表描述了可能出现在架构中的数据类型:

符号 类型 更多信息
表示数组数据类型的图标。 复杂(数组) 包含项或重复项节点。

数组元素还会显示以下连接点:

数组元素连接点的图标。
表示 Bool 数据类型的图标。 Bool 仅 True 或 false
表示复杂数据类型的图标。 Complex 具有子属性的 XML 对象,类似于对象 JSON 类型
表示日期/时间数据类型的图标。 DateTime
表示十进制数据类型的图标。 小数
表示 Integer 数据类型的图标。 Integer 仅整数
表示字符串数据类型的图标。 字符串

在元素之间创建直接映射

若要在源架构和目标架构中具有相同类型的元素之间指定直接转换,请执行以下步骤:

  1. 若要查看创建映射时代码中发生的情况,请在映射器的右上角选择“查看代码”

  2. 在映射器表面的“源”窗格中,找到要映射的源元素

    • 默认情况下,父元素会自动展开以显示其子元素。

    • 此示例从源元素开始映射,但你可以选择从目标元素开始映射。

  3. 将鼠标指针移到源元素名称旁边的圆圈上,直到指针变为加号 (+)。

    此示例创建从 Employee ID 源元素开始的映射

    屏幕截图显示了数据映射器指针位于源元素上方。

  4. 拖动绘制一条直线,使源元素与“目标”窗格中目标元素的圆圈相连

    此示例使用 ID 目标元素完成映射,该元素具有与源元素相同的数据类型

    屏幕截图显示了数据映射器、目标元素上的指针,以及源元素和目标元素之间的直线。

    现在,你已在具有相同数据类型的两个元素之间创建了直接映射。

    屏幕截图显示了源架构和目标架构中 EmployeeID 和 ID 之间的完整映射。

    “代码”窗格显示了创建的映射关系

    屏幕截图显示了“代码”窗格,其中分别直接映射了源架构和目标架构中的 EmployeeID 和 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 函数

  1. 若要查看创建映射时代码中发生的情况,请在映射器的右上角选择“查看代码”

  2. 在“函数”列表中,找到并选择要使用的函数,这样会将该函数添加到映射器图面。 如果“函数”列表处于折叠状态,请在映射器的左上角选择函数图标 (“函数”列表的图标。)

    此示例选择了 To Date 函数,该函数位于 Conversion 函数组中

    屏幕截图显示了名为 To Date 的选定函数。

    注意

    如果映射上不存在任何映射,或者在向映射添加函数时选择了映射,则函数会出现,但不会连接到任何元素或其他函数,例如:

    屏幕截图显示了名为 To Date 的已断开连接的函数。

  3. 将函数连接到源元素和目标元素。

    1. 在源元素和函数左边缘的圆圈之间拖动绘制一条直线。 可以从源元素或函数开始。

      屏幕截图显示了源元素和函数之间的映射。

    2. 在函数的右边缘和目标元素之间拖动并绘制一条线。 可以从目标元素或函数开始。

      屏幕截图显示了函数和目标元素之间的映射。

    “代码”窗格显示了创建的映射关系

    屏幕截图显示了“代码”视图,其中显示了源元素和目标元素之间的直接映射关系。

  4. 在映射器图面上,选择函数形状以查看函数详细信息。

  5. 在“输入”选项卡上,确认或编辑要使用的输入

    屏幕截图显示了名为 To Date 的函数的“输入”选项卡。

    某些方案需要定义超出直接源元素和目标元素对的转换。 例如,若要定义一对数组及其项之间的转换,需要在数组之间创建循环。 或者,若要在元素的值满足条件时执行任务,需要在元素之间添加条件

添加使用多个输入的函数

本部分中的示例将多个源元素作为输入进行连接,并将单个输出映射到目标元素。 该示例使用 Concat 函数,该函数可接受多个输入

  1. 若要查看创建映射时代码中发生的情况,请在映射器的右上角选择“查看代码”

  2. 在“函数”列表中,找到并选择要使用的函数,这样会将该函数添加到映射器图面

    如果“函数”列表处于折叠状态,请在映射器的左上角选择函数图标 (“函数”列表的图标。)

    此示例选择了 Concat 函数,该函数位于 String 函数组中

    屏幕截图显示了名为 Concat 的选定函数。

    注意

    如果映射上不存在任何映射,或者在向映射添加函数时选择了映射,则函数会出现,但不会连接到任何元素或其他函数,例如:

    屏幕截图显示了名为 Concat 的已断开连接的函数。

  3. 在映射器图面上,选择函数形状以查看函数详细信息。

  4. 在“输入”选项卡上,选择要用作输入的源架构元素

    此示例选择了 FirstName 和 LastName 源架构元素作为函数输入。 映射器会自动添加源元素和函数之间的相应映射。

    屏幕截图显示了用作函数输入的多个源元素。

  5. 若要完成映射,请在函数的右边缘和目标元素之间拖动绘制一条直线。 可以从目标元素或函数开始。

    屏幕截图显示了多个输入、Concat 函数和目标元素之间的已完成映射。

    “代码”窗格显示了创建的映射关系

    屏幕截图显示了包含 Concat 函数的“代码”窗格,该函数具有多个输入和一个输出。

迭代数组

如果源架构和目标架构包含数组,则可以创建一个循环来迭代数组的项。 本部分中的示例创建一个循环,该循环迭代 Employee 源数组和 Person 目标数组,以及数组项之间的映射

  1. 若要查看创建映射时代码中发生的情况,请在映射器的右上角选择“查看代码”

  2. 在映射器图面上的“源”和“目标”窗格中,找到要映射的数组

  3. 在数组项对之间拖动绘制一条直线。 可以从“源”窗格或“目标”窗格开始

    以下示例从“源”窗格开始,映射 Employee 源数组中的 Name 项和 Person 目标数组中的 Name 项

    屏幕截图显示了映射器图面并绘制了源 Employee 和目标 Person 数组中的 Name 项之间的映射。

    完成第一对数组项的映射后,映射器会自动在源数组父元素和目标数组父元素之间添加一个循环,其连接点类型如下:数组元素已完成连接点的图标。

    以下示例突出显示了源 Employee 和目标 Person 父数组之间自动添加的循环

    屏幕截图显示了源 Employee 和目标 Person 父数组之间的循环映射。

    “代码”窗格显示了已创建的映射和循环

    屏幕截图显示了“代码”窗格,其中包含源和目标父数组以及数组项之间的循环映射。

  4. 继续映射其他数组元素,例如:

    屏幕截图显示了源数组和目标数组中其他数组项之间的更多映射。

评估条件以执行任务

假设想要添加一个映射,该映射评估一个条件并在满足该条件时执行一项任务。 对于这种情况,可以使用多个函数。

在以下示例中,当购买数量超过 20 件时,映射将使用以下函数来计算要应用的折扣:

函数组 函数 本示例的目的
比较 更强大 检查购买数量是否大于 20。
比较 If 检查 Greater 函数是否返回 true
数学 如果条件为 true,则将商品价格乘以 10% 来计算折扣。
  1. 在“源”和“目标”窗格中,找到要在方案中映射的元素

    此示例使用以下元素:

    • “源”窗格:ItemPrice 和 ItemQuantity

    • “目标”窗格:ItemPrice、ItemQuantity 和 ItemDiscount

      屏幕截图显示了示例条件方案的映射器图面和数据元素。

  2. 在“函数”列表中,找到并选择要使用的函数,这样会将该函数添加到映射器图面

    • 如果“函数”列表处于折叠状态,请在映射器的左上角选择函数图标 (“函数”窗格的图标。)

    • 如有必要,可移动映射器图面上的函数形状,以方便选择。

    此示例向映射器图面添加了以下函数:Greater、If 和 Multiply

    屏幕截图显示了示例条件方案的映射器图面、数据元素和函数。

  3. 若要在创建映射时查看代码中发生的情况,请在映射器的右上角选择“查看代码”

  4. 根据方案的需要,按照特定顺序连接源元素、函数和目标元素。

    此示例按指定顺序连接以下项,以正确创建映射:

    开始 结束
    ItemPrice 源元素 ItemPrice 目标元素
    ItemQuantity 源元素 位于形状左边缘处的 Greater 函数输入。 此输入为函数详细信息中的“值 1”字段提供数据
    位于形状右边缘处的 Greater 函数输出 位于形状左边缘处的 If 函数输入。 此输入为函数详细信息中的“条件”字段提供数据
    ItemPrice 源元素 位于形状左边缘处的 Multiply 函数输入。 此输入为函数详细信息中的“被乘数”字段提供数据
    位于形状右边缘处的 Multiply 函数输出 位于形状左边缘处的 If 函数输入。 此输入为函数详细信息中的“值”字段提供数据
    位于形状右边缘处的 If 函数输出 ItemDiscount 目标元素

    以下示例显示此时间点的映射:

    屏幕截图显示了示例条件方案的映射器图面、数据元素和函数及映射。

  5. 在以下函数详细信息中的“输入”选项卡中,确认或提供以下值

    函数 输入字段和值
    更强大 - 值 1:ItemQuantity 源元素
    - 值 2:20 作为自定义值
    - 被乘数 1:ItemPrice 源元素
    - 被乘数 2:.10 作为自定义值
    If - 条件:is-greater-than(ItemQuantity, 20)
    - Valuemultiply(ItemPrice, .10)

    以下映射显示了完成的示例:

    屏幕截图显示了已完成的条件示例。

    “代码”窗格显示了已创建的映射

    屏幕截图显示了使用 Greater、Multiply 和 If 函数在源元素和目标元素之间进行条件映射的“代码”窗格。

保存映射

完成后,在映射工具栏上选择“保存”。

Visual Studio Code 将你的映射保存为以下工件:

  • Artifacts>MapDefinitions 项目文件夹中的 <your-map-name>.lml 文件
  • 一个 <your-map-name>.xslt 文件,在 Artifacts>Maps 项目文件夹中

测试映射

若要确认转换是否按预期工作,需要示例输入数据。

  1. 在测试映射之前,请保存映射以生成当前的 <your-map-name>.xslt 文件

  2. 在映射工具栏上,选择“打开测试面板”

  3. 在“测试映射”窗格中的“示例数据”框中,粘贴示例输入,然后选择“测试”

    “结果”框会显示测试结果

从项目中的工作流调用映射

  1. 在 Visual Studio Code 的“活动”栏上,选择“资源管理器”(文件图标)查看逻辑应用项目结构

  2. 展开具有你的工作流名称的文件夹。 从 workflow.json 文件的快捷菜单上,选择“打开设计器”。

  3. 在工作流设计器中,按照常规步骤添加名为“使用 Data Mapper XSLT 进行转换”的 Data Mapper Operations 内置操作

  4. 在设计器中,选择“使用 Data Mapper XSLT 进行转换”操作

  5. 在出现的“操作信息”窗格中,指定“内容”值,并将“映射源”设置为“逻辑应用”

  6. 打开“映射名称”列表,然后选择你的映射(.xslt 文件)

    屏幕截图显示了 Visual Studio Code、标准工作流设计器,其中选择了名为“使用数据映射器 XSLT 转换”的操作和操作属性。

    若要在 Azure 门户中使用相同的“使用 Data Mapper XSLT 进行转换”操作,必须将映射添加到标准型逻辑应用资源