#InterSystems IRIS for Health

0 关注者 · 909 帖子

InterSystems IRIS for Health™ 是全球第一个也是唯一一个专门为医疗应用程序的快速开发而设计的数据平台,用于管理全世界最重要的数据。它包括强大的开箱即用的功能:事务处理和分析、可扩展的医疗保健数据模型、基于 FHIR 的解决方案开发、对医疗保健互操作性标准的支持等等。所有这些将使开发者能够快速实现价值并构建具有突破性的应用程序。了解更多信息

文章 姚 鑫 · 八月 18, 2023 2m read

第二章 IRIS 编程简介 - 同时使用类和例程

同时使用类和例程

IRIS 中,可以使用例程中的类。例如,下面显示了例程的一部分,其中我们引用了 Sample.Employee 类:

 //get details of random employee and print them
showemployee() public {
    set rand=$RANDOM(10)+1        ; rand is an integer in the range 1-10
    write "Your random number: "_rand
    set employee=##class(Sample.Employee).%OpenId(rand)  
    do employee.PrintEmployee()
    write !,"This employee's salary: "_employee.Salary
      
    }

类似地,方法可以调用例程中的标签。例如,以下代码调用例程employeeutils中的标签ComputeRaise

Method RaiseSalary() As %Numeric
{
    set newsalary=$$ComputeRaise^employeeutils(.
0
0 103
文章 姚 鑫 · 八月 17, 2023 2m read

第一章 IRIS 编程简介

简介

IRIS 是一个高性能多模型数据平台,具有内置的通用编程语言 ObjectScript,以及对 Python 的内置支持。

IRIS 支持多进程并提供并发控制。每个进程都可以直接、高效地访问数据。

IRIS 中,可以根据喜好编写类、例程或它们的组合。在所有情况下,存储的数据最终都包含在称为全局变量的结构中。 IRIS 编程具有以下特点:

  • 类和例程可以互换使用。
  • 类和例程可以互相调用。
  • 类提供面向对象的功能。
  • 数据库存储已集成到 ObjectScriptPython 中。
  • 类可以以简化编程的方式保存数据。如果使用持久类,数据可以同时作为对象、SQL 表和全局变量使用。
  • 可以直接从类或例程访问全局变量,这意味着可以灵活地按照想要的方式存储和访问数据。

可以选择适合需求的方法。

Classes

IRIS 支持类。可以使用系统类,也可以定义自己的类。

IRIS 中,类可以包含熟悉的类元素,例如属性、方法和参数(在其他类语言中称为常量)。它还可以包含通常不在类中定义的项目,包括触发器、查询和索引。

IRIS 类定义使用类定义语言 (CDL) 来指定类及其成员,例如属性、方法和参数。可以使用 PythonObjectScript 在方法内部编写可执行代码。对于每个方法,使用 Language 关键字指定将使用哪种语言编写该方法,如下例所示。

0
0 381
文章 姚 鑫 · 八月 16, 2023 4m read

第二十四章 参考 - HL7业务服务的设置- 忽略入站 ACK

忽略入站 ACK

如果为 True,业务服务将忽略任何入站 ACK 消息,以避免创建 ACK 反馈循环。

Local Facility Application

以冒号分隔的 LocalFacility:LocalApplication 代码,表示通过此业务服务接收 HL7 消息的设施和应用程序。如果此业务服务创建自己的 ACK,则本地设施应用程序会为 ACK 消息提供 SendingFacility:SendingApplication 代码;否则,该设置将被忽略。

Message Schema Category

应用于传入消息类型以生成完整的 DocType 规范的类别。与文档类型名称 (MSH:9) 结合生成 MessageType 规范,然后使用该规范在给定 HL7 模式类别的 MessageTypes 部分中查找 MessageStructure / DocType

此设置还可以包含多个以逗号分隔的类型名称,后跟 =,然后是 DocTypeCategory 或完整的 DocType 值,以应用于包含该类型名称的 HL7 消息。给定部分类型名称末尾的尾随星号 (*) 与以该条目开头的任何类型匹配。

HL7 消息对象的 DocType 属性

例如:MessageSchemaCategory='2.3.1, ADT_*=2.

0
0 156
文章 姚 鑫 · 八月 15, 2023 3m read

第二十三章 参考 - HL7业务服务的设置- DocTypeResolution

DocTypeResolution

指定如何根据 MSH:9 中的消息类型解析 DocType。选择以下选项之一:

  • Standard标准 — 将有效消息架构类别值与在相应架构类别中查找 MSH:9 消息类型值的消息结构名称相结合。这是默认设置。
  • Ignore 9.3 — 与“标准”类似,但如果 MSH:9 有三个或更多部分,则忽略其他部分。标准行为是使用第 3 部分作为类型名称的一部分(如果它没有子部分),因为某些模式包含三部分类型名称。
  • Use 9.3 — 与“标准”类似,但如果 MSH:9 具有三个或更多部分,则使用附加部分作为适用模式类别中文档结构的文字名称。请谨慎使用,因为消息到达时可能带有 MSH:9.3 值,而所选架构类别中不存在其结构。
  • Literal 文字 — 将有效消息架构类别值与解释为消息结构名称的文字 MSH:9 消息类型值相结合。仅与每个消息类型都有相应的结构定义的自定义架构一起使用。

Override Segment Terminator

(仅限 FTP)用作段终止符的以逗号分隔的 ASCII 控制字符列表。这些值可以是十进制格式或十六进制格式,前面带有 x。例如,要将换行符指定为段终止符,请输入 10x0A。默认值为回车符,十进制值为 13,十六进制值为 x0D

0
0 174
文章 Michael Lei · 八月 10, 2023 2m read

InterSystems 常见问题解答

※如果您想比较使用Mirror、Shadow或其他机制复制的数据库,请使用此方法。

您可以使用 DATACHECK 实用程序来比较Global。请参阅下面的文档。
DataCheck 概述 [IRIS]

***

Routines比较使用系统例程 %RCMP 或管理门户。

以下是如何在管理门户中使用它。

0
0 243
文章 姚 鑫 · 八月 10, 2023 3m read

第十八章 定义 HL7 搜索表

HL7 搜索表类 EnsLib.HL7.SearchTable,自动索引填充的 HL7 属性。

如果需要搜索更多的项,可以创建一个子类。子类继承Identifier属性,以及使搜索表工作的基础结构。具体操作请参见在产品中使用虚拟文档中的“定义搜索表类”。

对于HL7, 支持PropType的附加值。除了在产品中使用虚拟文档中列出的类型之外,还可以使用DateTime:HL7

创建搜索表时,不要使用保留的包名;参见开发产品中的“保留包名”。

默认索引的属性

当选择EnsLib.HL7。searchtable作为搜索表类,使能够在HL7消息中搜索以下虚拟属性。

  • MSHTypeName

消息结构名称。为了创建这个字符串,将HL7消息中的以下值连接起来: - MSH消息头段

字段`9`(消息类型)

子字段`1`(消息类型`:ADT`, `ORM`等)

- 文字字符_
- `MSH`消息头段

字段`9`(消息类型)

子字段`2`(触发事件:`A01、A12、O01_2`等)

结果是一个格式为ADT_A01, ADT_A12, ORM_O01_2等的消息结构名称。

  • MSHControlID

此消息的唯一标识号。production程序从:

- `MSH`消息头段
- 字段10(消息控制ID)

将此值解释为区分大小写的字符串。

  • PatientID

此消息的患者标识符。

0
0 126
文章 姚 鑫 · 八月 8, 2023 3m read

第十六章 定义 HL7 的 DTL 数据转换 - 转换长段字段

转换长段字段

DTL 转换使用的 ObjectScript 方法 GetValueAtHL7 段字段截断为 3.6MB。因此,当转换长度超过 3.6MB 的字段时,无法在 DTL 编辑器中使用从左到右的拖动操作。例如,如果 OBX:5 字段超过 3.6MB,则无法使用 DTL 编辑器将源字段拖动到目标,因为它将被截断。同样,如果要转换的字段长度超过 3.6MB,则自定义代码不应调用 GetValueAt

要转换长度超过 3.6MB 的字段,需要使用代码操作将自定义代码添加到转换中。此自定义代码必须在的 EnsLib.HL7.Segment 中包含以下方法之一,以将字段的值从源读取到流中:GetFieldStreamRaw()GetFieldStreamUnescaped()GetFieldStreamBase64()

这些 Get 方法采用 3 个参数:流输出参数、字段的 VDoc 路径和 pRemainder 输出参数。 ``pRemainder` 参数将填充被提取的字段之后的所有字段。例如:

/// Segment:  OBX|1|2|3|4|5|6|7
do GetFieldStreamRaw(.stream, "OBX:5", .
0
0 144
文章 Weiwei Gu · 八月 7, 2023 1m read

InterSystems 常见问题解答标题

您可以为以下 Web Gateway 错误消息/系统响应设置单独的错误页面:

  • 服务器错误
  • 服务器繁忙
  • 服务器无法使用
  • 服务器超时
  • 连接关闭

在 Web Gateway 管理界面上进行设置([Management Portal] > [System Administration] > [Configuration] > [Web Gateway Management] > [Configuration] > [Default Parameters])。

在“默认参数”(Default Parameters )菜单的“错误页面”部分中,设置要显示的 html 页面的文件名或发生错误时要重定向到的 URL。

0
0 192
文章 姚 鑫 · 八月 6, 2023 3m read

第十四章 配置Production - 定义 HL7 的路由规则集

HL7 接口创建路由规则集时,目标是根据源消息中找到的段告诉production如何处理源消息。有时找到哪些片段很重要;有时,在这些细分中找到哪些值很重要。

在普通规则集中,每个规则都会向调用该规则集的业务流程返回一个值。在路由规则集中,规则通常将 HL7 消息定向到目的地,并可能在发送之前转换 HL7 消息。

创建规则集时,不要使用保留的包名称

  1. 当使用业务规则向导创建新的 HL7 路由流程时, 会创建一个新的空路由规则集来伴随新的路由流程。其信息表包含以下值:
  • Package Name 包名称 - 包含production类的包。例如,如果使用向导将路由进程添加到名为 TestRule.MyTest 的产品中,则关联的路由规则的包名称为:TestRule
  • Rule Name规则名称 - 在向导中选择的简单路由规则名称,例如:MyRule

包名称和规则名称的组合在命名空间内唯一标识规则。任何规则定义的全名是由点 (.) 连接的包名称和规则名称,如下所示:TestRule.MyRule

配置 HL7 路由流程时,该全名(而不是规则名称)是 BusinessRuleName 字段中使用的正确值。业务流程向导会自动进行设置。

0
0 142
文章 姚 鑫 · 八月 4, 2023 3m read

第十二章 配置Production - 添加HL7序列管理器

添加HL7序列管理器

HL7消息可能由于各种原因而乱序,特别是在多个处理器处理它们时。在某些情况下,需要确保按照正确的顺序处理HL7消息。在这种情况下,可以将HL7序列管理器添加到production的适当部分。

HL7序列管理器是一个业务流程,它接受传入的HL7消息(可能来自多个源),然后按照消息中的MSH:13 SequenceNumbers字段指定的顺序将消息转发到目标配置项。

序列管理器可以检测重复的消息和消息之间的时间间隔。它还确定顺序消息之间的时间间隔何时大到足以表明问题。它的灵敏度级别可以使用它的配置设置来调整。

要构建用于HL7消息路由生产的HL7序列管理器,必须创建并配置它,然后将其集成到生产中。本主题将解释每个步骤。

重要:HL7序列管理器是HL7兼容的存储转发应用程序,不支持HL7标准第2章2.10.1节中定义的HL7序列号协议。

创建HL7序列管理器

HL7序列管理器添加到production中:

  1. Management Portal“production Configuration”页面(在“Home”页面选择“Interoperability > Configure > production”)中显示production结果。
  2. Processes列中,单击Add按钮(加号)。
0
0 126
InterSystems 官方 Claire Zheng · 八月 3, 2023

InterSystems 已纠正了两个缺陷。

第一个缺陷可能导致 ECP 应用程序服务器挂起。此缺陷仅与 ARM 和 IBM Power 处理器相关;存在于 InterSystems IRIS®、InterSystems IRIS for Health™ 和 HealthShare® Health Connect 版本2022.1.22022.1.3中。该修复被标识为 DP-423661。该缺陷将在所有未来版本中得到解决。

在极少数情况下,第二个缺陷可能会导致dejournaling挂起。此缺陷存在于 InterSystems IRIS®、InterSystems IRIS for Health™ 和 HealthShare® Health Connect 版本2020.42021.x2022.x2023.1中。该修复被标识为 DP-423505。该缺陷将在所有未来版本中得到解决,并已在2023.1.1中得到纠正。

InterSystems 已发布版本2022.1.3的更新发行版,以便快速提供这些修复。相关的版本标识符是:

  • 原发布:2022.1.3.668.0
  • 更新发布:2022.1.3.670.1

这些修复也可以通过 Ad hoc 分发获得。

如果您对此警报有任何疑问,请联系 全球响应中心

0
0 188
文章 姚 鑫 · 八月 3, 2023 3m read

第十一章 配置Production - 集成和配置 HL7 业务服务

集成和配置 HL7 业务服务

要将新的 HL7 业务服务集成到production中,必须将其与其中继消息的路由流程或业务操作相关联。此外,如果希望业务服务接收非标准消息结构,将需要创建自定义 HL7 架构定义来解析和验证这些消息。去做这个:

  1. 完成创建 HL7 业务服务所需的任何目标配置名称或消息架构类别项的说明。这些项目可能是:
  • HL7 路由进程(针对路由接口)。请参阅下一节。
  • HL7 业务操作(如果设计绕过此接口的路由过程,只是将消息从传入业务服务中继到传出业务操作)。请参阅本章后面的“添加 HL7 业务操作”。
  • 自定义 HL7 架构定义,用于解析传入的 HL7 消息。
  1. 返回生产配置页面上的图表。选择新的 HL7 业务服务。如果“目标配置名称”和“消息架构类别”字段之前为空,请立即配置它们,然后单击“应用”。
  2. 根据需要配置业务服务的其他设置。详细信息请参见“参考”中的“HL7业务服务设置”。

添加 HL7 路由进程

要将 HL7 路由流程添加到production中,必须创建它,将其集成到产品中,并根据需要对其进行配置。以下小节提供了详细信息。

创建 HL7 路由流程

要将 HL7 路由流程添加到production

  1. 在管理门户的生产配置页面中显示生产(从主页选择互操作性 > 配置 > Production)。
0
0 137
文章 姚 鑫 · 八月 2, 2023 3m read

第十章 配置Production

本章介绍如何配置产品以包含 HL7 路由接口。它还描述了如何创建新的 HL7 路由制作。

创建新的 HL7 路由Produtcion

可以创建一个新的HL7路由产品,如下所示:

  1. Management Portal中,切换到适当的名称空间。

为此,请在标题栏中选择Switch,单击名称空间,然后单击OK

  1. 选择互操作性>列表>产品。
  2. 选择New以调用Production Wizard
  3. 输入“Package Name”“Production Name”“Description”
  4. 选择HL7 Messaging production类型并选择OK

starter production有一个接口,其元素为:

  • HL7FileService — 一个禁用的HL7文件服务,具有默认设置
  • MsgRouterHL7路由进程,带有空路由规则集
  • HL7FileOperation - 一个禁用的HL7文件操作,具有默认设置

在构建HL7路由产品时,需要创建和配置许多这样的接口。可以从启用这些起始元素、复制它们、重命名它们并修改它们以满足需要开始。在构建接口时,经常会出现这样的情况:在配置一个项目时,必须输入尚未创建的另一个项目的名称。明确的命名约定对于避免混淆至关重要。

0
0 197
文章 Kelly Huang · 八月 2, 2023 18m read

k8s

这是一个使用 IKO 在 k3d 上部署  iris-oauth-fhir  的示例。

*  iris-oauth-fhir 是一个示例,用于部署带有 OAuth2 身份验证功能的 FHIR 服务器,InterSystems IRIS for Health 作为资源服务器,Google OpenId 则作为授权服务器。

* k3d 作为一个轻量级封装器,用于在 docker 中运行 k3s (Rancher Lab 的最小 Kubernetes 发行版)

IKO 是一个在 Kubernetes 上部署 InterSystems IRIS for Health 的工具。

2. 目录表

0
0 172
文章 姚 鑫 · 七月 31, 2023 2m read

第八章 HL7 架构和可用工具 - 测试转换

显示段地址

要显示段地址,请将光标悬停在阴影列中的段名称上。工具提示显示以下内容:

  • 在虚拟属性路径中使用的段地址
  • 该段的描述性名称

显示字段地址

要显示字段地址,请将光标悬停在消息结构中的字段上。工具提示显示以下内容:

  • 在虚拟属性路径中使用的字段地址(作为数字)
  • 在虚拟属性路径中使用的字段地址(作为名称)
  • 指示该字段的语法规则的字符。字符可以这样开头:
Symbol Meaning
! (仅限 1) 该字段为必填项;它必须只发生一次。
? 01)该字段是可选的,但如果出现,则可能只出现一次。
+ 1 次或多次)该字段可以重复一次或多次。
* 0 次或多次)该字段可以重复零次或多次。
& 该字段可能存在,并且可能重复,但仅在某些条件下。
n* (0n) 该字段最多重复 n 次。
(m) m 是字段中的最大字符数。该字段的每次重复都可以包含此数量的字符。

批量消息

如果字段用尖括号 (<,>) 括起来,则它是指向子文档的链接。单击它可查看该文档的摘要报告和消息数据。

测试转换

要测试转换:

  1. 单击转换文档?。
  2. 对于选择数据转换,选择数据转换。
  3. 对于选择显示选项,请选择以下选项之一:
    • 仅转换结果 — 仅显示转换后的文档。
0
0 129
文章 Lilian Huang · 七月 31, 2023 2m read

FHIR® SQL Builder或 Builder 是 InterSystems IRIS 医疗版数据平台 的一个组件。它是一种复杂的投射工具,用于将 InterSystems IRIS 医疗版数据平台FHIR 存储库中的数据创建为自定义的 SQL 模式,而无需将数据移动到单独的 SQL 存储库中。 Builder 专门设计用于与 InterSystems IRIS 医疗版数据平台中的 FHIR 存储库和多模型数据库配合使用。

Builder 的目标是使数据分析师和商业智能开发人员能够使用熟悉的SQL分析工具使用 FHIR,而无需学习新的查询语法。 FHIR 数据以复杂的有向图编码,无法使用标准 SQL 语法进行查询。基于图的查询语言 FHIRPath 旨在查询 FHIR 数据,但它是非关系型的。 Builder 使数据管理员能够使用表、列和索引创建其 FHIR 存储库的自定义 SQL 来投射,使数据分析师能够查询 FHIR 数据,而无需学习 FHIRPath 或 FHIR 搜索语法的复杂性。
存储库将加载 FHIR 资源,您所需要做的就是配置 FHIR SQL BUILDER。
对于配置,导航到http://localhost:55037/csp/fhirsql/index.

0
0 316
文章 姚 鑫 · 七月 30, 2023 3m read

第七章 HL7 架构和可用工具 - 使用 HL7 消息查看器页面

使用 HL7 消息查看器页面

HL7 提供了消息查看器页面。可以使用此页面显示、转换和导出 HL7 消息(外部文件或来自生产消息存档的消息)。

要访问此页面,请选择互操作性 > 互操作 > HL7 v2.x > HL7 v2.x 消息查看器。

选择选项

要指定要显示的文档:

  1. 对于文档源,选择文件、消息标头 ID 或消息正文 ID
  2. 指定要显示的文档:
    • 如果选择“文件”,请使用“浏览”选择文件。对于文件中的文档编号,输入要显示的文档编号。
    • 如果选择了“消息标头 ID”或“消息正文 ID”,请键入要显示的消息标头或消息正文的 ID
  3. 指定如何解析文档。为此,请为文档结构或架构选择以下选项之一:
    • 由业务服务接收 — 使用由业务服务分配的架构。如果选择此选项,请从下拉列表中选择业务服务。 此选项使能够确定特定业务服务将此文档分配到的 DocType
    • 使用特定架构类别/版本 - 从下拉列表中选择文档类别。
    • 使用特定的 DocType — 以类别:结构格式输入文档结构 (<MessageStructure>) 的名称。解析器使用此文档结构。
    • 使用内容声明的版本:名称 — 使用与文档中声明的文档类型关联的文档结构。
    • 使用对象存储的 DocType — 使用文档正文对象中声明的 DocType
0
0 268
文章 姚 鑫 · 七月 27, 2023 3m read

第四章 HL7 架构和可用工具 - 查看数据结构

查看数据结构

当单击“数据结构”列中的名称时,InterSystems 会显示该数据结构中的所有字段。这是 HL7 数据结构页面。显示的以下列是最有用的:

  • 组件列列出了可用于访问段内字段的数字。
  • 属性名称列列出了可用于访问段内字段的名称。
  • 单击“数据结构”列中的条目可深入了解详细信息。
  • 单击“代码表”列(如果有)中的条目可查看可在此字段中输入的有效代码。

当单击上面段结构页面中名为 2.3:XCN 的数据结构项时,将出现以下示例页面。该页面指出类别 2.3 数据结构 XCN 描述“扩展复合 ID 号和名称”并由 14 个字段组成。其中,有些是简单值,有些是数据结构,有些是代码。

有了这些信息,就可以为消息结构 2.3:ADT_A01 中的复杂 PR1grp().PR1:Surgeon 字段创建虚拟属性路径,如下所示:

PR1grp().PR1:Surgeon.familyname
PR1grp().PR1:Surgeon.degree

查看代码表

当单击“代码表”列中的名称时,它会列出并解释该字段的有效代码。这是 HL7 代码表页面。当单击上一节中显示的数据结构页面中名为 2.3:200 的代码表项时,将出现以下示例页面。

上面的示例示出类别2.3代码表200描述可以具有值LOMACD的“名称类型”。

0
0 162
文章 姚 鑫 · 七月 26, 2023 3m read

第三章 HL7 架构和可用工具 - 使用 HL7 架构结构页面

使用 HL7 架构结构页面

通过 HL7 架构页面,可以导入和查看 HL7 版本 2 架构规范。要显示此页面,请从主页中选择互操作性 > 互操作 > HL7 v2.x > HL7 v2.x 架构结构。有关使用此页面的一般信息,请参阅在产品中使用虚拟文档中的“使用架构结构页面”。

HL7 模式页面提供了一个附加选项卡:消息类型。此选项卡将两个消息结构标识为请求/响应对。

查看文档类型列表

要列出某个类别中的所有文档类型结构,请首先选择该类别,然后单击“DocType 结构”选项卡。

查看消息结构

要查看消息结构的内部组织,请从 HL7 架构页面上的 DocType 结构选项卡单击其名称(选择互操作性 > 互操作 > HL7 v2.x > HL7 v2.x 架构结构)。 InterSystems 产品使用以下视觉提示和命名约定在“结构”部分中显示消息的段结构。

  • 组成消息结构的段按从上到下的顺序列出。
  • 段名称必须全部大写。
  • 显示每个消息段的三个字母名称:MSHNTEPID 等。该名称指示 HL7 消息结构中该位置存在的段类型。包含选项、重复或包含一组其他段的段的名称会在名称中附加特殊字符。
  • 绿色虚线包围可选的段、组或字段。
  • 可以重复的段在段名称后附加了括号。例如,如果PID段可以重复,则出现PID()
0
0 156
文章 姚 鑫 · 七月 25, 2023 3m read

第二章 HL7 架构和可用工具 - HL7 模式和消息概述

HL7 模式和消息概述

InterSystems 产品可以处理和传递 HL7 消息,而无需使用架构来解析它,但将架构与消息关联允许执行以下操作:

  • 解析消息并访问以下字段值:
    • 数据转换
    • 路由规则
    • 自定义 ObjectScript 代码
  • 验证消息是否符合架构。

每个 HL7 消息均由消息类型标识,该消息类型在 MSHMessageType 字段 (MSH:9) 中指定。一些消息类型共享相同的消息结构。例如,在HL7版本2.3.1中,用于预先接纳患者的ADT_A05消息具有与ADT_A01接纳消息相同的结构。该架构指定 ADT_A05 消息具有结构类型 ADT_A01

为了解析 HL7 消息,需要两条信息:

  • 架构类别 — 这是 HL7 版本号,例如 2.3.12.7,或者它可能是 InterSystems 产品中定义的自定义架构的类别。production 从业务服务消息模式类别设置或从数据转换设置获取模式类别。尽管 HL7 消息在 MSHVersionID 字段中包含模式版本号 (MSH:12),但 InterSystems 不使用此值,因为许多应用程序并未一致地设置此字段。
  • 结构类型 - productionMSH:9 字段获取消息类型,然后检查架构定义以获取该消息的结构类型。
1
0 197
文章 姚 鑫 · 七月 23, 2023 3m read

第六十七章 开发Productions - ObjectScript Productions - Production品及其零部件的生命周期 - BO和适配器的生命周期

BO和适配器的生命周期

IRIS 自动管理每个业务操作的生命周期。

Production Startup

Production生产(或更改特定业务操作的配置)时, IRIS 自动为每个配置的业务操作类(即,为Production定义中列出的每个业务操作)执行以下任务:

  1. 它调用类的 OnProductionStart() 回调方法(如果已定义)。

OnProductionStart() 方法是一种类方法,它为Production配置中列出的每个业务操作类调用一次。业务操作类可以使用此回调来执行它可能需要的任何类范围的初始化。

  1. 它创建一个或多个后台进程来执行业务操作。

后台进程的数量由Production配置中业务操作的 PoolSize 属性决定。每个后台进程都称为业务操作的实例,并包含业务操作对象的实例。

如果满足以下条件, IRIS 只会为业务操作创建后台进程:

  • 业务操作类必须将其INVOCATION类参数设置为Queue
  • Production配置中业务操作的 Enabled 属性必须设置为 1(否则业务操作被视为已禁用)。已禁用的业务操作仍具有传入消息队列。在启用业务操作之前,不会处理发布到此队列的任何请求。
0
0 148
文章 姚 鑫 · 七月 22, 2023 3m read

第六十六章 开发Productions - ObjectScript Productions - Production品及其零部件的生命周期 - 业务流程的生命周期

业务流程的生命周期

每次Production启动时, IRIS都会为Production创建公共参与者池。ActorPoolSize设置的值确定池中的作业数。

在执行元池中的每个作业中,都有一个Ens.ActorEns.在一个对象中,该对象负责管理业务流程对其作业的使用。在一个Ens.Actor时称为执行元。

Production中的业务流程可以共享名为 Ens.Actor 的公共消息队列。此公共队列是发送到生产中没有自己的专用队列的任何业务流程的所有消息的目标。只要 Actor 有空托管业务流程,它们就会监听 Ens.Actor 队列。当请求到达 Ens.Actor 队列时,任何空闲的参与者都可以分配其作业来托管请求中指定的业务流程。 Ens.Actor 队列上的请求按照接收顺序进行处理。每个连续的请求都由下一个可用的参与者持续声明。

与业务服务和业务操作的生命周期不同,业务流程的OnInitOnTearDown 方法不会在业务流程启动或停止时被调用。相反,每次业务流程(InProcQueued)处理请求时都会执行这些方法。

0
0 119
文章 姚 鑫 · 七月 21, 2023 3m read

第六十五章 开发Productions - ObjectScript Productions - Production品及其零部件的生命周期 - Runtime

Runtime

Production运行时,业务服务会重复调用入站适配器的 OnTask() 方法。此 OnTask 循环由业务服务的 CallInterval 设置和 %WaitForNextCallInterval 属性控制,如下所示:

  1. 业务服务调用入站适配器的 OnTask() 方法。
  2. OnTask()IRIS 生产外部检查业务服务感兴趣的输入事件:
  • 如果找到输入,OnTask() 将调用关联业务服务对象的 ProcessInput() 方法。
  • 如果未找到输入,OnTask() 将控制权返回给业务服务,业务服务等待下一个 CallInterval 过去,然后返回到步骤 1
  • 可能存在多个输入事件。例如,如果业务服务使用File.InboundAdapter,则可能有多个文件在指定目录中等待。

如果有多个输入事件:

  • 通常,OnTask() 方法会根据需要多次调用 ProcessInput() 来处理所有可用的输入事件,直到找不到更多输入事件为止。
  • 或者,入站适配器可以限制 OnTask() 在每个 CallInterval 中仅调用一次 ProcessInput(),即使存在多个输入事件也是如此。
0
0 126
文章 姚 鑫 · 七月 20, 2023 3m read

第六十四章 开发Productions - ObjectScript Productions - Production品及其零部件的生命周期

此页面描述了Production及其组成部分的生命周期,以供参考。

Production的生命周期

Production启动

Production开始时,动作顺序如下:

  1. Production类被实例化;其可选的 OnStart() 方法执行。
  2. Production实例化每个业务操作并执行其可选的 OnProductionStart() 方法。
  3. Production实例化每个业务流程并执行其可选的 OnProductionStart() 方法。
  4. Production会清除上一次运行遗留的任何指标值的业务指标缓存。
  5. Production实例化每个业务服务并执行其可选的 OnProductionStart() 方法。
  6. Production过程处理已放入队列中的所有项目。这包括Production停止时排队的异步消息。
  7. Production现在接受来自外部 IRIS 的输入。

Production Shutdown

Production停止时,操作顺序如下:

  1. Production使每个业务服务脱机并执行其可选的 OnProductionStop() 方法。此操作会停止来自 IRIS 外部的所有请求。
  2. 所有业务主机都会收到进入静止状态的信号。
0
0 104
文章 姚 鑫 · 七月 19, 2023 2m read

第六十三章 开发Productions - ObjectScript Productions - 部署Production - 在目标系统上部署Production

管理门户自动执行将Productions从开发系统部署到实时系统的过程。本节介绍当在实时系统上加载Productions的新版本时,IRIS 会执行哪些操作。

获得部署包 XML 文件后,可以将其加载到目标系统上。在管理门户中,选择正确的命名空间并单击互操作性、管理、部署更改、部署,然后单击打开部署或打开本地部署按钮,具体取决于 XML 部署包位于服务器上还是本地计算机上。如果位于服务器计算机上,则“打开本地部署”按钮不处于活动状态。选择 XML 部署包文件后,表单会列出部署包中的新项和更改项,显示创建包时指定的部署说明,并允许指定以下部署设置:

  • 目标Production —指定将添加组件的Production。如果部署包包含来自源ProductionProduction类,则目标Production将设置为源Production且无法更改。否则, IRIS 将默认Production设置为当前打开的Production,但允许更改它。
  • 回滚文件—指定包含回滚信息的文件。回滚文件包含由部署替换的所有组件的当前定义。
  • 部署日志文件—包含由部署引起的更改的日志。
0
0 163
文章 姚 鑫 · 七月 18, 2023 4m read

第六十二章 开发Productions - ObjectScript Productions - 部署Production - 导出Production

导出Production

要使用管理门户导出ProductionXML,请打开Production,单击Production设置和操作选项卡,然后单击导出按钮。 IRIS 选择所有业务服务、业务流程、业务操作和一些相关类,然后显示以下表单以允许添加导出注释和其他组件。

还可以导出业务服务、流程或操作,方法是在Productions配置中选择组件,然后单击“操作”选项卡上的“导出”按钮。在这两种情况下,都可以通过单击其中一个按钮并选择一个组件来将其他组件添加到包中。以通过清除该复选框来从包中删除组件。

可以使用导出注释来描述部署包中的内容。例如,可以描述完整的Productions是否位于作为Productions更新的包或组件集中。当使用管理门户将包部署到目标系统时,会显示导出注释。

当导出部署包时,应该做出的第一个决定是目标系统是否具有旧版本的Productions

如果将Productions部署为新安装,应该:

  • 包括Production类的定义。
  • 包括Production设置。
  • 包括Production中使用的所有组件的定义。
  • 排除每个组件的Production设置(ptd 文件)。这将重复Production类中的定义。
0
0 155
文章 姚 鑫 · 七月 17, 2023 3m read

第六十一章 开发Productions - ObjectScript Productions - 部署Production

部署Production

通常,在开发系统上开发Production,然后在测试部署上完成并测试生产后,将其部署在实时生产系统上。本页介绍如何使用管理门户打包开发系统中的部署,然后将其部署到另一个系统上。它还描述了如何开发和测试对生产的更改,然后将这些更新部署到使用实时业务数据运行的系统。

部署Production概述

可以使用管理门户或 IDE 来部署Production。管理门户会自动执行一些需要使用 IDE 手动执行的步骤。如果有正在使用的实时Production,并且正在开发该Production的更新,则需要确保在不中断业务数据处理的情况下更新实时Production。在最简单的层面上,部署Production是通过从一个系统导出ProductionXML 定义并在目标系统上导入和编译 XML 来完成的。从开发到上线系统的成功部署最重要的问题是:

  • 确保 XML 部署文件具有所有必需的组件。
  • 在将部署文件部署到实时系统之前,先在测试系统上测试部署文件。
  • 确保部署文件加载到目标系统上而不中断实时Production

通常,将Production部署到实时系统是一个迭代过程,包括以下步骤:

  1. 从开发系统导出Production
  2. 在测试系统上部署部署文件。
0
0 108
文章 姚 鑫 · 七月 16, 2023 13m read

一篇文章了解IRIS/Caché编码方案

一直以来,编码问题像幽灵一般,不少开发人员都受过它的困扰。

试想你请求一个数据,却得到一堆乱码,丈二和尚摸不着头脑。有同事质疑你的数据是乱码,虽然你很确定传了UTF-8 ,却也无法自证清白,更别说帮同事 debug 了。

有时,靠着百度和一手瞎调的手艺,乱码也能解决。尽管如此,还是很羡慕那些骨灰级程序员。为什么他们每次都能犀利地指出问题,并快速修复呢?原因在于,他们早就把编码问题背后的各种来龙去脉搞清楚了。

ASCII

标准ASCII 码,使用7 位二进制数(最高位为0)来表示所有的大写和小写字母,数字09、半角标点符号,以及在英语中使用的特殊控制符号。

最早只有127个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母a的编码是97,小写字母z的编码是122

IRIS/Caché中获取字符ASCII码与二进制字符串,如下代码示例:

USER>w $a("a")
97
USER>w ##class(M.Code).LogicalToDisplay(97)
10000110

经过如下二进制转十进制计算可得出 1+32+64 = 97

2**0 + 2**5 + 2**6 = 97

Unicode

GB2312GBKGB18030 都是中文编码字符集。

0
0 565