文章 Nicky Zhu · 九月 22, 2021 16m read

IRIS 2021 技术文档 First Look 7 -- 技术概要: 数据转换

本文档将帮助您使用 InterSystems IRIS®数据平台集成产品转换数据。

要浏览所有的技术概要(First Look),包括可以在InterSystems IRIS 免费的评估实例上执行的那些,请参见InterSystems First Looks(《InterSystems 技术概要》)

数据转换和互操作性

数据转换是 InterSystems IRIS 互操作性的核心。您可以改变从一个系统传入的数据的格式和内容,以满足下游系统的要求,从而允许系统之间进行通信。简单地说,从一个系统发送的信息可以转换为另一个应用程序可以理解的信息。使用 InterSystems IRIS,可以很容易地进行数据转换的创建、测试和维护。

假设您有两个包含产品价格的零售系统。当系统 A 向其他系统发送数据时,包含了不加税的产品基准价格。但是,系统 B 需要在价格中包含地区税。InterSystems IRIS 互操作性产品中的数据转换可以在将数据发送到系统 B 之前将从系统 A 收到的价格转换为加税价格。一旦定义,数据转换将自动处理修改。

常见的转换包括:

  • 将值(value)从源信息复制到目标信息。
  • 根据源信息的(value)执行计算,并将结果复制到目标信息。
  • 为目标信息分配新的值(literal value)。
  • 重新排列数据的顺序。

探索 DTL 编辑器

您可以编写 DTL(数据转换语言)代码来创建数据转换,也可以使用 DTL 编辑器(DTL Editor)来创建。DTL 编辑器(DTL Editor)允许非技术用户无需编写代码就可以创建数据转换。例如,它的图形用户界面允许您通过拖放操作快速地将值从源信息映射到目标信息。下面的 DTL 编辑器(DTL Editor)之旅将通过在产品中创建数据转换来指导您了解其主要功能。有关 InterSystems IRIS 产品的介绍,请参见First LookConnecting Systems Using Interoperability Productions《技术概要:使用互操作性产品连接系统》)。

在这个演示中,必须转换班级里学生的期末成绩数据,以便不同的应用程序可以使用这些数据。

想试试 InterSystems IRIS 互操作性功能的在线视频演示吗?请查看Interoperability QuickStart(互操作性快速入门)!

  1. 用前须知

在开始使用 DTL 编辑器(DTL Editor)之前,您需要完成以下工作:

  1.  
    1. 选择 InterSystems IRIS 实例

要使用该程序,您需要一个正在运行的 InterSystems IRIS 实例。您的选择包括多种类型的已授权的和免费的评估实例;该实例不需要由您正在工作的系统托管(尽管它们必须相互具有网络访问权限)。有关如何部署每种类型的实例的信息(如果您还没有可使用的实例)请参见InterSystems IRIS Basics: Connecting an IDEInterSystems IRIS 基础:连接一个 IDE)中的Deploying InterSystems IRIS(部署 InterSystems IRIS

    1. GitHub 下载

https://github.com/intersystems/FirstLook-Data-Transformations中下载本演示所使用的产品和数据文件。XML 文件是即将部署在系统上的 InterSystems IRIS 产品的载体,您可以通过XML文件导入或导出Production代码。

实例必须可以访问技术概要-数据转换(FirstLook-DataTransformations源。下载文件的程序取决于您所使用的实例类型,如下所示:

  • 如果您使用的是 ICM 部署的实例:
  1. 使用带有-machine -interactive 选项的icm ssh 命令,在托管实例的节点上打开默认 shell,例如:
icm ssh -machine MYIRIS-AM-TEST-0004 -interactive

Linux 命令行上,使用以下命令之一将 repo 克隆到实例的数据存储卷(data storage volume。例如,对于部署在 Azure 上的配置,数据卷的默认挂载点(default mount point/dev/sdd因此您可以使用如下命令:

/dev/sdd/FirstLook-DataTransformations OR
| tar xvz -C /dev/sdd

这些文件现在对容器文件系统上/irissys/data/FirstLook-DataTransformations 中的 InterSystems IRIS 可用。

  • 如果您正在使用通过其他方式部署的容器化实例(授权版或社区版[Community Edition]):

在主机上打开 Linux 命令行。(如果您在云节点上使用社区版[Community Edition]),请使用 SSH 连接该节点,如在Deploy and Explore InterSystems IRIS[部署和探索 InterSystems IRIS]中所述。)

Linux 命令行上,使用git clone wget 命令,如上所述,将 repo 克隆到容器中挂载为卷的存储位置。

- 对于社区版(Community Edition)实例,您可以克隆到实例的持久化 %SYS 目录(存储特定于实例的配置数据的目录)。在 Linux 文件系统中,这个目录是/opt/ISC/dur。这使得文件对容器文件系统上/ISC/dur/FirstLook-DataTransformations 中的 InterSystems IRIS 可用。

- 对于已授权的容器化实例,选择容器中作为卷挂载的任何存储位置(如果使用它,包括持久化 %SYS 目录)。例如,如果您的docker run 命令包含选项-v /home/user1:/external并且您将 repo 克隆到/home/user1,则文件对容器文件系统上/external/FirstLook-DataTransformations 中的 InterSystems IRIS 可用。

  • 如果您使用的是 InterSystems 学习实验室(Learning Labs)实例:
  1. 在集成 IDE 中打开命令行终端。
  2. 将目录更改为/home/project/shared 并使用git clone 命令克隆 repo

该文件夹被添加到左边资源管理器(Explorer)面板的Shared (共享)下,并且该目录对/home/project/shared中的 InterSystems IRIS 可用。

  • 如果您使用的是已安装的实例:

如果实例的主机是安装了 GitHub 桌面(GitHub Desktop)和 GitHub 大文件存储(GitHub Large File Storage)的 Windows 系统:

    1. 在主机的 web 浏览器中进入https://github.com/intersystems/FirstLook-DataTransformations
    2. 选择Clone or download(克隆或下载)然后选择Open in Desktop(在桌面上打开)

这些文件对您的GitHub 目录中的 InterSystems IRIS 可用,例如在

C:\Users\User1\Documents\GitHub\FirstLook-DataTransformations中。

如果主机是 Linux 系统, 只需在 Linux 命令行上使用git clone 命令或wget 命令将 repo 克隆到您所选择的位置。

      1. 创建一个支持互操作性的命名空间

在导入从 GitHub 下载的产品之前,您必须创建一个支持互操作性的命名空间。如果您已经在实例上创建了一个支持互操作性的命名空间,您可以将它用于此产品。要创建一个新的支持互操作性的命名空间,请使用以下过程。(您首次安装 InterSystems IRIS 时创建的命名空间不支持互操作性)

  1. 使用InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)URL described for your instance(实例适用的URL,在浏览器中打开您的实例的管理门户(Management Portal)。
  2. 选择System Administration(系统管理)> Configuration(配置)> System Configuration(系统配置)> Namespaces(命名空间),进入Namespaces(命名空间)页面。
  3. Namespaces (命名空间)页面,选择Create New Namespace(创建新的命名空间)。这将显示New Namespace(新命名空间)页面;按照System Administration Guide(《系统管理指南》)中“Configuring InterSystems IRIS(配置 InterSystems IRIS)”章节中Create/Modify a Namespace创建/修改命名空间)”该页的说明 , 确保选中了Enable namespace for interoperability productions(为命名空间启用互操作性Production复选框。

选择靠近页面顶部的Save(保存),然后在生成的日志末尾选择Close(关闭)

    1. 导入演示产品

要导入包含数据转换的演示Production,请使用此程序:   

  1. 在管理门户(Management Portal)中,选择Interoperability(互操作性) > Manage(管理) > Deployment Changes(部署变更) > Deploy(部署),进入Deploy Production Changes(部署Production变更)页面。如果出现提示,请选择在完成此步骤之前创建的命名空间。
  2. 点击Open Deployment(打开部署)
  3. 进入您从 GitHub 下载文件的目录,选择DTLStudentDemo.xml,然后点击OK(确定)
  4. 点击Deploy(部署)
  5. 点击OK(確定)
  1. 创建数据转换

InterSystems IRIS 提供了一个数据转换向导(Data Transformation Wizard),以加速和简化创建新数据转换的过程。在本演示中,您将创建一个数据转换,该数据转换连接与班级学生成绩相关的两个记录映射。要创建数据转换:

  1. 从管理门户(Management Portal)主页,选择Interoperability(互操作性) > List(列表) > Data Transformations(数据转换)
  2. 点击New(新建)数据转换向导(Data Transformation Wizard)打开。
  3. Package(包)下拉列表中选择Demo(演示)
  4. Name(名称)字段中,输入一个独特的名称,如DTLDemoTransform
  5. 点击Source Class(源类)字段旁边的放大镜。
  6. 点击Message Classes(信息类) > Demo(演示) > Complex Map(复杂映射) > StudentWCD > Record(记录)
  7. 点击Target Class(目标类)字段旁边的放大镜。
  8. 点击Message Classes(信息类) > Demo(演示) > Complex Map(复杂映射) > StudentPFFixed > Record(记录)
  9. 点击OK(确定)新的数据转换会在 DTL 编辑器(DTL Editor)中打开。
 
 
  1.  
  2. 转换数据

现在您已经创建了数据转换,使用 DTL编辑器(DTL Editor):

  • 将数据从源(source)复制到目标(target),根据需要重新排列数据的顺序。
  • 在课程编号的开头添加学院专用代码。
  • 将最终成绩四舍五入为整数。
  • 使用期末成绩来确定学生是通过还是不通过,并在目标文件中指出这个结果。
  • 忽略目标中不需要的源数据。
    1. 复制数据

DTL 编辑器(DTL Editor)最强大、最省时的功能之一是能够将值从源(source)拖放到目标(target)的相应属性。您只需点击并按住源属性上的圆圈,并将其拖动到目标信息的属性。

要将值从源(source)复制到目标(target):

  1. 点击并按住源(source)的 ClassID 属性的圆圈(在编辑器[Editor]的左侧)。
 
 

 

  1. 将光标拖动到目标(target)的 ClassID 属性,直到它被高亮显示,然后释放鼠标按钮。
 
 

 

源(source)的 ClassID 的值将被复制到目标(target)的 ClassID 属性。

  1. 按照此程序,将下列源属性连接到相应的目标属性:
    • 学生 IDStudentID
    • 成绩(Grade
    • 姓氏(LastName
    • 名字(FirstName
    • 中间名(MiddleName

编辑器(Editor)现在应该是这样的:

 
 
 

请注意,仅仅通过连接属性对(property pairs),您便已经更改了存储数据的顺序。

    1. 修改属性(Property)的值

在某些情况下,您希望在将源属性(source property)复制到相应的目标属性(target property)之前更改其值。在这个演示中,目标系统接受一个 ClassID,这个 ClassID 以两个字符的标识符开头,表示源(Source)的学院。源的信息不包括这个标识符,因此数据转换必须在将 ClassID 的值复制到目标信息之前修改它。

  1. 点击,连接源的 ClassID 属性和目标的 ClassID 属性的线上的圆圈。
 
 


 

请注意,编辑器(Editor)右侧的Action(操作)标签现在显示了连接两个 ClassID 属性时创建的 Assign 操作的信息。Property(属性)字段被设置为target.ClassIDValue(值)字段被设置为source.ClassID

  1. Action(操作)标签的Value(值)字段变更为:"UC."_source.ClassIDUC是学院的标识符,它使用下划线添加到 ClassID 的开头,下划线是 InterSystems ObjectScript 编程语言中的连接操作符。这超出了本演示的范围,但它让您了解如何在转换中包含 ObjectScript 代码。
    1. 使用函数

在设置属性值时,您可以使用内置函数。在本演示中,使用Round()函数将最终成绩四舍五入为整数。

  1. 选择源的成绩(Grade)属性和目标的成绩(Grade)属性之间的连接器。
  2. 点击Action(操作)标签的Value(值)字段旁边的放大镜。
  3. Function (函数) 下拉列表中选择Round ( )
  4. 点击OK(确定定)

Action(操作)标签的Value(值)字段设置为:..Round(source.Grade)

    1. 使用操作表

请注意,当您将源属性(source property)映射到目标属性(target property)时,DTL 编辑器(DTL Editor)将Set设置)操作添加到图表下方的表格中。

 
 

 

虽然 DTL 编辑器(DTL Editor的图形化部分使可视化和快速执行操作变得容易,但有时使用图表下方的表格来进一步定义转换会更好。例如,在本演示中,

在源属性和目标属性之间单击图形连接是选择Set设置)操作的最快方法。然而,在更复杂的转换中,可能很难选择连接器。在这种情况下,从图表下方的表格中选择Set设置)操作会更容易些。

    1. 定义有条件的操作集

在转换数据时,只有在某些条件为真时,才能使用条件语句执行操作。在本演示中,您定义了一个转换,如果期末成绩大于或等于 65 分,则表示学生通过了该课程。要添加If 语句来完成此操作:

  1. 确保最后一项是高亮显示的表格。If 语句位于高亮显示的操作之后。
  2. Add Action(添加操作)下拉列表中选择If
 
 


 

请注意,图表下方的表格中添加了一个If 块。

  1. 在表格中选择If 语句后,Action(操作)标签上定义Condition(条件)字段为: target.Grade>=65。只有当目标的成绩(Grade属性值大于或等于 65 时,才会执行放在If 块内的操作。
  2. Add Action(添加操作)下拉列表中选择Set(设置)
  3. Action(操作)标签上,定义Property(属性)字段为:target.Pass
  4. 定义Value(值)字段为1。这是一个布尔值(boolean value),表示该学生通过了这门课程。
  5. 选择表格中的else(其他)操作。
  6. Add Action(添加操作)下拉列表中选择Set(设置)
  7. Action(操作)标签上,定义Property(属性)字段为:target.Pass
  8. Action(操作)标签上,定义Value(值)字段为0。这是一个布尔值(boolean value),表示该学生没有通过这门课程。

if 块现在应该是这样的:

    1. 忽略来自源信息(Source Message)的数据

在演示中,请注意 EmailPhone Phone1 属性没有连接到目标信息。不需要进一步的操作来防止源信息中的这些数据被复制到目标信息。

  1. 编译数据转换

您可以选择随时保存工作,但必须始终记住编译数据转换。在您点击Compile(编译)之前,产品无法识别更改。

  1. 进行初步测试

DTL 编辑器(DTL Editor)使您能够快速测试数据转换,而不必在整个生产过程中运行信息。您只需输入测试信息,DTL 编辑器(DTL Editor)就会显示输出信息的样子。在本演示的这一点上,您将记录映射数据的 XML 表示(XML representation)粘贴到测试转换(Test Transform)工具中。

稍后,您将通过在产品中运行文本文件来测试这个转换。

记住在测试数据转换之前要编译它。

  1. 点击编辑器右侧的Tools(工具)标签。
  2. 点击Test(测试)
  3. 将以下数据复制并粘贴到Input Message(输入信息)文本框中:
<test>
<Record>
<ClassID>CS241</ClassID>
<StudentID>930698</StudentID>
<Grade>77.8</Grade>
<LastName>Sutherland</LastName>
<FirstName>David</FirstName>
<MiddleName>Timothy</MiddleName>
<Phone>978-343-3940</Phone>
<Phone1>978-343-0951</Phone1>
</Record>
</test>
  1. 点击Test(测试)

Output Message(输出信息)文本框现在应该是这样的:

<Record>
<StudentID>930698</StudentID>
<ClassID>UC.CS241</ClassID>
<Grade>78</Grade>
<Pass>true</Pass>
<FirstName>David</FirstName>
<MiddleName>Timothy</MiddleName>
<LastName>Sutherland</LastName>
</Record>

提示:在处理 HL7 或其他 EDI 信息时,您可以从示例信息中复制和粘贴原始文本来测试转换。您不需要信息的 XML 表示(XML representation)。

  1. 向产品添加转换

现在您已经创建并编译了数据转换,必须将其添加到产品中,以便将流经产品的源信息转换为发送到下游应用程序的信息。在本演示中,您将向与业务流程 DTLDemoRouter 关联的业务规则添加转换。

  1. 从管理门户(Management Portal)主页,进入Interoperability(互操作性) > List(列表) > Productions(产品)
  2. 选择Demo.ComplexMap.SemesterProduction并点击Open(打开)
  3. 选择Processes(进程)下的DTLDemoRouter
  4. Settings(设置)标签上,点击Business Rule Name(业务规则名称)字段旁边的放大镜。
  5. 双击位于业务规则send(发送)操作中的transform(转换)形状。
 
 


 

  1. Data Transform Selector(数据转换选择器)对话框中,选择您为这个演示创建的数据转换。
  2. 点击OK(確定)
  3. 在业务规则编辑器(Business Rule Editor)中,点击Save(保存)

有关业务规则的更多信息,请参见Developing Business Rules(《开发业务规则》)。

  1. 测试数据转换

现在您已经将数据转换添加到产品中,运行产品以查看您的演示如何运行。在这一步骤中:

  • 创建产品接收和发送示例文件的目录。
  • 启动产品。
  • 将示例输入文件复制到正确的目录中。
  • 比较目标文件和源文件的内容。
    1. 创建所需的目录

演示产品被定义为在实例的主机c:\practice\in 中查找包含源数据的文件,并将目标文件编写到c:\practice\out中。如果您不能在主机的c:\ drive 上创建目录,或者它不是 Windows 系统,您必须识别或创建替代目录,然后在继续之前修改产品的业务服务和业务操作。业务服务的File Path(文件路径)设置定义了产品查找输入文件的位置,而业务操作的File Path(文件路径)设置定义了发送目标文件的位置。

创建目录的方式这取决于使用的实例类型,如下所示:

  • 对于由 ICM 部署的实例,可以使用带有-machine -interactive 选项的icm exec 命令,在运行实例的容器中打开 bash shell,例如:

icm exec -command bash -machine MYIRIS-AM-TEST-0004 -interactive

然后您可以在容器文件系统上创建目录。

  • 对于任何容器化的实例, 无论是授权版还是社区版(Community Edition, 使用命令docker exec -it container_name bash 在容器中打开 bash shell  (社区版[Community Edition]容器的名称是try-iris)。然后在容器文件系统上创建目录。
  • 对于 InterSystems 学习实验室(Learning Labs),使用集成 IDE 中的命令行终端,在共享(Shared)文件夹中创建新文件夹;您可以在/home/project/shared下的管理门户(Management Portal)中浏览到这些。
  • 对于已安装的实例,在本地文件系统上创建目录。

本练习的其余部分假设目录路径为c:\practice\in c:\practice\out;如果不同,请替换为正确的路径。

    1. 启动产品

要启动包含演示数据转换的产品:

  1. 从管理门户(Management Portal)主页,进入Interoperability(互操作性) > List(列表) > Productions(产品)
  2. 选择Demo.ComplexMap.SemesterProduction并点击Open(打开)
  3. 点击Start(开始)
    1. 复制 .CSV 文件到目录

产品被定义为接受一个 .CSV 文件,其中包含来自c:\practice\in的学生信息。将input.csv 文件从包含 GitHub 文件的目录复制到输入目录,或者c:\practice\in ,或者您创建并指定的其他目录。

只要产品在运行,该文件就应该在几秒钟内从目录中消失,这表明产品已经开始成功地处理该文件。

    1. 验证输出数据

演示产品使用复制到产品的输入目录中的 .Csv 文件,并使用数据转换将数据转换为具有新内容的不同格式。这个传出文件被复制到产品的输出目录中,要么是c:\practice\out ,要么是您创建并指定的另一个目录,文件名为时间戳。

打开input.csv 和输出文件并比较两者。

其他重要功能

本演示提供了开发和测试数据转换的基础知识。其他重要的、常用的功能包括:

  • for each 语句遍历一个集合,对集合的每个成员执行相同的操作序列。这个集合可以是一个数组,在 HL7 或其他 EDI 信息的情况下,也可以是一个重复段。更多信息,请参见 Adding a For Each Action(添加 For Each 操作)。
  • 子转换,它允许您模块化数据转换。数据转换可以使用子转换操作在操作流的任何点上运行另一个转换。您可以创建可重用转换的库,

这些库可以从其他转换调用,从而避免重复转换逻辑。例如,您可以针对HL7 V2消息中的段创建段转换,只要这些段出现在 EDI 信息中就可以重复使用。

  • 支持 X12 EDIFACT 标准。当使用数据转换向导创建新的转换时,您可以指定信息类型是 X12 还是 EDIFACT。这允许您选择使用正确的模式填充 DTL 编辑器(DTL Editor)的文档类型。这些模式段的可视化表示在 DTL 编辑器(DTL Editor)中展开和折叠。

了解有关数据转换的更多信息

有关数据转换的更多细节,请参见: