InterSystems开发者社区中文版首届技术征文大赛!

Detailed rules

InterSystems开发者社区中文版首届技术征文大赛!

嗨,开发者们!

秋高气爽之际,我们很高兴地宣布启动InterSystems开发者社区中文版首届技术征文大赛

从2022年9月5日-10月24日(北京时间),欢迎热爱InterSystems技术的你来投稿,撰写与InterSystems技术相关的文章。

🎁参与奖 我们为每一位参与此次征文大赛的作者准备了礼品!

🏆优秀文章大奖 Apple iPad; Beats Fit Pro; HUAWEI WATCH; Logitech键盘; WD固态硬盘;KEEP智能手环

👉 点击了解更多详情

参赛要求

征文期间,发布在中文社区的文章只要满足以下要求,将自动参加比赛,无需额外提交:

  • 文章必须与InterSystems技术有关
  • 文章必须以中文撰写
  • 文章必须是100%的原创文章(可以是现有文章的延续)
  • 文章应在InterSystems开发者中文社区首发,严禁从其他社区进行搬运
  • 文章严禁抄袭或翻译社区现有文章
  • 社区成员可以发布多篇文章参赛
  • 文章字数应不少于800字,写作时请关注编辑器右下角的计数器

奖品设置

1. 专家提名奖:活动期间发布文章且成功参赛后,由InterSystems专家评选得出

🥇一等奖1名,Apple iPad

🥈二等奖2名,Beats Fit Pro

🥉三等奖3名,WD 固态硬盘

2. 开发者社区奖:活动期间发布文章且成功参赛后,由社区成员评选得出,“点赞”数前五名获得以下奖品

🥇第一名,HUAWEI WATCH 3智能手表

🥈第二名,罗技(Logitech)ERGO键盘

🥉第三名-第五名,Keep 运动智能手环

3. 入围奖:在征文大赛期间,所有在InterSystems开发者中文社区发布文章且成功参赛的其余用户都将获得特别奖励。

关于参赛规则等更多详情,请点击以下链接:

InterSystems开发者社区中文版首届技术征文大赛公告

九月 04 - 十月 23, 2022
按专家评分
喜欢:
39
Experts:
24
喜欢:
15
Experts:
14
文章
姚 鑫 · 九月 25, 2022 阅读大约需 78 分钟
IRIS与Caché的23种设计模式

IRIS的23种设计模式

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

定义

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

使用场景

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

优点

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

缺点

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

示例

  • 用Caché 实现一个计算器控制台程序,要求输入两个数和运算符号。
16
0 2 124
喜欢:
24
Experts:
13
文章
聆严 周 · 九月 30, 2022 阅读大约需 11 分钟
使用Prometheus监控Cache集群

使用Prometheus监控Cache集群

Executive Summary

生产级别的Cache集群往往由多个Cache实例组成,而Cache自带的管理界面不能满足对整个集群的监控,因此在实际使用中,往往需要投入人力对实例进行性能巡检。即便如此,这种巡检模式实时性低、告警的漏报错报率高、对既往数据追溯能力差。针对Cache/IRIS集群管理的这一缺憾,本文提出以Prometheus监控Cache集群的方案,最终实现了对集群全实例监控指标的自动化采集,以及准实时监控数据展示和告警提示。

监控大屏3.主机实例监控

24
1 7 270
喜欢:
17
Experts:
9
喜欢:
23
Experts:
8
文章
John Pan · 九月 9, 2022 阅读大约需 5 分钟
论集成标准的选择对医院信息集成平台建设的影响

集成平台的关键在于解决系统之间的互联互通和互操作性的问题,是一个多厂商、多协议的体系结构。医院在集成平台实施的过程中,面临的第一件重要的事情就是交互标准的选择,目前的建设中,分为两队:非标准队和标准队。非标准队一般采用视图抓取、xml格式、json等等的自定义格式,标准队一般采用HL7 V3、HL7 V2、FHIR、DICOM等医疗领域标准,下面会简单介绍一下各种方式以及实施落地的难易程度。(以下内容中将以难易程度总分5★来表示,星数量越多代表难度越高)

 

1、非标准队

与其说非标准,不如定义为院内交互标准,交互仅限于院内,是一种很有限的互操作,而且定制程度很高,需要很好地把握系统的内部知识。方案缺乏通用性,难以规模推广。但由于其技术门槛较低,学习成本较低,在集成系统数量较少时不失为一种经济快速的方法。

23
1 2 172
喜欢:
15
Experts:
8
文章
he hf · 十月 8, 2022 阅读大约需 6 分钟
10分钟快速开发一个连接到InterSystems IRIS数据库的C#应用

        安装InterSystems IRIS数据库的ODBC驱动,在Windows系统中配置数据源后,可以使用Microsoft Visual Studio 开发工具 中的服务器资源管理器很方便地连接到InterSystems IRIS数据库服务器,利用数据库连接的可视化视图,可以非常方便快捷地进行连接到InterSystems IRIS数据库的应用开发。本文将展示一个利用以上方式实现的例子,开发工具为Microsoft Visual Studio 2019,开发语言为C#,10分钟快速开发实现一个连接到InterSystems IRIS数据库的C#应用,在本例子中,可以通过选择日期和科室,查询指定日期和科室的就诊日志。

1、在成功安装InterSystems IRIS数据库的ODBC驱动后,从Windows的“控制面板”中选择“管理工具”,在“管理工具”中选择“ODBC数据源”。

16
3 6 297
喜欢:
20
Experts:
7
喜欢:
26
Experts:
7
文章
sun yao · 十月 12, 2022 阅读大约需 10 分钟
前端操作自动生成BS、BP、BO

概述

现有Ensemble平台BS(服务)、BP(流程)、BO(操作)需对平台及开发语言有一定的了解才能实现,为简化用户操作,现对现有平台进行二次封装,通过API接口的形式进行前后端分离,通过前端界面操作实现BS(对外提供的服务)、BP、BO(逻辑处理或调用外部的服务)自动生成(通过%Dictionary实现),具体实现如下。

一、开发技术和工具

版本:Ensemble 2017.2.1

二、涉及公用类

2.1 %Dictionary.ClassDefinition(自定义类)

• property Super as %CacheString;
Specifies one or more superclasses for the class.
定义一个或多个父类,继承父类

28
5 10 256
喜欢:
16
Experts:
5
喜欢:
15
Experts:
5

 在AES的加密过程中,存在HEX和Base64的输出,目前在HEALTHSHARE自带有Base64的加解密规则,现在针对HEX的加解密进行对应的处理,实现和网上ASE加解密工具进行互相加解密。
在Ensemble的AES的CBC加密主要用到的是这俩个方法
$system.Encryption.AESCBCManagedKeyEncrypt(Plaintext,KeyID)
Plaintext是需要加密的字符串,需要进行$ZCONVERT(字符串,"O","UTF8")转换
KeyID是密钥的ID。
或者是
$SYSTEM.Encryption.AESCBCEncrypt(text,key,IV)
text是需要加密的字符串,需要进行$ZCONVERT(text,"O","UTF8")转换
Key 是密钥 键的长度必须为16、24或32个字符
IV  是偏移量 如果存在此参数,则必须为16个字符长。

第一个方法是在本地生成对应的密钥,暂时还不能和网站上的进行互相加解密的处理。
目前主要是针对第二个方法
$SYSTEM.Encryption.AESCBCEncrypt(text,key,IV)

16
0 8 140
喜欢:
43
Experts:
5
文章
Meng Cao · 十月 5, 2022 阅读大约需 4 分钟
Caché数据库私有apache版本升级

操作系统:
CentOS Linux release 7.9.2009 (Core)

1.查看数据相关信息

1)查看Caché数据库实例信息

[root@TestServer /]# ccontrol list

Configuration 'CACHE'   (default)
    directory: /opt/cache
    versionid: 2016.2.3.907.11.20719
    conf file: cache.cpf  (SuperServer port = 1972, WebServer = 57772)
    status:    running, since Tue Oct  4 12:54:05 2022
    state:     ok

2)查看Caché数据库私有apache版本信息

44
0 24 472
喜欢:
9
Experts:
5
文章
Liu Tangh · 十月 9, 2022 阅读大约需 3 分钟
在Cache系统中使用负载均衡服务的探讨

Cache软件自带数据服务和应用服务。在实际使用中会将Cache数据服务和应用服务分别安装在不同的服务器上面,作为数据库服务器和应用服务器。数据库服务器和应用服务器通过ECP(企业缓存协议)进行数据交换。在应用服务器部署上web服务,让数据交换和应用处理分开,实现瘦数据和胖应用的系统模式。

9
1 3 62
喜欢:
7
Experts:
5
喜欢:
6
Experts:
5
文章
姚 鑫 · 十月 19, 2022 阅读大约需 7 分钟
CORS请求Request携带Cookie失败占用License解决方案

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

起因

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

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

现象

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

image

image

6
0 0 59
喜欢:
11
Experts:
4

研究Healthshare2018在已经安装完成使用的情况下,部署IIS,并代理平台。之前看到可以通过单独的CSP Gateway安装包进行处理这种问题,该文主要是获取不到该安装包的时候可以如何实现IIS的处理。

第一步:首先按照网上教程部署IIS服务。安装完成之后会在C盘创建一个名叫intepub的包。

第二步:在inetpub包下面直接插入CSPGateway 。这个包是在其他先安装IIS下,后安装Healthshare的CSP网关服务的时候在inetpub下面自动插入的包,直接找一个复制过来。

第三步:打开IIS,创建一个叫csp的网站,按照下图配置。

  第四步:在点击模块进行CSPms模块的添加。
 

11
0 1 68
喜欢:
15
Experts:
4
喜欢:
19
Experts:
4
文章
Chang Liu · 九月 22, 2022 阅读大约需 2 分钟
在国产系统上安装Healthconnect2021

1,准备

    本次安装环境:Kylin-Server-10-SP2-Release-Build09-20210524-x86_64.iso

    安装系统适配的对应版本:HealthConnect-2021.1.2.338.0-lnxubuntux64.tar.gz;ISCAgent-2021.1.2.338.0-lnxubuntux64.tar.gz

     系统语言选择:English(必要)

19
0 8 152
喜欢:
11
Experts:
4
文章
water huang · 九月 25, 2022 阅读大约需 25 分钟
Ens.Util.JSON类的启发

日常工作中,JSON使用越来越多,很多其他的语言里面有成熟的JSON API,但cache 我一直没找到。而同事们使用的基本都是自己写的一些JSON工具。这些小工具,多多少少有些局限。使用ensemble2016后,发现了Ens.Util.JSON类,他可以处理JSON。翻阅代码后,实际上主要API是%ZEN.Auxiliary.abstractController。在使用中,我们遇到一个问题,那就是有些JSON的节点名是带有下划线的,这个不太好处理。一般来说,我们把对象转为xml的时候,对象的属性我们是去掉下划线的,带下划线的名字是用XMLNAME来设置的,于是考虑JSON里面也使用它(如果配置了)作为对象转JSON的时候,JSON的名字。

12
0 4 106
喜欢:
15
Experts:
4
喜欢:
6
Experts:
4
文章
Yuxiang Niu · 十月 22, 2022 阅读大约需 4 分钟
Cache中不同类型锁的理解与分析

Cache锁的异常直接影响数据库进程运行,堆积的锁如果处理不及时会造成Cache性能异常,导致数据库访问受限或严重卡顿。本文主要以实例分析介绍Cache中常见锁的作用及其对应的处理方式,包括:系统锁、数据锁、Session锁、仪器锁、程序文件锁。其中数据锁异常需要及时处理。

8
0 0 107
喜欢:
15
Experts:
3
文章
water huang · 九月 21, 2022 阅读大约需 4 分钟
对 %XML.PropertyParameters类的探索

日常工作中,我们使用xml 应该是比较多的,早期的ensemble或者cache,对JSON的支持不是很好,但是对xml支持比较好。因此早期的接口方式中,webservice+xml的方式很常用。而对象导出为xml最简单的方式就是类继承%XML.Adaptor。继承该类后,就可以使用很多xml的特性,以满足各种需求。虽然看不到对象转为xml的具体实现,但是配置了参数,就可以实现更多的效果。那么想自定义一些参数呢?如果有人打开过它的定义,可以看到类上面有个 “PropertyClass = %XML.PropertyParameters”,那么我们其实在需要xml参数的同时,又要自定义参数,就可以自己写个属性类,继承于%XML.PropertyParameters。

15
0 4 76
喜欢:
18
Experts:
3
文章
王喆 · 九月 24, 2022 阅读大约需 2 分钟
使用Global进行数据可视化---商业智能(BI)

在医院但凡接触“数据”和“指标”的人,对以下场景应该是深有感触。同样的指标、同样的时间,有可能是同一个部门出的,最后“数据不一致”。除了“匪夷所思”,更有“深恶痛绝”。那么,如何解决这个问题?我的答案是商业智能(BI)。随着技术和市场的发展,有很多公司开始研发直接面向业务用户的敏捷BI工具,FineBI就是这样的一款BI工具。这个也是我接触的第一款国产BI。

18
0 0 72
喜欢:
10
Experts:
3
喜欢:
7
Experts:
3

前言

本人因技术需要,了解到了IRIS Health产品,在听了产品介绍会之后,感觉该产品是否有趣,并且比较符合自己目前的需求,因此大概了解了下IRIS的架构。以下是本人的浅显理解,如有错误之处欢迎讨论。

本人从产品介绍和社区的文档中,了解到IRIS的大概功能分类

7
0 2 56
喜欢:
16
Experts:
2
文章
聆严 周 · 九月 27, 2022 阅读大约需 6 分钟
Cache / IRIS 操作数据的3种基本方式

背景

Cache起源于没有SQL的1970时代,当时各种高级计算机语言才刚刚诞生,其中M语言较为独特,它的诞生就是为了在没有操作系统的机器上,进行数据存储。别忘了,Unix在1971年才发布。M语言别具一格地采用了Global多维数组,统一了复杂的内存操作和文件读写,使之成为了1970年代数据库的事实标准,特别是在医疗行业。而后Intersystems在1978年接过M语言的旗帜,在M语言上添加了SQL兼容层和ObjectScript层,前者顺应了时代的潮流,后者不仅为M语言提供了强大的OOP和各种便捷的语法糖,还让数据能以对象形式进行访问,让数据和代码更加紧密。

本文将简述多维数组、SQL、对象这3种数据操作方式,提供实例代码片段,并在运行效率、开发效率、管理效率、实用性方面讨论它们的优缺点。
为方便讨论,以学校与学生为例。对每种操作方法,都列举3种典型的用例,分别为,访问某特定ID的学生(即数据库ID索引)、访问某特定studentID的学生(即遍历唯一索引)、和访问某学校的所有人(即遍历非唯一索引)。

现假设学生表/对象定义如下:

16
1 3 226
喜欢:
23
Experts:
2
文章
lizw lizw · 九月 28, 2022 阅读大约需 12 分钟
关于%Dictionary.CompiledClass类在实际业务中的一些应用

简单分享下在医院实际业务过程中%Dictionary.CompiledClass的一些应用。
一,Query查询出来的数据直接存表。
       我们经常会遇到一些突如其来的检查,如:飞行检查,审计检查等等,往往一下子要查询几年的各种数据,每种数据涉及字段还非常多,数据之间还要求对上,查询耗时长,数据对比难度大,此时,我们需要把查询出来的数据直接存到临时表,数据核对和修改直接在临时表中完成,核对好的数据直接在sqldbx或者水滴等查询工具中整表导出,效率会高一些。
       具体实现:按照数据要求,把表建好,Query输出字段和表字段顺序一致,按日期每天调用Query查询和插入,记录异常数据,后续单独处理。
       优点:效率明显提高,数据核对和修改、导出很方便,避免了数据量大,多次查询耗时长问题。
       缺点:数据量大会占用存储,记得删。
// W ##CLASS(lizw.CloseCycleData).insertDayByDay("2022-01-01","2022-06-30")
ClassMethod insertDayByDay(sd, ed)
{
    k ^tmplzw("insertFromQyeryTestpara",$j)

23
0 1 175
喜欢:
16
Experts:
2
文章
zhanglianzhu zh... · 九月 29, 2022 阅读大约需 3 分钟
Cache死循环检测和申明式事务

使用Cache的两个痛点问题:

一、Cache作为后关系型数据库,使用其提供M语言操作Global数据结构。可以达到极快的查询速度。M语言的set赋值和初始化没有区分,加之是弱类型,非常容易出现死循环,就算你是多年老手也一个不小心就踩坑。我就经历过改代码即使很小心还是出了死循环把数据库tmp撑满的事故。

二、M语言作为完备的编程语言,结合cache数据库操作数据实在是不要太方便。同时一个复杂的业务提交到数据库通过一个M逻辑全部处理完成,极大的减少了app和数据库交互次数。复杂业务的事务就是一方面,通过TSTART、TROLLBACK 、TCOMMIT,前台一次数据库交互后台就可能做了几十张表的更新操作。直接使用事务是容易,但是极易引入开放事务锁表(你自己就算很小心,也难保调别人接口别人事务不完善,而你又没检测事务层级),锁表之后结束进程导致数据回滚。

 

解决办法:

据我观察出现上面两个问题的原因,第一个是M语言弱类型和没单独的初始化命令导致,就算你是老手、工作细致也难以避免。第二个不是Cache特有的,通用关系库也有事务写的不完整的问题,事务问题对开发要求高或者从框架设计可以解决。

16
1 4 171
喜欢:
8
Experts:
2
文章
li dong · 十月 20, 2022 阅读大约需 3 分钟
实现Cache/IRIS中zip文件的下载、解压及读取

IRIS中实现zip文件的下载、解压及读取

0 前言

项目上做对账需求时,需要通过http方式下载第三方的对账的文件,是一个压缩文件,里边包含一个csv文件。

1 准备工作

1.1 安装解压缩软件

需要根据cache/iris服务器运行环境安装不同的解压缩软件。
本文是在windows环境下实现的,安装了WinRAR解压缩软件,安装目录为:”C:\Program Files\WinRAR“。

1.2 部署测试http服务器

部署一个web服务器,放一个zip文件。
本文在macOS系统中使用MAMP部署了一个简单的服务器,提供一个对外服务:http://192.168.1.107:8888/sss/Archive.zip

2 下载zip文件

主要思路:
通过http下载zip文件,然后另外到服务器上指定的文件夹下,并重命名。

代码

10
0 2 176
喜欢:
12
Experts:
1
文章
bai hongtao · 十月 7, 2022 阅读大约需 4 分钟
第三方HA软件结合MIRROR使用方法探讨

在Cache 2018之前的版本中,数据库的高可用是通过第三方HA软件保障的,Cache数据库在2018以后及IRIS支持MIRROR技术,通过MIRROR可以保障数据库的高可用及数据的冗余,那么在新版本中,第三方HA软件与MIRROR是否可以同时使用以实现更高的数据库可用性?使用起来有哪些需要注意的?本文重点介绍探讨上述两个问题。

12
0 0 108
喜欢:
0
Experts:
0