文章
姚 鑫 · 九月 25, 2022 阅读大约需 78 分钟
IRIS与Caché的23种设计模式

IRIS的23种设计模式

第一章 Caché 设计模式 简单工厂模式

定义

  • 简单工厂模式属于创建型模式,又可称为静态工厂模式,这是由一个工厂对象决定创建出哪一种产品类的实例

使用场景

  • 工厂类负责创建的对象比较少
  • 客户只需知道传入工厂类的参数,而无须关心创建对象的逻辑

优点

  • 使用户根据参数获得对一个的类实例,避免了直接实例化类型,降低了耦合性
  • 能把客户类和具体子类的实现解耦,客户类不再需要知道有哪些子类以及应当实例化哪个子类:客户类往往有多个,如果不使用简单工厂,那么所有的客户类都要知道所有子类的细节。而且一旦子类发生改变,所有的客户类都要进行修改

缺点

  • 可实例化的类型在编译期间已经被确定。
  • 如果增加新类型,则需要修改工厂,这违背了开放封闭原则
  • 子类多过不适合使用

示例

  • 用Caché 实现一个计算器控制台程序,要求输入两个数和运算符号。
16 2
0 137

在使用xDBC连接到字符集为US7ASCII的Oracle数据库时,大家可能遇到过中文的乱码问题,尤其是使用Oracle自己的xDBC驱动的时候。

字符集为US7ASCII的Oracle数据库虽然可以保存中文数据,但给客户端带来了很多麻烦,需要对获取和提交的数据进行转码。

在Ensemble/Health Connect/InterSystems IRIS 中使用SQL适配器连接到这样的Oracle数据库时,可以使用$ZCVT函数进行转码。

1. $ZCVT函数

$ZCVT函数是广泛使用的字符串转换函数,可以做大小写转换、编码转换、URL 和 URI 转换等。我们用其编码转换能力来解决字符集转码问题。

2. 获取的SQL结果集数据有中文时

6 2
0 365
文章
姚 鑫 · 十月 19, 2022 阅读大约需 7 分钟
CORS请求Request携带Cookie失败占用License解决方案

CORS请求Request携带Cookie失败占用License解决方案

起因

  1. 因为是前后端分离的项目,前端使用的vue2,后端iris。需要获取cooikesessionid,每次请求时携带cookie,防止每次请求都占用一个license

  2. 登录认证,保持会话期间全局变量,超时退出。

现象

下图是如果不携带cookie每次请求都会新建一个session并且占用一个license

image

6 0
0 76
文章
Qiao Peng · 九月 22, 2022 阅读大约需 25 分钟
精华文章--漫谈应用集成的现在与未来

关注FHIR的大侠们估计都注意到了,FHIR更新了它支持的互操作范式,除了消息、文档、服务、API这4种,增加了2个:资源仓库、订阅。前面4个好理解,为什么资源仓库和订阅会成为FHIR的新的互操作范式?互操作与应用集成是什么关系?

这里借FHIR的新互操作范式,聊聊应用集成,看看集成平台是什么?有什么样的集成方案?以及怎么评价不同的方案。

6 0
1 372
文章
Nicky Zhu · 一月 6 阅读大约需 8 分钟
《数据二十条》的号角声

国务院于2022年12月19日发布了《中共中央 国务院关于构建数据基础制度更好发挥数据要素作用的意见》(后简称《数据二十条》),如何有效利用数据已经成为下一步的趋势。另一方面,无论是基于数据中台还是数据编织理念,两者也都对如何利用数据提出了构想。因此医疗行业数字化建设的目标已不能再局限于如何收集数据,建立医疗行业数据的流通机制将会是为越来越普遍的需求。

时钟拨回几年前,数据中台概念开始火爆。人们对数据中台的定义、诠释尽管有诸多差异,通过数据中台降低数据共享和利用的成本则是共同的期望。但经过这几年的探索之后,中台已死的观点也在涌现。究其原因,除去中台概念在技术上的不确定,数据流通过程中的责权益的不清晰也是严重的制约因素。毕竟,数据中台自身作为一套技术框架并不能代替法律法规与市场自动将数据转变为商品从而创造出流通价值。

那么,如何能够使数据的流通合规合法,使数据能够如货币和商品一般自由流动,则是我们需要思考和探索的主题,这次《数据二十条》的出现,无疑为医疗信息技术工作者提供了一个明确的思考方向。

4 0
0 113
文章
Qiao Peng · 十二月 18, 2021 阅读大约需 12 分钟
精华文章--从软件架构发展谈业务集成技术演进与展望

应用集成技术是市场上被广泛使用的,也是充斥着术语和概念的一个技术领域。集成平台、消息引擎、消息中间件、集成引擎、集成中间件、企业服务总线(ESB)、API网关、API管理… 很多概念与名词。到底它们是什么意思?有什么区别?哪种技术适合解决哪种集成问题?

业务集成的需求和技术的演进是紧随业务系统的软件架构发展而发展的。通过小结软件架构的发展,我们更容易梳理业务集成技术的演进、更容易看清楚各种集成架构的优势和未来发展方向。

4 0
0 634

各大技术社区常年充斥着关于字符集支持、乱码的问题。Cache’/Ensemble/HealthConnect/IRIS的用户也经常遇到这类问题。为何文字乱码在信息化发展这么久后还会困扰我们?因为字符集、多语言实在有点复杂。

我计划写三篇:第一篇花点时间回顾一下多语言字符集的简史,第二篇介绍一下各种技术对于字符集和字符编码的使用声明,最后一篇会介绍常见的ISC技术和工具的乱码、尤其是中文乱码的现象和解决办法。

4 0
3 434
文章
Qiao Peng · 十月 20, 2022 阅读大约需 5 分钟
在集成产品中压缩解压文件

在InterSystems IRIS医疗版里有一个文件压缩解压的适配器HS.Util.Zip.Adapter和对应的文件压缩解压业务操作HS.Util.Zip.Operations。集成产品可以使用它们进行文件的压缩和解压操作。这2个类的联机文档说明较少,这里介绍它们的使用方法。

1. 基础配置

InterSystems IRIS使用操作系统的压缩和解压缩能力,因此需要注册操作系统执行压缩解压的命令。

在管理门户的Health标签页下,选中配置注册(Configuration Registry):

在其中增加2个注册项目:

\ZipUtility\UnZipCommand\ZipUtility\ZipCommand,分别代表解压和压缩命令。适配器HS.Util.Zip.Adapter会检查这2个注册项并得到相应的命令。各个操作系统的命令并不一样,示例如下:

3 0
1 27
文章
Qiao Peng · 十月 22, 2022 阅读大约需 4 分钟
SQL业务服务和业务操作

1. 新的系统SQL业务服务/业务操作

接连SQL数据源和操作SQL数据目标是常见的集成业务场景。使用SQL适配器监控SQL数据源和操作SQL目标库时,我们需要开发自定义BS或BO,写不少代码。例如开发自定义SQL服务需要:

1. 开发响应消息类,用于承接SQL快照数据;

2. 开发自定义业务服务BS类,用于将SQL快照按字段赋值给对应的消息,并将消息发送给目标(业务流程或业务操作)。

而要开发自定义SQL操作,更麻烦些:

1. 开发请求和响应消息类,用于向BO传输数据和接收返回数据;

2. 开发自定义业务服务BO类,设置消息响应表,根据不同请求消息类型编写方法;

3. 在方法中根据请求消息数据拼写SQL语句;

4. 在方法中将SQL执行结果存入响应消息。

虽然很简单,但编程过程枯燥乏味。而且当修改SQL语句时,还要修改对应的消息类和BS/BO类。

从2021.2开始,InterSystems IRIS增加了2套系统SQL业务服务和SQL业务操作:

3 0
0 192
文章
Nicky Zhu · 五月 7, 2022 阅读大约需 3 分钟
一个新库引发的血案

我们的一位客户五一期间向使用IRIS搭建的数据流推送一家三甲医院数年的历史数据,导致实施的同事们经历了一系列噩梦,包括但不限与:

1. 由于未通知实施团队有这样规模的数据推送,数据推送过程与全库备份任务重叠。尽管实例和数据流正常运行,但备份任务与数据流争抢IO,导致备份任务不能在预期时间内完成,实施童鞋五一加班处理问题。

2. 为了节省磁盘空间,服务器上部署了定期删除IRIS备份文件的任务,原本能够保持一周的全备+增量备份,但在本次数据暴增的情况下,新的备份尚未完成而旧的全备已被删除,导致问题发生时没有可用于恢复的备份。

3. 由于这次数据推送前未进行数据质量校验,推送的数据全部不合规,但已经历了较长的数据流进行处理全部入库;同时由于备份文件已被删除,无法通过恢复数据库的方法回滚,导致实施童鞋不得不逐条从生产环境三个库的数百张表中挑出问题数据逐一删除,从五一放假结束至今还未完成善后工作。大家可以设想一下,如果备份还在,那么恢复备份就可以了。

因此,我们希望再次提醒各位在前线奋斗的亲们:

1. 善待你的备份。尽管对于大型医院或医疗集团来说,两周的全备+增量备份策略下,备份文件会占据数个TB的存储空间。但在需要回滚时,这几个T的空间能救命。

3 1
0 59
文章
Lilian Huang · 十一月 30, 2022 阅读大约需 5 分钟
HL7v2到底是什么?!

HL7(Health Level 7)是一套技术规范,用于医院信息系统(HIS)之间临床、财务和管理数据的计算机互交换。这些规范被不同程度地被纳入美国(ANSI)和国际(ISO)正式标准的语料库中。

HL7的L7表示它是在OSI模型的第7层,换句话说,在应用层运行的标准。这意味着HL7不需要考虑交换的安全性,也不需要考虑信息传输的安全性(这一点由较低层次的层来保证,例如用于安全的SSL/TLS或用于数据传输的TCP)。更准确地说,第7层支持终端用户进程和应用的通信,以及面向用户的软件应用的数据展示。作为OSI模型的最高层,也是最接近最终用户的层,第7层提供特定的应用功能,如识别通信伙伴和它们之间的服务质量,确定资源可用性,考虑隐私和用户认证,以及同步通信,并将应用与OSI模型的较低层连接起来。

回到HL7标准,HL7第二版标准(也称为Pipehat)最初创建于1989年,但目前仍在使用并定期更新,形成了2.1、2.2、2.3、2.3.1、2.4、2.5、2.5.1、2.6、2.7、2.7.1、2.8、2.8.1、2.8.2和2.9版本。v2.x标准是向后兼容的(例如,基于2.3版本的信息将被支持2.6版本的应用程序所理解),在更高的版本中,你会看到一些字段是专门为它而留的。

3 0
1 81

开发者您好!

这里向介绍@Lorenzo ScaleseOpenAPI-Suite (一个用于从OpenAPI 3.0生成 ObjectScript 代码的工具集)。这个工具集在 2023 年 InterSystems 开发工具大赛的21 个参赛作品中获得专家提名第三名

3 0
1 101
文章
Jingwei Wang · 十一月 29, 2022 阅读大约需 3 分钟
配置 DSN

在Windows配置DSN

  1. 确认InterSystems ODBC客户端驱动已安装
    • InterSystems IRIS ODBC驱动会随着InterSystems IRIS安装包默认安装。
    • 如果没有随着InterSystems IRIS安装,请由此下载驱动,下载后执行.exe文件进行安装。
  2. 定义DSN(Data Source Names)
2 3
0 72
文章
Nicky Zhu · 四月 24, 2022 阅读大约需 10 分钟
在ObjectScript中调用Java程序 —— 一个国密算法的案例

尽管IRIS和HealthConnect拥有全面的互操作特性,但在实际工作中,还是有可能遇到需要使用遗留类库,dll SDK等方式与外部应用通信的情况。例如IRIS中并没有内嵌国密算法SM2、SM3和SM4,而开源社区中不乏通过Java、Python和C++等语言完成的具体实现。本文就将以调用SM4的Java实现为例展示ObjectScript程序与第三方语言通信的过程。

Github地址:https://github.com/LinZhuISC/javademo.SM4

跨编程环境调用设计要点

在开始实际操作之前,希望读者先针对整个调用过程中的主调方和被调方思考两个现象:

2 1
1 161
文章
Nicky Zhu · 十月 10, 2022 阅读大约需 4 分钟
IRIS镜像状态监控

在生产环境中IRIS通常以故障转移集群的形态被部署,而集群中各故障转移成员的镜像状态将决定该集群在故障发生时是否能够顺利切换保障业务不中断。因此,成员状态通常也是运维团队需要巡检或监控的目标。

尽管IRIS内部API提供了丰富的集群配置、成员状态监控等一系列接口,但除Portal上的镜像监视器外,并没有特定的接口便于从外部系统访问(如进行企业级监控集成时),也没有整合好的监控接口可用与获取镜像的健康状态。但在IRIS上开发一个REST接口暴露镜像状态数据并不困难,如下所示:

2 0
0 40

InterSystems流程自动化与工作流引擎

InterSystems工作流程引擎的主要功能 2

使用InterSystems工作流程引擎 3

场景描述 3

环境配置与测试 5

任务管理 15

任务API和自定义任务用户界面 16

展望 17

15

集成平台除了集成业务系统,打通数据与业务流程外,另一个核心的功能就是流程自动化(BPA)。

流程自动化涉及几个重要的特性:

  1. 流程建模
  2. 流程协同
  3. 决策自动化
  4. 低代码工作流程自动化
  5. 任务协同与任务管理

其中第4和5点都是和工作流程相关的。

什么是工作流程(Workflow)?它和业务流程(Business Process)有何区别?为何集成平台要涉及对工作流程的管理?

2 0
2 182
文章
Lilian Huang · 十二月 31, 2022 阅读大约需 10 分钟
HL7 ADT消息的类型和ADT^A04的例子

在上一篇文章中,我们讨论了标准 HL7v2 的起源、结构和消息类型。现在让我们看一下最常用的消息类型之一及其结构示例。我说的是 ADT。

HL7 ADT 消息(入院、出院、转院)用于在医疗机构传达基本患者信息、就诊信息和患者状态。 ADT 消息是使用最广泛且容量最大的 HL7 消息类型之一,因为它为许多触发事件提供信息,包括患者入院、注册、取消、更新、出院、患者数据合并等。

2 0
0 60
文章
姚 鑫 · 三月 6, 2021 阅读大约需 16 分钟
第五章 SQL定义表(一)

第五章 SQL定义表

表名称和架构名称

可以通过定义表(使用CREATE TABLE)或通过定义投影到表的持久类来创建表:

  • DDL:InterSystemsIRIS®数据平台使用CREATE TABLE中指定的表名来生成相应的持久类名,并使用指定的架构名来生成相应的包名。
  • 类定义:InterSystemsIRIS®数据平台使用持久类名称来生成对应的表名,并使用包名称来生成对应的模式名。

由于以下原因,这两个名字之间的对应关系可能不相同:

2 2
0 73
文章
Qianzhu Liu · 四月 2, 2021 阅读大约需 7 分钟
数据应用方案分享之一:新生儿先天性心脏病筛查

着手书写数据应用方案分享系列文章的初衷是,希望从终端用户的视角阐述我们所期待的数据应用方式及其可能为医疗领域带来的获益,为医学信息工作者提供参考。在这个系列中,笔者会以临床常见疾病和流程为例,用真实的数据录入、获取、展现和使用场景说明需求;尤其是如何细致、精准的构建数据源头,以确保现代医学信息技术“有数可用”、“数用必达”。其中肯定有思虑不周全或逻辑不严谨之处,望各位读者按需审阅,取其精华、弃其糟粕。此外,本系列更多在于探讨数据应用的可能性,而非可行性。文中部分图片尚处于设想模拟阶段,并非真实系统图片,请知悉。

2 0
0 192

各位领导、老师大家好。非常荣幸有机会参加这次由中国数字医学杂志社组织的陕西省医院数字化转型研讨会。

IT这个行业很有意思,就是大家都很喜欢造词。这几年有一个词特别火,叫做数智化底座,很多厂商都先后推出了自己的数智化底座解决方案。结合最近对整个行业的一些观察,今天借这个机会,跟各位领导和老师探讨一下,医疗行业的数字化有什么特点,到底什么样的底座或者平台比较符合我们医疗行业,以及我们在建设数智化底座的时候需要考虑哪些问题。结合我们最近的一些观察和思考,有不当之处,欢迎各位老师批评、指正。

首先一点就是我们做任何工作,首先要解决“为什么”的问题?第一个核心思路,我想数字化转型是为智慧医院服务的,归根结底,还是要通过数字化的手段,来实现医院的高质量发展。针对这一目标,国家卫健委制定了智慧医院发展的三大目标,就是智慧医疗、智慧管理和智慧服务,我想说白了,无非就是让医院、医护人员以及我们的患者过的更好,提高我们治疗和护理水平、降本增效,同时能够让我们的患者得到更好的服务。所有的数字化建设,不管是平台还是应用,都应该围绕这一核心目标。

2 0
0 159

%SYS.Journal.Record 类有一个查询(query), List, 可以列出Journal文件中记录的数据修改历史。例如,要查询谁对global节点^QP(1,2)做过修改,可以使用如下代码。它查询Journal文件(输入参数pFilePath)中的global节点(输入参数pSearchGlobal)的操作:

2 0
2 168

3.1 InterSystems IRIS内码与多语言支持

3.1.1 InterSystems IRIS内码与字符集转换

InterSystems IRIS的内码是UTF-16,因此它支持Unicode多语言字符集。对于其它字符编码,例如UTF-8、GB18030、Big 5,它会自动进行转码。例如对于简体中文,它将GB18030输入数据转换为UTF-16,或者将UTF-16数据转换为GB18030输出。

2 0
0 134
文章
Qiao Peng · 三月 28, 2021 阅读大约需 9 分钟
InterSystems IRIS医疗行业版创建FHIR服务器

如果您正打算学习FHIR、或者正在基于FHIR开发,最佳的学习和开发环境需要一个完备的FHIR 服务器,帮助您理解FHIR标准和调试FHIR应用。使用InterSystems IRIS医疗行业版可以快速配置出FHIR服务器和FHIR资源仓库。这篇文章介绍如何在5分钟内在InterSystems IRIS医疗行业版上配置FHIR服务器和FHIR资源仓库;同时对初学者介绍FHIR测试数据生成与加载的方法,和基本的FHIR REST API操作。

软件准备

1. InterSystems IRIS医疗行业版

您可以使用已有的2020.1及以上的InterSystems IRIS医疗行业版。如果您还没有,那么就在社区里下载一个最新的、免费的社区版吧。

2 0
0 220