#Ensemble

0 关注者 · 177 帖子

InterSystems Ensemble 是一个完整且易于使用的集成平台,使用户能够在有史以来最短的时间内连接人员、流程和应用程序。

了解更多信息

文档

文章 Weiwei Gu · 十二月 1, 2022 3m read

InterSystems 是一家已经深耕数据库平台领域达44年的公司,成立于1978年,现在已经在全球的80多个国家开展相关业务,每天有超过10亿患者的电子病历数据都跑在以我们的数据库平台构建的应用系统之上。

我们的客户遍布国内外,国内的大几百家三甲医院客户,中国复旦排行榜上超过1/3的顶级医院都在使用我们产品(包括北京协和医院,华西医院,湘雅等等),我们的技术合作伙伴,如东华医为,嘉和,和仁等也都是国内医疗信息领域的著名厂商。

   而在国外,我们也有非常多的顶级客户,仅仅以美国举例,美国最顶级的排名前20的所有医院,无一例外全部都是使用的interSystems公司的数据库平台产品。

 美国排名前20的所有顶级医院

2020-2021《美国新闻与世界报道》(U.S. News & World Report)最顶级医院名单(前20家医疗机构)均应用InterSystems公司的数据库平台:

0
0 440
文章 Lilian Huang · 十一月 30, 2022 5m read

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版本的应用程序所理解),在更高的版本中,你会看到一些字段是专门为它而留的。

0
1 843
文章 Tete Zhang · 十月 26, 2022 3m read

“池大小”(PoolSize)设置的值决定了一个组件的作业的量和启动方式。在这篇文章中我们将具体讨论对于不同类型的组件来说“池大小”设置的可能值和这些值所代表的含义。

Pool Size = 1

对于所有的组件来说,运行池大小为1的含义都是一样的: 该组件有且只有一个作业,单独运行该组件的代码,顺序处理发送到该组件的消息(FIFO)。

Pool Size > 1

对于业务进程(BP)和业务操作(BO)来说,当运行池大小大于1时,该组件将运行多个作业(作业数=运行池大小设置数)。每个作业都只运行该组件的代码,但消息处理的顺序将被打乱。将运行池的大小设为大于1的值可以在一定程度上提升组件处理消息的性能,但是每个作业的性能还是受限于系统资源的,所以并不是说组件的性能可以随着运行池的大小增加而无限提升。

对于轮询类业务服务(Polling BS)来说,当运行池大小大于1时,该服务也将运行多个作业(作业数=运行池大小设置数)。但这种配置会导致多个进程对轮询结果产生竞争(race condition),所以一般情况下轮询服务不应将运行池大小设为大于1的数值。

1
0 239
文章 Tete Zhang · 十月 26, 2022 3m read

上线一个新的集成平台production或者组件是需要很多精力的,用户常常需要对每一个组件所满足的需求和所能提供的功能,使用到的协议,以及组件对系统资源的调用有深入细致的了解。在配置好一个production之后,您可能需要将这个production推送到测试或者正式环境,或者需要将一个写好的组件代码应用到不同的项目上。这些时候,production的导出功能可以方便您传输production或组件的配置和代码。

导出

需要导出production时,您可以移步到管理门户 - Interoperability - 相应的命名空间 - 列表 - Production 页面,选择您需要导出的production,再点击页面上的导出键进行导出。如下图1所示:

在弹出的对话框中,您可以选择在导出文件中您想包括的内容。如下图2所示:

您也可以通过管理门户 - Interoperability - 相应的命名空间 - 配置 - Production 页面,点击“Production 设置” - “操作”选项卡 - “导出”键进行导出。弹出的对话框同样如图2所示,会自动包括大部分production及其组件所需要的类。如果需要添加或更改导出的类,可以在此对话框进行操作。

0
0 182
文章 water huang · 九月 21, 2022 4m read

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

这里,我姑且定义一个类,用于说明使用场景。

Class TEST.PropertyParameters Extends %XML.PropertyParameters [ ProcedureBlock ]
{

 /// 敏感信息过滤
Parameter SENSITIVEINFOCTRL As STRING [ Constraint = ",*", Flags = ENUM ]; 

4
0 208
文章 Yuxiang Niu · 十月 22, 2022 4m read

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

查询Cache锁有两种方式:

1>可在System Management Protal[Home]>[Locks]中查看;

2>可在terminal端使用Do ^LOCKTAB命令下查看,如下图所示,此方式适用于锁表量达到10000条以上,Protal页面HTTP响应超时无法显示锁表时使用。

 

一、【系统锁】

此类锁在数据库初次搭建时就存在,例如:

1>^%SYS("CSP","Daemon") ---调度锁

2>^TASKMGR  ---守护进程

3>^DBACK ---数据库备份锁

4>^SYS("Task","TaskD",1058) ---执行系统任务锁

主要作用

0
0 317
文章 sun yao · 十月 12, 2022 10m read

概述

现有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. 定义一个或多个父类,继承父类

• property** ProcedureBlock** as %Boolean [ InitialExpression = 0 ]; Specifies that the class uses procedure block for method code. 设置类是否允许使用程序块,程序块强制实施变量作用域:方法无法看到由其调用方定义的变量,程序块中的任何变量都会自动成为私有变量

10
6 746
文章 王喆 👀 · 十月 18, 2022 4m read

ObjectScript是一种面向对象的编程语言,它是InterSystems公司的Caché和Ensemble数据库的核心语言之一。ObjectScript语言的语法类似于MUMPS语言,它支持面向对象编程、过程式编程、函数式编程等多种编程范式。ObjectScript语言主要用于开发Caché和Ensemble数据库应用程序,它可以访问数据库中的数据、调用数据库中的存储过程、触发器和事件,还可以与其他编程语言进行交互。

Cache使用的语言是ObjectScript简称COS,下面展示的是其基本语法,也是我个人的COS字典:

1 系统指令

SET           缩写 s ,赋值命令,样例 - s hello ="Hello World"

WRITE      缩写 w ,向当前设备输出,样例 - w hello (特殊用法:w ! 换行、w # 清屏

DO            缩写 d ,执行函数,样例 – d ##class(%SYSTEM.License).ShowSummary();

Kill            缩写 k ,从堆栈中清楚变量 x,慎用(不加参数调用时候将清楚内存中的所有变量!)样例 - k x

Quit          缩写 q , 返回样例 - q $$$OK

注意:系统指令不区分大小写,变量和对象大小写敏感

2 数据类型

2
0 343
文章 John Pan · 九月 9, 2022 5m read
  1. 概述

鉴于国内医疗市场上,还有一些遗留系统使用PB9,Delphi7等开发技术,为加快开发进度,使第三方能尽快调用由Ensemble提供的标准HL7 V2的webservice服务,先提供几种常见语言调用Ensemble的HL7 V2 webservice接口例子。请大家根据实际情况测试并使用

假设在Production中加入了EnsLib.HL7.Service.SOAPService.CLS这个预制的Business Service并将其命名为PeiXunHl7SoapIn,那么,外部系统可以通过如下endpoint访问HL7 V2 Webservice

http://localhost:57772/csp/peixunpro/EnsLib.HL7.Service.SOAPService.CLS?CfgItem=PeiXunHl7SoapIn
1
0 498
文章 Nicky Zhu · 十月 10, 2022 4m read

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

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

0
0 224
文章 Qiao Peng · 十月 6, 2022 10m read

最近一些用户问到监控集成平台业务行为查询的问题,例如如何查询服务的平均耗时、发生错误的服务数量...

业务行为监控对于集成平台来说非常重要,可以帮助我们:

  • 监控系统健康情况 — 查看系统性能表现。例如发现队列积压和长耗时的消息处理,都可能是性能问题的表现。
  • 排查异常 — 通过查看业务行为数据,帮助我们判断特定的业务组件配置是否是造成性能瓶颈的主要原因。
  • 做业务规划 —  通过业务行为数据,了解各个业务量变化情况,并辅助我们做业务规划。
  • 做硬件规划 —  通过长期跟踪消息吞吐量的变化了解性能的变化和业务量的增长,进而辅助我们做硬件计划,避免出现在性能问题。

仅提供这些查询是很容易的,但要更好地监控集成平台的业务行为,需要更深入的了解InterSystems集成架构。

InterSystems集成架构

无论Ensemble、Health Connect还是InterSystems IRIS,它们都具有下面的集成架构:

通过业务服务向外发布服务、通过业务操作连接第三方接口、通过业务流程协同业务操作,它们统称为集成业务组件。可以简单理解为业务行为是由这些业务组件完成的:

  • 业务服务 = 服务,它启动一个业务流程;
  • 业务操作 = 接口,它通过接口操作第三方业务系统;
  • 业务流程 = 流程,它控制一笔业务需要按什么流程调用哪些接口。

要监控业务行为,服务、接口和流程都需要监控。

0
1 334
问题 liu bo · 九月 27, 2022

*** Recovery started at Wed Sep 28 08:14:28 2022     Current default directory: d:\dhc\devsoftware\ensemble\mgr     Log file directory: d:\dhc\devsoftware\ensemble\mgr\     WIJ file spec: d:\dhc\devsoftware\ensemble\mgr\CACHE.WIJRecovering local (d:\dhc\devsoftware\ensemble\mgr\CACHE.WIJ) image journal file...Starting WIJ recovery for 'd:\dhc\devsoftware\ensemble\mgr\CACHE.WIJ'.  0 blocks pending in this WIJ.WIJ pass # is 0.Starting fast WIJ compareFinished comparing 24 blocks in 0 secondsExiting with status 3 (Success)09/28/22-08:14:28:644 (15060) 2 Failed to allocate 8560MB shared memory

2
0 187
文章 Tete Zhang · 九月 14, 2022 5m read
  1. 从消息查看器看到清除周期以外的消息没有被正常清除

这种情况先抽查这些消息所处的会话中是否有未完成操作周期的消息(状态为除“Completed”“Error”“Discarded”之外的状态)。如有,且定期清除任务配置了“KeepIntegrity”,且该环境并不需要保留这些消息,可通过关闭清除任务中的“KeepIntegrity”配置清除这些会话和包含的消息。如果有这类消息,但是定期清除任务未配置“KeepIntegrity”,可能是定期清除任务的逻辑或消息数据问题导致清楚任务查找的时候没有覆盖这些消息,请联系WRC帮助排查具体原因。

有关定期清除任务的更多信息请参见文档

Purging Production Data | Managing Productions | InterSystems IRIS for Health 2022.1

  1. 从消息查看器看不到清除周期之外的消息,但是^%GSIZE显示有global占据了很大的磁盘空间

这种情况需要具体排查每个较大的global。可能有以下原因:

  • 系统定义的global占用很大空间。您可以联系WRC帮助排查具体原因。
  • 自定义的global占用很大空间。这可能是消息中嵌套的持久化数据或流数据,或者是和消息没有直接关系的独立的表里面的数据。请对创建这种global的代码进行复盘,找到创建逻辑并增加相应的数据管理逻辑。
0
0 161
文章 Tete Zhang · 九月 14, 2022 2m read
  1. 系统文件

系统文件根据版本不同,大约会占用1GB左右的空间。这部分空间是不能省略的,随意删除文件会导致实例无法正常运行。

  1. 备份文件

备份文件应及时转存到另外的磁盘或磁盘分区上,不应与.DAT数据库占用相同的磁盘分区。

  1. Journal日志

Journal日志文件存储路径应设置为与.DAT数据库存储路径不同的磁盘或磁盘分区上,不应与.DAT数据库占用相同的磁盘分区。

  1. 消息存储

因为HSHC集成平台设计上不支持过多的消息存储,用户应该为每个有消息流量的命名空间配置定期消息清除任务。

定义消息清除任务时 “BodiesToo”默认是没有选择的,需要手动选择。系联软件研发核心认为我们的软件不能在客户不知情的情况下自动删除客户自定义的数据,消息也属于客户自定义的数据,所以默认选项只会删除Message Header,不会删除消息本身。但是保留默认值运行清除消息任务就会导致孤立消息(指不存在配套Message Header的消息对象)的问题。BodiesToo=0也是孤立消息产生的主要原因之一。有关孤立消息的常见问题会在之后的文章做进一步讨论。

另一个消息清除任务选项“KeepIntegrity”默认是打开的。如果您需要保留“Queued”,“Suspended”,“Deferred”等未完成所有操作的消息,请保持打开。如果不需要可以关闭。

具体保留多少天的消息(清除周期)可以根据平台业务需求和消息量综合考量决定。

0
0 157
文章 Michael Lei · 九月 12, 2022 1m read

Hi 我在线部署了一个demo演示:

https://production-monitor.demo.community.intersystems.com/csp/user/EnsPortal.ProductionConfig.zen?PRODUCTION=dc.Demo.Production#

我更新了几个设置(文件路径和URL),并将调度类切换到dc.rest.GenericService。

我从文件服务重新发送了消息。我看到授权Auth和API服务都收到了消息。

API进程(还)没有返回所需的响应。更多内容请继续关注...

0
0 117
问题 water huang · 九月 2, 2022

最近遇到一个问题,需求是把大量的数据写入到第三方数据库oracle,目前用的是EnsLib.SQL.OutboundAdapter 方案,但是感觉队列很容易卡死,不知道是什么原因。然后想换成  set res = ##class(%ResultSet).%New("%DynamicQueryGW:SQLGW") 这种方式执行插入和更新。但是它返回的错误是网关调用失败,我希望得到具体的错误,我用这个对应额sql语句去 navicat执行就能提示出明确的错误!有大佬处理过类似的问题吗?有更好的方案吗?

1
0 144
文章 Jingwei Wang · 九月 2, 2022 1m read

当使用集成平台传递异步消息时,在消息查看器查看消息状态的时候会出现 ‘已放弃’(Discarded) 的消息状态。

‘已放弃’ 的消息状态出现主要有以下原因:

  • 当响应的消息在响应请求超时后才到达你要发送的目的地,这条消息就成为了 ’已放弃‘ 的消息。
  • 因某种原因,消息无法交付,手动将消息标记为 ‘已放弃’。
  • 异步传递的消息,无需等待返回消息,这时如果配置了返回消息,这条消息也会成为 ’已放弃‘ 的消息。

注意:被标记为 ‘已放弃’的消息任然会被永久储存,只有但你明确删除它们时,消息才会被删除

如图所示,业务流程 HCC.SVR.Prod.BPMainControl 向 业务流程 HCC.SVR.Prod.BP.SubscribeAndPublish发送异步消息,如果在HCC.SVR.Prod.BPMainControl调用HCC.SVR.Prod.BP.SubscribeAndPublish,而HCC.SVR.Prod.BP.SubscribeAndPublish设置了响应消息,那么从HCC.SVR.Prod.BP.SubscribeAndPublish设置的响应消息就会成为 ’已放弃‘ 的消息

0
0 124
问题 tan jishan · 八月 3, 2022
我需要在当前命名空间下创建一系列的只读类,并限制除_system之外的所有用户都只有读取权限,无法在studio中编译,请问我应该如何操作呢?
我的目的是可以在工程的项目分支中管理这些类,并通过发布方式持续升级这部分类文件。
但是这些类的内部逻辑有可能会需要维护人员能够知晓其中的功能和实现方式,所以不能通过MakeDeployed来解决这个问题
我现在知道可以通过设置database的读写属性来解决这个问题,但是这样就需要额外新建一个database并maping到当前命名空间下。采取这种方式处理时有一个重大的缺点,即在执行代码发布过程中,需要停库,并且停库时间可能会在半个小时左右,这个我无法接受。
1
0 159
文章 Hao Ma · 八月 10, 2022 4m read

我们中的许多人在几年前安装了Ensemble,估计空间是足够的,但现在却遇到了意外--硬盘已经满了!我们可以看看我们可以采取哪些措施来调查发生了什么,然后如何减少所占用的空间。 让我们来看看我们可以采取哪些措施来调查发生了什么,然后如何减少占用的空间。

是什么占用了Ensemble的空间?
让我们来看看在Ensemble中占用空间的东西的清单。

  1. Ensemble安装。
  2. 备份文件
  3. 日志文件
  4. Ensemble数据库。
  5. 流文件。
  6. 自定义应用程序文件

让我们逐一来看看这些文件。

Ensemble安装占用的空间

这是一个相对较小的空间,取决于版本,大约为1GB。如果你想减少它,你有可能删除一些开发包或第三方连接驱动ODBC/JDBC。你可以通过改变安装选项来做到这一点,见Ensemble安装手册。

http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY…

备份文件占用的空间

0
0 437
问题 Johnny Wang · 四月 21, 2022

hello 各位老师好:

          电子病历闭环埋点接口是单独接口,由平台提供接口文档,接口方式为Webservice,不能走在平台标准服务里吗?

1
0 112
文章 Nicky Zhu · 八月 10, 2022 8m read

Production是开发者基于InterSystems IRIS产品家族实现互操作功能的主要技术架构。而每个Production的运行依赖于三类主要的业务组件:

  • 业务服务(Business Service)
  • 业务流程(Business Process)
  • 业务操作(Business Operation)

三类组件间以消息作为信息交换的主要媒介。因此,要保障互操作业务的稳定运行,除保障软件平台有充足的软硬件资源运行外,保障Production中消息的高效传输以及三类组件的平稳、高效运行则是运维团队面临的主要目标。下面列举的若干项任务则有助于运维团队实现这些目标:

优化业务组件运行效率

Production中的业务组件都有运行池的概念,允许业务组件运行在多个进程上并发工作以提高整体性能。运行池又可以分为私有池和参与者池两类。

私有运行池

    • 业务组件的CPU作业的数量
      • 默认为1即可工作
      • 通过性能测试确定最佳的池大小
      • 拥有私有池的业务组件从私有队列中处理消息
    • 无适配器业务服务的池大小需设置为0
    • 需要多进程时,池大小设为1可以保证信息以先进先出(FIFO)顺序处理
      • 整个消息流中的所有业务组件的池大小都不应大于1

参与者池

0
0 227
文章 Nicky Zhu · 八月 10, 2022 4m read

InterSystems 数据平台的互操作功能与久经考验的EnsembleHealthConnect集成引擎产品一脉相承。事实上,使用IRIS的典型客户不但应用了IRIS提供的多模型数据存储、分布式存储等数据存储特性,也广泛地应用如可视化数据转换,可视化数据流程编辑和可视化规则引擎等一系列互操作能力构建异构系统间或组织机构间的数据流程。

那么,在生产环境上,如何监控与评估数据流程的运行状况,在发生问题时如何快速定位并解决故障,就是用户的运维团队需要考虑的问题。

本系列文章将围绕IRIS互操作功能中核心的互操作消息管理,Production管理与优化及互操作告警与通知三个方面介绍互操作功能的运维基础知识和常用技巧,希望能够帮助客户平稳、高效地运用数据平台。

注:本文提到的InterSystems数据平台,包括Caché数据库、Ensemble集成平台、HealthConnect医疗版集成平台和InterSystems IRIS数据平台。

互操作消息管理

消息是互操作功能中各组件间通信的基本方法,在互操作Production业务服务、业务流程和业务操作之间广泛使用。

0
0 323
文章 Michael Lei · 八月 9, 2022 1m read

在测试你的代码时,你经常会遇到需要检查对象的实际内容。无论是使用 ZWRITE 还是 $system.OBJ.Dump()

你会得到一个简单的属性图片,"--- 属性值---"

而 "--- swizzled references ---" 更容易让人混淆 

用“--- calculated references ---" 你只是被留在了后面。

0
0 332
文章 Michael Lei · 八月 8, 2022 2m read

医疗行业的互操作性在改善病人护理、降低医疗服务提供者的成本以及为提供者提供更准确的情况方面发挥着重要作用。然而,由于有这么多不同的系统,数据的格式也有很多不同的方式。有许多标准被创造出来以试图解决这个问题,包括HL7v2、HL7v3和CDA,但每一种都有其缺点。

FHIR,即快速医疗互操作性资源,是一种新的医疗数据格式,旨在解决这些问题。它是由国际卫生级七组织(HL7)开发的,该组织还开发了HL7v2、HL7v3和CDA。

今天我们将探讨如何在VS代码中借助IntelliSense和自动完成功能,通过使用FHIR Schema 创建和验证FHIR资源。

第 1 步 :从FHIR 官方网站 https://www.hl7.org/fhir/下载 JSON schema file 文件用来做资源校验

第 2 步: 创建文件夹(在这个例子中,我使用病人文件夹和病人资源),并将提取的fhir.schema.json文件复制到同一文件夹,然后从VS Code中打开文件夹

第 3 步: 通过修改setting.json文件,设置VS代码以识别FHIR模式。
按CTRL+SHIFT+P并输入工作区设置JSON文件

第 4 步: 在同一文件夹中创建一个新文件patient.fhir.json。
按Ctrl+Space,你将通过IntelliSense获得FHIR资源的所有属性

0
0 423
文章 Frank Ma · 七月 28, 2022 2m read

应用集成平台市场上产品众多,商家专家观点纷纭,莫衷一是。Gartner公司从用户角度出发,搭建了Peer Insight “大众点评”平台,让用户能够为自己使用的产品发声,对各个产品打分。以下是来自用户的声音,供参考。

第一款产品是微软的BizTalk,综合得分3.9。

第二款产品是InterSystems的Ensemble,综合得分4.6。

第三款产品是IBM的WebSphere Enterprise Service Bus,综合得分3.8。

0
0 120