搜索​​​​

清除过滤器
文章
Claire Zheng · 六月 8, 2023

恭喜InterSystems 同事祝麟喜获重磅证书——HL7 FHIR R4 Proficiency Exam

亲爱的开发者们, 向大家分享一个好消息!InterSystems开发者中文社区版主、InterSystems高级销售工程师祝麟 ( @Lin.Zhu ) 于近日顺利通过“HL7 FHIR R4 Proficiency Exam”并取得资格认证证书! HL7 FHIR(R4)能力证书可以证明在最新和最热门的HL7标准方面达到行业公认的专业水平。考试涵盖了以下内容:FHIR原则;FHIR资源的基本概念;交换机制;一致性和实施指导;如何使用术语;如何建立安全和可靠的FHIR解决方案;FHIR维护过程;以及如何使用和处理FHIR许可和知识产权(IP)。 FHIR®(快速医疗互操作性资源)是HL7的下一代标准框架,2023年,我们推出的InterSystems IRIS医疗版互联互通套件3.0版(V3.0)就实现了与FHIR更深层的生态互通——借助强大的、打通多个互操作生态的能力,用户可以将互联互通服务和消息与其它互操作标准(如FHIR、HL7 V2)进行自动双向转换,为数据挖掘与价值实现带来更多可能性。 举例来说,在数据利用上,通过V3.0内置的FHIR资源仓库,用户可按业务需要,将互联互通文档和消息通过FHIR资源投射为SQL结构化数据,为实现“原始数据不出院、数据可用不可见”提供了技术基础,从而极大加强现有院内临床数据中心、科研数据中心以及区域健康大数据平台等数据仓库类系统的数据利用,使BI、AI/ML过程可基于数据发掘实现价值洞察,进行数字化业务闭环,把数据转化为可以持续产生价值的资产,为医院实现数据资产变现提供必要条件,全面助力医院数字化转型和生产力提升。 在应用创新上,V3.0 提供强大的FHIR生态能力(包含SMART on FHIR与CDS Hooks),支持快速开发和集成任意支持FHIR标准的、即插即用的第三方创新应用,实现数据利用最大化,为包括居民健康管理、临床决策支持、专科电子病历等打造坚实的数据和平台基础。 InterSystems作为FHIR标准在全球范围的推广者,已经在美国和亚太地区拥有众多成功案例,并且帮助越来越多的国家部署并遵循这种标准。 再次恭喜 @Lin.Zhu ✿✿ヽ(°▽°)ノ✿ 获得这一证书!
问题
Michael Lei · 三月 1, 2022

如何重置 Web Gateway 用户名和密码

Hi Community, C:\InterSystems\IRISHealth\CSP\bin.csp.cni 有用户名, 但密码被加密了,如何解密或者重置? 谢谢! 1. Open <IRIS>\CSP\bin\CSP.ini 2. Edit Username/Password in [LOCAL] section. 3. Using Management Portal or ^SECURITY routine set the same user as (2) if they do not match. 4. Restart InterSystems IRIS.
文章
姚 鑫 · 三月 26, 2021

第十三章 使用动态SQL(四)

# 第十三章 使用动态SQL(四) # 返回完整结果集 使用`%Execute()`或`%ExecDirect()`执行语句将返回一个实现`%SQL.StatementResult`接口的对象。该对象可以是单一值,结果集或从`CALL`语句返回的上下文对象。 ## %Display()方法 可以通过调用`%SQL.StatementResult`类的`%Display()`实例方法来显示整个结果集(结果对象的内容),如以下示例所示: ``` DO rset.%Display() ``` 请注意,`%Display()`方法不会返回%Status值。 显示查询结果集时,`%Display()`通过显示行数来结束:“受影响的5行”。 (这是`%Display()`遍历结果集之后的`%ROWCOUNT`值。)请注意,`%Display()`不会在此行计数语句之后发出行返回。 `%Display()`有两个可选参数: - 分隔符:在数据列和数据标题之间插入的字符串。它出现在结果集列之间,紧靠标题或数据值之前。默认为无定界符。如果省略,请在“列对齐”标志之前指定一个占位符逗号。 - 列对齐:整数标志,指定如何计算数据列和数据标题之间的空格。可用的选项有: - 0:结果集标题/数据列将根据标准定界符(选项卡)对齐。这是默认值。 - 1:结果集标题/数据列将根据列标题和标准定界符(标签)的长度对齐。 - 2:结果集标题/数据列将根据列数据属性的精度/长度和标准定界符(选项卡)进行对齐。 ## `%DisplayFormatted()`方法 可以通过调用`%SQL.StatementResult`类的`%DisplayFormatted()`实例方法,而不是调用`%Display()`,将结果集内容重新格式化并重定向到生成的文件。 可以通过指定字符串选项`%DisplayFormatted(“HTML”)`或相应的整数代码`%DisplayFormatted(1)`来指定结果集格式。可以使用以下格式:XML(整数代码0),HTML(整数代码1),PDF(整数代码2),TXT(整数代码99)或CSV(整数代码100)。 (请注意,CSV格式未实现为真正的逗号分隔值输出;相反,它使用制表符来分隔列。)TXT格式(整数代码99)以行数结尾(例如,“受影响的5行”) ”);其他格式不包括行数。 InterSystems IRIS生成指定类型的文件,并附加适当的文件扩展名。 可以指定或省略结果集文件名: - 如果指定一个目标文件(例如,`%DisplayFormatted(99,"myresults")`),则在当前命名空间的子目录的mgr目录中生成具有该名称和相应后缀(文件扩展名)的文件。 例如,`C:\InterSystems\IRIS\mgr\user\myresults.txt`. 如果具有该后缀的指定文件已经存在,则InterSystems IRIS将用新数据覆盖它。 - 如果没有指定目标文件(例如,`%DisplayFormatted(99)`,则在Temp子目录的mgr目录中生成一个具有随机生成的名称和适当后缀(文件扩展名)的文件。 例如,`C:\InterSystems\IRIS\mgr\Temp\w4FR2gM7tX2Fjs.txt.` 每次运行一个查询时,都会生成一个新的目标文件。 这些例子显示了Windows文件名; InterSystems IRIS支持其他操作系统上的等效位置。 如果无法打开指定的文件,则此操作将在30秒后超时并显示一条错误消息;否则,该操作将超时。当用户没有对指定目录(文件夹)的`WRITE`权限时,通常会发生这种情况。 **如果无法以指定的格式呈现数据,则将创建目标文件,但不会将结果集数据写入其中。而是将适当的消息写入目标文件。例如,流字段`OID`包含与XML和HTML特殊格式字符冲突的字符。可以通过在流字段上使用`XMLELEMENT`函数来解决此XML和HTML流字段问题。例如`SELECT Name,XMLELEMENT(“ Para”,Notes)`。** 可以选择提供`%DisplayFormatted()`在执行指定格式转换时将使用的转换表的名称。 如果一个结果集序列中有多个结果集,则每个结果集的内容都将写入其自己的文件中。 可选的第三个`%DisplayFormatted()`参数指定消息存储在单独的结果集中。成功完成后,将返回类似以下的消息: ``` Message 21 row(s) affected. ``` 下面的Windows示例在`C:\InterSystems\IRIS\mgr\user\`中创建了两个PDF(整数代码2)结果集文件。 它为消息创建一个mess结果集,然后使用`%Display()`将消息显示到终端: ```java /// d ##class(PHA.TEST.SQL).CreatePDF() ClassMethod CreatePDF() { SET myquery=2 SET myquery(1)="SELECT Name,Age FROM Sample.Person" SET myquery(2)="WHERE Age > ? AND Age < ? ORDER BY Age" SET rset = ##class(%SQL.Statement).%ExecDirect(,.myquery,12,20) IF rset.%SQLCODE'=0 { WRITE !,"1st ExecDirect SQLCODE=",rset.%SQLCODE,!,rset.%Message QUIT } DO rset.%DisplayFormatted(2,"Teenagers",.mess) DO mess.%Display() WRITE !,"End of teen data",!! SET rset2 = ##class(%SQL.Statement).%ExecDirect(,.myquery,19,30) IF rset2.%SQLCODE'=0 { WRITE !,"2nd ExecDirect SQLCODE=",rset2.%SQLCODE,!,rset2.%Message QUIT } DO rset2.%DisplayFormatted(2,"Twenties",.mess) DO mess.%Display() WRITE !,"End of twenties data" } ``` ```java DHC-APP>d ##class(PHA.TEST.SQL).CreatePDF() Message 9 row(s) affected. End of teen data Message 20 row(s) affected. End of twenties data ``` ```java /// d ##class(PHA.TEST.SQL).CreatePDF1() ClassMethod CreatePDF1() { ZNSPACE "SAMPLES" SET myquery=2 SET myquery(1)="SELECT Name,Age FROM Sample.Person" SET myquery(2)="WHERE Age > ? AND Age < ? ORDER BY Age" SET rset = ##class(%SQL.Statement).%ExecDirect(,.myquery,12,20) DO rset.%DisplayFormatted(2,"Teenagers") WRITE !,"End of teen data",!! SET rset2 = ##class(%SQL.Statement).%ExecDirect(,.myquery,19,30) DO rset2.%DisplayFormatted(2,"Twenties") WRITE !,"End of twenties data" } ``` ```java DHC-APP>d ##class(PHA.TEST.SQL).CreatePDF1() End of teen data End of twenties data ``` ## 对结果集进行分页 可以使用一个视图ID (`%VID`)来分页结果集。下面的例子从结果集中返回页面,每个页面包含5行: ```java /// d ##class(PHA.TEST.SQL).Paginating() ClassMethod Paginating() { SET q1="SELECT %VID AS RSRow,* FROM " SET q2="(SELECT Name,Home_State FROM Sample.Person WHERE Home_State %STARTSWITH 'M') " SET q3="WHERE %VID BETWEEN ? AND ?" SET myquery = q1_q2_q3 SET tStatement = ##class(%SQL.Statement).%New() SET qStatus=tStatement.%Prepare(myquery) IF qStatus'=1 { WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT } FOR i=1:5:25 { WRITE !!,"Next Page",! SET rset=tStatement.%Execute(i,i+4) DO rset.%Display() } } ``` ```java DHC-APP>d ##class(PHA.TEST.SQL).Paginating() Next Page RSRow Name Home_State 1 O'Rielly,Chris H. MS 2 Orwell,John V. MT 3 Zevon,Heloisa O. MI 4 Kratzmann,Emily Z. MO 5 King,Dmitry G. MO 5 Rows(s) Affected Next Page RSRow Name Home_State 6 Hanson,George C. MD 7 Martinez,Emilio G. MO 8 Cheng,Charlotte Y. MI 9 Emerson,Edgar T. MO 10 Nelson,Neil E. MT 5 Rows(s) Affected Next Page RSRow Name Home_State 11 Larson,Nataliya Z. MD 12 Lennon,Chelsea T. MD 13 Ingleman,Kristen U. MT 14 Zucherro,Olga H. MN 15 Ng,Lola H. MD 5 Rows(s) Affected Next Page RSRow Name Home_State 16 Frost,Xavier D. MO 17 Adams,Diane F. MD 18 Isaacs,Chad N. MN 19 Van De Griek,Phil S. MS 20 Schaefer,Usha G. MO 5 Rows(s) Affected Next Page RSRow Name Home_State 21 Wells,Sophia U. MS 22 Vivaldi,Michelle N. MD 23 Anderson,Valery N. MD 24 Frost,Heloisa K. MI 25 Gallant,Thelma Q. MA 5 Rows(s) Affected ```
文章
Michael Lei · 六月 14, 2023

使用LangChain 修复 SQL

本文是 SqlDatabaseChain 的简单快速入门(我所做的)。 希望大家会感兴趣。 非常感谢: sqlalchemy-iris 作者@Dmitry Maslennikov 您的项目使我的试验变得可能。 文章脚本使用 openai API,因此请注意不要在外部共享您不打算共享的表信息和记录。 如果需要,可以插入本地模型。 创建一个新的虚拟环境 mkdir chainsql cd chainsql python -m venv . scripts\activate pip install langchain pip install wget # Need to connect to IRIS so installing a fresh python driver python -c "import wget;url='https://raw.githubusercontent.com/intersystems-community/iris-driver-distribution/main/DB-API/intersystems_irispython-3.2.0-py3-none-any.whl';wget.download(url)" # And for more magic pip install sqlalchemy-iris pip install openai set OPENAI_API_KEY=[ Your OpenAI Key ] python 初始测试 from langchain import OpenAI, SQLDatabase, SQLDatabaseChain db = SQLDatabase.from_uri("iris://superuser:******@localhost:51775/USER") llm = OpenAI(temperature=0, verbose=True) db_chain = SQLDatabaseChain.from_llm(llm, db, verbose=True) db_chain.run("How many Tables are there") 错误结果 sqlalchemy.exc.DatabaseError: (intersystems_iris.dbapi._DBAPI.DatabaseError) [SQLCODE: <-25>:<Input encountered after end of query>] [Location: <Prepare>] [%msg: < Input (;) encountered after end of query^SELECT COUNT ( * ) FROM information_schema . tables WHERE table_schema = :%qpar(1) ;>] [SQL: SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public';] (Background on this error at: https://sqlalche.me/e/20/4xp6) ←[32;1m←[1;3mSELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public';←[0m>>> 开发者之间的对话 IRIS 不喜欢以分号结尾的 SQL 查询。 现在做什么? ? 想法:我告诉 LangChain 帮我修理SQL如何 太酷了,我们开工吧 !! 测试二 from langchain import OpenAI, SQLDatabase, SQLDatabaseChain from langchain.prompts.prompt import PromptTemplate _DEFAULT_TEMPLATE = """Given an input question, first create a syntactically correct {dialect} query to run, then look at the results of the query and return the answer. Use the following format: Question: "Question here" SQLQuery: "SQL Query to run" SQLResult: "Result of the SQLQuery" Answer: "Final answer here" The SQL query should NOT end with semi-colon Question: {input}""" PROMPT = PromptTemplate( input_variables=["input", "dialect"], template=_DEFAULT_TEMPLATE ) db = SQLDatabase.from_uri("iris://superuser:******@localhost:51775/USER") llm = OpenAI(temperature=0, verbose=True) llm = OpenAI(temperature=0, verbose=True) db_chain = SQLDatabaseChain(llm=llm, database=db, prompt=PROMPT, verbose=True) db_chain.run("How many Tables are there") 结果二 SQLQuery:←[32;1m←[1;3mSELECT COUNT(*) FROM information_schema.tables←[0m SQLResult: ←[33;1m←[1;3m[(499,)]←[0m Answer:←[32;1m←[1;3mThere are 499 tables.←[0m ←[1m> Finished chain.←[0m 'There are 499 tables.' 我就说很快吧 参考资料: https://walkingtree.tech/natural-language-to-query-your-sql-database-using-langchain-powered-by-llms/ https://python.langchain.com/en/latest/modules/chains/examples/sqlite.html#sqldatabasesequentialchain https://python.langchain.com/en/latest/modules/agents/plan_and_execute.html
公告
Nicky Zhu · 三月 30, 2021

提醒:镜像Dejournaling的潜在数据完整性问题

2021年3月23日 – 提醒:镜像Dejournaling的潜在数据完整性问 InterSystems 已经纠正了一个缺陷,该缺陷在极少数情况下会导致非主镜像成员的数据不一致问题。此缺陷影响到InterSystems产品的所有发布版本。 如果发生该缺陷,则会在镜像系统的正常运行中悄然发生。该缺陷的结果是,镜像成员未能删除数据库日志的子集,然后导致镜像成员之间的数据不一致。这对故障转移和异步成员都有影响。虽然这个缺陷遇到的可能性非常小,但InterSystems建议所有使用镜像的客户都要获得修正,并使用DataCheck验证镜像数据库的一致性。有关可能触发该缺陷的具体情况以及将遇到该缺陷的风险降至最低的步骤的更多详细信息,请联系全球响应中心(WRC)。 该缺陷的更正被确定为 SML2898、HYY2434 和 HYY2435,并将包含在所有未来的产品版本中,包括 Caché 和 Ensemble 2018.1.5 以及 InterSystems IRIS 和 InterSystems IRIS for Health 2019.1.2 和 2020.1.1。这些更正也可通过InterSystems全球响应中心(WRC)的Ad hoc分发版本获得。 如果您对这个提醒有任何疑问,请联系 Worldwide Response Center。
公告
Jeff Liu · 四月 18, 2022

新视频!SQL性能--极品飞车!

各位开发者们好, 欢迎在我们的 Bilibili 频道观看新视频: 客户选择InterSystems IRIS的原因是其强大的数据引擎的纯粹速度。为了衡量我们的引擎改进对速度的贡献,我们不断地进行性能测试,包括内部测试和使用客户的数据和工作负载的测试。在过去的一年里,这些测试表明基于SQL的应用程序的性能有了很大的提高,我们将很高兴在这个视频中告诉你更多。 收获: InterSystems IRIS提供的SQL性能会让你大吃一惊。 演讲者: @Benjamin.DeBoe, InterSystems 产品经理 本视频的其他材料,你可以在 InterSystems Online Learning Course找到。 请继续关注! 👍🏼
公告
Claire Zheng · 一月 17, 2022

了解如何使用IRIS医疗版构建您的首款FHIR应用!

为了帮助您开始使用FHIR,我们发布了一个新的学习路径: Building Basic FHIR Integrations with InterSystems IRIS for Health. 通过这个路径,您可以学习FHIR的基础知识,学习如何在InterSystems IRIS医疗版中设置FHIR端点,将数据应用到FHIR存储库并转换FHIR数据,使用InterSystems API管理器管理FHIR API,以及使用客户端应用查询FHIR资源。该路径包括一些建议,例如使用SDA-FHIR转换将其他数据格式转换为FHIR。 我们还在考虑如何创建额外的内容,以指导您启用现有的应用程序并利用存储在FHIR存储库之外的数据。这些对您有用吗?关于如何使用FHIR和InterSystems产品,您还想学习什么?
公告
Claire Zheng · 一月 28, 2024

InterSystems推出两款新的云原生智能数据服务,加速数据库和机器学习应用程序的开发

近日,InterSystems宣布 InterSystems IRIS® Cloud SQL 和 InterSystems IRIS® Cloud IntegratedML® 服务全面上市。 这些全面托管的云原生智能数据服务使开发人员能够轻松地在SQL环境中构建云原生数据库和机器学习(ML)应用程序。 通过 Cloud SQL和 Cloud IntegratedML,开发人员可以访问下一代关系数据库即服务(DBaaS),DBaaS快速且易于配置和使用。 嵌入式AutoML功能支持开发人员在全面托管的、弹性的云原生环境中,仅仅通过几条类似SQL的命令即可轻松开发并执行机器学习模型。 为关键任务型应用程序打造完整的数据管理组合 作为InterSystems Cloud智能数据服务组合的一部分,Cloud SQL和Cloud IntegratedML为应用开发人员提供了在 AWS上使用InterSystems成熟的企业级功能的机会,这些功能是自助式的、全面托管的产品,同时为 InterSystems IRIS®数据平台的全套功能提供了快速、无缝的接入渠道。 InterSystems IRIS 是为实施智能数据编织(smart data fabrics)的企业设计的下一代数据平台,可提供强大的数据库管理、集成和应用开发能力—— InterSystems IRIS将这些功能整合到单一产品中, 加速了数据赋能的价值实现,简化了整体系统架构,减少了维护工作和成本。 InterSystems数据平台全球主管Scott Gnau表示:“InterSystems IRIS的功能可以通过这些易于部署和使用的新服务得以展示,我们对此感到非常兴奋。 通过对AutoML的本地支持,我们为开发人员提供了构建全面、预测性和规范性应用程序的能力。” 通过InterSystems IRIS Cloud SQL实现全面托管,具备企业级的可靠性 Cloud SQL 令应用程序开发人员能够轻松地利用高级关系数据库功能,将其作为一种全面托管的、安全、可扩展、高性能、高可用性的云原生数据库即服务(DBaaS)。 Cloud SQL为SQL开发者带来以下优势: 极致的高性能,尤其体现在大规模、低延迟地采集和处理传入数据并对数据执行SQL查询方面 配置及使用快速、简便 可通过JDBC、ODBC、DB-API和ADO.NET驱动轻松连接客户端应用程序 自动安全、数据加密和备份 通过InterSystems IRIS Cloud IntegratedML 实现机器学习任务的自动化 作为InterSystems IRIS Cloud SQL客户的附加云托管服务,Cloud IntegratedML扩展了Cloud SQL的功能,SQL开发人员仅需通过几条类似SQL的命令即可快速构建、调整和执行机器学习模型,无需将数据移动或复制到不同的环境。 Cloud IntegratedML 的一个显著优势是无需将数据传输或复制到外部平台来构建 ML 模型,也无需将 ML 模型移动到不同的环境中执行。 Cloud IntegratedML为SQL开发者带来以下优势: 机器学习流程和资源密集型任务(如特征工程、模型开发和微调)的自动化 在Cloud SQL中无缝集成使用Cloud IntegratedML 开发和训练的模型,促进在事件和事务响应中的实时预测见解以及规范性行动 对于正在根据自身需求量身定制健壮、高性能数据库解决方案的SQL开发者来说,这套全面的智能数据服务令InterSystems Cloud智能数据服务组合成为SQL开发者的最佳选择。 新的Cloud SQL和Cloud IntegratedML服务可通过 InterSystems Developer Hub获取。
文章
Qiao Peng · 一月 14, 2021

Dockerfile 和它的朋友们或者如何在 InterSystems IRIS 上运行和合作 ObjectScript 项目

你好,开发者! 你们中的许多人在 [Open Exchange](https://openexchange.intersystems.com/) 和 Github 上发布了 InterSystems ObjectScript 库。 但对于开发者来说,如何简化项目的使用和协作呢? 在本文中,我想介绍一种简单方法,只需将一组标准文件复制到你的仓库中,就可以启动任何 ObjectScript 项目和对其做出贡献。 我们开始吧! **TLDR** - 将以下文件从[该仓库](https://github.com/intersystems-community/objectscript-docker-template)复制到你的仓库: [Dockerfile](https://github.com/intersystems-community/objectscript-docker-template/blob/master/Dockerfile) [docker-compose.yml](https://github.com/intersystems-community/objectscript-docker-template/blob/master/docker-compose.yml) [Installer.cls](https://github.com/intersystems-community/objectscript-docker-template/blob/master/Installer.cls) [iris.script](https://github.com/intersystems-community/objectscript-docker-template/blob/master/iris.script) [settings.json](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.vscode/settings.json "settings.json"){#9f423fcac90bf80939d78b509e9c2dd2-d165a4a3719c56158cd42a4899e791c99338ce73} [.dockerignore](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.dockerignore ".dockerignore"){#f7c5b4068637e2def526f9bbc7200c4e-c292b730421792d809e51f096c25eb859f53b637} [.gitattributes](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.gitattributes ".gitattributes"){#fc723d30b02a4cca7a534518111c1a66-051218936162e5338d54836895e0b651e57973e1} [.gitignore](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.gitignore ".gitignore"){#a084b794bc0759e7a6b77810e01874f2-e6aff5167df2097c253736b40468e7b21e577eeb} 你已经知道启动你的项目和协作的标准方式。 以下将详细说明这样做的步骤和原因。 **注意:**在本文中,我们将考虑可在 InterSystems IRIS 2019.1 及更新版本上运行的项目。 **选择 InterSystems IRIS 项目的启动环境** 通常,我们希望开发者尝试项目/库,并确保这是快速安全的练习。 在我看来,快速安全地启动任何新项目的理想方式是 Docker 容器,它可以保证开发者启动、导入、编译和计算任何内容对于主机来说都是安全的,并且不会破坏任何系统或代码。如果出了问题,只需停止并删除容器即可。 如果应用程序占用大量磁盘空间,使用容器将其擦除,空间就回来了。 如果某个应用程序破坏了数据库配置,只需删除配置被破坏的容器。 简单又安全。 Docker 容器提供安全和标准化。 运行通用 InterSystems IRIS Docker 容器的最简单方法是运行 [IRIS 社区版映像](https://hub.docker.com/_/intersystems-iris-data-platform/plans/222f869e-567c-4928-b572-eb6a29706fbd?tab=instructions): 1. 安装 [Docker desktop](https://www.docker.com/products/docker-desktop)  2. 在操作系统终端中运行以下命令: docker run --rm -p 52773:52773 --init --name my-iris store/intersystems/iris-community:2020.1.0.199.0 3. 然后在主机浏览器上打开管理门户: 4. 或者打开终端启动 IRIS: docker exec -it my-iris iris session IRIS 5. 不需要 IRIS 容器时,将其停止: docker stop my-iris 好! 我们在一个 docker 容器中运行 IRIS。 但是你希望开发者将你的代码安装到 IRIS 中,可能还要进行一些设置。 这就是我们下面要讨论的。 **导入 ObjectScript 文件** 最简单的 InterSystems ObjectScript 项目可以包含一组 ObjectScript 文件,例如类、例程、宏和global。 请查看有关命名和建议的文件夹结构的文章。 问题是如何将所有这些代码导入 IRIS 容器? 此时我们可以借助 Dockerfile 来获取通用 IRIS 容器,并将某个仓库中的所有代码导入 IRIS,然后根据需要对 IRIS 进行一些设置。 我们需要在仓库中添加一个 Dockerfile。 我们来看一下 [ObjectScript 模板](https://github.com/intersystems-community/objectscript-docker-template)仓库中的 [Dockerfile](https://github.com/intersystems-community/objectscript-docker-template/blob/master/Dockerfile): ARG IMAGE=store/intersystems/irishealth:2019.3.0.308.0-community ARG IMAGE=store/intersystems/iris-community:2019.3.0.309.0 ARG IMAGE=store/intersystems/iris-community:2019.4.0.379.0 ARG IMAGE=store/intersystems/iris-community:2020.1.0.199.0 FROM $IMAGE USER root WORKDIR /opt/irisapp RUN chown ${ISC_PACKAGE_MGRUSER}:${ISC_PACKAGE_IRISGROUP} /opt/irisapp USER irisowner COPY Installer.cls . COPY src src COPY iris.script /tmp/iris.script # run iris and initial  RUN iris start IRIS \     && iris session IRIS < /tmp/iris.script   前几个 ARG 行设置 $IMAGE 变量,随后在 FROM 中使用该变量。 这适合在不同的 IRIS 版本中测试/运行代码,只需在 FROM 前面的最后一行中更改 $IMAGE 变量即可切换版本。 这里我们采用: ARG IMAGE=store/intersystems/iris-community:2020.1.0.199.0 FROM $IMAGE 这意味着我们将使用 IRIS 2020 社区版 build 199。 我们想要导入仓库中的代码,这意味着我们需要将仓库中的文件复制到 docker 容器。 下面几行完成此操作: USER root WORKDIR /opt/irisapp RUN chown ${ISC_PACKAGE_MGRUSER}:${ISC_PACKAGE_IRISGROUP} /opt/irisapp USER irisowner COPY Installer.cls . COPY src src USER root - 这里我们将用户切换为 root,以在 docker 中创建文件夹和复制文件。 WORKDIR  /opt/irisapp - 我们在此行中设置将文件复制到的工作目录。 RUN chown ${ISC_PACKAGE_MGRUSER}:${ISC_PACKAGE_IRISGROUP} /opt/irisapp   -  这里我们为运行 IRIS 的 irisowner 用户和组授予权限。 USER irisowner - 将用户从 root 切换到 irisowner COPY Installer.cls .  - 将 [Installer.cls](https://github.com/intersystems-community/objectscript-docker-template/blob/master/Installer.cls) 复制到工作目录的根目录。 不要漏了那个点儿。 COPY src src - 将[仓库的 src 文件夹](https://github.com/intersystems-community/objectscript-docker-template/tree/master/src/)中的源文件复制到 docker 上的工作目录的 src 文件夹中。 在下一个块中,我们运行初始脚本,其中将调用安装程序和 ObjectScript 代码: COPY iris.script /tmp/iris.script # run iris and initial  RUN iris start IRIS \     && iris session IRIS < /tmp/iris.script COPY iris.script / - 我们将 iris.script 复制到根目录。 它包含我们要调用以设置容器的 ObjectScript。 RUN iris start IRIS\  - 启动 IRIS && iris session IRIS < /tmp/iris.script - 启动 IRIS 终端并在其中输入初始 ObjectScript。 很好! 我们有 Dockerfile,它将文件导入 docker。 但还有两个文件:installer.cls 和 iris.script。我们来检查一下。 [**Installer.cls**](https://github.com/intersystems-community/objectscript-docker-template/blob/master/Installer.cls) Class App.Installer { XData setup {                                   } ClassMethod setup(ByRef pVars, pLogLevel As %Integer = 3, pInstaller As %Installer.Installer, pLogger As %Installer.AbstractLogger) As %Status [ CodeMode = objectgenerator, Internal ] {   #; Let XGL document generate code for this method.    Quit ##class(%Installer.Manifest).%Generate(%compiledclass, %code, "setup") } } 坦白说,我们不需要 Installer.cls 就可以导入文件。 这只需要一行就能完成。 但除了导入代码之外,我们经常还需要设置 CSP 应用,引入安全设置,创建数据库和命名空间。 在此 Installer.cls 中,我们创建了名为 IRISAPP 的新数据库和命名空间,并为该命名空间创建了默认的 /csp/irisapp 应用程序。 所有这些都在元素中 执行: <Namespace Name="${Namespace}" Code="${Namespace}" Data="${Namespace}" Create="yes" Ensemble="no"> <Configuration> <Database Name="${Namespace}" Dir="/opt/${app}/data" Create="yes" Resource="%DB_${Namespace}"/> <Import File="${SourceDir}" Flags="ck" Recurse="1"/> </Configuration> <CSPApplication Url="/csp/${app}" Directory="${cspdir}${app}" ServeFiles="1" Recurse="1" MatchRoles=":%DB_${Namespace}" AuthenticationMethods="32" /> </Namespace> 我们用 Import 标签导入 SourceDir 中的所有文件: <Import File="${SourceDir}" Flags="ck" Recurse="1"/> 这里的 SourceDir 是一个变量,设置为当前目录/src 文件夹: <Default Name="SourceDir" Value="#{$system.Process.CurrentDirectory()}src"/> 有了带这些设置的 Installer.cls,我们可以自信地创建一个干净的新数据库 IRISAPP,我们将从 src 文件夹导入任意 ObjectScript 代码到该数据库中。 [iris.script](https://github.com/intersystems-community/objectscript-docker-template/blob/master/iris.script) 欢迎在这里提供任何所需的初始 ObjectScript 设置代码来启动 IRIS 容器。 例如, 我们加载并运行 installer.cls,然后让 UserPasswords 永远有效,以避免第一次启动时出现密码更改请求,因为开发不需要这个提示。 ; run installer to create namespace do $SYSTEM.OBJ.Load("/opt/irisapp/Installer.cls", "ck") set sc = ##class(App.Installer).setup()  zn "%SYS" Do ##class(Security.Users).UnExpireUserPasswords("*") ; call your initial methods here halt [docker-compose.yml](https://github.com/intersystems-community/objectscript-docker-template/blob/master/docker-compose.yml) 为什么需要 docker-compose.yml,不能只用 Dockerfile 构建和运行映像吗? 可以的。 但 docker-compose.yml 能让生活更轻松。 通常,docker-compose.yml 用于启动连接到一个网络的多个 docker 映像。 当启动一个 docker 映像需要处理多个参数时,也可以使用 docker-compose.yml 来简化过程。 你可以使用它向 docker 传递参数,例如端口映射、卷、VSCode 连接参数。 version: '3.6' services: iris: build: context: . dockerfile: Dockerfile restart: always ports: - 51773 - 52773 - 53773 volumes: - ~/iris.key:/usr/irissys/mgr/iris.key - ./:/irisdev/app 这里我们声明服务 iris,它使用 docker 文件 Dockerfile,并开放 IRIS 的以下端口:51773、52773、53773。 此服务还映射两个卷:将主机主目录中的 iris.key 映射到期望的 IRIS 文件夹,以及将源代码的根文件夹映射到 /irisdev/app 文件夹。 Docker-compose 提供了更短的统一命令来构建和运行映像,无论你在 docker compose 中设置了什么参数。 总之,构建和启动镜像的命令是: $ docker-compose up -d 要打开 IRIS 终端: $ docker-compose exec iris iris session iris Node: 05a09e256d6b, Instance: IRIS USER> 此外,docker-compose.yml 有助于设置 VSCode ObjectScript 插件的连接。 [.vscode/settings.json](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.vscode/settings.json) 与 ObjectScript 加载项连接设置有关的部分如下: { "objectscript.conn" :{ "ns": "IRISAPP", "active": true, "docker-compose": { "service": "iris", "internalPort": 52773 } } } 在这里,我们看到的设置与 VSCode ObjectScript 插件的默认设置不同。 我们想要连接到 IRISAPP 命名空间(我们用 Installer.cls 创建的): "ns": "IRISAPP", 一个 docker-compose 设置指示,docker-compose 文件在服务“iris”内,VSCode 将连接到 52773 映射到的端口: "docker-compose": { "service": "iris", "internalPort": 52773 } 如果我们检查一下 52773 的相关设置,我们会看到没有为 52773 定义映射端口: ports: - 51773 - 52773 - 53773 这意味着将使用主机上的随机可用端口,并且 VSCode 将通过随机端口自动连接到 docker 上的 IRIS。 **这是一个非常方便的功能,因为它允许在随机端口上运行任意数量的带 IRIS 的 docker 映像,并让 VSCode 自动连接到它们。** 其他文件呢? 我们还有: [.dockerignore](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.dockerignore)  - 该文件可用于过滤你不想复制到所构建的 docker 映像中的主机文件。 通常 .git 和 .DS_Store 是必须有的行。 [.gitattributes](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.gitattributes) - git 的属性,用于统一来源中的 ObjectScript 文件的行尾。 如果仓库由 Windows 和 Mac/Ubuntu 所有者协作,此文件非常有用。 [.gitignore](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.gitignore) - 你不希望 git 跟踪其更改历史记录的文件。 通常是一些隐藏的操作系统级文件,例如 .DS_Store。 好了! 如何使你的仓库可被 docker 运行并且对协作友好?   1. 克隆[此仓库](https://github.com/intersystems-community/objectscript-docker-template)。 2. 复制以下所有文件: [Dockerfile](https://github.com/intersystems-community/objectscript-docker-template/blob/master/Dockerfile) [docker-compose.yml](https://github.com/intersystems-community/objectscript-docker-template/blob/master/docker-compose.yml) [Installer.cls](https://github.com/intersystems-community/objectscript-docker-template/blob/master/Installer.cls) [iris.script](https://github.com/intersystems-community/objectscript-docker-template/blob/master/iris.script) [settings.json](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.vscode/settings.json "settings.json"){#9f423fcac90bf80939d78b509e9c2dd2-d165a4a3719c56158cd42a4899e791c99338ce73} [.dockerignore](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.dockerignore ".dockerignore"){#f7c5b4068637e2def526f9bbc7200c4e-c292b730421792d809e51f096c25eb859f53b637} [.gitattributes](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.gitattributes ".gitattributes"){#fc723d30b02a4cca7a534518111c1a66-051218936162e5338d54836895e0b651e57973e1} [.gitignore](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.gitignore ".gitignore"){#a084b794bc0759e7a6b77810e01874f2-e6aff5167df2097c253736b40468e7b21e577eeb} 到你的仓库。 更改 [Dockerfile 中的这一行](https://github.com/intersystems-community/objectscript-docker-template/blob/10f4422c105d5c75111fde16a184a83f5ff86d06/Dockerfile#L15),使目录与仓库中要导入 IRIS 的 ObjectScript 匹配(如果在 /src 文件夹中则不要更改)。 就这样。 每个人(也包括你)都会将你的代码导入到新的 IRISAPP 命名空间的 IRIS 中。 **人们如何启动你的项目** 在 IRIS 中执行任何 ObjectScript 项目的法则为: 1. Git clone 项目到本地 2. 运行项目: $ docker-compose up -d $ docker-compose exec iris iris session iris Node: 05a09e256d6b, Instance: IRIS USER>zn "IRISAPP" **开发者如何为你的项目做出贡献** 1. 对仓库执行分叉,并将分叉后的仓库 git clone 到本地 2. 在 VSCode 中打开该文件夹(还需要在 VSCode 中安装 [Docker](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker) 和 [ObjectScript](https://marketplace.visualstudio.com/items?itemName=daimor.vscode-objectscript&ssr=false#review-details) 扩展) 3. 右击 docker-compose.yml->重启 - [VSCode ObjectScript](https://openexchange.intersystems.com/package/VSCode-ObjectScript) 将自动连接并准备好编辑/编译/调试 4. 向你的仓库提交、推送和拉取请求更改 以下是操作过程的短 gif: ![](/sites/default/files/inline/images/images/launch_and_edit1.gif) 好了! 编码愉快!  
文章
Claire Zheng · 三月 21, 2024

FHIR 合集 | 关于FHIR 的研讨会、视频等

本文汇聚了与FHIR相关的内容,包括新闻资讯、线上研讨会、视频、客户案例、行业洞察等,欢迎收藏保存! 01| 新闻资讯 InterSystems IRIS医疗版互联互通套件3.0版发布:助力用户快速验证标准符合性,推动互联互通项目价值落地(2023年) InterSystems IRIS医疗版互联互通套件2.0版支持国内互联互通标准转换为FHIR标准,提升数据易用性(2022年) InterSystems发布InterSystems IRIS医疗版互联互通套件,加速医院互联互通平台建设(2021年) 技术总监答疑 | 我们为什么要做InterSystems IRIS医疗版互联互通套件? InterSystems IRIS® FHIR®加速器服务赋能医疗数据,实现轻松检索和储存(2021年) InterSystems加入Vulcan FHIR® 加速器™计划,将数据互操作能力扩展至生命科学领域 02 | 线上研讨会 扫码看回放 | FHIR研讨会:如何有效利用数据核心资产? 医疗行业的生态创新:如何实现数据利用和应用创新 辨析互联互通测评方案新旧版,多位专家线上解读国内外互联互通标准与实践 报名观看 | 加速测评!InterSystems IRIS医疗版互联互通套件研讨会 03 | 视频(及视频文字版) 对话:“数据二十条”与FHIR标准 【文字版】对话:“数据二十条”与FHIR标准 如何准确理解FHIR能力?医疗IT行业的数据交换和共享难题如何破? 借助FHIR,医疗信息系统如何获得真正的互操作性? 基于FHIR的数据利用,轻松应对数据共享需求 InterSystems IRIS哪些新特性让用户开发体验得到了极大提升? FHIR的设计理念与关键构成:助力您提高互操作性 深度解读:FHIR标准和国际互联互通实践 FHIR分享:FHIR扩展原则、工具及示例 Smart On FHIR用例:儿童生长发育曲线 Smart On FHIR用例:心血管疾病风险预测 FHIR分享:FHIR 实施指南创建及发布 互联互通套件产品用例:互联互通文档转FHIR 04 | 客户案例 共推互联互通标准,加速FHIR本地化进程,InterSystems携手合作伙伴共同助力北京友谊医院开展专项课题研究 香港大学深圳医院:通过一体化系统推动数字化转型与智慧医院建设 通过Health Connect Cloud,InterSystems帮助Pria改善患者结果,简化居家医疗健康护理流程 InterSystems IRIS医疗版™携手First Line Software,共同简化i2b2社区临床研究工作流程 日本柯尼卡美能达采用InterSystems IRIS 医疗版™:助力医学影像设备基于FHIR实现快速数据集成 处理大量影像数据:利用AI和临床数据创建新一代企业级影像应用 05 | 行业洞察/深度解读 FHIR标准和国际基于FHIR的互联互通实践 医院数字化转型之数智底座建设思路 通过智能数据编织(Smart Data Fabric)应对数据挑战 开发者社区精选 | 漫谈应用集成的现在与未来(上):什么是应用集成?互操作≠集成 开发者社区精选 | 漫谈应用集成的现在与未来(中):什么是集成平台?集成平台概念辨析与定义 开发者社区精选 | 漫谈应用集成的现在与未来(下):集成方案与评价,以及应用集成的发展 行业洞察 | InterSystems开发者关系主管Dean:集成FHIR,改变游戏规则 行业洞察|全面释放医疗互操作性的益处:下一个前沿 老牌知名医疗技术公司可以从创业公司身上学习什么? 抓住FHIR:医疗数据的API管理 InterSystems 2022.2:令企业级应用研发更高效 行业洞察:为什么互操作性对医疗科技产业至关重要 以FHIR推动数据资产生态建设,赋能医院高质量发展 InterSystems技术令HL7 FHIR创新简洁而迅速 InterSystems FHIR 服务器:助力您更快地开发医疗健康应用程序
文章
Nicky Zhu · 九月 7, 2021

IRIS 2021 技术文档 First Look 12--技术概要:.NET Object Persistence with XEP

本文档介绍了 XEP API,它在 InterSystems IRIS®数据平台上极其快速的 .NET 对象存储和检索支持。它向您提供了一个关于 .NET 对象持久化的 XEP 方法的进阶概述,并引导您通过一个简单的场景来演示 API 的主要功能。 这些活动被设计成只使用默认设置和功能,这样您就可以熟悉 XEP 的基本原理,而不必处理超出本概述范围的细节。有关 XEP 的完整文档,请参见 Persisting .NET Objects with InterSystems XEP (《使用 InterSystems XEP 持久化 .NET 对象》)。 要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。 快速的对象存储和检索 面向对象编程是 .NET 框架的核心,因此 .NET 应用程序将数据建模为对象是很自然的。然而,当应用程序需要将数据存储在数据库中时,这可能会导致问题。如果您使用 ADO.NET 来存储和检索对象,您就面临着将对象数据转换为一组关系表、然后再将查询结果集转换为对象的问题。这个问题的通常解决方案是使用对象-关系映射(ORM)框架,如实体框架(Entity Framework) 来自动化这个过程。InterSystems IRIS 确实提供了实体框架(Entity Framework)接口,InterSystems 推荐它用于大型、复杂的对象层次结构。另一方面,对于执行实时数据采集等任务的应用程序,主要问题是速度而不是数据复杂性。虽然实体框架(Entity Framework)绝对不慢(如果适当优化的话),但对于需要极快地存储和检索简单或中等复杂数据的任务来说,XEP 是一个更好的选择。在大多数情况下,它比实体框架(Entity Framework)或 ADO.NET 快得多。 XEP 是如何工作的? XEP 是一个轻量级的 .NET API,它将 .NET 对象数据作为持久化事件(persistent event)来投射。持久化事件(persistent event)是 InterSystems IRIS 类的一个实例(通常是 %Persistent 的子类),包含 .NET 对象中数据字段的副本。与任何此类实例一样,可以通过对象访问、SQL 查询或直接 global 访问来检索它。 在创建和存储持久化事件(persistent event)之前,XEP 必须分析相应的 .NET 类,并将模式(schema)导入数据库。模式(schema)定义了用于存储 .NET 对象的持久化事件类的结构。如果持久化事件类不存在相应的 ObjectScript 模式,则导入模式(schema)将自动为其创建相应的 ObjectScript 模式。来自分析的信息可能是 XEP 导入简单模式所需要的全部信息。对于更复杂的结构,您可以提供额外的信息,允许 XEP 生成索引并覆盖导入字段的默认规则。 在为类创建模式(schema)之后,您可以使用各种 XEP 方法来存储、更新或删除事件、运行 SQL 查询,并通过查询结果集进行迭代。 试一试!XEP 的实际操作 现在是您自己尝试 XEP 的时候了。这个 XepSimple 演示是一个非常小的程序,但它提供了大多数关键 XEP 功能的示例,并概述了如何使用 XEP API。(想试试 InterSystems IRIS .NET 开发和互操作性功能的在线视频演示吗?请看.NET QuickStart(.NET 快速入门)!) 用前须知 要使用该程序,您需要一个安装了 .NET 框架和 Visual Studio 的 Windows 系统,以及一个运行中的 InterSystems IRIS 实例来连接。您对 InterSystems IRIS 的选择包括多种类型的已授权的和免费的评估实例;实例不需要由您正在工作的系统托管(尽管它们必须相互具有网络访问权限)。关于如何部署每种类型的实例的信息(如果您还没有可使用的实例),请参见 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的 Deploying InterSystems IRIS(部署 InterSystems IRIS)。使用同一文档中的 InterSystems IRIS Connection Information(InterSystems IRIS 连接信息)和 .Net IDE 中的信息将 Visual Studio 连接到您的 InterSystems IRIS 实例。 配置 Visual Studio 项目 首先,打开 Visual Studio 并创建一个新的控制台(console)应用程序项目,选择 Visual C# 和 Console App (.NET Framework)(控制台应用程序(.NET 框架)) 选项。对于 Name(名称) 字段,输入 netxep。(想试试 InterSystems IRIS .NET 开发和互操作性功能的在线视频演示?请看.NET QuickStart(.NET 快速入门)!) 添加程序集引用 XEP API 被打包到 InterSystems.Data.XEP.dll 库中,该库必须安装在您的本地系统上。您可以通过克隆 repo https://github.com/intersystems/quickstarts-dotnet/tree/master/XEP 或从该 repo 下载文件来获取它。如果 InterSystems IRIS 安装在您的本地系统或您可以访问的另一个系统上,则该程序集已经安装在子目录 install-dir\dotnet\bin\v4.5 中,其中 install-dir 是实例的安装目录。 要将 InterSystems.Data.XEP.dll 的程序集引用添加到项目: 从 Visual Studio 主菜单中,选择 Project(项目) > Add Reference(添加引用)... 在出现的窗口中,点击 Browse(浏览).... 浏览到 InterSystems.Data.XEP.dll 文件的位置。 选择文件并点击 Add(添加)。 点击 OK(确定)。 在 Visual Studio Solution Explorer 中,InterSystems.Data.XEP.dll 程序集现在应该列在 References(引用)下。 添加示例类 在创建程序源文件之前,您将添加一个类,主程序会访问该类以生成用于存储的示例对象。在 Visual Studio 中,使用 Project(项目) > Add Class(添加类) 添加一个 C# 类文件到 netxep 项目。删除类文件的默认内容,并将以下代码复制并粘贴到文件中。 using System; namespace xep.samples { public class SingleStringSample { public string name; public SingleStringSample() { } internal SingleStringSample(string str) { name = str;} public static SingleStringSample[] generateSampleData(int objectCount) { SingleStringSample[] data = new SingleStringSample[objectCount]; for (int i = 0; i < objectCount; i++) { data[i] = new SingleStringSample("single string test"); } return data; } } } 因为这个类非常简单,所以 XEP 不需要任何注释就可以从中生成有效的模式。对于真实应用程序中更复杂的类,您可以使用各种选项来优化导入。 创建 XEP 演示程序 现在您可以创建 XEPSimple 演示程序了。在 Visual Studio 中,找到您在创建项目时创建的默认 program.cs 文件。删除该文件的默认内容,并粘贴下面的代码,用connection information for your InterSystems IRIS instance(您的 InterSystems IRIS 实例的连接信息)替换主机、端口、irisnamespace、用户名和密码变量的值。您可以指定所示的 USERnamespace,也可以选择在实例上创建的另一个命名空间。 using System; using InterSystems.XEP; using xep.samples; namespace XepSimpleNamespace { public class XepSimple { public static void Main(string[] args) { // Generate 12 SingleStringSample objects for use as test data SingleStringSample[] sampleArray = SingleStringSample.generateSampleData(12); // EventPersister EventPersister xepPersister = PersisterFactory.CreatePersister(); String host = "127.0.0.1"; // InterSystems IRIS host int port = 51774; // InterSystems IRIS Superserver port String irisnamespace = "USER"; // InterSystems IRIS namespace String username = "_system"; // Credentials for InterSystems IRIS String password = "SYS"; //Credentials for InterSystems IRIS xepPersister.Connect(host,port,irisnamespace,username,password); // connect to localhost xepPersister.DeleteExtent("xep.samples.SingleStringSample"); // remove old test data xepPersister.ImportSchema("xep.samples.SingleStringSample"); // import flat schema // Event Event xepEvent = xepPersister.GetEvent("xep.samples.SingleStringSample"); long[] itemIdList = xepEvent.Store(sampleArray); int itemCount = 0; for (int i = 0; i < itemIdList.Length; i++) { if (itemIdList[i] > 0) itemCount++; } Console.WriteLine("Stored " + itemCount + " of " + sampleArray.Length + " events"); // EventQuery EventQuery<SingleStringSample> xepQuery = null; String sqlQuery = "SELECT * FROM xep_samples.SingleStringSample WHERE %ID BETWEEN ? AND ?"; xepQuery = xepEvent.CreateQuery<SingleStringSample>(sqlQuery); xepQuery.AddParameter(3); // assign value 3 to first SQL parameter xepQuery.AddParameter(12); // assign value 12 to second SQL parameter xepQuery.Execute(); // get resultset for IDs between 3 and 12 xepQuery.Close(); xepEvent.Close(); xepPersister.Close(); } // end main() } // end class xepSimple } 演示程序分为三个部分,每个部分演示了 XEP 三个主要类——EventPersister、 Event 和 EventQuery 中的一个。运行时,XepSimple 演示程序执行以下任务: 首先,通过调用示例数据类(sample data class) xep.samples.SingleStringSample 这一方法生成一些示例对象。 EventPersister 是 XEP 的主要入口点(main entry point),并提供到数据库的连接。 它创建一个名为 xepPersister 的实例,该实例在数据库中建立到 User 命名空间的 TCP/IP 连接,并删除任何现有的示例数据。然后调用 ImportSchema() 来分析示例类并将模式发送到数据库,从而创建相应的 ObjectScript 模式来保存持久化 SingleStringSample 对象。 Event 封装了(encapsulate) .NET 对象和相应的数据库对象之间的接口。 一旦生成了模式(schema),xepPersister 就可以为示例类创建一个名为 xepEvent 的 Event 对象。Store() 方法将 .NET 对象数组存储为持久化事件。 EventQuery 用于准备和执行 SQL 查询的有限子集。 名为 xepQuery 的 EventQuery<SingleStringSample> 对象是通过将查询字符串传递给 xepEvent 对象的 CreateQuery() 方法创建的。 该字符串定义了一个接受两个参数(? 字符)的 SQL 查询。 参数值是通过调用 AddParameter() 定义的,调用 Execute() 来获取查询结果集。 当处理完成后,它通过调用 XEP 对象的 close() 方法进行清理。 运行 XEPSimple 程序 现在您可以构建和运行 XEPSimple 演示程序了。按 Ctrl + F5 运行程序,以便当程序结束时命令提示符保持打开状态。 下一步 XepSimple 演示的目的是让您体验 XEP,而又不陷入细节困境,它不是用于实际生产代码的模型——它甚至没有进行异常检查。最重要的简化是在示例数据中。您从一个不需要注释或其他机制来帮助模式(schema)生成和优化的类中持久化了一些很小的 .NET 对象。虽然在实际应用程序中通常需要注释和其他选项,但这些选项非常简单易用。API 也同样简单易用。 有关所有 XEP 功能的全面描述,请参见 Persisting .NET Objects with InterSystems XEP(《使用 InterSystems XEP 持久化 .NET 对象》)。 了解有关 .NET 支持的更多信息 InterSystems IRIS 提供了 .NET API,通过 SQL 表、对象和多维存储轻松访问数据库。有关每种类型的访问的详细信息,请参见以下书籍: Using the Native API for .NET(《使用 Native API for .NET》),了解从 .NET 应用程序访问 InterSystems IRIS globals。 Using ADO.NET Managed Provider Classes(《使用 ADO.NET Managed Provider Classes》),了解SQL 表访问。允许您的 .NET 项目使用完全兼容的通用 ADO.NET Managed Provider 版本访问 InterSystems IRIS 数据库。 Using the InterSystems ODBC Driver(《使用 InterSystems ODBC Driver》),了解 SQL 表访问。InterSystems ODBC 驱动程序允许 InterSystems IRIS 建立到外部应用程序的 ODBC 连接,并通过 SQL 提供对外部数据源的访问。 Persisting .NET Objects with InterSystems XEP(《使用 InterSystems XEP 持久化 .NET 对象》),了解对象访问。XEP 对事务处理应用程序进行了优化,这类程序使用复杂度从简单到中等的对象层次结构,且要求极高的对象数据持久化和检索速度。 Using the Entity Framework Provider(《使用 Entity Framework Provider》),了解对象-关系映射。提供有关使用实体框架(Entity Framework)技术访问 InterSystems IRIS 数据库的信息。 这是我们的Firstlook 文档? 对
文章
姚 鑫 · 五月 30, 2022

第157章 SQL函数 WEEK

# 第157章 SQL函数 WEEK 一个日期函数,它将一年中的第几周作为日期表达式的整数返回。 # 大纲 ``` {fn WEEK(date-expression)} ``` # 参数 - `date-expression` - 一个表达式,它是列的名称、另一个标量函数的结果,或者是日期或时间戳文字。 # 描述 `WEEK` 接受一个日期表达式,并返回该日期从年初开始的周数。 默认情况下,使用 `$HOROLOG` 日期(从 1840 年 12 月 31 日开始的正整数或负整数天数)计算周数。因此,周数是逐年计算的,因此第 1 周是完成从上一年最后一周开始的 7 天期间的天数。一周总是从星期日开始;因此,日历年的第一个星期日标志着从第 1 周到第 2 周的变化。如果一年中的第一个星期日是 1 月 1 日,则该星期日是第 1 周;如果一年中的第一个星期日晚于 1 月 1 日,则该星期日是第 2 周的第一天。因此,第 1 周的长度通常少于 7 天。可以使用 `DAYOFWEEK` 函数确定星期几。一年中的总周数通常为 `53`,闰年可能为 `54`。 IRIS 还支持确定一年中星期的 ISO 8601 标准。该标准主要用于欧洲国家。当配置为 ISO 8601 时,`WEEK` 从星期一开始计算星期,并将星期分配给包含该星期星期四的年份。例如,2004 年的第 1 周从 2003 年 12 月 29 日星期一到 2004 年 1 月 4 日星期日,因为本周的星期四是 2004 年 1 月 1 日,这是 2004 年的第一个星期四。2005 年的第 1 周是从 2005 年 1 月 3 日星期一到 1 月 9 日星期日2005,因为它的星期四是 2005 年 1 月 6 日,也就是 2005 年的第一个星期四。一年中的总周数通常是 52,但偶尔也可能是 53。要激活 ISO 8601 计数, `SET ^%SYS("sql","sys","week ISO8601")=1`. 日期表达式可以是 日期整数、`$HOROLOG` 或 `$ZTIMESTAMP` 值、ODBC 格式日期字符串或时间戳。 日期表达式时间戳可以是数据类型 `%Library.PosixTime`(编码的 64 位有符号整数),也可以是数据类型 `%Library.TimeStamp` (`yyyy-mm-dd hh:mm:ss.fff`)。 时间戳的时间部分不被评估,可以省略。 使用 `DATEPART` 或 `DATENAME` 函数可以返回相同的星期信息。 也可以使用 `WEEK() `方法调用从 ObjectScript 调用此函数: ``` $SYSTEM.SQL.Functions.WEEK(date-expression) ``` ## 日期验证 `WEEK` 对输入值执行以下检查。如果某个值未通过检查,则返回空字符串。 - 日期字符串必须完整且格式正确,其中包含适当数量的元素和每个元素的数字,以及适当的分隔符。年份必须指定为四位数。 - 日期值必须在有效范围内。年:0001 到 9999。月:1 到 12。日:1 到 31。 - 一个月的天数必须与月份和年份相匹配。例如,日期`“02–29”`仅在指定年份是闰年时有效。 - 小于 10 的日期值可以包括或省略前导零。不允许使用其他非规范整数值。因此,`Day` 值`“07”`或`“7”`有效,但`“007”`、`“7.0”`或`“7a”`无效。 # 示例 以下嵌入式 SQL 示例返回 2005 年 1 月 2 日(星期日)和 2006 年 1 月 1 日(星期日)的星期几和一年中的星期几。 ```java /// d ##class(PHA.TEST.SQLFunction).Week() ClassMethod Week() { SET x = "2005-1-2" SET y = "2006-1-1" &sql( SELECT {fn DAYOFWEEK(:x)},{fn WEEK(:x)}, {fn DAYOFWEEK(:y)},{fn WEEK(:y)} INTO :a,:b,:c,:d ) if SQLCODE '= 0 { w !,"Error code ",SQLCODE } else { w !,"2005 Day of Week is: ",a," (Sunday=1)" w " Week of Year is: ",b w !,"2006 Day of Week is: ",c," (Sunday=1)" w " Week of Year is: ",d } } ``` ```java DHC-APP>d ##class(PHA.TEST.SQLFunction).Week() 2005 Day of Week is: 1 (Sunday=1) Week of Year is: 2 2006 Day of Week is: 1 (Sunday=1) Week of Year is: 1 ``` 以下示例返回数字 `9`,因为日期是 `2004` 年的第九周: ```sql SELECT {fn WEEK('2004-02-25')} AS Wk_Date, {fn WEEK('2004-02-25 08:35:22')} AS Wk_Tstamp, {fn WEEK(59590)} AS Wk_DInt 9 9 9 ``` 以下示例返回数字 `54`,因为此特定日期是闰年,从第 2 周开始,从第二天开始,如紧随其后的示例所示: ```sql SELECT {fn WEEK('2000-12-31')} AS Week 54 ``` ```sql SELECT {fn WEEK('2000-01-01')}||{fn DAYNAME('2000-01-01')} AS WeekofDay1, {fn WEEK('2000-01-02')}||{fn DAYNAME('2000-01-02')} AS WeekofDay2 1Saturday 2Sunday ``` 以下示例均返回当前周: ```sql SELECT {fn WEEK({fn NOW()})} AS Wk_Now, {fn WEEK(CURRENT_DATE)} AS Wk_CurrD, {fn WEEK(CURRENT_TIMESTAMP)} AS Wk_CurrTS, {fn WEEK($HOROLOG)} AS Wk_Horolog, {fn WEEK($ZTIMESTAMP)} AS Wk_ZTS 20 20 20 20 20 ``` 以下嵌入式 SQL 示例显示了 默认的一年中的一周以及应用 ISO 8601 标准的一年中的一周: ```sql /// d ##class(PHA.TEST.SQLFunction).Week1() ClassMethod Week1() { TestISO s def = $d(^%SYS("sql","sys","week ISO8601")) if def = 0 { s ^%SYS("sql","sys","week ISO8601")=0 } else { s isoval = ^%SYS("sql","sys","week ISO8601") } if isoval = 1 { g UnsetISO } else { s isoval=0 g WeekOfYear } UnsetISO s ^%SYS("sql","sys","week ISO8601") = 0 WeekOfYear &sql( SELECT {fn WEEK($HOROLOG)} INTO :a ) w "For Today:",! w "default week of year is ",a,! s ^%SYS("sql","sys","week ISO8601") = 1 &sql( SELECT {fn WEEK($HOROLOG)} INTO :b ) w "ISO8601 week of year is ",b,! ResetISO s ^%SYS("sql","sys","week ISO8601") = isoval } ```
问题
Yufeng Li · 四月 19, 2021

Nginx 怎么配置成IRIS web服务器

现在有windows上的 编译好的nginx 可以做为iris 的web 服务器吗? ngx_http_csp_module_sa.c , cspapi.h 这两个文件在哪下载? 请从Nginx官网:nginx.org 下载,InterSystems不提供nginx 下载。 文中提到的文件可以在InterSystems IRIS 安装目录的 \dev\csp\nginx 文件夹下找到。
文章
Frank Ma · 六月 13, 2022

利用IRIS IntegratedML(一体化机器学习)来预测肾病的Web应用

肾脏疾病可以从一些医学界熟知的参数中发现。这样,为了帮助医学界和计算机系统,特别是人工智能,科学家Akshay Singh发表了一个非常有用的数据集,用于训练肾脏疾病检测/预测方面的机器学习(ML)算法。这份出版物可以在最大和最知名的ML数据库Kaggle上找到,网址是https://www.kaggle.com/datasets/akshayksingh/kidney-disease-dataset。 关于数据集 该肾脏疾病数据集有以下元数据信息(来源:https://www.kaggle.com/datasets/akshayksingh/kidney-disease-dataset): 它有400行,有25个特征,如红细胞、足部水肿、糖等等。 其目的是对病人是否患有慢性肾脏病进行分类。 分类是基于一个名为 "classification "(分类)的属性,属性值是 "ckd"(慢性肾脏病)或 "notckd"(不是慢性肾脏病)。 数据集作者对数据集进行了清洗,包括将文本映射为数字和其他一些变化。在清洗之后,数据集作者做了一些EDA(探索性数据分析),然后将数据集分为训练和测试两部分,并在上面应用模型。据观察,最初的分类结果并不令人满意。因此,数据集的作者没有放弃有Nan(非数)值的行,而是用lambda函数将其替换为每一列的模式。之后,数据集作者又将数据集分为训练集和测试集,并对其应用模型。这一次的结果更好,我们看到随机森林和决策树是表现最好的,准确率为1.0,错误分类率为0。分类的性能是通过打印混淆矩阵、分类报告和准确性来衡量的。 数据集信息 (来源: https://archive.ics.uci.edu/ml/datasets/chronic_kidney_disease): 我们使用以下表述来收集数据集 age - age(年龄)bp - blood pressure(血压)sg - specific gravity(比重)al - albumin(白蛋白)su - sugar(糖)rbc - red blood cells(红血球)pc - pus cell(脓细胞)pcc - pus cell clumps(脓细胞团块)ba - bacteria(细菌)bgr - blood glucose random(血糖随机)bu - blood urea(血尿素)sc - serum creatinine(血清肌酐)sod - sodium(钠)pot - potassium(钾)hemo - hemoglobin(血红蛋白)pcv - packed cell volume(填充细胞体积)wc - white blood cell count(白血球计数)rc - red blood cell count(红细胞计数)htn - hypertension(高血压)dm - diabetes mellitus(糖尿病)cad - coronary artery disease(冠状动脉疾病)appet - appetite(食欲)pe - pedal edema(足部水肿)ane - anemia(贫血)class - class(类) 属性信息 (来源: https://archive.ics.uci.edu/ml/datasets/chronic_kidney_disease): 我们使用24+类 = 25 (11个数字类型,14个名义类型)1.Age 年龄(数字)岁数2.Blood Pressure 血压(数字)血压单位:mm/Hg3.Specific Gravity 比重(数字)sg - (1.005,1.010,1.015,1.020,1.025)4.Albumin 白蛋白(名义)al - (0,1,2,3,4,5)5.Sugar 糖 (数字)su - (0,1,2,3,4,5)6.Red Blood Cells 红血球 (名义)rbc - (normal,abnormal) 红细胞 - (正常,异常)7.Pus Cell 脓细胞 (名义)pc - (normal,abnormal)(正常、异常)8.Pus Cell clumps 脓细胞团块 (名义) pcc - (present,notpresent) (出现、未出现)9.Bacteria 细菌(名义)ba - (present,notpresent) (出现、未出现)10.Blood Glucose Random 血糖随机(数字)bgr 单位 mgs/dl11.Blood Urea 血尿素(数字)bu 单位mgs/dl12.Serum Creatinine 血清肌酸酐(数字)sc 单位 mgs/dl13.Sodium 钠 (数字)sod 单位 mEq/L14.Potassium 钾 (数字)pot 单位 mEq/L15.Hemoglobin 血红蛋白(数字)hemo 单位 gms16.Packed Cell Volume 包容细胞体积(数字)17.White Blood Cell Count白血球计数 (数字)wc 单位 cells/cumm 18.Red Blood Cell Count 红细胞计数(数字)rc 单位 millions/cmm19.Hypertension 高血压(名义)htn - (yes,no) (是,否)20.Diabetes Mellitus 糖尿病(名义)dm - (yes,no) (是,否)21.Coronary Artery Disease 冠状动脉疾病(名义)cad - (yes,no) (是,否)22.Appetite 食欲(名义)appet - (good,poor) (好,差)23.Pedal Edema 踏板水肿(名义)pe - (yes,no) (是,否)24.Anemia 贫血(名义)ane - (yes,no) (是,否)25.Class 类 (名义)class - (ckd,notckd) (慢性肾脏病,不是慢性肾脏病) 从Kaggle获取肾脏数据 使用Health-Dataset(健康数据集)应用程序,可以把肾脏病数据从Kaggle加载到IRIS表中: https://openexchange.intersystems.com/package/Health-Dataset. 要做到这一点,在你的module.xml项目中,设置依赖关系(Health Dataset的ModuleReference): Module.xml with Health Dataset application reference <?xml version="1.0" encoding="UTF-8"?> <Export generator="Cache" version="25"> <Document name="predict-diseases.ZPM"> <Module> <Name>predict-diseases</Name> <Version>1.0.0</Version> <Packaging>module</Packaging> <SourcesRoot>src/iris</SourcesRoot> <Resource Name="dc.predict.disease.PKG"/> <Dependencies> <ModuleReference> <Name>swagger-ui</Name> <Version>1.*.*</Version> </ModuleReference> <ModuleReference> <Name>dataset-health</Name> <Version>*</Version> </ModuleReference> </Dependencies> <CSPApplication Url="/predict-diseases" DispatchClass="dc.predict.disease.PredictDiseaseRESTApp" MatchRoles=":{$dbrole}" PasswordAuthEnabled="1" UnauthenticatedEnabled="1" Recurse="1" UseCookies="2" CookiePath="/predict-diseases" /> <CSPApplication CookiePath="/disease-predictor/" DefaultTimeout="900" SourcePath="/src/csp" DeployPath="${cspdir}/csp/${namespace}/" MatchRoles=":{$dbrole}" PasswordAuthEnabled="0" Recurse="1" ServeFiles="1" ServeFilesTimeout="3600" UnauthenticatedEnabled="1" Url="/disease-predictor" UseSessionCookie="2" /> </Module> </Document> </Export> 预测肾脏疾病的网络前端和后端应用程序 进入Open Exchange应用程序链接 (https://openexchange.intersystems.com/package/Disease-Predictor) 并遵循以下步骤: 用Clone/git 将repo拉到本地的任一目录中 $ git clone https://github.com/yurimarx/predict-diseases.git 打开该目录下Docker终端,并运行: $ docker-compose build 运行IRIS容器: $ docker-compose up -d 进入管理门户执行查询,训练AI模型: http://localhost:52773/csp/sys/exp/%25CSP.UI.Portal.SQL.Home.zen?$NAMESPACE=USER 创建用于训练的VIEW: CREATE VIEW KidneyDiseaseTrain AS SELECT age, al, ane, appet, ba, bgr, bp, bu, cad, classification, dm, hemo, htn, pc, pcc, pcv, pe, pot, rbc, rc, sc, sg, sod, su, wc FROM dc_data_health.KidneyDisease 使用view视图创建AI模型 CREATE MODEL KidneyDiseaseModel PREDICTING (classification) FROM KidneyDiseaseTrain 训练模型: TRAIN MODEL KidneyDiseaseModel 访问 http://localhost:52773/disease-predictor/index.html ,使用疾病预测器的前台预测疾病,如下: 幕后工作 预测肾脏病的后端类方法 InterSystems IRIS 允许你执行SELECT,使用之前创建的模型进行预测。 Backend ClassMethod to predict Kidney Disease /// Predict Kidney Disease ClassMethod PredictKidneyDisease() As %Status { Try { Set data = {}.%FromJSON(%request.Content) Set %response.Status = 200 Set %response.Headers("Access-Control-Allow-Origin")="*" Set qry = "SELECT PREDICT(KidneyDiseaseModel) As PredictedKidneyDisease, " _"age, al, ane, appet, ba, bgr, bp, bu, cad, dm, " _"hemo, htn, pc, pcc, pcv, pe, pot, rbc, rc, sc, sg, sod, su, wc " _"FROM (SELECT "_data.age_" AS age, " _data.al_" As al, " _"'"_data.ane_"'"_" AS ane, " _"'"_data.appet_"'"_" AS appet, " _"'"_data.ba_"'"_" As ba, " _data.bgr_" As bgr, " _data.bp_" AS bp, " _data.bu_" AS bu, " _"'"_data.cad_"'"_" As cad, " _"'"_data.dm_"'"_" As dm, " _data.hemo_" AS hemo, " _"'"_data.htn_"'"_" AS htn, " _"'"_data.pc_"'"_" As pc, " _"'"_data.pcc_"'"_" As pcc, " _data.pcv_" AS pcv, " _"'"_data.pe_"'"_" AS pe, " _data.pot_" As pot, " _"'"_data.rbc_"'"_" As rbc, " _data.rc_" AS rc, " _data.sc_" AS sc, " _data.sg_" As sg, " _data.sod_" As sod, " _data.su_" AS su, " _data.wc_" AS wc)" Set tStatement = ##class(%SQL.Statement).%New() Set qStatus = tStatement.%Prepare(qry) If qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT} Set rset = tStatement.%Execute() Do rset.%Next() Set Response = {} Set Response.classification = rset.PredictedKidneyDisease Set Response.age = rset.age Set Response.al = rset.al Set Response.ane = rset.ane Set Response.appet = rset.appet Set Response.ba = rset.ba Set Response.bgr = rset.bgr Set Response.bp = rset.bp Set Response.bu = rset.bu Set Response.cad = rset.cad Set Response.dm = rset.dm Set Response.hemo = rset.hemo Set Response.htn = rset.htn Set Response.pc = rset.pc Set Response.pcc = rset.pcc Set Response.pcv = rset.pcv Set Response.pe = rset.pe Set Response.pot = rset.pot Set Response.rbc = rset.rbc Set Response.rc = rset.rc Set Response.sc = rset.sc Set Response.sg = rset.sg Set Response.sod = rset.sod Set Response.su = rset.su Set Response.wc = rset.wc Write Response.%ToJSON() Return 1 } Catch err { write !, "Error name: ", ?20, err.Name, !, "Error code: ", ?20, err.Code, !, "Error location: ", ?20, err.Location, !, "Additional data: ", ?20, err.Data, ! Return 0 } } 现在,任何web应用都可以使用该预测并显示结果。您可以到预测疾病应用程序的前端文件夹中查看源代码。
公告
Claire Zheng · 九月 5, 2022

欢迎中文社区新版主@张特特

亲爱的社区开发者们, 我很高兴地向大家介绍一位我们的新版主 @Tete.Zhang (张特特)! @Tete.Zhang (张特特) 目前任职于InterSystems中国,在WRC部门任职资深技术支持专家一职。 以下是@Tete.Zhang (张特特)的自我介绍: 在2015年夏天实习结束后,我于2016年正式作为技术支持工程师加入InterSystems,从那时起,我在InterSystems全球支持中心北美分部工作了六年,2022年,我调职至北京,服务于InterSystems中国,希望能为成长中的中国市场出一份力。 很高兴可以在社区与大家相遇,希望能与大家一起努力,创造更精彩的社区! 再次欢迎我们的新版主 @Tete.Zhang (张特特)👏🏼👏🏼👏🏼👏🏼👏🏼 期待你在DC成长为一名优秀版主!