搜索​​​​

清除过滤器
问题
ruihua ruihua · 二月 21, 2022

关于产品原型的设计软件有哪些推荐?如何快速和高效地提升设计能力?

关于产品原型的设计软件有哪些推荐?如何快速和高效地提升设计能力? InterSystems 没有提供产品原型工具,请百度。 vs code 算吗?
公告
Michael Lei · 八月 30, 2023

搜索非结构化文本数据

亲身体验 SQL 搜索,它是 InterSystems IRIS® 数据平台中的一个工具,可让您快速搜索存储在 SQL 表中的大量非结构化文本数据(含练习,15m) 。
公告
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客户经理。
问题
洪玉 刘 · 二月 8, 2023

pool

运行池的机制和组件运行池的建议配置大小 请参考我们的社区文章:运行池大小配置的解读 | InterSystems Developer Community | FTP|REST API|SOAP|DevOps
文章
Jingwei Wang · 五月 4, 2022

IntegratedML 演练

InterSystems IRIS IntegratedML功能用于使用AutoML技术获得机器学习的预测结果和概率。AutoML是一种机器学习技术,用于选择更好的机器学习算法/模型基于已有数据(用于训练AutoML模型的数据)来预测状态、数字和结果。你不需要一个数据科学家,因为AutoML会测试最常见的机器学习算法,并根据分析的数据特征选择更好的算法给你。在这篇文章中可以看到更多管乐IntegratedML的信息。 InterSystems IRIS有一个内置的AutoML引擎,但也允许你使用H2O和DataRobot。在这篇文章中,我将向你展示使用InterSystems AutoML引擎的每个步骤。 第1步 - 下载样例应用程序做练习 1. 转到 https://openexchange.intersystems.com/package/Health-Dataset 2. Clone/git 将 Repo拉到任何本地目录中 $ git clone https://github.com/yurimarx/automl-heart.git 3. 在同一个目录中打开一个Docker终端并运行 $ docker-compose build 4. 运行IRIS容器 $ docker-compose up -d 第2步--了解业务场景和可用数据 业务场景是利用过去的数据预测心脏疾病,数据如下: SELECT age, bp, chestPainType, cholesterol, ekgResults, exerciseAngina, fbsOver120, heartDisease, maxHr, numberOfVesselsFluro, sex, slopeOfSt, stDepression, thallium FROM dc_data_health.HeartDisease 心脏病表(heartDisease)的数据字典来源(https://data.world/informatics-edu/heart-disease-prediction/workspace/data-dictionary): Column name Type Description age Integer In years sex Integer (1 = male; 0 = female) chestPainType Integer Value 1: typical angina -- Value 2: atypical angina -- Value 3: non-anginal pain -- Value 4: asymptomatic bp Integer Resting blood pressure (in mm Hg on admission to the hospital) cholesterol Integer Serum cholestoral in mg/dl fbsOver120 Integer (fasting blood sugar > 120 mg/dl) (1 = true; 0 = false) ekgResults Integer Resting electrocardiographic results -- Value 0: normal -- Value 1: having ST-T wave abnormality (T wave inversions and/or ST elevation or depression of > 0.05 mV) -- Value 2: showing probable or definite left ventricular hypertrophy maxHr Integer Maximum heart rate achieved exerciseAngina Integer Exercise induced angina (1 = yes; 0 = no) stDepression Double ST depression induced by exercise relative to rest slopeOfSt Integer The slope of the peak exercise ST segment -- Value 1: upsloping -- Value 2: flat -- Value 3: downsloping numberOfVesselsFluro Integer Number of major vessels (0-3) colored by flourosopy thallium Integer 3 = normal; 6 = fixed defect; 7 = reversable defect heartDisease String Value 0: < 50% diameter narrowing -- Value 1: > 50% diameter narrowing 心脏病(heartDisease)是我们需要预测的属性 第3步--准备好训练数据 HeartDisease表有270行。我们将得到250行来训练我们的预测模型。为了做到这一点,我们需要创建VIEW ,通过 管理门户>系统资源管理器>SQL。 CREATE VIEW automl.HeartDiseaseTrainData AS SELECT * FROM dc_data_health.HeartDisease WHERE ID < 251 第4步 - 准备验证数据 我们将得到20行来验证预测的结果。 为了做到这一点,我们需要创建VIEW ,通过 管理门户>系统资源管理器>SQL。 CREATE VIEW automl.HeartDiseaseTestData AS SELECT * FROM dc_data_health.HeartDisease WHERE ID > 250 第5步--创建AutoML模型来预测心脏疾病 IntegratedML允许创建一个AutoML模型来做预测和概率(详见https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GIML_BASICS)。要做到这一点,需要创建以下模型,通过 管理门户>系统资源管理器>SQL。 CREATE MODEL HeartDiseaseModel PREDICTING (heartDisease) FROM automl.HeartDiseaseTrainData 这个模型将从automl.HeartDiseaseTrainData view中获得训练数据(学习)。 第6步 - 执行训练 执行训练,了做到这一点,执行下面训练SQL语句,通过 管理门户>系统资源管理器>SQL。 TRAIN MODEL HeartDiseaseModel 第7步 - 验证训练后的模型 为了验证训练结果,在 管理门户>系统资源管理器>SQL 中执行以下SQL指令。 VALIDATE MODEL HeartDiseaseModel FROM automl.HeartDiseaseTestData 使用automl.HeartDiseaseTestData view 中的测试数据验证了HeartDiseaseModel。 第8步 - 获取验证指标 为了查看验证过程中的验证指标,在 管理门户>系统资源管理器>SQL 中执行以下SQL 指令。 SELECT * FROM INFORMATION_SCHEMA_ML_VALIDATION_METRICS 要了解返回的结果,请见 https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GIML_VALIDATEMODEL. InterSystems IRIS 文件从验证结果中详细说明了以下内容。: 验证指标,可以在INFORMATION_SCHEMA_ML_VALIDATION_METRICS表中查看 对于回归模型,以下指标会被保存: 方差 R-squared 平均平方误差 均方根误差 对于分类模型,以下指标会被保存: Precision — 这是用真阳性数除以预测阳性数(真阳性与假阳性之和)计算出来的。 Recall — 这是用真阳性数除以实际阳性数(真阳性与假阴性之和)来计算的。 F-Measure — 这是由以下表达式计算的:F = 2 * (精度*召回率) / (精度+召回率) Accuracy — 这是用真阳性和真阴性的数量除以整个测试集的总行数(真阳性、假阳性、真阴性和假阴性之和)来计算的。 第9步 - 使用你的新AutoML模型执行预测 - 最后一步! 为了查看验证过程中的验证指标,在 管理门户>系统资源管理器>SQL 中执行以下SQL指令。 SELECT *, PREDICT(HeartDiseaseModel ) AS heartDiseasePrediction FROM automl.HeartDiseaseTestData 比较列 heartDisease(真实值)和 heartDiseasePrediction(预测值)。
文章
Qiao Peng · 三月 10, 2022

多语言字符集系列文章-- 第三篇 IRIS对多语言字符集的支持和常见问题

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输出。 因为GB18030兼容GB2312,所以InterSystems IRIS也支持GB2312。 注意:在第一篇介绍过,GB18030与GBK并不完全兼容,因此InterSystems IRIS理论上不支持GBK。 InterSystems IRIS如何做字符集编码系统间的转换?它使用2种方式: 对于可以通过算法转换的,例如UTF-8与UTF-16的相互转换,InterSystems IRIS会使用算法转换; 对于无法通过算法转换的,例如与UTF-16的相互转换,InterSystems IRIS会使用I/O转换表转换,它其实是两个映射关系表,一个用于特定字符集转UTF-16、另一个用于UTF-16转特定字符集。 注意,大家可能会注意到,GB18030的I/O转换表里并没有所有的GB18030编码,这是为什么呢?回顾一下第一篇关于GB18030的介绍,它提到了GB18030编码中一部分与Unicode编码非连续相关,而另一部分与Unicode编码连续相关。在InterSystems IRIS的GB18030的I/O转换表,其实只有与Unicode编码非连续相关的那部分编码,就是需要通过对照表关联的部分;而连续相关的那部分,是通过算法转换的,因此不在I/O转换表里。这么做的目的是降低把GB18030这么大的代码表全部加载到内存里的硬件成本。 3.1.2 字符集相关的命令、函数和方法 InterSystems IRIS提供了一系列与字符集相关的命令、函数和方法。它们可以帮助我们理解InterSystems IRIS的字符集处理逻辑、帮忙在字符集相关问题出现时进行排错。 这里以汉字为例介绍这些命令、函数和方法。汉字的UTF-16编码的16进制值是9451、GB18030的16进制值是E861。 ZZDUMP:查看变量16进制编码的命令 例如:我们看一下变量x的16进制值 这里,可以看到变量x保存的是汉字,它的16进制的值是9451。9451就是汉字的UTF-16(Unicode)16进制码。 $ZCONVERT($ZCVT):转码函数 如果需要通过代码控制不同字符集编码间的转换,可以使用$ZCVT函数。例如,我们把上面变量x的字符转码为GB18030编码: 这个例子中,传递给$ZCVT的第一个参数是变量x;第二个参数是“O”,意思是将x的字符编码转码为目标码;第三个参数是要转换的目标编码,“GB18030”。现在变量y的值就是汉字的GB18030编码。 同样,你可以把变量y的GB18030编码再转为IRIS内码UTF-16。这时,第二个参数要设置为“I”,意思是设置源编码;而第三个参数还是“GB18030”: 现在变量z仍是汉字的UTF-16编码。 $ASCII、$WASCII :将字符转为10进制UTF-16码 这两个系统函数将所有字符转为其10进制的UTF-16码。名字有点迷惑,它们并不是获得字符的ASCII码,当然对于ASCII字符,ASCII码和UTF-16码是一样的。 其中$ASCII可以将UCS基本平面的字符转为UTF-16,也就是双字节UTF-16编码。例如汉字的就是这样的: 但那些超过双字节UTF-16的汉字就需要用$WASCII来获取其UTF-16的值了。例如汉字“”,它的UTF-16编码是4字节的D85FDFF9,获取它的UTF-16值,就需要用$WASCII($WA)。当然,也可以全用$WASCII来获取所有字符的UTF-16编码。 $CHAR、$WCHAR: 将10进制UTF-16码转为字符 这两个系统函数将10进制的UTF-16码转为字符。例如: 同样,$CHAR可以转双字节的UTF-16;$WCHAR可以转双字节或四字节的UTF-16。 $ZHEX:将16进制数转10进制数、10进制数转16进制数 上面有些函数处理16进制数、一些处理10进制数,可以用函数$ZHEX做10进制和16进制数的转换。例如: USER>w $ZHEX("E861") 59489 大家可能对这个函数比较迷惑:只有一个参数,那么怎么知道它是10进制数还是16进制数呢?例如9451,既可以表达一个10进制数,也可以表达一个16进制数。$ZHEX是这么判断的:是以字符串传入的参数(加了双引号的)就是16进制,而以数字传入的参数(没加双引号的)就是10进制。因此会得到这样的结果: USER>w $ZHEX(9451) 24EB USER>w $ZHEX("9451") 37969 3.2 常见字符集相关问题 既然InterSystems IRIS支持GB18030-2005,那么还会有中文字符集相关问题吗?还是会有,因为InterSystems IRIS不仅是一个数据库,它的互操作功能会和各种数据源和数据目标连接,接收和发送各种编码的数据。如果数据源/数据目标所声明使用的字符集与其实际使用的字符集不同,或者未声明使用的字符集并且实际字符集和IRIS默认的字符集不符,就会造成问题。这也是绝大多数的InterSystems IRIS相关字符集问题的根源。 所以在InterSystems IRIS中遇到字符乱码问题时,首先应该看一下数据声明的字符集是什么,实际收到数据的字符集是什么。数据声明的字符集信息,可以看上一篇《各种技术对字符集使用的声明》的介绍,而实际收到数据的字符集可以使用Wireshark等工具检查。 下面列举一些常见的字符集相关的问题处理方式: 3.2.1 文件 对于正确编码的文件,InterSystems IRIS都可以正常处理。但如果文件声明的字符集编码与实际的编码不同时,可以使用$ZCVT进行转码。 如果在使用文件(File)或FTP适配器,这2个适配器都会CHARSET设置项,可以使用这个设置项做InterSystems IRIS内码(UTF-16)和真实需要的字符编码间自动做相互转换。 InterSystems IRIS提供了好几个字符文件的操作类:%Library.File、%Library.FileCharacterStream、%Stream.FileCharacter。在使用它们创建文件时,需要注意指明文字字符集,否则默认为ANSI,从而造成生僻字异常。 InterSystems IRIS不同的字符文件操作类,对于字符集的声明稍有差异,如下: 对于%Library.File,在执行Open方法时设置字符集,例如设置为UTF8 Set tFile = ##class(%File).%New("c:\temp\test.txt") Do tFile.Open("WSN:/IOTABLE=""UTF8""") 对于%Library.FileCharacterStream,设置其TranslateTable属性,或调用TranslateTableSet方法设置 Set tStream=##class(%FileCharacterStream).%New() Set tStream.Filename="c:\temp\test.txt" Set tStream.TranslateTable="UTF8" 对于%Stream.FileCharacter,设置其TranslateTable属性,或调用TranslateTableSet方法设置 Set tStream = ##class(%Stream.FileCharacter).%New() Set tST=tStream.LinkToFile("C:\temp\test.txt") Set tStream.TranslateTable="UTF8" 另外,还要考虑BOM问题,有些文本编辑器打开没有BOM的UTF-8文件时会显示乱码、而另外一些有BOM反而显示乱码。 对于BOM,%Library.File无法在文件头插入BOM,%Library.FileCharacterStream、%Stream.FileCharacter可以通过设置其BOM属性,例如设置字符集为UTF8,且设置BOM为UTF8的EF BB BF(10进制239 187 191): Set tStream = ##class(%Stream.FileCharacter).%New() Set st= tStream.LinkToFile("C:\temp\test.txt") Set tStream.TranslateTable="UTF8" Set tStream.BOM=$char(239,187,191) Do tStream.Write($C(8224)) Do tStream.%Save() 从性能和功能角度,推荐使用%Stream.FileCharacter和%Library.FileCharacterStream,而不是%Library.File。 3.2.2 数据库 通过InterSystems IRIS连接到第三方数据库进行查询或更新数据操作而出现乱码是比较典型的字符集问题。 当遇到问题时,尤其是Oracle数据库时,首先检查一下数据源的内码设置。如果是其内码设置问题,那么通常需要通过$ZCVT来转码。 如果不是内码设置问题,查一下InterSystems IRIS使用什么方式连接到对方数据库:ODBC还是JDBC。如果是JDBC,看看连接字符串中的字符集设置是否正确;如果是ODBC,看看是不是生僻字乱码,如果是可能需要用$ZCVT转码,否则要检查ODBC驱动是否正确,尤其是是否在使用其ODBC3.5的驱动。 3.2.3 HTTP 遇到HTTP相关的字符乱码,首先查一下HTTP头Content-Type的参数charset设置。如果对方没有设置或设置不正确,且对方不能修稿,可以使用$ZCVT转码。 对于使用HTTP适配器的IRIS业务服务,可以通过其CHARSET设置项来配置字符集,并通过"FORCE CHARSET" 设置项强制跳过HTTP头Content-Type的参数charset设置。 3.2.4 SOAP/REST传递的XML字符流/字符串 首先检查下encoding属性的设置。如果它没有设置或设置错误,且不能修改,可以使用$ZCVT转码。 3.2.5 HL7 V2消息 HL7 V2是医疗行业常用的消息协议,InterSystems IRIS提供了大量的工具和特性以支持HL7 V2消息。 如果是HL7 V2传输中出现的中文乱码问题,首先查一下MSH-18的设置。如果数据源没有设置或设置错了,都可以使用InterSystems IRIS数据转换能力先将其修正为正确的值。当然有可能接收目标系统不按MSH-18设置的字符集解码数据,这时,可以按目标系统要求的字符集来编码数据,而忽略MSH-18。 InterSystems IRIS提供了很多工具,可以查看HL7 V2消息或文件的内容, 例如HL7查看器、消息追踪。InterSystems IRIS会按MSH-18设置的值进行数据的解码,当MSH-18值缺失时,默认值是Latin1。如果是因为MSH-18缺失而造成中文显示为乱码,且HL7 V2消息源无法修改时,可以考虑修改EnsLib.HL7.Util.IOFraming的DefCharEncoding(字符集编码默认值)为消息源使用的字符集。 注意,这种乱码情况不会影响HL7消息的接受接收和发送,仅影响显示。 3.2.6 其它 可能还会碰到一些的中文乱码其实是显示问题,尤其是那些仅生僻字显示有问题的情况。 出现这类显示问题的原因是并不是所有的操作系统和IT工具都支持完整的汉字字符集或汉字字形。 例如,常见的字符终端工具仅支持GB2312,所以对GB2312字符集之外的汉字就会显示为一个特定的符号,看起来就像乱码。 而MacOS的Safari浏览器、Pages文稿和很多应用都不能显示一些GB18030字符集的生僻字,例如: 这种情况下,数据本身没有问题,只是显示不正常而已,通常不需要担心。 这就是InterSystems IRIS多语言字符集的支持的主要内容内容。后面我会持续将客户遇到的与字符集相关的典型问题持续更新到文章的末尾,供大家参考。 附录1: 列表类型的中文数据显示乱码? 最近一个客户问了一个中文显示乱码问题。经过查看,发现乱码字段/属性的类型是list of %String,而且使用逻辑模式查看数据。换成ODBC模式或显示模式就没有问题了。原因是列表元素间是有特殊控制字符的,不同显示模式处理列表类型的数据方式不同,详见 显示模式 。对于列表类型的属性/字段,建议通过STORAGEDEFAULT="array" 将其映射为SQL子表,从而更容易通过SQL查看和操作数据,同时对象和global的访问不产生任何影响。例如: Property MyList as list of %String (STORAGEDEFAULT="array");
公告
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 分发获得。 如果您对此警报有任何疑问,请联系全球响应中心。
文章
Claire Zheng · 八月 25

直播回放:从FHIR到OMOP,灵活的转换有效推动数据资产的应用落地

2025年7月25日,我们邀请了InterSystems销售工程师 @Kate.Lau 分享了关于“InterSystems FHIR to OMOP数据管道”的内容。 如果说FHIR是数据资产化的“起点”,通过实时交换和标准化接口,将分散的医疗数据转化为可流通的资产;那么OMOP就是科研价值的“终点”,通过标准化模型和工具链,挖掘数据资产中的知识,支撑临床决策和药物研发。从FHIR到OMOP,灵活的转换能够有效推动数据资产的应用落地。 InterSystems FHIR to OMOP数据管道提供了解决方案。通过标准互操作(基于FHIR R4标准构建数据接口)、自动化映射(内置OMOP CDM预构建映射规则,大大缩短传统ETL开发周期)、 自动化数据质量分析和云原生架构(依托AWS HealthLake实现弹性扩展),可以帮助用户快速实现数据资产的OMOP化,为用户在数字时代占据先机! 关于该主题详情,欢迎查看这篇帖子。 直播回放现已准备就绪,欢迎查看!(如您未注册过,需要注册后观看)
文章
Lilian Huang · 九月 19

利用 FHIR 简化健康数据集成

数字健康解决方案提供者面临的压力越来越大,他们不仅要集成复杂的健康数据系统,还要确保可扩缩性、安全性和符合 HL7 FHIR 等标准。 Fast Healthcare Interoperability Resources (FHIR) 提供了一个标准化框架,使不同的健康 IT 系统能够毫不费力地进行通信,彻底改变了健康数据的交换方式。 但是,仅仅遵循 FHIR 标准并不足以应对健康数据集成错综复杂的问题。 解决方案合作伙伴必须利用 FHIR 代理、装饰和仓库等先进的架构组件来构建可扩缩的高效解决方案。 无论是本地部署、在公共云中,还是作为 InterSystems 管理的基于云的服务,InterSystems 提供为您的健康数据实现 FHIR 所需的所有必要功能。 InterSystems IRIS for Health 是一个全面的数字健康开发平台,提供处理 FHIR 数据和开发 FHIR 应用程序所需的所有要素。 InterSystems 平台包括可靠、高效的数据管理栈,并无缝实现 FHIR,使开发者能够创建可扩缩、可互操作的医疗保健解决方案。 为了支持这些功能,InterSystems IRIS for Health 包括下列一整套强大的功能,不仅可以简化 FHIR 集成,还能最大限度地提高互操作性: FHIR 服务器 – 一个开箱即用的完全兼容 FHIR 的服务器,也可以作为 FHIR 装饰的前端。 此服务器可以接受、处理 FHIR 请求,并将其转换为底层系统使用的旧版格式,或反之。 批量 FHIR – 一组独特的功能,可以导入和导出大型 FHIR 数据集,用于研究、分析、数据迁移和其他用途。 批量 FHIR 让您可以在一个高效的请求中轻松检索主要 FHIR 资源,并管理多个系统和位置中的大型数据集。 FHIR 转换 – 一组独特的工具,可以让您在 FHIR 资源和旧版数据格式(例如,HL7 v2、CDA、自定义模式)之间无缝转换。 该平台可以将这些旧版格式实时映射到 FHIR 中,从而高效地检索和更新数据。 FHIR SQL Builder – 一个供分析师和开发者使用的独特工具,他们可以使用 ANSI SQL、Power BI 或 Tableau 等熟悉的工具安全地实时查询 FHIR 数据。 由于采用复杂的有向图进行编码,FHIR 无法使用标准 SQL 进行查询。 使用 FHIR SQL Builder,您可以基于 FHIR 仓库本身创建自定义 SQL 架构,无需将数据移动到额外的 SQL 仓库。 数据规一化和访问 – 支持数据规一化,以便从旧版系统中检索到的数据具有良好的结构并能够以 FHIR 格式进行访问。 此功能对于确保汇总并一致地显示来自不同系统的数据至关重要。 FHIR 对象模型 – 使用支持代码补全和 IntelliSense 的 FHIR 模型类自定义代码编程。 FHIR 组件、架构和模式 FHIR 提供了一个灵活的可扩缩框架来实现医疗保健数据的互操作性。 为了有效利用 FHIR,我们需要了解实现数据集成和数据交换所需的关键组件、架构和模式。 概括来讲,FHIR 的功能分为以下几个组成部分: FHIR 代理 充当多路由中介,简化了各种系统之间健康数据的流动和交换。 它通过管理事务、协调不同的系统并确保高效安全地移动数据,实现了无缝的互操作性。 对于数字健康解决方案合作伙伴,FHIR 代理充当“交换所”的角色,简化了数据交换过程,这让他们可以更轻松地在复杂的生态系统中集成和扩缩应用程序,无需从数据库中额外检索 FHIR 数据。 FHIR 装饰充当单一接口,可以降低底层非 FHIR 数据库的复杂性,使开发者能够专注于应用程序功能,而不是低层次的数据管理。 装饰立于非 FHIR 系统“之前”,因此基于 FHIR 的操作能够应用于该系统。 FHIR 仓库提供了一个集中式数据存储库,用于以 FHIR 格式原生管理和提供健康数据,并确保数据的完整性、安全性和访问控制。 仓库的优点是更容易集成和管理,以及更好的性能和更高效的查询和更新。 同时,这些 FHIR 组件还使开发者能够创建灵活、高性能、安全的医疗保健应用程序,在提高患者治疗效果的同时,还可以减少开发和维护开销。 InterSystems FHIR 栈为 FHIR 实现者提供了一种选择,他们可以利用强大的数据集成和管理专业知识为所有主要的 FHIR 架构模式提供支持,这些模式会以不同的方式组合前述的 FHIR 组件。 InterSystems 提供了一整套全面的 FHIR 功能,这不仅有助于遵守 FHIR 标准,还会增强不同系统之间的数据互操作性。 通过将技术能力与深厚的行业知识相结合,InterSystems 帮助开发者应对 FHIR 应用的复杂性,并实现最适合其需求的 FHIR 解决方案。 安全性是医疗保健数据管理的一个关键因素,InterSystems 提供了强大的工具来确保其 FHIR 接口的安全。 这包括基于角色的访问控制 (RBAC)、对 FHIR 的 OAuth2 支持,以及审核日志记录,以确保符合 HIPAA 等医疗保健法规。 我们来检验一下这些 FHIR 组件如何在 InterSystems 软件中协同工作,帮助您选择最符合您需求的架构模式。 FHIR 代理 FHIR 代理是一个使用 FHIR 标准的多路由中介,它能够促进医疗保健数据的交换。 它充当不同健康信息系统之间的连接器,使它们能够通过转换和路由 FHIR 资源进行有效通信。 在多个系统(如电子健康记录 (EHR)、临床应用程序和患者管理系统)需要无缝共享数据,同时仍需遵守 FHIR 标准的环境中,FHIR 代理必不可少。 InterSystems FHIR 代理功能为数据转换、验证和聚合提供了强大的工具,这些功能共同构筑了 FHIR 架构的基石。 这可以简化基于 FHIR 的解决方案的实现,而这些解决方案可以应对集成多个旧版系统之类的特定挑战。 例如,医院网络可能会整合各种 EHR 系统中的患者数据,而 InterSystems FHIR 代理可以聚合这些系统中的信息,将其标准化为 FHIR 格式并以统一的视图呈现。 然后,临床医生可以实时访问全面的患者信息,从而改善医护协调,降低出错风险。 此外,FHIR 代理还可以促进人口健康管理的安全、可扩缩的数据共享,使医疗保健提供者能够分析趋势,改善不同人群的患者的治疗效果(例如,心脏病、戒烟和儿童肥胖症)。 InterSystems SDA(摘要文档架构)数据模型旨在确保更加高效地将旧版医疗保健数据格式转换为现代标准(如 FHIR)。 SDA 为各种旧版医疗保健数据格式(如 HL7 v2、CDA(临床文档架构)或自定义平面文件格式)提供了统一的数据表示。 这种中间格式弥合了高度结构化的旧版系统与更加模块化、更灵活的 FHIR 结构之间的差距,并将作为 FHIR 代理解决方案的一部分。 SDA 还充当抽象层,将不同来源的数据标准化为通用格式。 这种抽象降低了将每种格式直接转换为 FHIR 的复杂性,因为 SDA 提供了一种规一化的结构。 数据转换为 SDA 格式后,即可在多个系统中重复使用。 对于每种旧版格式,只需进行一次 SDA 格式转换即可。 通过 SDA,数据可以导出为各种现代标准,包括 FHIR,从而减少了多次点对点转换的需求。 InterSystems 提供内置的工具和连接器,可以让您轻松地从旧版格式转换为 SDA 以及从 SDA 转换为 FHIR。 这包括预定义的映射、解析器和转换逻辑。 InterSystems 还支持自定义 FHIR 配置文件,可以将 SDA 数据转换为满足特定组织或监管要求的 FHIR 配置文件。 FHIR 装饰 FHIR 装饰是医疗保健系统中使用的一种架构模式,可以在现有的不兼容 FHIR 的系统之上提供兼容 FHIR 的接口。 它充当实现接口,以标准化的 FHIR 格式公开来自旧版非 FHIR 系统的数据和服务,从而实现与现代医疗保健应用程序的互操作性,而无需对底层旧版系统进行重大更改。 与协调多个系统的 FHIR 代理不同,FHIR 装饰立于非 FHIR 系统“之前”。 许多医疗保健系统都基于早期标准构建,如 HL7 v2、CDA(临床文档架构)或与 FHIR 不兼容的自定义数据格式。 FHIR 装饰通过将旧版格式的数据按需转换为 FHIR,提供了一种满足现代互操作性标准,并与电子健康记录 (EHR) 系统、健康信息交换 (HIE) 和患者应用等新应用程序相集成的解决方案。 通过 InterSystems 和 FHIR 实现客户成功 以色列的一家健康维护组织 Leumit Health Services 试图改善付款人与服务提供者之间的数据共享,使其成员更容易获得医疗护理。 通过与 HL7 FHIR 实现方面的当地专家和当地医疗中心合作,Leumit 开发出一种通过 FHIR 装饰集成其各个系统的解决方案。 此解决方案可以自动登记患者:通过 InterSystems IRIS for Health,立即现场确定是否有资格共享基于 FHIR 的数据。 FHIR 装饰的主要特征 实时数据转换 – FHIR 装饰可以实时转换数据,在旧版系统的原生格式与 FHIR 资源之间转换请求和响应。 不干扰现有系统 – 底层系统继续像往常一样运行,而装饰会处理 FHIR 交互,最大限度地减少对旧版基础架构进行代价高昂的破坏性更改的需求。 逐步实现现代化 – FHIR 装饰可以让组织公开兼容 FHIR 的 API 供外部使用,逐步实现现代化,而不必一步到位地改革旧版系统。 互操作性 – 通过将旧版格式转换为 FHIR,FHIR 装饰可以与其他需要兼容 FHIR 的医疗保健系统、应用程序和平台实现互操作性。 InterSystems IRIS for Health 提供了一套理想的工具和技术来实现 FHIR 装饰,因为它原生支持 FHIR 和 FHIR 数据转换。 InterSystems IRIS for Health 支持使用自定义 FHIR 配置文件和扩展,使组织能够根据其特定需求调整 FHIR 装饰。 这种灵活性使 FHIR 装饰能够满足地区或组织的数据交换要求,同时遵守 FHIR 标准。 FHIR 仓库 与 FHIR 装饰相比,FHIR 仓库提供了一种更方便、更高效的医疗保健数据管理方式。 虽然这两种方式都旨在提供互操作性并促进 FHIR 的使用,但 FHIR 仓库在数据管理、性能和易于集成方面具有许多优势。 FHIR 仓库以 FHIR 格式原生存储、管理和展示医疗保健数据,提供了一个可以高效查询和更新数据的集中式平台。 这与 FHIR 装饰形成鲜明对比,后者用作旧版系统的前端,在非 FHIR 格式与 FHIR 格式之间实时转换。 InterSystems FHIR 仓库经过专门设计,支持以 FHIR 格式存储和管理数据,无需实时转换数据。 通过原生存储 FHIR 资源,仓库可以更高效地处理复杂的 FHIR 查询和更新。 无需中间映射,直接对 FHIR 仓库进行查询,这对于复杂搜索特别有用,例如跨多个 FHIR 资源(如患者、病情、观察)的患者记录查询。 所有数据都以 FHIR 格式存储在一个地方。 这提高了数据存储和访问的一致性、效率和可靠性。 InterSystems FHIR 仓库可以随着医疗保健组织的不断发展而高效扩缩并处理越来越多的数据。 由于仓库存储了预转换的 FHIR 数据,在处理来自多个系统的并发请求时,系统会进行性能优化。 InterSystems 具有一个可扩缩性实验室,用于对 FHIR 的性能进行基准测试。 该实验室定期运行一整套 FHIR 基准测试,结果显示在复杂的 FHIR 搜索查询方面取得了显著的进步。 简单的仓库搜索每秒可以检索超过 160,000 个 FHIR 资源,在要求更高的情况下具有类似的性能 (Jamieson & Banand, 2024)。¹ InterSystems 提供了一个开箱即用的完全兼容 FHIR 的仓库。 这使医疗保健机构不必进行复杂的设置即可快速部署符合最新 FHIR 标准的 FHIR 仓库。 此栈支持所有主要的 FHIR 交互,包括资源创建、检索、更新和删除。 InterSystems 确保其 FHIR 仓库与不断发展的 FHIR 标准保持一致,提供对最新的 FHIR 资源和功能支持。 这可以确保与其他基于 FHIR 的系统兼容,并适应不断发展的医疗保健标准。 利用 InterSystems IRIS 扩展 FHIR 仓库的功能 内置的 FHIR 仓库与 InterSystems IRIS for Health 数据平台原生集成,可以实现与其他医疗保健系统和应用程序的无缝交互。 这使摄取、存储和检索 FHIR 资源变得更加容易,不会带来额外的复杂性。 InterSystems IRIS for Health 包含一个多模型数据库,并支持高级分析、AI 和机器学习模型。 此平台的 FHIR 仓库可以用作构建分析解决方案的基础,分析解决方案能够从结构化和规一化的医疗保健数据中提取信息。 InterSystems 独特的 FHIR SQL Builder 工具使开发者能够以关系格式“投射”FHIR 资源,从而轻松使用 ANSI SQL 或 BI 工具进行分析。 由于此平台是一个真正的多模型数据库,它可以实时进行这些投射,分析用户始终具有最新的信息,无需在数据仓库中复制其数据。 InterSystems IRIS for Health 以 FHIR 格式存储和查询数据,使组织能够应用人口健康分析、预测患者治疗效果,以及优化临床操作。 为什么选择 InterSystems FHIR 解决方案 无论您是构建 FHIR 代理、FHIR 装饰还是 FHIR 仓库,技术栈的选择都会对您的成功产生重大影响。 以下是 InterSystems FHIR Stack 应当成为您的首选的原因: 全面、可扩缩的 FHIR 支持 – InterSystems 为所有版本的最新 FHIR 标准提供全面的支持。 InterSystems IRIS for Health 拥有处理大量临床数据的可靠记录, 专为可扩缩性而设计。 无论您是开发简单的 FHIR 代理还是复杂的 FHIR 仓库,InterSystems 都可以确保即使在高容量环境中也可以进行高效扩缩,而不会影响性能。 我们独特的 InterSystems Bulk FHIR Coordinator 可以让您从支持批量 FHIR 的其他 FHIR 服务器和 EMR 进行批量导出,从而可以在一个地方轻松管理您的所有 FHIR 数据。 与现有系统无缝集成 – 医疗保健 IT 面临的一个最大挑战就是将新解决方案与旧版系统集成在一起。 InterSystems 的 FHIR Stack 在基于 FHIR 的新型应用程序与较早的 HL7 v2、HL7 v3 和 CDA 标准之间提供了无缝衔接。 这种互操作性可以确保在贵组织的 IT 环境中持续通信,而无需调整现有的基础架构,这使其成为 FHIR 装饰和我们独特的 FHIR 转换服务的理想选择。 经过验证的性能和可靠性 – 在医疗保健领域,可靠性不容商议。 InterSystems 一直以提供高可用性和低延迟的企业级性能而闻名。 FHIR Stack 基于 InterSystems IRIS for Health 构建,是专门针对医疗保健工作负载而设计的数据平台。 无论您是管理 FHIR 仓库还是充当 FHIR 代理,它都可以确保一致的正常运行时间和高效的实时数据交换。 高级数据管理和安全 – 数据安全和患者隐私在医疗保健领域至关重要。 InterSystems FHIR Stack 提供了强大的内置安全功能来保护敏感的医疗保健数据。 它完全符合 HIPAA 和其他全球标准,提供基于角色的访问控制、审核日志和加密功能。 对于构建 FHIR 仓库的组织来说,符合这些标准意味着可以放心地存储和交换大型数据集。 广泛的开发和自定义工具 – InterSystems 提供全面的开发环境,包括 API、SDK 和 FHIR SQL Builder,可以帮助您根据特定需求自定义和扩展 FHIR 解决方案。 无论您需要轻量级 FHIR 代理还是功能丰富的 FHIR 仓库,我们的工具和强大的支持服务都可以实现快速定制,加快上市速度。 卓越的供应商支持和生态系统 – InterSystems 以其出色的客户支持而闻名,其中包括全天候获取技术资源和广泛的开发者社区。 我们强大的合作伙伴和解决方案生态系统确保您在工作中永远不会孤单。 无论您是要就 FHIR 装饰的最佳做法进行咨询,还是要为您的 FHIR 仓库进行技术故障排除,都可以随时获取帮助。 更多关于此主题的文章: FHIR-HL7v2-SQL-Demo 我的 FHIR 使用经验 iOS、FHIR 和 IRIS for Health fhir-integratedml-example 概述 Iris FHIR Python 策略 一个使用 Python 编写的 FHIR 客户端的简单示例 一个使用 C# 编写的 FHIR 客户端的简单示例 一个使用 Java 编写的 FHIR 客户端的简单示例 使用嵌入式 Python 自定义 FHIR 仓库 FHIR 环境设置指南 来源:利用 FHIR 简化健康数据集成
文章
Frank Ma · 六月 27, 2022

使用Python和仪表盘制作的一个欧洲水状况应用程序

比较不同的商业智能技术是非常有趣的。我很好奇它们在功能、开发工具、速度和可用性方面有什么不同。 在这个应用程序中,我选择了一个有欧洲各国水状况的数据集。这是一个开源的数据集,包含1991年到2017年的观测数据。 团队和我决定使用IRIS BI、Tableau、PowerBI和InterSystems Reports(由Logi Reports驱动)在这个BI数据集的基础上制作一个模型 对于前端,我们通过Embedded Python在PythonFlask中制作了一个网页界面。 顺便说一下,其结果可以在这个网页上看到:http://atscale.teccod.com:8080/ 你可以看看demo stand (演示台),因为从资源库部署一个容器可能需要多至20分钟的时间。大量的python包,后面会有更多的原因。 主页面 数据 事实上,数据似乎很小,期间只有17年 :) 因此,在现有的基础上,我想延续数据集,为此使用了一个神经网络。使用同样的嵌入式Python,使用了Tensorflow,这个包下载后占据了511MB,不要惊讶 实际上,这也是容器部署时间长的原因--为神经网络下载了很多包,相当多的相关包,安装时间很长。不过会有一篇关于神经网络和Integrated ML(一体化机器学习)的单独文章,我很快会发表。 我还要说的是,预测的结果被输入到同一个数据库,所以你可以通过BI工具看到数据集。但是预测只针对法国的一条河,请仔细看一下。因为我们只有足够的力量计算一件事。完整的预测会花很长的时间。 数据立方体 数据立方体是在IRIS中制作的,同时立方体也是在Adaptive Analytics(由AtScale驱动)中制作的。因此,IRIS的BI仪表盘是在IRIS上建立的,其余的工具(Logi、PowerBI、Tableau)从AtScale上获取数据。 仪表板 实际上商业智能系统是以多种形式呈现的。 这是在python中的Dash。 我们喜欢的IRIS BI InterSystems报告(由Logi报告提供)。 PowerBI Tableau 样例 完成 对于所介绍的所有BI系统,源文件都可以在资源库中找到。你可以看到报告和仪表盘是如何工作的,并在你未来的项目中使用它们。 通过它们,你可以直观地看到一个特定的系统是如何工作的,也可以了解一个特定的系统有哪些开发工具。 我们没时间来制作一个页面,让你可以输入各种参数和条件,使用神经网络的可能值进行计算。这里有一些先决条件,有一个实施神经网络的例子,以及在其帮助下所做的预测,这些都是在嵌入式Python中实现的。神经网络已被训练,启动脚本也是可用的,位于 https://github.com/teccod/water-conditions-Europe/blob/main/iris/src/PythonFlask/pages/ml/ml_run.py文件夹中。 谢谢你阅读这篇文章,我在等待评论和反馈。很快就会有一篇关于在嵌入式Python和IntegratedML(一体化机器学习)中比较神经网络的文章,我将把它附在这篇文章中。
文章
Hao Ma · 四月 18, 2021

IRIS Docker的安装

IRIS相比Caché在部署上的一个进步是支持docker。即便不是云部署, 使用docker也带来非常多的便利。 尤其是在开发测试环节,由于docker的使用更便捷,除非要模拟客户的环境或者做规定的性能测试,我在测试中基本已经不再使用本机的实例或者虚机。IRIS的联机文档有[详细的IRIS docker安装使用指导](https://irisdocs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=ADOCK#ADOCK_iris_running_compose),本文只是一个简单的,快速上手的**在测试环境**安装IRIS docker的简单步骤,尤其适合初学者。 注意Windows上docker可能会遇到这样那样的问题,因此通常还是推荐在Linux或者Mac OS上使用。正式的生产环境的IRIS docker container也是不支持Windows系统的。 > Referrence - [First Look: InterSystems Products in Docker Containers](https://irisdocs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=AFL_containers) - [Running an InterSystems IRIS Container: Docker Run ExamplesRunning an InterSystems IRIS Container: Docker Run Examples](https://irisdocs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=ADOCK#ADOCK_iris_running_dockerrun) ##1. 在操作系统上安装Docker环境 [Docker官方文档的安装步骤](https://docs.docker.com/engine/install/)非常清晰,我按照上面的步骤在MAC和CentOS上安装docker从来没有出现过问题。恰恰是这个文档中没有的Redhat上的安装,过程中曾碰到过几个问题,在网上搜索了答案,也不算困难。 简单的复述一下步骤:root用户的最简单安装,没有权限问题, 没有docker网络修改等等: 1. 安装yum-util, 用于添加yum源,如果您的系统中已经有了yum-utils包这步可以省略 sudo yum install -y yum-utils 2. 添加docker的Repo到yum源并确认 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum repolist 3. 安装3个docker组件 sudo yum install docker-ce docker-ce-cli containerd.io 4. 启动Docker sudo systemctl start docker 5. 确认安装成功。'docker run'命令会去本地的库里找'hello-world',没有找到就去网上下一个"images",然后创建一个docker容器给你使用。 sudo docker run hello-world 安装结束您想要到注册一个账户,用来下载上传docker image。 下载命令使用'docker pull', 比如 ``` docker pull nginx ``` ## 2. 下载IRIS Docker image 在线文档[Container Images Available from InterSystems](https://docs.intersystems.com/components/csp/docbook/Doc.View.cls?KEY=PAGE_containerregistry#PAGE_containerregistry)中介绍了网站上可以下载的IRIS images的列表,其中community版本不需要license,其他的版本需要从InterSystems处获得IRIS docker版的专用license. 下面是登录并下载iris docker image的记录。从网页登录,您会得到docker的登录密码"使用的密码"jaRWSBJjcUcNprCKTuMX10PYHNq2IYPrAQoYdp6Siokb"。 [root@centos7 ~]# docker login -u="hma" -p="jaRWSBJjcUcNprCKTuMX10PYHNq2IYPrAQoYdp6Siokb" containers.intersystems.com WARNING! Using --password via the CLI is insecure. Use --password-stdin. WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded [root@centos7 ~]# docker pull containers.intersystems.com/intersystems/iris-ml:2020.3.0.304.0 2020.3.0.304.0: Pulling from intersystems/iris-ml 5c939e3a4d10: Pull complete c63719cdbe7a: Pull complete 19a861ea6baf: Pull complete 651c9d2d6c4f: Pull complete d21839215a64: Pull complete 7995f836674b: Pull complete 841ee3aaa7aa: Pull complete 739c318c2223: Pull complete d76886412dda: Pull complete Digest: sha256:4c62690f4d0391d801d3ac157dc4abbf47ab3d8f6b46144288e0234e68f8f10e Status: Downloaded newer image for containers.intersystems.com/intersystems/iris-ml:2020.3.0.304.0 containers.intersystems.com/intersystems/iris-ml:2020.3.0.304.0 [root@centos7 ~]# 另外,您也可以从InterSystems的技术支持网站下载iris docker的压缩包"iris*.tar.gz",然后使用"docker load"安装, 比如: CNMBPHMA:~ hma$ docker load -i iris-2020.4.0.524.0-docker.tar.gz ## 3. 创建并运行IRIS Container ###简单的办法 如果是只是简单的测试,可以直接运行,但如果不是community版本的docker, 您还需要把license拷贝到container内部。 比如下面的步骤 CNMBPHMA:~ hma$ docker run -d -i -p 52773:52773 -p 51773:51773 --name iris20204 intersystems/irishealth:2020.2.0.211.0 CNMBPHMA:~ hma$ docker cp iris.key iris20204:/usr/irissys/mgr/iris.key 需要注意的是,不同版本的超级端口可能不同,有些是1972,有些是51773。为了省事,您也许可以使用"-P"把所有container内部的端口都映射出来。 除了要拷贝license到container内部,在做测试的时候,您可能还要经常的使用"docker cp"把各种测试文件拷入container。而且,当查看和修改container内部文件的使用,还需要使用下面的命令进入container内部: CNMBPHMA:~ hma$ docker exec -it iris20204 /bin/sh 因此,如果是您需要一个经常使用的iris container环境,我还是建议您使用下面的方法。 ### IRIS Container使用外部存储 简单的说,下面的命令 - 使用"--volume"参数为container创建外部存储,将host上的"/root/data/dur"文件夹和container内部的"/dur"文件夹链接起来。(/root/data/dur文件夹要在host上手工创建,这只是一个示意,您可以使用任何可用的目录) - ISC_DATA_DIRECTORY环境设置会在创建iris container时在/dur文件夹下创建一个子目录”/dur/irisepy",所有IRIS运行的日志,客户配置,mgr目录下的用户数据都会保存在这个目录。因为"/dur"是外部存储,即使docker container被删除数据也不会丢失。这对container的重新创建或者iris升级都带来很大的方便。在线文档上对如果覆盖或者升级带有外部存储的iris container有详细的介绍。 - “key"参数定义了在IRIS container创建时会把"/dur/license"目录下的iris.key拷贝到iris安装目录的mgr下并激活。也就是说,在运行命令前, 您需要在host上在"/root/data/dur"目录下创建"license"子目录并将iris.key拷贝进去。 docker run --name irisepy --init -d\ -p 9091:1972 -p 9092:52773\ -v /root/data/dur:/dur\ --env ISC_DATA_DIRECTORY=/dur/irisepy \ containers.intersystems.com/intersystems/iris-ml:2020.3.0.304.0 \ --key /dur/license/iris.key 希望您喜欢使用docker
文章
姚 鑫 · 二月 3, 2021

第二十三章 Caché 变量大全 $Y 变量

# 第二十三章 Caché 变量大全 $Y 变量 包含光标的当前垂直位置。 # 大纲 ```java $Y ``` # 描述 `$Y`包含光标的当前垂直位置。当字符写入设备时,Caché会更新`$Y`以反映垂直光标位置。 输出的每个换行符(换行符)(`ASCII 10`)将`$Y`递增1。换页符(`ASCII 12`)将`$Y`重置为0。 `$Y`是16位无符号整数。当其值达到65536时,`$Y`换行为0。换句话说,如果`$Y`为65535,则下一个输出字符将其重置为0。 可以使用`set`命令为`$X`和`$Y`赋值。例如,可以使用特殊的转义序列来改变物理游标位置,而不更新`$X`和`$Y`的值。在这种情况下,在使用转义序列之后,使用`set`将正确的值分配给`$X`和`$Y`。 # 注意 ## NLS字符映射 国家语言支持(NLS)实用程序`$X/$Y`选项卡定义当前区域设置的`$X`和`$Y`光标移动字符。 ## 带终端I/O的`$Y` 下表显示了不同字符对`$Y`的影响。 Echoed Character | ASCII Code |Effect on $X ---|---|--- `` |12| `$Y=0` `` |13| `$Y=$Y` `` |10| `$Y=$Y+1` `` |8| `$Y=$Y` `` |9| `$Y=$Y` 任何可打印的ASCII字符 |32-126| `$Y=$Y` `OPEN`和`USE`命令的S(ECRET)协议关闭回显。它还可以防止`$Y`在输入过程中被更改,因此它指示真实的光标位置。 更改垂直位置的`WRITE $CHAR()`也会更改`$Y`。更改垂直位置的`WRITE*`不会更改`$Y`。例如,`WRITE$Y,$CHAR(10),$Y`执行换行并递增`$Y`。相比之下,`WRITE$Y,*10,$Y`执行换行符,但不会递增`$Y`。 因为`WRITE*`不会改变`$Y`,所以可以向终端发送一个控制序列,而`$Y`仍将反映真实的光标位置。由于某些控制序列确实会移动光标,因此可以使用`SET`命令直接设置`$Y`。例如,以下命令将光标移动到VT100型端子上的列20和行10,并相应地设置`$X`和`$Y`: ```java SET dy=10,dx=20 WRITE *27,*91,dy+1,*59,dx+1,*72 SET $Y=dy,$X=dx ``` 设备执行但不输出的ANSI标准控制序列(如转义序列)可能会在`$X`和`$Y`值与真实光标位置之间产生差异。要避免此问题,请使用`WRITE*`语句并指定字符串中每个字符的ASCII值。例如,不使用以下代码: ```java WRITE $CHAR(27)_"[1m" ``` 使用此等效表: ```java WRITE *27,*91,*49,*109 ``` 通常,在显式移动光标的任何转义序列之后,应更新`$X`和`$Y`以反映实际光标位置。
文章
姚 鑫 · 十月 14, 2022

第十六章 CSP 中的 HTTP 请求 - %CSP.Request 对象

# 第十六章 CSP 中的 HTTP 请求 - %CSP.Request 对象 # %CSP.Request 对象 当 `CSP` 服务器响应 `HTTP` 请求时,它将有关传入请求的信息打包到对象中的 `%CSP.Request` 实例中。可以使用变量 `%request` 来引用此对象。 ## URL 属性 要查找传入 `HTTP` 请求的 `URL`(不包括查询字符串),对象中使用 `%CSP.Request` 的 `URL` 属性: ```java Write "URL: ", %request.URL ``` ## 数据属性和 `URL` 参数 `URL` 可能包含参数列表(也称为 `URL` 查询)对象中的 `%CSP.Request `通过其 `Data` 属性使这些可用。 例如,假设传入的 URL 包含: ```java /csp/user/MyPage.csp?A=10&a=20&B=30&B=40 ``` 可以使用以下命令在服务器上检索这些参数: ```java Write %request.Data("A",1) // this is 10 Write %request.Data("a",1) // this is 20 Write %request.Data("B",1) // this is 30 Write %request.Data("B",2) // this is 40 ``` **数据是一个多维属性,其中存储的每个值都有 `2` 个下标:参数的名称和参数的索引号(参数可以在 `URL` 中多次出现,如上面的 `B`)。请注意,参数名称区分大小写。** 另请注意,传入的 `HTTP` 请求是 `GET` 还是 `POST` 请求并不重要:`Data` 属性以完全相同的方式表示参数值。 可以使用` ObjectScript $Data ($D)` 函数来测试是否定义了给定的参数值: ```java If ($Data(%request.Data("parm",1))) { } ``` 如果您希望引用一个参数但不确定它是否已定义,可以使用 `ObjectScript $Get` 函数: ```java Write $Get(%request.Data("parm",1)) ``` 可以在对象中使用 `%CSP.Request`的 `Count` 方法找出为特定参数名称定义了多少值: ```java For i = 1:1:%request.Count("parm") { Write %request.Data("parm",i) } ``` ## CgiEnvs 属性和 CGI环境变量 `Web` 服务器提供一组值,称为 `CGI`(通用网关接口)环境变量,其中包含有关 `HTTP` 客户端和 `Web` 服务器的信息。可以使用多维属性 `CgiEnvs` 访问这些 `CGI` 环境值。可以按照与 `Data` 属性相同的方式使用它。 例如,要确定发出 `HTTP` 请求的浏览器类型,请查看 `CGI` 环境变量 `HTTP_USER_AGENT` 的值: ```java Write %request.CgiEnvs("HTTP_USER_AGENT") ``` ## Cookies 属性 如果 `HTTP` 请求包含任何 `cookie`,可以使用多维属性 `Cookies` 检索它们的值。可以按照与 `Data` 属性相同的方式使用它。 数据也可以保存在 `%session` 对象中。 **请参阅 `CSP` 示例数据库中 `cookie.csp` 中使用 `cookie` 的示例。** ## MIME 数据属性 **传入请求可能包含 `MIME`(多用途 `Internet` 邮件扩展)数据。这通常用于较大的信息,例如文件。可以在对象中使用 `%CSP.Request` 检索 `MIME` 数据。这将创建并返回一个 `Caché` 流对象的实例,然后可以使用该实例来读取 `MIME` 数据。** **有关使用 `MIME` 数据的示例,请参阅 `CSP` 示例中的 `upload.csp`。**
文章
王喆 👀 · 十一月 17, 2022

使用VSCode开发IRIS

经过一段时间的学习和使用本文总结了一些使用VsCode开发的使用方法,本文偏向于应用但会对少量的我知晓的原理进行一部分解释。 参考教程链接:https://cn.community.intersystems.com/node/488611 VSCode下载:https://code.visualstudio.com/ 使用VSCode开发的优劣: 1 优势: 跨平台(Windows|MAC|Linux)开发调试远程服务端代码,而且可以快速导出COS代码(M语言也可以)。 SQL辅助查询数据 快捷的代码调试方式,一种是直接在VSCode中调试,另一种是快速复制类名和方法名在Terminal中调试。 代码智能联想补全,类似其它语言,输入开头的前几个字符可以联想后面的。 快速跳转到方法定义(ctrl+鼠标左键 | F12) 主题图标多样化,可以使用默认的黑色,当然也可以使用和studio一样的样式,链接:https://cn.community.intersystems.com/node/516996 2 劣势: 无法导入导出XML文件 缺少一些Studio的常用功能: SOAP向导 Java网关 DT转换拖拽编写 BP流程拖拽编写 安装步骤 1官网安装Visual Studio Code编辑器 https://code.visualstudio.com/Download 安装直接下一步 - 下一步 2 汉化 如果安装为英文要切换为中文则可以通过Command Palette 中运行Configure Display Language,install another language, 选择中文,再根据提示安装相应的语言插件。 3 扩展安装 打开软件,侧边栏点击扩展按钮->搜索 "InterSystems" -> 安装扩展,如图所示: 前三个是IRIS官方推荐按安装的插件,其中InterSystems ObjectScript Extension Pack (集成好的InterSystems插件包),在此还推荐安装SQL Tools InterSystems IRIS(连接数据库插件,使用效果类似于SQLdbx) 4 配置 VSCode支持图形化的配置,但实测并不好用,而且容易保存失败,在此推荐使用settings.json 打开:设置 -> 扩展 -> InterSystems Server Manager -> settings.json { "intersystems.servers": { "loc": { "webServer": { "scheme": "http", "host": "127.0.0.1", "port": 52773 }, "askForPassword": false, "username": "Superuser", "password":"SYS", "description":"228" }, }, "terminal.integrated.detectLocale": "on", "intersystems.language-server.diagnostics.routines": true, "editor.renderControlCharacters": false, "editor.unicodeHighlight.ambiguousCharacters": false, "git.autorefresh": false, "git.autoRepositoryDetection": false, "git.confirmEmptyCommits": false, "git.confirmForcePush": false, "git.confirmNoVerifyCommit": false, "git.confirmSync": false, "git.countBadge": "off", "diffEditor.wordWrap": "on", "editor.wordWrap": "on", "workbench.colorTheme": "InterSystems Default Dark", "workbench.editor.enablePreview": false, "vsicons.dontShowNewVersionMessage": true, "git.enableSmartCommit": true, "explorer.confirmDelete": false, "editor.fontSize": 13, "objectscript.conn": { "host": "127.0.0.1", // 连接数据库IP "port": 57772, // 连接数据库端口 "username": "Superuser", // 用户名 "password": "SYS", // 密码 "ns": "BKlinik", // 命名空间 "active": true, // 是否开启 "https": true, "server": "bklinik" // intersystems.servers中设置的数据库服务器名 }, "sqltools.connections": [ { "namespace": "BKlinik", "connectionMethod": "Server and Port", "showSystem": false, "previewLimit": 50, "server": "localhost", "port": 52773, "askForPassword": false, "driver": "InterSystems IRIS", "name": "BKlinik", "username": "Superuser", "password": "SYS" } ], "intersystemsServerManager.credentialsProvider.deletePasswordOnSignout": "never", } 这是我目前使用的: intersystems.servers :指的是IRIS的服务器的设置,内部的服务器命名不可大写,相比较官方出具的设置,我增加了【"askForPassword": false, "password":"123456",】此处的增加是方便后面打开代码的时候不需要再输入密码。 5 打开代码 打开代码有两种方式:一种是直连代码打开,另一种是客户端方式连接,第一种相当于studio直接连着代码进行编辑,第二种是把代码下载到本地磁盘的对应目录进行编辑。第一种方式好处是完全无感的查看编辑代码,但是如果不小心删掉之后无法恢复。第二种方式删掉之后可以恢复,而且也可以用GIT等代码版本控制,但是如果多人同时编辑代码,可能会存在冲突覆盖的情况。 直连代码 Instersystems tools – All Servers – 【服务器名】– NameSpace – 命名空间 然后你就可以愉快的编辑代码了 客户端方式打开 首先,你得建立一个文件夹,如图:本文是在D://workspace建立的一个aaa文件 点击打开文件夹 – 选择对应文件 此时会出现一个IRIS的图标,ObjectScript,如图所示: 点击ObjectScript – Choose Server and Namespace – 选择对应的服务器 再选择你需要的命名空间 比如我这边选择的是【HSLIB】 选择你需要编辑的代码 - 右键 - 选择Export 输出的框里会显示导出详情,如下图所示: 等待导出完毕,回到代码编辑,你的代码会出现在src目录下,如图所示: 如果你了解过ZPM的话,你现在还可以在这边添加一个module.xml,方便你把这个代码导入到其它机器上,ZPM相关的知识可以去GitHub上看看,关键就两个命令 [zpm] [load -v 【路径】] 和一个文件的编写,特别好用的是导入发布订阅和查找表,导代码的话得保证你的代码一行都没有问题,如果你的代码在使用的时候跨命名空间做了一些操作的话ZPM也会报错。 如何配置GIT的话,可以通过命令行的方式在本地文件上配置,也可以在VSCode上处理,和其它代码的处理方式差不多。 如果你安装了【SQL Tools InterSystems IRIS】那么上述配置中的sqltools.connections就是你需要的连接配置,你可以尝试改成你自己的库,然后进行一些简单的SQL操作。当然个人还是推荐使用DBeaver,这个更好用。 总结 好了,以上就是如何进行VSCode开发的我的一些小分享,如果有纠正请联系!!! 非常棒的文章! 补充InterSystems使用VSCode开发的官方文档 Welcome to the VS Code InterSystems ObjectScript documentation - InterSystems ObjectScript for VS Code (intersystems-community.github.io) 可以通过下面网址直接打开SOAP 向导页: {serverurl}/isc/studio/templates/%25ZEN.Template.AddInWizard.SOAPWizard.cls?Namespace={namespace} 比如:http://localhost:52779/isc/studio/templates/%25ZEN.Template.AddInWizard.SOAPWizard.cls?Namespace=MyTest 也可以在VSCode里添加用户自定义的快捷键: "objectscript.conn": { "links": { "Portal Explorer": "${serverUrl}/csp/sys/exp/%25CSP.UI.Portal.ClassList.zen?$NAMESPACE=${ns}", "SOAP Wizard": "${serverUrl}/isc/studio/templates/%25ZEN.Template.AddInWizard.SOAPWizard.cls?$NAMESPACE=${ns}" }, } 参考文档:https://intersystems-community.github.io/vscode-objectscript/configuration/#server-actions-menu 另:BPL,DTL一般直接在浏览器中进行编辑,完全不需要VSCode。 感谢 感谢 学到了
文章
Claire Zheng · 四月 21, 2021

云助力的集成平台方案

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