搜索​​​​

清除过滤器
文章
Lilian Huang · 七月 13, 2022

用 Python 的 Native API 调用类方法

InterSystems Native SDK for Python是 InterSystems IRIS APIs 的轻量级接口,曾经只能通过 ObjectScript 使用。 准确地说,我对调用 ObjectScript 方法、类方法的能力特别感兴趣。 它可以工作,而且效果很好,但默认情况下,调用只支持标量参数:字符串、布尔值、整数和浮点数。 但如果你想: - 传递或返回结构,例如字典或列表 - 传递或返回流 您需要编写一些粘合代码或使用这个project (使用 pip install edpy 安装)。 edpy 包会给你一个简单的签名: call(iris, class_name, method_name, args) 它允许您调用任何 ObjectScript 方法并返回结果。 像这样导入它: from edpy import iris call accepts 4 required arguments:- iris - a reference to an established IRIS object- class_name - IRIS class to call- method_name - IRIS method to call- args - list of 0 or more arguments 参数 每个参数可以是以下其中之一: string字符串(任意长度,如果大于 $$$MaxStringLength或 3641144 个符号,则会自动转换为流 boolean布尔值 integer整数 float 浮动 dict字典(转换为动态对象) list or tuple列表或元组(转换为动态数组) 字典、列表和元组参数可以递归地包含其他字典、列表和元组(持续性内存)。 返回值 在返回值,我们期望是动态对象/数组或 JSON 字符串/流。 在这种情况下,edpy 会首先将其转换为 Python 字符串,并在可能的情况下将其解释为 Python 字典或列表。 否则,结果将按原样返回给调用者。 就是这样,但让我给你一些 ObjectScript 方法的例子,以及如何使用这个 Python 函数调用它们。 示例1: Pong ClassMethod Test(arg1, arg2, arg3) As %DynamicArray{ return [(arg1), (arg2), (arg3)]} 调为: >>> iris.call(iris_native, "User.Py", "Test", [1, 1.2, "ABC"])[1, 1.2, 'ABC'] 这里没有惊喜。 参数被打包回一个数组并返回给调用者。 示例 2: 属性 ClassMethod Test2(arg As %DynamicObject) As %String{ return arg.Prop} 像这样调用: >>> iris.call(iris_native, "User.Py", "Test2", [{"Prop":123}])123 现在进行更嵌入式的调用: >>> iris.call(iris_native, "User.Py", "Test2", [{"Prop":{"Prop2":123}}]) {'Prop2': 123} 如果属性太长也没关系 - 流将用于将其发送到 IRIS 和/或返回: ret = iris.call(iris_native, "User.Py", "Test2", [{"Prop":"A" * 10000000}]) >>> len(ret) 10000000 如果您需要保证InterSystems IRIS 端的流,您可以使用%Get: set stream = arg.%Get("Prop",,"stream") 如果流是 base64 编码的,您可以使用以下命令自动对其进行解码: set stream = arg.%Get("Prop",,"stream<base64") 示例 3: 字符串或流 ClassMethod Test3(arg As %Stream.Object) As %String { set file = ##class(%Stream.FileCharacter).%New() set file.TranslateTable = "UTF8" set filename = ##class(%File).ManagerDirectory() _ "test.txt" do file.LinkToFile(filename) if $isObject(arg) { set sc = file.CopyFromAndSave(arg) } else { do file.Write(arg) set sc = file.%Save() } if $$$ISERR(sc) { set jsonret = {"status":0, "payload":($system.Status.GetErrorText(sc))} } else { set jsonret = {"status":1} } quit jsonret.%ToJSON() } 这里我们将字符串或流写入 <mgr>test.txt。 >>> iris.call(iris_native, "User.Py", "Test3", ["😊"]) {'status': 1} 注意:在所有代码示例中输入为“&# x1f642;“。 如果我打开文件,我会看到一个 😊 而不是两个 ?? - 所以我们保留编码。 >>> iris.call(iris_native, "User.Py", "Test3", ["🙂" * 10000000]) {'status': 1} 为简便起见,我将省略文件输出,但它就在那里。 最后,通过在内部传递一个动态对象或数组,您可以完全避免字符串/流二分法,即使您不知道该属性是比字符串限制短还是长。 在这种情况下,您始终可以像流一样获取可疑属性。 示例4: 返回流 ClassMethod Test4(arg As %DynamicArray) As %String { return arg.%Get(0) } 看起来是这样: >>> ret = iris.call(iris_native, "User.Py", "Test4", [["😊" * 10000000]]) >>> len(ret) 10000000 >>> ret[:5] '😊😊😊😊😊' 还有一件事 还有一个 get_iris(ip="localhost", port=1972, namespace="USER", username="_SYSTEM", password="SYS") 函数可以让您获得一个工作的 IRIS 对象。 所以这里有一个完整的例子,如果你想自己尝试一下: 首先加载 User.Py class 并安装 edpy python 库: pip install edpy 然后在python调用中: from edpy import iris iris_native = iris.get_iris() iris.call(iris_native, "User.Py", "Test", [1, 1.2, "ABC"]) iris.call(iris_native, "User.Py", "Test2", [{"Prop":123}]) iris.call(iris_native, "User.Py", "Test2", [{"Prop":{"Prop2":123}}]) ret2 = iris.call(iris_native, "User.Py", "Test2", [{"Prop":"A" * 10000000}]) iris.call(iris_native, "User.Py", "Test3", ["😊"]) iris.call(iris_native, "User.Py", "Test3", ["😊" * 10000000]) ret4 = iris.call(iris_native, "User.Py", "Test4", [["😊" * 10000000]]) 结论 适用于 Python 的 Native SDK 是一个强大的工具,为您提供对 InterSystems IRIS 的完整且不受限制的访问。 我希望这个项目可以为您节省一些时间来编组 InterSystems IRIS 调用。 是否有一些它不支持的方法参数组合? 如果是这样,请在评论中分享您是如何调用的。 链接: Native SDK Docs User.Py class Repo 原文请参考链接:https://community.intersystems.com/node/521336
文章
姚 鑫 · 八月 23, 2022

第十章 配置数据库(二)

# 第十章 配置数据库(二) # 本地数据库 “本地数据库”页面显示关于系统上的数据库的以下信息: - `Name`—数据库名称。 - `Mirror`——如果数据库是镜像的,则镜像的名称; - `Directory` - `IRIS.DAT` 文件的位置。 - `Size` 大小 (MB) — 以 `MB` 为单位的数据库大小。 - `Status` 状态 — 指定数据库是挂载、卸载还是卸载;如果已挂载,则指定它是否具有只读或读写权限。 - `Resource Name`资源名称 — 控制对数据库的访问的数据库资源的名称; - `Encrypted` — 指定数据库是否加密; - `Journal` 指定数据库是否被记录; ## 创建本地数据库 要创建本地数据库,请导航到本地数据库页面(系统管理 > 配置 > 系统配置 > 本地数据库)。 1. 单击创建新数据库以打开数据库向导。 2. 在文本框中输入数据库名称。数据库名称必须: - 尚未在 `IRIS` 实例中使用 - 长度在 `1` 到 `30` 个字符之间 - 以字母字符或下划线开头;其余部分可以包括字母数字字符、破折号或下划线 3. 首次使用特定浏览器在 `IRIS` 实例中创建本地数据库时,必须 - 输入数据库目录的名称,在这种情况下,包含 `IRIS.DAT` 文件的目录在确认后将在 `c:\InterSystems\mgr` 中创建 - 单击文件夹图标浏览到现有目录,在这种情况下,将在该目录中创建 `IRIS.DAT` 文件 此后,默认情况下,将在与先前数据库目录相同的位置创建一个与提供的数据库名称相同的目录,其中包含 `IRIS.DAT` 文件。例如,如果首先在 `c:\InterSystems\mgr` 下的任何目录中创建数据库 `db22`,当再次单击 `Create New Database` 并在 `Enter the name of your database` 框中输入 `db33` 时,`c:\InterSystems\mgr\db33` 会自动填写到数据库目录文本框中。如果将其更改为 `c:\InterSystems\db33` 并创建 `db33`,则下次将填充基本目录 `c:\InterSystems`。 注意:不支持在配置数据库目录时使用符号链接。 4. 单击下一步继续配置数据库。如果指定的目录中已经存在 `IRIS.DAT` 文件,会收到警告,并且可以 - 单击完成以使用现有文件,在这种情况下,所有数据库特征都由 `IRIS.DAT` 文件确定。您通常会在从另一个实例复制或移动数据库时执行此操作,或者在同一系统上临时挂载在另一个实例中创建的数据库时执行此操作。 - 单击 `Back` 指定另一个目录,然后再次单击 `Next` 以在下一步中继续指定新数据库的特征。 5. 在 `Initial Size` 文本框中,键入数据库大小的兆字节数(默认值为 `1 MB`)。 **注意:不能创建或编辑数据库,使其大小大于可用的总磁盘空间。如果指定的大小在磁盘可用空间的 `90%` 以内,会收到警告并且必须确认操作。** 6. 从 `Block size for this database will be` 下拉列表中选择所需的块大小。默认情况下,所有新数据库都使用 `8 KB` 的块大小创建。 注意:请勿从下拉列表中选择 `8 KB` 以外的块大小,除非已阅读并理解大块大小注意事项`/` 7. 从 `Journal globals` 中选择是否要在此数据库中记录全局变量`?`下拉列表。 注意:如果将数据库配置为存储临时全局变量,将 `Journal globals` 属性设置为 `No` 与将临时全局变量存储在 IRSTEMP 中是不同的。 8. 如果激活了加密,可以通过选择是加密数据库来加密这个数据库?。 9. 如果实例是镜像的一部分,可以通过为 `Mirrored Database?` 选择 `Yes` 来将此数据库添加到镜像中。 10. 从此面板开始,可以单击下一步。继续配置数据库或完成以接受剩余的默认值。 11. 选择资源来控制对该数据库的访问: - 默认值 — `%DB_%DEFAULT` - 现有 - 从现有数据库资源列表中选择 - 新建 — 创建新的数据库资源(新名称默认为 `%DB_%` 数据库名称) 12. 单击下一步查看数据库属性列表。 13. 单击完成以添加数据库。 现在已准备好配置和管理新数据库。 **注意:为防止意外损坏数据库,不能打开或写入名为 `IRIS.DAT` 的操作系统文件,即使它不是已安装的数据库。**
公告
Claire Zheng · 十月 20, 2022

【最新排名(按点赞)】投票倒计时三天:继续为你喜欢的征文作品投票吧!

2022年9月5日-10月24日(北京时间),我们正在举办🏆InterSystems开发者社区中文版首届技术征文大赛🏆(←点击链接进入参赛页面,浏览所有参赛文章)!投票截止至10月23日,你的支持与喜爱,是优秀作品获得“开发者社区奖”的关键!我们先来看看目前作品排名情况吧!距离投票截止还有三天(截止至10月23日),我们暂时无法获得专家评审分数,以下根据作品“点赞”进行排名(排名截至10月21日10时)。 N Author 标题 点赞⬇ 1 Meng Cao Caché数据库私有apache版本升级 42 2 Zhe Wang IRIS如何进行CRUD操作 37 3 sun yao 前端操作自动生成BS、BP、BO 26 4 John Pan 论集成标准的选择对医院信息集成平台建设的影响 23 5 lizw lizw 关于%Dictionary.CompiledClass类在实际业务中的一些应用 23 6 聆严 周 使用Prometheus监控Cache集群 21 7 Chang Liu 在国产系统上安装Healthconnect2021 19 8 Zhe Wang IRIS快速查询服务思路分享 18 9 Zhe Wang 使用Global进行数据可视化---商业智能(BI) 18 10 John Pan 如何调用Ensemble/IRIS内置的HL7 V2 webservice - Java,PB9,Delphi7样例 17 11 zhanglianzhu zhanglianzhu Cache死循环检测和申明式事务 16 12 Zhe Wang Rest实现Post、Get、Put、Delete几种操作方式 15 13 shaosheng shengshao HEALTHSHARE2018版如何实现AES(CBC)的HEX输出,并可以实现加密和解密 15 14 姚 鑫 IRIS与Caché的23种设计模式 15 15 water huang 对 %XML.PropertyParameters类的探索 15 16 Zhe Wang 小工具:IRIS管理页打开显示查询功能 15 17 聆严 周 Cache / IRIS 操作数据的3种基本方式 14 18 he hf 10分钟快速开发一个连接到InterSystems IRIS数据库的C#应用 14 19 shaosheng shengshao windows下处理IIS在未安装但Healthshare已安装的时候,部署IIS服务并代理Healthshare 11 20 water huang Ens.Util.JSON类的启发 11 21 bai hongtao 第三方HA软件结合MIRROR使用方法探讨 11 22 li wang HealthConnect访问HTTPS开头地址 10 23 Liu Tangh 在Cache系统中使用负载均衡服务的探讨 9 24 yaoguai wan IRIS架构的浅显理解以及windows10、docker安装IRIS Health详解流程及部分问题浅析 7 25 li dong 实现Cache/IRIS中zip文件的下载、解压及读取 7 26 姚 鑫 CORS请求Request携带Cookie失败占用License解决方案 5 27 Zhe Wang COS的基本语法 5 *奖励项目详见参赛规则:点击阅读 我们此次征文大赛计分规则如下: 🥇【专家提名奖】评选规则,由经验丰富的专家评审团进行评选打分,与其他加分项综合后进行排名。 🥇【开发者社区奖】评选规则,每个点赞计分为1分,与其他加分项综合后进行排名。 🥇【入围奖】评选规则,成功参赛的其余用户都将获得特别奖励。 每位作者只可以获得一个奖项(即:您只可以获得一次专家提名奖/开发者社区奖/入围奖); 当出现票数相当的平手情况时,将以专家评选投票数作为最终票数高低的判断标准。 那么,抓住最后五天的投票时间,为你喜欢的作品“点赞”投票吧!你的点赞是优秀作品获得【开发者社区奖】的关键! 10月24日晚19:30-20:30,我们将举办“InterSystems首届技术征文大赛线上分享会”,发布获奖名单,敬请留意后续参会信息! 欢迎关注InterSystems开发者社区中文版首届技术征文大赛
文章
Hao Ma · 十一月 26, 2022

ZPM介绍(3)

## 建立私服(Porxy-Registry) 这张图解释了您的私服是怎么工作的, 整篇文章在这里: [Proxy-Registry](https://community.intersystems.com/post/new-zpm-registry-feature-%E2%80%93-proxy-registry) ![](https://community.intersystems.com/sites/default/files/inline/images/proxy.png) ### 搭建私服 您需要有一台自己的的服务器, 在上面安装IRIS, zpm, 然后用zpm去下载另一个软件包“zpm-registry"。象这样 ```sh zpm:DEMO>search -r zpm-registry registry https://pm.community.intersystems.com: zpm-registry 1.1.11Repository: https://github.com/intersystems-community/zpm-registry/ zpm:DEMO>install zpm-registry [DEMO|zpm-registry] Reload START (/usr/irissys/mgr/.modules/DEMO/zpm-registry/1.1.11/) [DEMO|zpm-registry] Reload SUCCESS [zpm-registry] Module object refreshed. [DEMO|zpm-registry] Validate START [DEMO|zpm-registry] Validate SUCCESS [DEMO|zpm-registry] Compile START [DEMO|zpm-registry] Compile SUCCESS [DEMO|zpm-registry] Activate START [DEMO|zpm-registry] Configure START [DEMO|zpm-registry] Configure SUCCESS [DEMO|zpm-registry] Activate SUCCESS zpm:DEMO> ``` 到github页面, https://github.com/intersystems-community/zpm-registry/, 你可以得到更详细的软件信息。 配置私服连接公服, 需要在私服的IRIS的安装目录添加一个yaml文件, 定义uplink: ```yaml uplinks: pm: url: https://pm.community.intersystems.com/ allow_packages: dsw,zpm*,?u* ``` 几点说明: - uplinks的项目可以有多个,pm是intersystems的默认公共registry - allow_packages: - a comma-separated list of allowed packages, you can use the exact package name or mask: * - any sequence of characters, ? - any charac - registry 提供的rest 接口描述: https://pm.community.intersystems.com/_spec ### 设置zpm client连接私服 通过repo命令将您的zpm client切换到刚刚配置的私服。`repo -n registry`里面的 - user, - pass是你搭建的私服的账号密码。您也可以在私服上修改/registryWeb应用不做用户验证。 ```sh zpm:DEMO>repo -list registry Source: https://pm.community.intersystems.com Enabled? Yes Available? Yes Use for Snapshots? Yes Use for Prereleases? Yes Is Read-Only? No Deployment Enabled? No zpm:DEMO>repo -n registry -r -url http://localhost:52773/registry/ -user superuser -pass demo registry Source: http://localhost:52773/registry/ Enabled? Yes Available? Yes Use for Snapshots? Yes Use for Prereleases? Yes Is Read-Only? No Deployment Enabled? No Username: superuser Password: zpm:DEMO> ``` 这时的私服时没有连接公服。 ### 发布软件包到私服 **发布一个 GitHub 的包** 先把软件存在github, 然后用curl命令把包发布在私服的地址。 ```sh $ curl -i -X POST -H "Content-Type:application/json" -u superuser:1104 -d '{"repository":"https://github.com/psteiwer/ObjectScript-Math"}' 'http://localhost:52773/registry/package’ ``` **使用zpm 客户端先在本地load,然后使用publish 命令** 大概像这个样子: ```sh zpm:USER>help load ... ■ Examples ∙ load C:\module\root\path\ load C:\module\root\path\module-0.0.1.tgz Loads the module described in C:\module\root\path\module.xml ∙ load -dev -verbose C:\module\root\path\ load -dev -verbose C:\module\root\path\module-0.0.1.tgz Loads the module described in C:\module\root\path\module.xml in developer mode and with verbose output. ∙ load https://github.com/user/repository.git load https://github.com/user/repository.git -b branch-name Loads the module described in C:\module\root\path\module.xml in developer mode and with verbose output. zpm:USER> load https://github.com/user/repository.git zpm: USER> publish ``` ## 其他的Feature 在使用中您还会有各种各样的需求, 但我相信看到现在您应该对怎么寻找答案非常清楚了。这里简单的说两个feautre ### 1. 发布为Delopyed模式 如果您要隐藏自己的代码,只发布编译后的软件, 可以简单的修改Module.xml, 设置““, zpm会自动完成。 ### 2. 包的依赖 因为有朋友问,所以说一些包依赖的功能。是的, zpm是设计了包依赖的功能的,在module.xml里添加Dependencies节点, 可以定被依赖的包的列表。 具体的写法请参见这个例子:[module.xml example](https://github.com/intersystems/ipm/wiki/03.-Module.xml#modulexml-example)。 虽然但是,对ObjectScript程序来说,定义包依赖的机会并不多。我能想到的应用场景就是, 当您的软件中想用社区其他包,比如上面的bitmap-adoption的包的话,您可以包"bitmap-adoption"打包到module.xml里面。 我对当前发布的200多软件包随便挑了一些,还没有发现有哪个使用了包依赖, 象这样: ```sh zpm:USER>list-dependents yaml-utils zpm:USER>list-dependents terminal-multiline-editor zpm:USER>list-dependents bitmap-adoption zpm:USER>list-dependents global-dump-sql ... ```
文章
Claire Zheng · 八月 17, 2021

【视频】FHIR标准和国际基于FHIR的互联互通实践

当前医院面临更多互联互通需求,如预约挂号与分级诊疗、检验结果共享、医联体信息化、监管数据上报、临床辅助决策支持等,都需要对多源数据进行集成与整合。医疗机构内部和跨机构数据交换与共享,对互联互通提出新的要求。HL7 FHIR是国际上医疗行业实现数据交换和信息共享的标准之一,正在快速得到医疗行业广泛关注。InterSystems中国技术总监乔鹏在视频中分享了FHIR标准与国际互联互通的一些实践经验。
问题
Michael Lei · 二月 14, 2023

有没有办法导出与Production相关的所有内容?

您好,有没有一种简单的方法可以导出与Production相关的所有内容并在另一个实例中导入? 例如导出Production保存的 db、ns、映射、webapp 相关、资源、角色等 您可以使用InterSystems Package Manager(IPM)列出生产的所有成员,并通过IPM注册表或使用zpmhub将其分发到另一台机器(例如您的客户端)。 例如,您可以将多个EnsDemo产品安装为一个包: 用户>zpm“安装irishealth-ensdemo” 或者最近我发布了一个非常简单的CSV数据转换生产示例,您可以将其安装为一行: USER>zpm "install esh-i14y-csv" 下面是如何在module.xml中描述生产的所有模块。
问题
water huang · 四月 24, 2021

RSAEncrypt加密 只能用证书吗

最近尝试使用 Set Ciphertext=##class(%SYSTEM.Encryption).RSAEncrypt(Plaintext,PublicKeyStr)来加密数据,但是加密失败,参考了以下资料https://community.intersystems.com/post/format-public-key-when-using-rsaencrypt-method-systemencryption-or-systemencryptionrsaencrypt https://blog.ndpar.com/2017/04/17/p1-p8/ 生成的公钥为 -----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvl8YRMOJMUOyK5NzWo+8FD8dGR3DuPwn7M13If+rwYp18TEL58NneFdCL+Jjytx4axq+uhPuup5HtmEm22+PQTzFlXuAhXf3oUm4LQl4zgSb14D6gfqac9DqbVhm+aUjDfItFapM35/DH2cvc+rbBhu4Q5Y6kJwcUK0UbRv3swQIDAQAB-----END PUBLIC KEY----- 转换为pkcs1后的内容为 -----BEGIN RSA PUBLIC KEY-----MIGJAoGBANHPwS9+rVB1TJZM1UGLCBan3CY8TIDPkDAftkI504l68vdUWdPlmcN1YZzCGDK4+LvtzdqLXb/XSA3SxsUrA5toWSh45K7/jDzXRcb0AYiUTWGfpeMrHdcGNL07gVT11FM8M+0Jc5Sw6dvMKVXE9wzAxwgaJo0d8zW8Crbx6iI3AgMBAAE=-----END RSA PUBLIC KEY----- 文件保存为utf-8和ansi格式都不行。错误信息为 error:0906D06C:PEM routines:PEM_read_bio:no start line; 2016之后的版本,RSAEncrypt可以接收X.509证书或RSA公钥,而2016中RSAEncrypt接收证书参数。Ensemble2016上使用RSAEncrypt,如果拿不到证书,仅用公钥,请联系InterSystems 销售工程师。 好的,谢谢
文章
Weiwei Gu · 八月 7, 2023

如何自定义 Web 网关错误消息

InterSystems 常见问题解答标题 您可以为以下 Web Gateway 错误消息/系统响应设置单独的错误页面: 服务器错误 服务器繁忙 服务器无法使用 服务器超时 连接关闭 在 Web Gateway 管理界面上进行设置([Management Portal] > [System Administration] > [Configuration] > [Web Gateway Management] > [Configuration] > [Default Parameters])。 在“默认参数”(Default Parameters )菜单的“错误页面”部分中,设置要显示的 html 页面的文件名或发生错误时要重定向到的 URL。 ※Web网关管理界面也可以从以下URL访问。 http://<web server address>:<port>/csp/bin/Systems/Module.cxw 详细信息请参考以下文档自定义错误页面 [IRIS]
公告
Michael Lei · 十月 24, 2023

官宣对 CentOS 的支持终止

终止对 CentOS 的支持 自 InterSystems IRIS 2023.3 发布起,CentOS 将不再是受支持的开发平台。 CentOS 一直是一个受支持的开发平台,为开发人员提供了相当于 Red Hat Enterprise Linux (RHEL) 的免费版本,用于 IRIS 开发。您可能知道,Red Hat 对 CentOS 进行了重大更改,CentOS 已成为 RHEL 的“上游”。这意味着它具有 RHEL 中尚未包含的错误和功能,这可能会给在该平台上构建的开发人员带来问题。 我们鼓励使用 CentOS 的开发人员利用 Red Hat 的免费开发人员计划来获得 RHEL 的免费开发许可证。 CentOS 继续支持 IRIS 2023.2(及更早版本)。
文章
Jingwei Wang · 六月 20, 2022

IRIS/HealthConnect 高可用机制 Mirror 的配置

安装Arbiter 为了将自动故障转移扩展到尽可能广泛的故障情况,InterSystems建议你为每个镜像配置一个仲裁机。 要充当仲裁者,系统必须有一个正在运行的ISCAgent进程。由于ISCAgent是与InterSystems IRIS一起安装的,任何承载一个或多个InterSystems IRIS实例的系统都符合这一要求,可以被配置为仲裁者而无需进一步准备;但是,承载一个或多个故障转移或DR异步镜像成员的系统不应该被配置为该镜像的仲裁者。 没有托管InterSystems IRIS实例的系统可以通过安装Arbiter方式的作为仲裁者。请从InterSystems公司下载适合你的仲裁者系统平台的ISCAgent安装包,然后,安装ISCAgent。 注意:Arbiter的版本要和InterSystems IRIS安装版本保持一致。 在Windows上安装Arbiter 在Windows系统上,只需执行安装文件,例如ISCAgent-2020.1.0.540.0-win_x64.exe。 在Linux上安装Arbiter [root@arbiterhost home]# gunzip ISCAgent-2020.1.0.540.0-lnxrhx64.tar.gz [root@arbiterhost home]# tar -xf ISCAgent-2020.1.0.540.0-lnxrhx64.tar [root@arbiterhost home]# ./ISCAgent/agentinstall 启动、停止、检查ISCAgent状态 systemctl start ISCAgent.service systemctl stop ISCAgent.service systemctl status ISCAgent.service 设置、终止开机自动启动ISCAgent sudo systemctl enable ISCAgent.service sudo systemctl disable ISCAgent.service 启动 ISCAgent 服务 在所有的服务器中(主机,备机,仲裁机),ISCAgent必须被配置为在系统启动时自动启动。 a. 进入管理工具——服务,选择ISCAgent,将启动类型改为自动。点启动ISCAgent。 b. Windows防火墙中允许ISCAgent TCP端口2188,同时新建出站、进站规则。允许web端口 52773,超级端口1972。 入站规则中运行文件和打印机共享(回显请求 - ICMPv4-In) 配置主failover成员(Primary failover成员) a. 进入Management Portal界面,选择菜单 系统管理 – 配置 – 镜像配置 – 创建镜像。如果选项为灰不可选,先点击 启动镜像服务,再选择 '服务已启用'。 b. 创建Mirror,输入相关信息并保存。 镜像信息部分 : 镜像名称(Mirror Name) : 有效的名称必须是1至15个字母数字字符;小写字母会自动替换为大写字母的对应物。 要求SSL/TLS (Use SSL/TLS): 指定是否要为镜像内的所有通信要求SSL/TLS安全(建议)。如果你选择了 "需要SSL/TLS",而实例还没有一个有效的SSL/TLS配置用于镜像,在完成这个程序之前,你可以直接点击设置SSL/TLS链接,在这个成员上创建所需的SSL/TLS配置。你也可以取消创建镜像程序,并浏览到SSL/TLS配置页面(系统>安全管理>SSL/TLS配置)。 使用仲裁器(Use Arbiter): 指定你是否要配置一个仲裁器(建议)。如果你选择使用仲裁器,你必须提供你想配置为仲裁器的系统的主机名或IP地址以及其ISCAgent进程使用的端口(默认为2188)。 使用虚拟IP(User Virtual IP):如果你选择使用虚拟IP,系统会提示你提供一个IP地址、无类别域间路由(CIDR)掩码和网络接口。 故障转移成员的压缩模式,异步成员的压缩模式 : 分别指定在从主站向备份和异步成员传输之前是否压缩日志数据,以及对每个成员使用哪种压缩类型;两者的默认设置都是 "系统选择",它优化了故障转移成员之间的响应时间以及主站和异步站之间的网络利用率。 一般使用默认设置。 Allow Paralle Dejournaling :确定哪种类型的镜像成员可以运行并行的Dejournal。Paralle Dejournaling允许多个作业在单个数据库中处理独立的globals,而不是只限于并行处理独立的数据库。 镜像故障转移成员信息: 镜像成员名:为你在这个系统上配置的故障转移成员指定一个名称(默认为系统主机名称和InterSystems IRIS实例名称的组合)。镜像成员名称不能包含空格、制表符或以这些标点符号 : [ ] # ; / * = ^ ~ ,字母字符在保存前会转换为大写字母。镜像成员名称的最大长度是32个字符。 超级服务器地址: 输入外部系统可用于与该故障转移成员通信的 IP 地址或主机名称。 代理端口: 输入此故障转移成员上 ISCAgent 的端口号,接受提示中提供的已安装代理的端口。 配置备failover成员(backup failover成员) 进入Management Portal界面,选择菜单 系统管理 – 配置 – 镜像配置 – 加入为故障转移。如果选项为灰不可选,先点击 启动镜像服务,再选择 '服务已启用'。 镜像名称:创建的镜像名称 其他系统上的代理地址: 输入您在配置第一个故障转移成员时指定的超级服务器地址。 代理端口 :输入您在配置第一个故障转移成员时指定的 ISCAgent 的端口。 InterSystems IRIS 实例名称 : 输入配置为第一个故障转移成员的InterSystems IRIS实例的名称。 配置异步镜像成员 选择 系统管理 – 配置 – 镜像设置 – 加入为异步。如果选项为灰不可选,先点击 启动镜像服务,再选择 '服务已启用'。 在‘加入为异步’页面填入创建的第一个镜像成员名称、地址、实例名称。 镜像名称:创建的镜像名称 故障转移系统的代理地址 :输入您在配置所选故障转移成员时指定的超级服务器地址。 代理端口 - 输入您为所选故障转移成员指定的 ISCAgent 端口。 InterSystems IRIS 实例名称 - 输入您配置为选定故障转移成员的 InterSystems IRIS 实例的名称。 选择合适的Async镜像成员类型 修改镜像设置 进入菜单 系统管理 – 配置 – 镜像配置 – 编辑镜像 可以修改设置的各个参数: 添加镜像数据库 创建一个镜像数据库 在主failover成员服务器上,选择系统管理– 配置 – 系统配置– 本地数据库 选择 新建数据库,按照提示输入数据库名称、存放数据库文件位置。注意在输入关于数据库的详情页面,镜像数据库? 选择 是。 在每一个failover成员服务器以及异步成员服务器按照上面步骤同样创建本地数据库。注意在输入关于数据库的详情中确保每一个成员的Mirror DB Name相同(本地的数据库名称可以不同)。 将已有数据库配置为镜像数据库 将主机已有数据库加入镜像 在主failover成员management port中,从菜单中选择 配置数据库 选中需要镜像的数据库,点击 添加到镜像 来添加需要mirror 的数据库 选择需要添加进入Mirror 的数据库并点击添加 此时从镜像监视器 中可以看到 镜像数据库 增加了我们刚才添加的数据库 数据库备份 对此主服务器的需要mirror 的数据库进行备份并获取备份文件,并拷贝至备机。执行备份可以通过management portal 运行实现。 management portal -> 系统管理 -> 配置-> 数据库备份 ->备份数据库列表 系统操作-> 备份 -> 完全备份列表 注意:这里需要关注主机本身journal 的保存时间,因为mirror 的同步机制是主机推journal 给备机,所以如果备份的时间为1月1 日零点,主机journal 保存时间为1天,备份需要2天,则中间1天的时间差所产生的数据是没有办法恢复的。 数据库备份恢复 在备Failover成员的%SYS 命名空间下使用^BACKUP routine, 将备份文件恢复至备机,则可在备机中看到恢复的数据库已只读方式被挂载 caught up 数据库 在备机上进入 系统操作 - 镜像监视器 ,可见备机的镜像有need activation 状态,点击Activate,结束后,下一步点击 catchup。 最终可见备机为 active,caught up 状态。 删除镜像配置 删除镜像配置必须按照下面顺序执行:删除异步成员,然后删除备份failover成员,最后删除主failover成员。 删除异步成员 进入菜单 系统管理 – 配置 – 镜像设置 – 编辑异步: 如果想要移除报表服务的异步成员,使用Leave mirror链接。 如果想要移除所有的链接异步成员以及相关配置,使用Remove Mirror Configuration按钮: 移除备failover成员 想要移除failover成员必须在%SYS命名空间下 执行^MIRROR routine。 a. 在 Terminal中切换到%SYS命名空间,执行d ^MIRROR b. 选择Mirror Configuration c. 选择Remove This Failover Member(如果在主failover服务器上操作则选择Remove Other Mirror Member) d. 按照提示操作,最后重启实例. 移除主failover成员 想要移除failover主成员必须在%SYS命名空间下 执行^MIRROR routine。 a. 在 Terminal中切换到%SYS命名空间,执行d ^MIRROR b. 选择Mirror Configuration c. 选择Remove This Failover Member d. 按照提示操作,最后重启实例. e. 选择Remove This Failover Member f. 按照提示操作,最后重启实例. 移除镜像数据库 从Async成员中移除数据库不会对failover成员的数据库有任何影响,但是如果从failover成员中移除数据库,也必须从其他failover成员以及Async成员中移除相应的数据库。想要从镜像配置中整体移除数据库需要遵循下面的顺序:主Primary failover成员 -> 备份Backup failover成员 -> Async成员。 a. 进入菜单 系统操作 – 镜像监视器 b. 在镜像数据库中点击 移除 断开连接/开始连接镜像成员 可以临时断开备failover镜像成员或者Async镜像成员。 进入菜单 系统操作 – 镜像监视器 选择 在这个成员上终止镜像 在虚拟环境下配置镜像操作 在虚拟环境下进行镜像配置,同时建议进行下面配置以提高可靠性: · 应该为每一个failover成员进行虚拟主机(virtual host)的配置,保证每一个failover成员不会指向同一个物理上的host。 · 为了避免单一指向存储的损坏,每一个failover成员上Caché实例使用的存储应该固定分配到相互隔离的磁盘阵列或者磁盘组中。 · 有些虚拟架构下自动执行的操作,比如虚拟主机迁移到备用存储,可能造成failover成员间的短暂连接中断。如果在记录中竟让发现类似这样的中断警告,可以进入修改镜像配置的页面,在Advanced Mirror Settings下适当提高QoS Timeout设置的时间。 · 当进行计划维护操作(比如快照snapshot管理)时,会引起镜像成员中的连接中断,可以在备机的Mirror Monitor页面选择Stop Mirror on this server,临时断开备份backup成员,以避免相应的mirror警告信息。 · 在配置Mirror主备服务器中,不建议使用systemctl 设置开机自动启动IRIS。因为在主备切换过程中,如果使用systemd启动关闭IRIS不是成对出现,或者使用iris start/stop instance 不是成对出现,则有可能出现不可预知错误。 配置成功状态 主机状态: 备机状态:
文章
姚 鑫 · 五月 19, 2021

IRIS 单元测试

# IRIS 单元测试 # [第一章 单元测试概述☆☆☆☆](https://yaoxin.blog.csdn.net/article/details/116884316) # [第二章 使用%UnitTest进行单元测试☆☆☆☆](https://yaoxin.blog.csdn.net/article/details/116906659) # [第三章 执行测试☆☆☆](https://yaoxin.blog.csdn.net/article/details/116974672) # [第四章 使用Setup和tear Down方法执行测试☆☆☆](https://yaoxin.blog.csdn.net/article/details/117014533) # 前言 IRIS提供了用于对应用程序进行单元测试的类的%UnitTest包。该包为快速开发单元测试类、执行测试和创建报告提供了便利。可以直接使用该包,也可以扩展其类来自定义单元测试工具。%UnitTest在结构上与用于单元测试的xUnit框架非常相似。熟悉这些框架的开发人员使用%UnitTest会特别容易。 本教程提供对%UnitTest包的快速实践介绍。本教程的第一部分和第二部分是相互独立的,可以按任何顺序完成。 - 完成本教程的第一部分,了解单元测试和集成测试之间的区别、xUnit框架和%UnitTest之间的结构相似性,以及单元测试在敏捷应用程序开发方法中的作用。 - 完成本教程的第二部分,学习如何使用%UnitTest中的类为InterSystems IRIS应用程序创建和执行单元测试。 注意:本教程假定基本熟悉ObjectScript和InterSystems IRIS的面向对象开发。 # 预告 下一期系列将用一个月的时间连载,**《Caché 网络实用工具》**,敬请期待。 # 交流群 - QQ群号:410039091 - 笔者QQ:454115408 - 公众号:技术理科直男 - [intersys版主:姚鑫](https://cn.community.intersystems.com/user/236891/posts) ![\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f9VqwzNP-1608850948003)(3E1D939266954ED48BDAEA9B8086B11E)\]](https://img-blog.csdnimg.cn/20201225070433434.png)
文章
Shanshan Yu · 七月 5, 2023

基于IntegratedML及Dashboard的数据分析应用

基于InterSystems的集成ML技术和Dashboard,根据上传的CSV文件自动生成相关预测和BI页面。前端和后端在Vue和Iris中完成,使用户可以通过简单的操作生成所需的数据预测和分析页面,并根据这些页面做出决策。 # ZPM 安装 zpm:USER>install IntegratedMLandDashboardSample # 部署流程 使用或创建新的命名空间 将代码导入相应的命名空间 在终端中执行: Do # # class (customizemashinelerningandaanalysis. Util. Tool) Deployment() 前端是Vue文件夹下的dist文件夹。在使用它之前,请打开dist-static config.js并修改后端服务器要使用的IP和端口。然后您需要将iframeUrl的测试修改为“Analysis”+后端使用的命名空间,例如“AnalysisUSER” 然后启动前端文件(可以将dist文件夹放在tomcat中开始使用) 访问地址为: Ip: port/dist # 如何使用 以women.csv为例 1.选择要上传的CSV文件,CSV文件名和数据列名不得包含空格等其他符号 2.填写需要预测的列名,如“高度” 3.单击“确定”按钮,等待界面返回 成功返回后,刷新当前页面,然后单击“模型列表”下的辅助选项。新生成的项目将出现 ① 填写完其他值后,点击②确定,在③处生成预测值 ④ 嵌入式虹膜仪表板显示以前导入CSV的一些数据 # 其他 CSV 展示 # 单元测试 Set ^UnitTestRoot=your modules dir +"\src"+namespace+"\integratedmlanddashboardsample\src" (such C:\InterSystems\HealthConnect\mgr\.modules\USER\integratedmlanddashboardsample\src) do ##class(%UnitTest.Manager).RunTest("UnitTests") #注意 由于页面上嵌入了iris的仪表板,如果您遇到无法正确显示的跨域问题,可以访问iris查看图表 非常棒的应用!那csv中的数据能不能是非数字呢?
文章
Louis Lu · 九月 2, 2024

如何定位临时global在IRISTEMP数据库中占用的空间

当进程中的数据不需要持久化保存,但又需要用到global的高性能特性时,我们常常将数据保存在临时global中,也就是保存在IRISTEMP/CACHETEMP数据库中。 系统使用 IRISTEMP/CACHETEMP 数据库保存临时的数据,用户也可以进行同样的操作。 关于临时global以及IRISTEMP数据库的更多内容,可以参见文档 Temporary Globals and the IRISTEMP Database 以下情况global作为临时使用: 系统临时global (^IRIS.Temp*, ^%cspSession, ^CacheTemp*, ^Mtemp*, 等) 用户定义的 globals 映射至 IRISTEMP/CACHETEMP 处理私有globals (^||name, ^|"^"|name, ^["^"]name,^["^",""]name,等) GLOBAL TEMPORARY 表 1和2的大小可以通过使用 ^%GSIZE 获取 USER>do ^%GSIZE Directory name: c:\intersystems\iris\mgr\user\ => c:\intersystems\iris\mgr\iristemp\ // 指明iristemp 数据库的位置 All Globals? No => yes // Yes 为显示所有globals: 34 项被选中 34 available globals Show details?? No => No // No 为不显示更多信息 Device: Right margin: 80 => : 3和4 进程私有global 可以通过使用 ^GETPPGINFO 查看。 更多关于 ^GETPPGINFO 的信息请查阅文档 这里 下面的例子列出了当前进程下所有的私有globals: set ^||flintstones(1)="Fred" set ^||flintstones(2)="Wilma" znspace "%SYS" do ^GETPPGINFO("*") 另一个方法用于输出单个进程使用较大数量的私有global: set ns=$namespace znspace "%SYS" // Only processes with more PPG blocks than the total number of processes are included set st=##class(%SQL.Statement).%New() set status=st.%PrepareClassQuery("%SYS.ProcessQuery","AllFields") set rs=st.%Execute() while rs.%Next() { set pid=rs.%Get("Pid") // Process ID set cnt=rs.%Get("PrivateGlobalBlockCount") // Number of PPG blocks // When the number of PPG blocks per process is 0 or more, the contents are output (the following example shows 20 or more blocks). if cnt > 20 { set rs2=##class(%ResultSet).%New("%SYS.ProcessQuery:PPG") // "N" Do not return subscripts of a PPG, just return the root name // "B" Return the number of blocks used by the PPG (needs the "N" option) do rs2.Execute("*",pid,"NB") for { quit:'rs2.Next() write cnt_" PID:"_pid_", PPG name "_rs2.GetData(1)_" is using "_rs2.GetData(3)_" disc blocks",! } } } znspace ns
文章
Hao Ma · 十月 28, 2024

配置IRIS Container - CPF merge

## CPF merge(合并) [Automating Configuration of InterSystems IRIS with Configuration Merge](https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=ACMF) CPF merge通过合并一个人工编辑的merge file, 自动的配置新创建的iris instance, 或者修改已有的iris instance。适用于: - 修改iris的系统配置(cpf文件中的内容),比如系统参数,创建或者配置用户,角色,权限, 创建或者配置命名空间,数据库; 配置mirror, ECP连接等等。 - 操作不在cpf文件中的内容,比如 [CreateApplication](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=RACS_createapplication), [CreateSSLConfig](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=RACS_createsslconfig) 等等, 一般是在 [Action]部分实现 > Caché 和早期的IRIS版本提供了manifest功能,用来做IRIS实例的配置。 Manifest很繁琐,而且各个版本的配置中有细微的区别,非常难以管理。 如今有了CPF merge, maifest的所有功能都可以在CPF merge实现, 因此manifest在新版IRIS中也就完全被替代了。 ![figure](https://docs.intersystems.com/iris20231/csp/docbook/images/adock_merge_example.png) ### 执行merge 执行merge可以在操作系统命令行下执行, 如下面的例子 ```bash # 第2个参数可选,如果为空,自动使用系统当前的iris.cpf $ iris merge iris /external/irismerge.conf /usr/irissys/iris.cpf ``` 然而, 在执行`docker run`命令或者`docker-compose`里不用这么麻烦。 IRIS镜像提供了一个功能, 通过加入ISC_CPF_MERGE_FILE环境变量,IRIS会自动实现CPF合并。 比如下面的compose配置: ```bash iris2024: image: containers.intersystems.com/intersystems/irishealth-arm64:2024.1 container_name: iris-a volumes: - ./iris2024:/external environment: - TZ=CST-8 - ISC_CPF_MERGE_FILE=/external/merge.cpf ``` > **IMPORTANT:** > > 当使用配置合并部署容器时(如 [使用合并文件部署 InterSystems IRIS 容器](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=ACMF#ACMF_deploy_container) 中所述),只要容器在运行,**ISC_CPF_MERGE_FILE**(它在容器中是持久的)指定的合并文件就会持续受到更新监控,更新发生时,iris 合并命令会立即对其进行合并。这意味着您可以随时通过更新合并文件来更新容器化实例的配置,从而更容易自动重新配置容器化实例和群集。 ### merge文件的Example #### 配置IRIS参数 ```zsh [config] bbsiz=-1 globals=0,0,1024,0,0,0 routines=512 gmheap=256000 [SQL] DefaultSchema=user TimePrecision=6 [SqlSysDatatypes] TIMESTAMP=%Library.PosixTime ``` #### 创建用户和权限 ```zsh CreateUser:Name=SQLAdmin,PasswordHash=fce110ae1f79b9d7e20367a3352efeb48ef22cc8810c4598791f3fb752eabcfe7b2d9ce75099e626b03a62fc6a146f1ca772789ebbcea276674c558c63af4f7b,9ffbbc8ef25086e4d4da87e20c6ea43e8ebb6d1ab64815aef3b1f7e8964dbd87efe68c8464a6b40865efc7d0d568c601e2a49917326dfd78197b68f1bde59db2,10000,SHA512 GrantAdminPrivilege:Grantee=SQLAdmin,Namespace=USER,AdminPriv="%DB_OBJECT_DEFINITION,%BUILD_INDEX" CreateUser:Name=CCHUser,Password=Demo1234 GrantAdminPrivilege:Grantee=SQLAdmin,Namespace=HCC,AdminPriv="%DB_HCC,%BUILD_INDEX" ``` #### 创建命名空间 ```zsh # part of merge.cpf [Actions] CreateResource:Name=%DB_DEMO,Description="The DEMO database" CreateDatabase:Name=DEMO,Directory=/usr/irissys/mgr/demo,Resource=%DB_DEMO, CreateNamespace:Name=DEMO,Globals=DEMO,Interop=1 ``` #### 创建Web Application ```zsh [Actions] CreateApplication:Name=/csp/demo, InboundWebServicesEnabled=1, AutheEnabled=1, DispatchClass=HCC.Interface.RestHandler, NameSpace=DEMO CreateApplication:Name=/csp/demo,NameSpace=HCC,AutheEnabled=36,DispatchClass=HCC.Interface.RestHandler, CreateApplication:Name=/test2,NameSpace=HCC,AutheEnabled=$$$AuthePassword+$$$AutheUnauthenticated,Enabled=1,Description="test2" ModifyApplication:Name=/test2,MatchRoles=":%DB_HSCUSTOM:%DB_HSLIB:%DB_IRISSYS:%HS_DB_HCC:%HS_DB_HSSYS",ErrorPage=%CSP.Error ``` #### System Security Setting System > Security Management > Authentication/Web Session Options - (security settings) - Allow Unauthentication access - Allow O/S authentication ```zsh # example ModifyService:Name=%Service_Monitor,Enabled=1,ClientSystems=192.168.1.1 ModifyService:Name=%Service_DocDB,Enabled=1,AutheEnabled=$$$AuthePassword ModifyService:Name=%Service_Terminal,AutheEnabled=$$$AuthePassword+$$$AutheUnauthenticated+$$$AutheOS ModifyService:Name=%Service_Mirror,Enabled=1 ``` 其他还有更多的用法,请参见在线文档。
文章
Claire Zheng · 三月 1, 2021

欢迎为中文社区参赛者投票!

本周进入 InterSystems 编程大奖赛 的投票时间! 此次中国有多位参赛者,我们将其项目罗列在此,欢迎投票! 项目一: Dictionary comparison scheme of cache database Author: Weiwei Yang 概述:现场需要将各个科室部门内的数据统一汇总到医院总部,但是汇总后发现各个科室使用的字典并不统一,需要将表中的现存的字典统一更换为医院制定字典。例如:A科室中人员的性别字典使用0/1/2表示各种性别,B科室中性别字典使用F/M/O表示各种性别,但是现在医院要求所有性别字典保存Female/Male/Other性别信息,此时就需要替换原有的性别字典为新用字典。当初,此处只是列举了一个使用场景,未来有多个需要对照字典的工作都可以考虑此项目的设计和实现思想。 点击投票 项目二: HealthInfoQueryLayer Author: Botai Zhang 基于Intersystems IRIS平台整合医院信息查询业务解决方案 概述:随着医院信息化建设的逐步完善,医院子系统越来越多,系统间接口越来越多,同时接口费用不断增加,管理工作变得越来越复杂。其中,查询类业务接口根据业务类型分化,数量也是逐步递增,带来接口量大、开发工作繁重、代码冗余、维护困难等等问题。针对这一困境,我们基于Intersystems IRIS数据平台整合医院信息查询业务解决方案。该应用程序可通过配置完成查询业务接口实现,大大缩小开发、维护、实施等项目关键运转周期。 点击投票 项目三: Integration scheme for heterogeneous messages in heterogeneous systems Author: Deming Xu 异构系统和异构消息的集成方案 概述:随着现代医院建设的信息化程度越来越高,对接的子系统数量也越来越多,系统的架构、接口类型、消息结构越来越复杂,对医院系统之间的信息传递造成很大不便。为了解决该问题,我们采用HL7、XML等标准,使用Ensemble内置的数据转换工具(DT),将异构系统的接口进行标准化(通常引用Soap、REST、TCP/IP等标准协议),使得不同架构的系统,即时接口类型不同、消息模型不同,也能进行数据的传输。 关键词:HL7、XML、Settings、DataTransform、JDBC、SQL 点击投票 项目四: Create a unified hospital data extraction scheme based on IRIS for Health Author: Deming Xu 基于 IRIS for Health 创建医院数据统一提取方案 概述:随着医院信息化建设内容不断丰富,业务面覆盖越来越广,相关科研项目的数据需求也越来越多,医院对各个业务系统的数据管理提出了新的要求。由于科研项目背景多样,需求中的数据模型也不尽相同,各个系统的接口开发、接口管理、代码维护工作也变得越来越繁杂。针对这一困境,我们采用IRIS创建医院数据统一提取方案 。该应用程序提供一个公共的数据提取服务(BS),可通过配置完成获取多个不同数据源的接口开发(多个BO),大大缩小开发、维护、实施等成本。 点击投票 项目五: RESTFUL_API_For_Hotel_OverBooking_System Author: jingqi LIu Develop RESTFUL Data API in InterSystems IRIS Data Platform Development for Hotel Overbooking Management System. PS:The overbooking management system combines the unique conditions of the hotel, such as room prices, order channels, customer needs (etc...). System uses machine learning algorithms (such as: KNN/ES-RNN...) to accurately predict the daily no-show and occupancy rate of the hotel, and further combines with the revenue equation to find the best largest room sales volume, which can significantly increase the hotel marginal revenue. 这是一个在InterSystems IRIS中用ObjectScript构建的REST API应用的演示。它也有OPEN API规范,可以用Docker和VSCode开发,可以作为ZPM模块部署,可以作为Overbooking系统数据的REST api使用。 点击投票 Useful! 新用户投票前必读哦:如何成为社区活跃用户(Active user) 这几个医疗行业应用都非常不错,学习到很多! 欢迎为您喜欢的选手投票! 欢迎新加入的朋友们发言、评论、回复成为活跃用户后为中国参赛选手投票,每人可以投3票! @Hao.Wang @z.c @Zhaoying.Li @Neal.Wu @liu.yaquan @qu.qu @wang.wei @guo.meiya @yajing.xu @yue.li @权权.苏 @xiaohu.xiong @yadong.zhao @Yi.Han @Wen.Zhou @jie.zhang @张.恒 @guo.wenheng @Jing.Li3826 @迪.文 这个贴子很棒!完美的解决了我的问题! 欢迎新朋友,请大家发表内容时尽量在中文社区发表,多发表高质量内容,为中文社区多做贡献, 包括但不限于回答问题,撰写文章,贡献软件库、代码、工具等等,多谢支持! @young.zheng @an.xingqi2532 @jinhui.hu @wenyang.zhang @guoguo.wang @shikai.ren @chaolong.huang @yabin.duan @鹏飞.楚 @智辉.李 @shan.hu @Wendy.Wu 好的,谢谢 马上投票 发布完还要等24小时 你好,第一次发帖24小时后就可以投票吗 准备投票 是的 原来是这样,明白了 期望多一些应用,多多学习! 能够学习到具体的应用,很棒!👍 学习IRIS在国内多行业应用,棒👍 好的,谢谢! 感谢提醒,👍