搜索​​​​

清除过滤器
文章
姚 鑫 · 二月 23, 2021

第四十五章 Caché 变量大全 $ZVERSION 变量

# 第四十五章 Caché 变量大全 $ZVERSION 变量 包含一个字符串,描述`do`命令后面的InterSystems IRIS.line的当前版本。 # 大纲 ```java $ZVERSION $ZV ``` # 描述 `$ZVERSION`包含一个字符串,该字符串显示当前运行的InterSystems IRIS®Data Platform实例的版本。 以下示例返回`$ZVERSION`字符串: ```java DHC-APP>WRITE $ZVERSION Cache for Windows (x86-64) 2016.2 (Build 736U) Fri Sep 30 2016 11:46:02 EDT ``` 此字符串包括InterSystems IRIS安装的类型(产品和平台,包括CPU类型)、版本号(2018.1)、该版本中的内部版本号(内部版本号中的`“U”`表示UNICODE以及创建此版本的InterSystems IRIS的日期和时间。`“EST”`是东部标准时间(美国东部的时区),`“EDT”`是东部夏令时 通过调用`GetVersion()`类方法可以返回相同的信息,如下所示: ```java DHC-APP>WRITE $SYSTEM.Version.GetVersion() Cache for Windows (x86-64) 2016.2 (Build 736U) Fri Sep 30 2016 11:46:02 EDT ``` 以通过调用其他`%SYSTEM.Version`方法来获取此版本字符串的组成部分,可以通过调用以下命令列出这些方法: ```java DHC-APP> DO $SYSTEM.Version.Help() 'Do $system.Version.Help(method)' 将显示单个方法的完整描述. 类的方法:%SYSTEM.Version FeatureBits(bit) Return all the feature codes stored in $zversion(0) Format(Format,zv) Formats the version info according to the following format types: GetBuildDate(zv) Returns the date the product was built in $HOROLOG format. GetBuildNumber(zv) Returns the build number for the product. GetBuildOS(zv) Returns the operating system for which the product was built. GetBuildTime(zv) Returns the time of day the product was built in $HOROLOG format. GetCompBuild(component) Returns the build number for the specified component. (Deprecated) ... ``` 通过转到InterSystems IRIS启动器并选择关于...,可以查看版本和内部版本号信息。 不能使用`SET`命令修改`$ZVERSION`特殊变量。尝试这样做会导致``错误。 # 示例 以下示例从版本字符串中提取创建日期,以计算InterSystems IRIS的当前版本有多早(以天为单位)。请注意,此示例特定于Windows平台: ```java /// d ##class(PHA.TEST.SpecialVariables).ZVERSION() ClassMethod ZVERSION() { SET createdate=$PIECE($ZVERSION," ",9,11) WRITE !,"Creation date: ",createdate WRITE !,"Current date: ",$ZDATE($HOROLOG,6) SET nowcount=$PIECE($HOROLOG,",") SET thencount=$ZDATEH(createdate,6) WRITE !,"This version is ",(nowcount-thencount)," days old" } ``` ``` DHC-APP>d ##class(PHA.TEST.SpecialVariables).ZVERSION() Creation date: Sep 30 2016 Current date: Feb 10 2021 This version is 1594 days old ``` 下面的示例通过调用类方法执行相同的操作: ```java /// d ##class(PHA.TEST.SpecialVariables).ZVERSION1() ClassMethod ZVERSION1() { SET createdate=$SYSTEM.Version.GetBuildDate() WRITE !,"Creation date: ",$ZDATE(createdate,6) WRITE !,"Current date: ",$ZDATE($HOROLOG,6) SET nowcount=$PIECE($HOROLOG,",") WRITE !,"This version is ",(nowcount-createdate)," days old" } ``` ```java DHC-APP>d ##class(PHA.TEST.SpecialVariables).ZVERSION1() Creation date: Sep 30 2016 Current date: Feb 10 2021 This version is 1594 days old ```
公告
Michael Lei · 五月 18, 2022

IRIS 和 IRIS for Health 社区版和企业版现在可以下载预览了!

所有人现在可以在 https://evaluation.intersystems.com下载IRIS和IRIS for Health社区和企业版 。 客户以及潜在客户都可以尝试我们最新最强的功能,包括一些还没有发布的新特性。 如何访问: 对于潜在客户,只要选择名称中带有"(预览)"的选项,就可以下载预览软件。 对于客户和InterSystems员工--只需拨动预览复选框,这将包括可用版本菜单下拉中的预览软件: 更多资源: https://community.intersystems.com/post/introducing-evaluation-service-community-edition-downloads https://community.intersystems.com/post/intersystems-evaluation-service 有任何问题欢迎拨打 4006019890 或咨询您的ISC客户经理。
文章
姚 鑫 · 九月 1, 2022

第十九章 维护本地数据库(四)

# 第十九章 维护本地数据库(四) # 压缩数据库中的全局变量 管理数据库空间的另一种方法是使用 `^DATABASE` 例程压缩数据库中的全局变量。压缩全局变量将全局数据合并到更少的块中,从而增加数据库中的可用空间量。 在创建和更新全局变量时 `IRIS` 通常以将全局块填充到大约 `70%` 容量的方式分配数据。 (完全按整理顺序增长的全局可能会分配到接近 `90%`。)通常,允许 `IRIS` 自动管理全局块密度就足够了。然而,一些不连续的数据删除模式可能会显着降低平均全局块密度。 **注意:要逐个全局地查看数据库中全局块的当前密度,可以运行完整性检查、并检查每个全局的数据级别输出。** 压缩全局变量时,指定所需的全局块密度(默认为 `90%`),操作会尝试通过合并数据来尽可能接近此值——例如,将分布在三个块中的全局数据重新排列为两个。通常(但并非总是),压缩全局变量会显着增加数据库中可用的可用空间。 (如果指定的目标密度低于数据库当前的全局块密度,则数据库的大小不会增加。) 要压缩数据库中的全局变量,请使用以下过程: 1. 打开终端并更改为 `%SYS` 命名空间。 2. 输入 `do ^DATABASE`,然后从菜单中选择 7) `Compact globals in a database`。 ```java %SYS>do ^DATABASE 1) Create a database 2) Edit a database 3) List databases 4) Delete a database 5) Mount a database 6) Dismount a database 7) Compact globals in a database 8) Show free space for a database 9) Show details for a database 10) Recreate a database 11) Manage database encryption 12) Return unused space for a database 13) Compact free space in a database 14) Defragment a database 15) Show background database tasks ``` 3. 指定要在其上运行操作的数据库的目录。可以通过输入来指定多个数据库?在数据库目录压缩`?`提示,然后输入数字列表。 ```java Database directories to compact? ? 1) c:\intersystems\irishealth\mgr\ 2) c:\intersystems\irishealth\mgr\hscustom\ 3) c:\intersystems\irishealth\mgr\hslib\ 4) c:\intersystems\irishealth\mgr\hssys\ 5) c:\intersystems\irishealth\mgr\irisaudit\ 6) c:\intersystems\irishealth\mgr\irislocaldata\ 7) c:\intersystems\irishealth\mgr\iristemp\ 8) c:\intersystems\irishealth\mgr\user\ (Multiple selections allowed: * for all, or list such as 1,4,7-10) ``` 4. 指示您要压缩所有全局变量,或者输入要压缩的单个全局变量列表。 ```java Database directories to compact? 8 c:\intersystems\irishealth\mgr\user\ Databases Selected ------------------ c:\intersystems\irishealth\mgr\user\ ``` 5. 指定目标平均全局块密度,响应其余提示,并确认。 ```java All Globals? Yes => yes 34 items selected from 34 available globals How full do you want the database blocks? 90 => 50 Display compacted globals? No => n Device: "" Right margin: 80 => 50 Confirm compaction of databases? Yes => yes Database Compaction Aug 20 2022 5:49 PM Database c:\intersystems\irishealth\mgr\user\ Global MB Processed MB Compres sed To Completed ------ ------------ ---------- ------ --------- ^IRIS.Msg 0 0 5:49 PM ^IRIS.MsgNames 0 0 5:49 PM ^IRIS.SASchema 0.008 0.008 5:49 PM ^ISC.Src.Jrn 0.008 0.008 5:49 PM ^ISCMethodWhitelist 0.008 0.008 5:49 PM ^ROUTINE 0.008 0.008 5:49 PM ^oddBIND 0 0 5:49 PM ^oddCOM 0.016 0.016 5:49 PM ^oddDEF 0.016 0.016 5:49 PM ^oddDEP 0.008 0.008 5:49 PM ^oddEXT 0.008 0.008 5:49 PM ^oddEXTR 0 0 5:49 PM ^oddMAP 0 0 5:49 PM ^oddMETA 0 0 5:49 PM ^oddPKG 0 0 5:49 PM ^oddPROC 0 0 5:49 PM ^oddPROJECT 0.008 0.008 5:49 PM ^oddSQL 0 0 5:49 PM ^oddStudioDocument 0 0 5:49 PM ^oddStudioMenu 0 0 5:49 PM ^oddTSQL 0 0 5:49 PM ^oddXML 0 0 5:49 PM ^rBACKUP 0 0 5:49 PM ^rINC 0 0 5:49 PM ^rINCSAVE 0 0 5:49 PM ^rINDEX 0.008 0.008 5:49 PM ^rINDEXCLASS 0.008 0.008 5:49 PM ^rINDEXEXT 0.10 0.10 5:49 PM ^rINDEXSQL 0.008 0.008 5:49 PM ^rMAC 0 0 5:49 PM ^rMACSAVE 0 0 5:49 PM ^rMAP 0.008 0.008 5:49 PM ^rOBJ 0.008 0.008 5:49 PM ^rPYC 0.008 0.008 5:49 PM ``` **注意:紧凑的全局操作旨在与正常的数据库活动同时运行。但是,该操作确实会消耗一些系统资源,并且如果系统处于极高负载下,则可能无法完成。出于这些原因, 建议在非高峰时间运行此和其他数据库重组操作(包括压缩数据库和对全局进行碎片整理),并且一次只在系统上运行一个此类操作**。 **全局压缩可能涉及临时增加正在压缩的数据库大小。如果这导致数据库达到其配置的最大大小,或者由于存储卷上的可用空间不足而无法进行扩展,则取消操作。**
文章
Hao Ma · 一月 4, 2023

IRIS, Caché监控指导 - 介绍

本文章是一个系列,主要目的是介绍给IRIS,Caché的终端用户如何方便的监控您的系统。 InterSystems系统的监控很难吗?需要学习很多技术吗? 我的答案是还好。 关于Caché和IRIS监控,无论是那部分内容,在InterSystems的在线文档或者开发者论坛,其实都能找到相关的说明和方案。但问题是太多,太杂乱,没有一个“操作维护手册”的东西。结果是,如果您是一个新手的InterSystems产品的维护工程师或者管理员,您要花很多的时间在大量的文档里找答案。 还有一个问题是文档中很多章节的内容又太深,包含了一些开发人员才关心的内容,这是Caché或者IRIS的特性造成的,因为它首先是一个开发平台。结果是,对于管理员,很多文档的很不友好。 因此,我要写的这个文章的的目的是这样的: - 简单。只介绍管理维护人员需要的内容。只介绍和监控相关的内容。其他比如备份恢复,扩容,修改配置等等基本不涉及。 - 易学。文章的期待读者是系统管理员,因此不需要您有编程能力或者InterSystems编程语言的基础。我系统对您的每个日常工作和关注的主题,给出最容易实现的操作步骤。 - 对读者的要求低,您只需要了解基本的Caché操作,包括 - Caché的用户维护界面 - 操作终端(Terminal)的操作 - 基本的Caché命令的格式 让我们进入主题。有几个要点要先交代一下。 ### InterSystems产品的几个使用的场景 也就是谁在用什么产品 - 场景一:东华的iMedical用户 iMedical 8.5之前的版本使用Caché。 2022年版本8.5发布并开始部署,它的底层是InterSystems IRIS。 - 场景二:独立的InterSystems IRIS实例或者InterSystems HealthShare InterSystems HealthShare是在IRIS平台上面构建的数据共享平台,用于多个医疗机构之间的数据共享,通常会由多个InterSystems IRIS实例组成。本文并不介绍HealthShare的具体技术,您如果是HealthShare的用户,可以通过本文了解单一的IRIS实例的监控。 - 场景三: 医院的集成平台Ensemble用户 从监控维护的角度讲,Ensemble和Health Connect对于医院用户其实是一个东西。Health Connect是最近一些年InterSystems公司对医疗行业使用的Ensemble的一个产品名称。在后面的文章里, 我会只用Ensemble这个名字。 ### 什么是系统监控 简单说,监控工作基本就两块: 1. 监控告警和日志 简单的说,当系统有需要管理员关注的事件发生时,管理员可以及时得到通知。关注的事件通常包括底层的告警,比如CPU占用或者数据库组件出错,或者上层应用的事件,比如一个消息队列太长了。 2. 指标的测量 如果要监控的系统本身有完美的日志和告警通知,那么指标的检测就不那么重要。但实际场景中,用户不仅要检测客户化的上层应用指标,也希望看到底层的指标值,哪怕仅仅是为了展示。 这时候,就需要一个好的指标测量的方案。这里“好的方案”的意思是稳定,易于维护,容易客户定制化的修改。 ### 本文章的组织和您可能感兴趣的内容 如果您是新手,请让我先来强调一下IRIS, Caché和Ensemble的区别 - IRIS, Cache'是开发平台,而不仅仅是数据库。 ​ 举例来说,iMedical的生产环境有很多“应用服务器”,它们是一个个单独部署的Caché实例。它们并不存数据,而仅仅是应用。因此对Caché应用服务器的监控肯定是和数据服务器是不一样的。 - Ensemble是一个应用 Ensemble是在Caché平台上的开发出的消息引擎框架(framework)。它内置了很多用于消息分发传递的组件,用于搭建一个消息引擎。如果只用内置的组件,那么Ensemble几乎可以被看成一个应用。但现实实施中,程序员会使用已有的组件,适配器等开发定制化的组件,这时候Ensemble就是一个开发框架。 无论如何,Ensemble是工作在Cache'或者IRIS之上的,所以Ensemble的维护人员一定要先学维护Cache'或者IRIS。 综上所述, InterSystems产品的监控包括 - IRIS或者Caché的监控(适用于上面所有3个场景的维护人员),包括的内容 - [IRIS,Caché健康检查](./IRIS和Caché健康检查建议.md) - [IRIS,Caché的日志和错误]() - [指标(metrics)的监控] - 数据库性能的监控(适用于场景一,场景二的维护人员) - SQL性能的监控 - 索引的使用情况的监控 - Ensemble的监控(适用于上面场景三的维护人员), 包括 - Ensemble的日志和错误]() - Ensemble的消息统计 除了最基本的监控有关的工作,文章内容里还会包括最基本的和系统健康检查,提交测试报告的内容。也会介绍一些工具,比如SNMP, InterSystems SAM等等。我在工作中了解的一些用户的好的方案,实现等等, 也会和各位分享。 请看下一篇 [IRIS, Caché监控指导(1)-健康检查](https://cn.community.intersystems.com/post/iris-cach%C3%A9%E7%9B%91%E6%8E%A7%E6%8C%87%E5%AF%BC-%E7%B3%BB%E7%BB%9F%E5%81%A5%E5%BA%B7%E6%A3%80%E6%9F%A5)
文章
Claire Zheng · 四月 21, 2021

云助力的集成平台方案

在医院信息化建设中,如何打通医院的各个系统,给患者提供连续、无缝的良好体验,集成平台发挥着重要作用。而集成平台方案如何适应现在的多云时代、需要具备什么样的特性、如何与多云环境更好地结合以便为医院的信息化建设带来更多的便利?面对这一系列问题,InterSystems中国业务拓展经理李岩为您解读InterSystems集成平台方案的特点和优势,以及构建在VMware云方案上的最佳实践,让您了解云环境下集成平台方案的新特性和优势。
公告
Claire Zheng · 五月 19, 2022

5月27日 | 极客俱乐部:集成平台赋能业务流程再造与创新

在集成平台建设如火如荼的今天,如何能最大程度发挥集成平台价值,让集成平台不再止步于业务系统接口的打通,而是真正作为医院的IT基础架构,释放出更大价值?5月27日,InterSystems技术总监乔鹏 ( @Qiao.Peng )和InterSystems销售工程师王菁伟( @Jingwei.Wang )将针对集成平台建成后的应用价值,围绕“业务流程再造”角度,探讨以低代码方式梳理并再造业务闭环流程、从而赋能业务创新并促进医院精细化管理和高质量发展。点击链接或扫描报名。
公告
Claire Zheng · 六月 14, 2023

2023 年 6 月 13 日 - 公告:进程内存使用量增加

InterSystems 已纠正导致进程内存使用量增加的缺陷。 具体来说,在对局部变量执行$Order 、 $Query 或 Merge时,会出现本地进程分区内存消耗增加的问题。虽然这对大多数运行环境没有不利影响,但支持大量进程或严格限制每个进程最大内存使用的环境可能会受到影响。某些进程可能会遇到<STORE> 错误。 该缺陷存在于2023.1.0.229.0中,但它被重新发布为2023.1.0.235.1,并包含了修复程序,以加快修正,而无需客户等待维护版本。 此缺陷的更正标识为 DP-423127 和 DP-423237。这些将包含在所有未来版本中。 该缺陷出现在 InterSystems IRIS ® 、InterSystems IRIS for Health ™ 和HealthShare ® Health Connect 的版本 2022.2、2022.3 和 2023.1(内部版本 229)中。如果您运行的是这些版本之一,我们建议升级到 2023.1(内部版本 235)。 此修复也可通过 Ad hoc 分发获得。 如果您对此警报有任何疑问,请联系全球响应中心。
文章
Qiao Peng · 三月 29, 2021

CDC系列之二 :使用Dejournaling filter routine在Caché上通过Shadow实现CDC

Caché Shadow 上次介绍了使用InterSystems IRIS/Caché的Reporting类型的异步镜像成员获取数据变更。但早期的Caché并不支持镜像,例如Caché 2008,它只支持Shadow。 在这些早期版本上是否也可以实利用Journal实现类似CDC的功能呢?答案是肯定的,就是利用Shadow服务器的Dejournaling filter routine (Dejournaling过滤器routine)。 Dejournaling filter routine InterSystems Caché的 Dejournaling过滤器routine是一个用户自定义的routine,用于在Shadow服务器上过滤Journal记录。当配置了Dejournaling 过滤器后,Shadow服务器在redo journal前会自动调用Dejournaling过滤器routine。该routine传入参数以下: pid:记录进程ID; dir:源数据库目录; glo:Global节点(包括下标); type: 操作类型,为S (Set)、K (Kill)、s (BITSET)、k (ZKILL); addr:Journal记录在Journal文件中的偏移量; time:记录的时间戳。 该Routine返回1,说明此journal记录需要被Shadow恢复,而返回0说明此journal记录不需要被Shadow恢复。 因为这是一个自定义routine,且会被Shadow服务器恢复Journal时自动调用,因此我们可以利用它记录数据变更。 注意: Shadow配置不在本文内容里,请参考文档: [Caché] https://cedocs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GCDI_shadow 编写Dejournaling filter routine Routine的名字可以任意,但这个routine需要保存在Caché Shadow服务器的%SYS下。 例如,将global的数据变更记录在^CDCLog中: MyShadowFilter(pid,dir,glo,type,addr,time) { Set ^CDCLog($I(^CDCLog))=$lb(dir,glo,type,addr) Quit 1 } 配置Dejournaling filter routine 在 Caché Shadow服务器的系统管理门户的[Home] > [Configuration] > [Shadow Server Settings] 上选择已经建立好的Shadow服务器,选择高级(Advanced)设置,在Filter routine里填写上面创建的routine名称即可。 CDC系列 更多的CDC选项实现,请参考: 1. CDC系列之一 :使用Dejournal Filter在InterSystems IRIS/Caché上通过Mirroring实现CDC功能 2. CDC系列之二 :使用Dejournaling filter routine在Caché上通过Shadow实现CDC 3. CDC系列之三 :建立InterSystems IRIS/Caché的Global数据变更与SQL表记录的对应关系 4. CDC系列之四:使用DSTIME特性在InterSystems IRIS/Caché上实现CDC功能
公告
Claire Zheng · 四月 22, 2021

InterSystems开发者工具编程大赛投票时间:为你心目中的最佳App投票吧!

亲爱的社区开发者们: 本周进入 InterSystems 开发者工具编程大赛 投票时间(4月19日-25日)! 来为你心目中基于InterSystems IRIS而构建的最佳方案投票吧! 🔥 投票入口: 点击投票 🔥 如何投票?有哪些最新信息值得了解一下? 所有的InterSystems员工均可为专家提名奖(Experts Nomination)或社区提名奖(Community Nomination)投票。 所有社区开发者都可以为自己提交的项目投票——投票将根据用户的Global Master级别自动计入专家提名奖(Experts Nomination)和社区提名奖(Community Nomination)。 根据目前的投票引擎和算法,您可以选择三个项目进行投票,选出您心目中的一、二、三名。以下是社区排行榜说明: 社区(Community)提名投票计分方式 如果您满足以下条件 提名 第一名 第二名 第三名 如果您在DC上发布过帖子,且在Open Exchange上传过App 9 6 3 如果您在社区发布过至少一篇帖子,或者在Open Exchange上传过至少一个App 6 4 2 如果您在社区进行过有效贡献(包括发表评论/提问等等) 3 2 1 专家(Experts)提名投票计分会有更复杂的数学计算,不同级别的专家有更多的“点数”权力: 专家(Experts)提名投票计分方式 级别 提名 第一名 第二名 第三名 Global Maters VIP级 & InterSystems产品经理 15 10 5 Global Master 大使级(Ambassador) 12 8 4 Global Master专家级(Expert)& 社区管理员/版主 9 6 3 Global Master专业级(Specialist) 6 4 2 Global Master初级倡导员(Advocate)& InterSystems员工 3 2 1 系统会根据您的级别,对社区(Community)提名和专家(Experts)提名分别自动计票。 请看投票演示(请注意您提名项目的分数变化): 为了顺利参加投票,您需要: 登录 Open Exchange – 利用开发者社区账号即可 确保您在开发者社区进行过有效贡献——回答问题、提问、发帖、在Open Exchange上传应用程序——然后您就可以进行投票了。 点击了解如何成为社区“活跃”用户 。 如果您改变了主意,可以取消并投票给其他您看中的应用——您有充分的时间选择(4月19日-25日)! 提醒:在投票期间,参赛者可以继续修复bug,提升应用,所以投票者不要错过最新发布的版本哦~ ➡️ 点击查看最新 InterSystems在线竞赛投票规则.
文章
Weiwei Gu · 九月 28, 2022

使用嵌入式Python生成数据流

Hi Developers, 嗨,各位开发者们: 各位都知道,Python是一个庞大而强大的生态系统,包含了成千上万的库和包,特别是在数据科学方面。 因此,我想首次尝试使用IRIS最近的一项功能--嵌入式Python,简单地导入一个名为datetime的Python库,生成带有时间戳成分的数据,并在InterSystems IRIS for Health Data Platform中持久化。同样的方法在IRIS数据平台上也可以使用。 我把这个小项目分成了两个主要部分。 *按照IRIS for Health Data Platform的文档设置嵌入式Python环境*使用嵌入式Python创建时间戳数据作为例子,并使用datetime包持久化到IRIS。 1. 在 InterSystems IRIS for Health Data Platform 2022.1 上设置嵌入式 Python。 在Windows上,打开CMD terminal C:\InterSystems\IRISHealth\bin>irispip install --target C:\InterSystems\IRISHealth\mgr\python numpy 注意:这是检查嵌入式Python环境的步骤,因为我发现当我使用IRIS 2021.0时,irispip经常不工作。 通过导入一个Python math packge来测试Python功能 打开IRIS终端,在USER命名空间中执行以下程序:set pymath = ##class(%SYS.Python).Import("math") 然后执行write pymath.pi,你可以看到你已经成功调用了Python包,输出结果如下。 USER>write pymath.pi 3.141592653589793116 而我们也可以通过从IRIS terminal打开来启动Python shell。 do ##class(%SYS.Python).Shell() Class User.PythonFirstTry Extends %RegisteredObject{ClassMethod pyHello() As %Status{ set pythonBuiltins = ##class(%SYS.Python).Builtins() do pythonBuiltins.print("Hello World!")}ClassMethod pyForLoop() [ Language = python ]{ for i in range(5): print("Python")}} 我写了两个类方法,你可以试着把它们放在一个.cls文件中,编译一下,看看输出。 执行方法如下: USER>do ##class(User.PythonFirstTry).pyHello() Hello World! USER>do ##class(User. PythonFirstTry).pyForLoop() Python Python Python Python Python 2. 使用python库来生成数据流并持久化到InterSystems IRIS中。 生成数据流所需的Python库: 导入datetime包(这不需要使用CLI进行额外的安装)。除了datetime包,我还尝试使用了其他的库和包,但是其中一些并不在Embedded Python中。要安装这些东西,请打开 CMD terminal (Windows),然后运行以下程序 (XX 将被替换成包的名称)。 C:\InterSystems\IRISHealth\bin>irispip install XX 以下是生成数据并持久化到IRIS的步骤: 1.创建 %Persistent类 2. 创建Property3.设置一个类方法(例如:GetData)并指定[Language = python] 。4.通过调用datetime python库生成数据,使用以下代码片段 注意:timeNow需要被转换为字符串数据类型 5.通过IRIS terminal 执行GetData()方法,执行SQL查询 注意:你可以使用一种简单的 "For " 循环来控制这种方式产生的数据量的规模。 感谢翻译!! @Weiwei.Gu
文章
Michael Lei · 五月 16, 2021

将普通 ObjectScript 持久化类暴露为 FHIR 代码系统和值集

[FHIR 术语服务](https://www.hl7.org/fhir/R4/terminology-service.html)规范描述了一组对 [CodeSystem](https://www.hl7.org/fhir/R4/codesystem.html)、[ValueSet](https://www.hl7.org/fhir/R4/valueset.html) 和 [ConceptMap](https://www.hl7.org/fhir/R4/conceptmap.html) 资源的操作。 在这些操作中,以下四种操作似乎是最为广泛采用的: | CodeSystem | ValueSet | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [$lookup](https://www.hl7.org/fhir/R4/codesystem-operation-lookup.html)[$validate-code](https://www.hl7.org/fhir/R4/codesystem-operation-validate-code.html) | [$expand](https://www.hl7.org/fhir/R4/valueset-operation-expand.html)[$validate-code](https://www.hl7.org/fhir/R4/valueset-operation-validate-code.html) | 开发该规范的部分实现一直是探索 IRIS for Health 2020.1 中引入的[全新 FHIR 框架](https://docs.intersystems.com/irisforhealth20203/csp/docbook/Doc.View.cls?KEY=HXFHIR_server_intro#HXFHIR_server_arch)的有效途径。 本[实现](https://github.com/intersystems-ru/fhir-terminology-service)包括上述四种操作,并支持与 [CodeSystem](https://www.hl7.org/fhir/R4/codesystem.html) 和 [ValueSet](https://www.hl7.org/fhir/R4/valueset.html) 资源的[读取](https://www.hl7.org/fhir/R4/http.html#read)和[搜索](https://www.hl7.org/fhir/R4/http.html#search)交互。 需要注意的是,本实现使用普通 ObjectScript 持久化类作为源术语表。 ### 安装和测试示例策略 下面列出了安装和基本测试步骤: 1. 安装 IRIS for Health 2020.1 或更新版本。 2. 使用门户的 `System Administration` > `Configuration` > `System Configuration` > `Namespaces` 菜单或在 HSLIB 命名空间中运行命令 `do ##class(HS.HC.Util.Installer).InstallFoundation("")` 来建立一个新的命名空间。 然后从 [intersystems-ru/fhir-terminology-service](https://github.com/intersystems-ru/fhir-terminology-service) GitHub 仓库的 [src/cls](https://github.com/intersystems-ru/fhir-terminology-service/tree/main/src/cls/) 和 [samples/cls](https://github.com/intersystems-ru/fhir-terminology-service/tree/main/samples/cls/) 文件夹导入类。 3. 基于 R4 数据集以及在 [dummy-search-parameters.json](https://github.com/intersystems-ru/fhir-terminology-service/blob/main/src/fhir-search-parameters/dummy-search-parameters.json) 中定义的附加搜索参数,创建一个自定义 FHIR 元数据集。 这可以使用 `##class(HS.FHIRServer.ConsoleSetup).Setup()` 交互实用工具或运行以下命令来完成: ``` do ##class(HS.FHIRServer.Installer).InstallMetadataSet("", "", "HL7v40", $lb(""), 1) ``` * 为了使 `$expand` 和 `$validate-code` 操作支持 HTTP GET 请求,此步骤是必需的。 * 请注意,与 InterSystems IRIS 一起打包的 FHIR 元数据集文件位于 `/dev/fhir/fhir-metadata` 目录中。 4. 基于新的元数据集和 [Sample.iscru.fhir.fts.SimpleStrategy](https://github.com/intersystems-ru/fhir-terminology-service/blob/main/samples/cls/Sample/iscru/fhir/fts/SimpleStrategy.cls) 类创建一个新的 FHIR 端点。 同样,这可以使用交互实用工具或运行以下命令来实现: ``` do ##class(HS.FHIRServer.Installer).InstallInstance("", "Sample.iscru.fhir.fts.SimpleStrategy", "") ``` 5. 允许对新端点进行未经身份验证的访问:使用交互实用工具或运行以下[命令](https://docs.intersystems.com/irisforhealth20203/csp/docbook/Doc.View.cls?KEY=HXFHIR_server_install#HXFHIR_server_install_program_configure): ``` set strategy = ##class(HS.FHIRServer.API.InteractionsStrategy).GetStrategyForEndpoint("") set config = strategy.GetServiceConfigData() set config.DebugMode = 4 do strategy.SaveServiceConfigData(config) ``` 6. 填充 [Sample.iscru.fhir.fts.model.CodeTable](https://github.com/intersystems-ru/fhir-terminology-service/blob/main/samples/cls/Sample/iscru/fhir/fts/model/CodeTable.cls): ``` do ##class(Sample.iscru.fhir.fts.model.CodeTable).Populate(10) ``` 7. 将 [fhir-terminology-service.postman_collection.json](https://github.com/intersystems-ru/fhir-terminology-service/blob/main/tests/postman/fhir-terminology-service.postman_collection.json) 文件导入到 Postman 中,调整集合内定义的 `url` 变量,然后针对 `Sample.iscru.fhir.fts.model.CodeTable`(一个简单的持久化类)测试服务。 ### 支持的 FHIR 交互 目前 CodeSystem 和 ValueSet 都支持的唯一搜索参数是 `url`。 上述四种操作均支持 HTTP GET 和 HTTP POST 方法。 下表列出了一些针对 [Sample.iscru.fhir.fts.model.CodeTable](https://github.com/intersystems-ru/fhir-terminology-service/blob/main/samples/cls/Sample/iscru/fhir/fts/model/CodeTable.cls) 类的可能 HTTP GET 请求。 | URI(前面加上 `http://:`) | 描述 | | ---------------------------------------------------------------------------- | ------------------------------------------------------------- | | /metadata | 获取端点的能力描述资源。 | | /CodeSystem/Sample.iscru.fhir.fts.model.CodeTable | 读取与 Sample.iscru.fhir.fts.model.CodeTable 类对应的 CodeSystem 资源。 | | /ValueSet/Sample.iscru.fhir.fts.model.CodeTable | 读取与 Sample.iscru.fhir.fts.model.CodeTable 类对应的 ValueSet 资源。 | | /CodeSystem?url=urn:CodeSystem:CodeTable | 通过 url 搜索 CodeSystem 资源。 | | /CodeSystem | 输出所有可用 CodeSystem 资源。 | | /ValueSet?url=urn:ValueSet:CodeTable | 通过 url 搜索 ValueSet 资源。 | | /ValueSet | 输出所有可用 ValueSet 资源。 | | /CodeSystem/$lookup?system=urn:CodeSystem:CodeTable&code=TEST | 在给定系统和代码的情况下,获取有关该概念的所有详细信息。 | | /ValueSet/$expand?url=urn:ValueSet:CodeTable | 展开 ValueSet。 | | /CodeSystem/Sample.iscru.fhir.fts.model.CodeTable/$validate-code?code=TEST | 验证某个代码是否在代码系统中。 | ### 创建自定义策略 为了将您自己的持久化类公开为 FHIR 代码系统/值集,您需要创建自定义策略类,方法是先将 [iscru.fhir.fts.FTSStrategy](https://github.com/intersystems-ru/fhir-terminology-service/blob/main/src/cls/iscru/fhir/fts/FTSStrategy.cls) 子类化,然后基于新的自定义策略创建 FHIR 端点(请参见上面的安装步骤 4)。 您的策略类必须覆盖一个类参数和至少三个方法: * `StrategyKey` 类参数应该被指定一个唯一值。 当前类的名称似乎是一个好选择。 * `getCodeTablePackage()` 类方法应该返回通过[规范 URL](https://www.hl7.org/fhir/R4/resource.html#canonical) 标识的给定代码系统(或值集)的包名称。 通常,所有术语类都属于一个包,因此该方法通常会返回一个相同的包名称,不管参数值如何。 * `getCodePropertyName()` 和 `getDisplayPropertyName()` 类方法应该返回与 `code` 和 `display` 概念元素对应的类属性的名称。 不同的类可能有不同的属性映射到术语 code/display 元素。 [iscru.fhir.fts.FTSStrategy](https://github.com/intersystems-ru/fhir-terminology-service/blob/main/src/cls/iscru/fhir/fts/FTSStrategy.cls) 的其他可能适合覆盖的方法和参数如下: * `listCodeTableClasses()` 类方法需要覆盖,才能支持以返回所有可用代码系统(或值集)为结果的搜索请求。 此方法应该返回所有可用术语类的类名称列表。 [Sample.iscru.fhir.fts.SimpleStrategy](https://github.com/intersystems-ru/fhir-terminology-service/blob/main/samples/cls/Sample/iscru/fhir/fts/SimpleStrategy.cls) 包含此方法的以下基本实现: ``` /// Returns a list of all available code table classes. ClassMethod listCodeTableClasses() As %List { #dim sql As %String = "SELECT name FROM %Dictionary.ClassDefinition WHERE name LIKE '" _ ..#codeTablePACKAGE _ ".%' ORDER BY name" #dim resultSet As %SQL.StatementResult = ##class(%SQL.Statement).%ExecDirect(, sql) if (resultSet.%SQLCODE '= 0) && (resultSet.%SQLCODE '= 100) $$$ThrowStatus($$$ERROR($$$SQLError, resultSet.%SQLCODE, resultSet.%Message)) #dim return As %List = "" while resultSet.%Next() { set return = return _ $lb(resultSet.name) } quit return } ``` * 如果您的持久化类的任何特定属性都不应出现在 CodeSystem 资源中,则需要覆盖 `isExcludedProperty()` 类方法。 默认情况下,此方法会过滤掉 `Collection`、`Identity`、`Internal`、`MultiDimensional` 和 `Private` 属性。 需要注意的是,对象引用和流属性当前不受框架支持并被忽略。 * `codeSystemUrlPREFIX` 和 `valueSetUrlPREFIX` 类参数以及 `getCodeSystemForClassname()`、`getValueSetForClassname()`、`determineCodeTableClassname()` 和 `determineCodeSystemForValueSet()` 方法控制类名称与[规范 URL](https://www.hl7.org/fhir/R4/resource.html#canonical) 相互映射的方式。 默认情况下,对规范 URL 使用以下命名方案: | CodeSystem | ValueSet | | ----------------------------------------- | --------------------------------------- | | `urn:CodeSystem:` | `urn:ValueSet:` | 请注意,CodeSystem/ValueSet 资源的[逻辑 id](https://www.hl7.org/fhir/R4/resource.html#id)(也就是服务器 id)等于其对应类的全名。 ### 待完成功能 目前缺少的是对代码系统版本管理、概念层次结构和 `$subsumes` 操作、ConceptMap 资源以及其他许多内容的支持。 欢迎发表意见和拉取请求!
文章
Botai Zhang · 一月 26, 2021

利用Intersystems IRIS医疗版数据平台内置多模型整合医院信息查询业务解决方案

利用Intersystems IRIS医疗版数据平台内置多模型整合 医院信息查询业务解决方案 概述: 随着医院信息化建设的逐步完善,医院子系统越来越多,系统间接口越来越多,同时接口费用不断增加,管理工作变得越来越复杂。其中,查询类业务接口根据业务类型分化,数量也是逐步递增,带来接口量大、开发工作繁重、代码冗余、维护困难等等问题。针对这一困境,我们利用Intersystems IRIS数据平台内置多模型整合医院信息查询业务解决方案。该应用程序可通过内置模型应用完成查询业务,大大缩小开发、维护、实施等项目关键运转周期。 应用链接:HealthInfoQueryLayer 关键应用:IRIS for Health、REST API、ObjectScript、Globals 、SQL、DATA LOOKUP TABLES 应用程序采用模型及应用介绍: 1.采用模型 1.1. Globals (key-value) Globals是可以在IRIS数据库中存储和管理的稀疏多维数组。您可以使用ObjectScript和本机API处理Globals。 工具: https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GGBL_MANAGING 应用: 应用程序根据Globals的键值对、访问速度快的特性。应用在本次程序的Rest分派类与BP流程管理中取值应用,解决了频繁取值速度慢、实现在查找表前端页面配置操作,如:存储了SQL模型、服务配置信息等等。 1.2. SQL访问 InterSystems IRIS通过 ObjectScript、REST API及JDBC提供对数据的SQL访问. 工具: https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=GSQL_smp 应用: 在查询业务中,三方系统不配合接口改造,导致接口实现困难问题。此时,我们采用IRIS内嵌模型ObjectScript、REST API及JDBC来实现对数据的SQL访问,来建立业务接口。 1.3. Object访问 通过ObjectScript、REST API,InterSystems IRIS提供了在Globals 存储和更改对象实例的途径。 文档: https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=PAGE_multimodel_object 应用: 在整个交互过程中,直接操纵InterSystems IRIS对象。ObjectScript类定义通常用作创建对象(例如患者,科室或医护人员)的模板。 建立应用案例(此应用程序以患者为例) 2.1应用搭建: 2.1.2基本环境 IRIS版本信息:IRIS for Windows (x86-64) 2020.1 (Build 215U) Mon Mar 30 2020 20:14:33 EDT [HealthConnect:2.1.0] IRIS具有JAVA、JDBC环境 可采用PostMan进行测试 2.1.2安装步骤 ①建立Rest服务 新建Web应用程序→配置分派类→配置权限。 该步骤可见图片:应用程序运行情况/webaplication(Query).png及webaplication(role).png ②配置SQL-JDBC 建立SQL连接,连接测试数据库Mysql,导入测试jhip_patient_info.sql ③配置查找表 Global-^Ens.LookupTable中查找表文件导入 ④导入代码 导入ApplicationCode中的代码,编译,打开Production, 注意:修改BO配置信息(DNS)、配置JavaGateway等 2.2应用流程 2.3应用测试 可采用Postman工具(其他工具也可以)进行测试验证 Postman可导入Query.postman_collection.json,更改IP、端口号信息、URL进行测试。 2.4应用总结 本应用程序以查询患者为案例,采用IRIS中REST API、ObjectScript、Globals 、SQL内置多种模型实现医院信息查询业务。如果有需要可根据此方案丰富业务满足需求。 最后,如果您认可此解决方案,请在系统间多模型数据库竞赛中为该应用程序投票。 投票链接:投票链接 应用程序名称:HealthInfoQueryLayer 点击Vote投票即可。 感谢各位! 集成平台应用典型案例 感谢您的分享
文章
Claire Zheng · 八月 17, 2021

FHIR标准和国际基于FHIR的互联互通实践(5):FHIR以及InterSystems FHIR参考架构

FHIR是快速医疗互操作资源(Fast Healthcare Interoperability Resources)的缩写,所以FHIR的核心是资源模型。它的颗粒度和结构都优于之前的V2 、V3、CDA标准,而且能够灵活扩展。另外一个优势就是它的API,它不仅提供了针对于资源模型本身的原子化的CRUD(创建、读取、更新、删除的这样一些原子化操作),而且提供了查询这种更复杂操作的能力,同样API是可以扩展的。 此外,之前的互操作标准基本上都不会涉及到数据的保存,而FHIR资源仓库提供了一个全新的架构、全新的思路来使用FHIR,实现这种互操作。 这是InterSystems公司FHIR的参考架构,处于核心的就是FHIR服务器,它向外提供API的接口能力,包括FHIR的事务、FHIR的各种交互跟FHIR操作,底层是FHIR资源仓库,它可以持久化所有的FHIR资源,同时允许FHIR服务器对FHIR资源进行事务性的操作,所有需要使用FHIR API的客户端都可以使用FHIR服务器发布出来的API来进行相应的操作与访问。 上文我们讲到有常见的4种互操作的方式,HL7 FHIR支持所有的这些方式,而且它提供了第5种互操作方式。 首先,通过RESTful API它能够提供一个更紧密的业务集成度、去中心化的互操作能力,比较适合于搭建医疗微服务业务环境,同时比较适合于像云、互联网、物联网这种有紧密业务集成需求的环境。 另外FHIR依然支持以消息、文档方式来进行使用。这两种使用方式兼顾了传统互操作的模式,主要的目标是解决低业务集成度和跨数据管理域的集成和交换需求。 FHIR也可以基于服务来提供这种互操作,例如IHE已经有了大量的场景规范基于FHIR来实现了。 第五种就是我们说的资源仓库。大家可能会觉得奇怪,它怎么会成为一种互操作的方式? 我们先来看看互联互操作需求的起源:上图是比较传统的三层架构的开发模式,从底层的数据模型进行设计,到业务逻辑层,再到用户界面层,创造的是烟囱一样的应用。这种烟囱应用之间就需要通过互操作来打通,实现信息的共享和交换。 假设建设的不是烟囱类型的应用,我们还需要基于消息、文档的交换吗? 来看看生物界。世界上最大的生物是一种巨大的菌丝,在美国的俄勒冈州的蓝山有一种蜜真菌,它被科学家认为这是世界上最大的生物。地下的菌丝是一个整体,连在一起的,看起来独立的一个个蘑菇,其实都是这个巨大生命体的一部分。科学家估计在蓝山的蜜真菌的面积能够达到9.6平方公里,年龄已经差不多1900岁,甚至有人说可能在6500岁之间。 如果说我们把FHIR的资源仓库视为菌丝,基于FHIR资源仓库开发的应用,就是一个个的小蘑菇,它们只需要关注用户界面和业务逻辑,因为它们所有的数据存储和数据访问能力都是由标准的FHIR服务器提供的,而FHIR服务器下面可以接非常多的FHIR资源仓库,也就说资源仓库可以不止一个。这就是虚拟的集中式架构,在虚拟集中式的架构下的所有应用天生就是互联互通的,这就是FHIR的第5种互操作模式。 大家可能会问真有人这么做吗?还真有——SMART on FHIR就是比较典型的这种应用方式。 SMART是 “可替代医疗应用的、可重复使用技术”的缩写,它起初是哈佛医学院跟波士顿儿童医院在2011年开启的一个项目,它这个项目目标是用来创建这种可复用、可替代的应用开发架构。显然FHIR提供的这种标准化的数据模型和API是SMART能够实现的基础——的确是,在2014年SMART 跟 FHIR融合出来一个新的项目就是今天的SMART on FHIR。这个应用程序开发的架构使用标准的FHIR资源模型,使用标准的FHIR API来操作资源数据,使用OAuth2 和OpenID实现统一的认证授权,而开发者只需要关注在业务逻辑和应用层面。它开发出来的SMART应用底层的数据都保存在FHIR服务器和FHIR资源仓库里面,这些应用跟我们的手机的APP一样,都是即插即用的。这些即插即用的应用可以在所有支持 FHIR的服务器和FHIR资源仓库上实现,而且可以复用。 这些应用程序里面并不保存数据,我们不用担心数据跟应用共存亡的问题,因此这些应用其实可以随时被替代。如果你觉得它不好,有一个更好的应用你觉得喜欢,就直接把旧的扔了,插一个新的应用就ok了,这种建设的应用天生就是互联互通的。 注:本文根据InterSystems中国技术总监乔鹏演讲整理而成。
公告
Claire Zheng · 十月 24, 2022

获奖名单公布!一起来关注InterSystems开发者社区中文版首届技术征文大赛

各位开发者社区的同学们,大家好! 我们的🏆InterSystems开发者社区中文版首届技术征文大赛🏆(←点击链接进入参赛页面,浏览所有参赛文章)已经结束,此次大赛收到了来自20名参赛者的30篇参赛文章,感谢大家的积极参与! 以下是获奖名单! 1. 专家提名奖:活动期间发布文章且成功参赛后,由InterSystems专家评选得出 🥇一等奖1名,Apple iPad @Zhe Wang 获奖作品:IRIS如何进行CRUD操作 🥈二等奖2名,Beats Fit Pro @姚 鑫 获奖作品:IRIS与Caché的23种设计模式 @聆严 周 获奖作品:使用Prometheus监控Cache集群 🥉三等奖3名,WD 固态硬盘 @John Pan 获奖作品:如何调用Ensemble/IRIS内置的HL7 V2 webservice - Java,PB9,Delphi7样例 @he hf 获奖作品:10分钟快速开发一个连接到InterSystems IRIS数据库的C#应用 @sun yao 获奖作品:前端操作自动生成BS、BP、BO 2. 开发者社区奖:活动期间发布文章且成功参赛后,由社区成员点赞评选得出,点赞前五名获得以下奖品 🥇第一名,HUAWEI WATCH 3智能手表 @Meng Cao 获奖作品:Caché数据库私有apache版本升级 🥈第二名,罗技(Logitech)ERGO键盘 @lizw lizw 获奖作品:关于%Dictionary.CompiledClass类在实际业务中的一些应用 🥉第三名-第五名,KEEP 运动智能手环 @Chang Liu 获奖作品:在国产系统上安装Healthconnect2021 @shaosheng shengshao 获奖作品:HEALTHSHARE2018版如何实现AES(CBC)的HEX输出,并可以实现加密和解密 @Guangliang Zhang 获奖作品:基于cconsole.log的cache数据库的实时监控 3. 入围奖:在征文大赛期间,所有在InterSystems开发者中文社区发布文章且成功参赛的其余用户都将获得特别奖励。 @water huang 获奖作品:对 %XML.PropertyParameters类的探索 @zhanglianzhu zhanglianzhu 获奖作品:Cache死循环检测和申明式事务 @li wang 获奖作品:HealthConnect访问HTTPS开头地址 @bai hongtao 获奖作品:第三方HA软件结合MIRROR使用方法探讨 @Liu Tangh 获奖作品:在Cache系统中使用负载均衡服务的探讨 @yaoguai wan 获奖作品:IRIS架构的浅显理解以及windows10、docker安装IRIS Health详解流程及部分问题浅析 @li dong 获奖作品:实现Cache/IRIS中zip文件的下载、解压及读取 @Yuxiang Niu 获奖作品:Cache中不同类型锁的理解与分析 @Vincent Wu 获奖作品:TrakCare Lab之延伸应用-护理站自动采检备管系统(NSAD)之开发 感谢大家的积极参与! 请获奖嘉宾及时通过此链接提交相关信息,以便我们及时与您联系奖品寄送事宜。
问题
Michael Lei · 五月 18, 2021

来自英文社区:迁移Oracle到Caché

大家好,首先,为我的无知感到抱歉,但是,由于我是InterSystems领域的新人,因此我产生了以下疑问:考虑数据库迁移。是否可以以非创伤性的方式获取Oracle数据库并将其完全迁移到Caché?