文章 姚 鑫 · 八月 4, 2024 2m read

[toc]

第十二章 在 Web 服务中定义自定义处理 - 实现 ProcessBody()

实现 ProcessBody()

ProcessBody() 方法具有以下签名:

method ProcessBody(action As %String, requestBody As %CharacterStream, 
                   ByRef responseBody As %CharacterStream) as %Boolean

其中:

  • action 是入站消息中指定的 SOAP 操作。
  • requestBody%Library.CharacterStream 的一个实例,包含 SOAP <Body> 元素。该流包含 XML 片段,而不是完整的 XML 文档。
  • responseBody,是序列化为 %Library.CharacterStream 实例的响应主体。此流通过引用传递,最初为空。

如果在 Web 服务中实现此方法,则该方法应执行以下操作:

  1. 检查操作并相应地分支。例如:
 if action["action1" { 
  //details
 }
  1. 使用 requestBodyRead() 方法获取 SOAP <Body>。例如:
 set request=requestBody.Read()
  1. 使用 $EXTRACT 等工具解析此流。
0
0 121
文章 Michael Lei · 八月 1, 2024 4m read

随着 IRIS 中向量数据类型和向量搜索功能的引入,应用程序的开发正在开启一个充满各种可能性的全新世界,其中一个应用程序示例是我最近在巴伦西亚卫生局的一次公开竞赛中看到的应用程序,他们要求提供一种工具,能够使用 AI 模型协助进行 ICD-10 编码。

我们如何实现与所要求的应用程序类似的应用程序? 我们来看看需要什么:

  1. ICD-10 代码列表,我们将使用它作为 RAG 应用程序的上下文,在纯文本中搜索诊断结果。
  2. 经过训练的模型,它会将文本向量化,我们将在其中查找 ICD-10 代码中的对应项。
  3. Python 库,用于对 ICD-10 代码和文本进行摄取和向量化。
  4. 一个支持文本的友好前端,我们会在其中查找可能的诊断结果。
  5. 从前端接收的请求的编排。

IRIS 为我们提供哪些功能来满足上述需求?

  1. CSV 导入,可以使用 RecordMapper 功能,也可以直接使用嵌入式 Python。
  2. 嵌入式 Python 使我们能够实现使用所选模型生成向量所需的 Python 代码。
  3. 发布将从前端应用程序调用的 REST API。
  4. 互操作性生产,以允许在 IRIS 中跟踪信息。

我们只需要看看开发的示例:

d[IA]gnosis

在本文中,您可以访问开发的应用程序,在后续文章中,我们将详细了解如何实现每个功能,包括模型的使用、向量的存储和向量搜索的使用。

0
0 127
文章 YuCheng Hu · 八月 1, 2024 3m read

针对 InterSystems IRIS 数据库的一些基本概念。

InterSystems IRIS 是什么

InterSystems IRIS 是基于 Caché/M 语言开发的一个数据库,这个数据库被大量使用在医疗系统中,也是北美地区医疗系统病历和文件管理中默认使用的事实标准。

Caché/M 是什么

Caché/M 是 MUMPS 程序语言 开发的数据库,Caché/M 提供了代码接口,可以直接使用 Caché/M 对数据库来进行操作。

Caché 是一个法语单词,但是又非常容易和英语使用的 Cache 搞混,所以大部分时候使用的是 Caché/M 来表达。

M 表达的意思是 Mumps 程序语言,简称 M 语言,Caché 使用 M 语言构建了不少函数。

InterSystems IRIS 不是开源数据库

因为涉及到医疗系统数据的使用,所以 InterSystems IRIS 并不是一个开源的数据库,你可以使用下面的链接:Evaluate InterSystems Products 8 来下载评估版本。

本文就是根据下载的链接来进行 Windows 安装的教程。

上面的页面在下载之前,你需要进行注册,并且提供你的信息。

双击运行

当下载完成后,可以双击运行安装程序。

我们会看到下面的安装界面:

InterSystems-IRIS-Windows-Install-01

同意许可协议后,单击下一步继续安装。

配置实例名

我们在这里使用默认的就可以,通常使用的 IRIS。

InterSystems-IRIS-Windows-Install-02

0
0 418
InterSystems 官方 Claire Zheng · 八月 1, 2024

InterSystems IRIS数据平台、InterSystems IRIS for Health和HealthShare Health Connect 2024.2版本现已正式发布(GA)。

发布亮点

2024.2是持续交付版本。在这个版本中增加了许多更新和增强:

持续提升开发者体验

  • Studio移除——2024.2 Windows安装不包括Studio IDE,升级现有实例会从实例的bin目录中移除Studio。希望继续使用Studio的开发人员应该从WRC component distribution page 下载2024.1 Studio独立组件。
  • Foreign Tables 得到了完全的支持——在2024.2版本中,我们解决了来自早期访问用户的反馈,包括更好的元数据管理,改进的谓词下推,以及进一步与LOAD DATA命令保持一致,LOAD DATA命令可以获取外部数据,而不是将外部数据投射到IRIS SQL表中。
  • 在微软Windows中运行Python运行时保持灵活——运行微软Windows的客户现在可以选择用于嵌入式Python的Python运行环境。
0
0 106
文章 姚 鑫 · 七月 30, 2024 3m read

第九章 使用进程私有全局变量来支持非常大的消息

使用进程私有全局变量来支持非常大的消息

默认情况下、 Web 服务在解析请求或响应时通常使用本地数组内存。可以强制它改用进程私有全局变量;这使 Web 服务能够处理非常大的消息。

为此,请指定 Web 服务类的 USEPPGHANDLER 参数,如下所示:

Parameter USEPPGHANDLER = 1;

如果此参数为 1,则 Web 服务在解析请求或响应时始终使用进程私有全局变量。如果此参数为 0,则 Web 服务始终使用本地数组内存来实现这些目的。如果未设置此参数,则 Web 服务使用默认值,通常是本地数组内存。

自定义 Web 服务的回调

可以通过覆盖其回调方法来定制 Web 服务的行为:

OnRequestMessage()

如果没有安全错误,则在 Web 服务收到请求消息时调用;如果出现安全错误,则不会调用此回调。系统在执行安全处理、检查信封是否有错误以及处理 WS-Addressing 标头中指定的操作(如果有)后调用此回调。此回调对于记录原始 SOAP 请求等任务很有用。

此方法具有以下签名:

Method OnRequestMessage(mode As %String, action As %String, request As %Stream.Object)

其中:

  • mode 指定 SOAP 请求的类型。
0
0 98
文章 Hao Ma · 七月 29, 2024 2m read

转发自Eduard Lebedyu的原文

在本系列文章中,我将介绍并讨论使用 InterSystems 技术和 GitLab 进行软件开发的几种可行方法。我将涉及以下主题:

1
0 197
文章 姚 鑫 · 七月 27, 2024 1m read

第五章 控制 xsi:type 属性的使用

控制 xsi:type 属性的使用

默认情况下, SOAP 消息仅包含顶级类型的 xsi:type 属性。例如:

<?xml version="1.0" encoding="UTF-8" ?>
...
<types:GetPersonResponse>
<GetPersonResult href="#id1" />
</types:GetPersonResponse>
<types:Person id="id1" xsi:type="types:Person">
<Name>Yeats,Clint C.</Name>
<DOB>1944-12-04</DOB>
</types:Person>  
...

在这些示例中,已添加换行符以提高可读性。要将此属性用于 SOAP 消息中的所有类型,请将 OUTPUTTYPEATTRIBUTE 参数或 OutputTypeAttribute 属性设置为 1。相同的输出将如下所示:

<?xml version="1.
0
0 81
文章 姚 鑫 · 七月 25, 2024 2m read

第四章 覆盖 HTTP SOAP 操作和请求消息名称

覆盖 HTTP SOAP 操作和请求消息名称

当通过 HTTP 调用 Web 方法时,HTTP 标头必须包含 SOAP 操作,该操作是指示 SOAP HTTP 请求意图的 URI。对于 SOAP 1.1SOAP 操作作为 SOAPAction HTTP 标头包含在内。对于 SOAP 1.2,它包含在 Content-Type HTTP 标头中。

SOAP 操作指示 SOAP HTTP 请求的意图。该值是一个标识意图的 URI;它通常用于路由入站 SOAP 消息。例如,防火墙可以使用此标头适当地过滤 HTTP 中的 SOAP 请求消息。

对于 Web 服务中的 Web 方法,SOAPAction HTTP 标头默认具有以下形式(对于 SOAP 1.1):

SOAPAction: NAMESPACE/Package.Class.Method

其中 NAMESPACEWeb 服务的 NAMESPACE 参数的值,Package.Class.Method 是用作 Web 方法的方法的名称。例如:

SOAPAction: http://www.myapp.org/GSOAP.WebService.GetPerson

要覆盖此设置,请在 Web 方法的定义中为 SoapAction 方法关键字指定一个值。

0
0 179
讨论 Claire Zheng · 七月 25, 2024

Hi社区成员们!

你可能已经知道了,, 我们的 Developer Community AI(开发者社区AI) 已经运行一个多月了 🎉 我们希望你能够出于好奇来尝试一下 😁 如果你还没试过,那就试试吧!无论如何,由于它仍在测试阶段,我们非常有兴趣了解你对它的看法,也很期待听到你的想法和经验。

我们重视你为此付出的时间和精力,所以将随机赠送一个可爱的奖品给愿意分享自己想法的社区成员。要参加此抽奖活动,你需要遵循以下准则:

0
0 218
文章 Michael Lei · 七月 25, 2024 1m read

InterSystems 常见问题FAQ 

要编译包含映射修饰符的类rountine,请指定编译器修饰符“/mapped=1”或“/mapped”。例如,执行以下操作:

[示例 1] 获取类列表并编译

 do $System.OBJ.GetClassList(.list,"/mapped")
 // build your classes starting from .list
 do $System.OBJ.Compile(.list) 

[示例 2] 编译所有类 

 do $system.OBJ.CompileAll("/mapped") 
0
0 134
文章 光辉 赵 · 七月 23, 2024 6m read

FHIR是标准,是规范,使用FHIR使大家可以使用同一种语言、语义进行交流,名称、API都是统一的,只要符合FHIR标准,任何系统都可交互。对业务开发者来说,大部分接口交互的定义交给FHIR来处理,效率大大提高。

1
0 204
文章 Michael Lei · 七月 18, 2024 2m read

InterSystems 常见问题系列

使用 ErrorList 查询 SYS.ApplicationError 类.

  • 注 1: 在 %SYS 命名空间中运行.
  • 注 2: 这是个非存储的utility, 所以我们用 %ResultSet 类而不用 %SQL.Statement.

执行命令的例子如下.

USER>set $namespace="%SYS"   //equal to zn "%SYS"
%SYS>set rset=##class(%ResultSet).%New()

%SYS>set rset.ClassName="SYS.ApplicationError"
%SYS>set rset.QueryName="ErrorList"
// The first argument of the query is the namespace name, the second argument is the date (in MM/DD/YYYY format).
%SYS>do rset.Execute("USER","08/17/2020")

// To display the results on the screen, execute the %Display() method.
%SYS>do rset.
0
0 153
文章 Michael Lei · 七月 18, 2024 1m read

InterSystems 常见问题系列

可以通过 TRY-CATCH 来完成:

 #dim ex As %Exception.AbstractException
 TRY {
    //Code that causes an error
  }
  CATCH ex {
     do ex.Log()
  }

如果用了 ^%ETN, 从BACK 接入点 (BACK^%ETN)处调用.

请参考另外一篇文章: 如何使用命令获得应用错误 (^ERRORS)

0
0 146
文章 Hao Ma · 三月 25, 2021 8m read

关键字:PyODBC,unixODBC,IRIS,IntegratedML,Jupyter Notebook,Python 3

 

目的

几个月前,我简单谈到了关于“将 Python JDBC 连接到 IRIS”的话题。我后来频繁提起它, 因此决定再写一篇 5 分钟的笔记,说明如何“将 Python ODBC 连接到 IRIS”。

在 Windows 客户端中通常很容易设置 ODBC 和 PyODBC,不过我每次在 Linux/Unix 风格的服务器中设置 unixODBC 和 PyODBC 客户端时,都会遇到一些麻烦。

有没有一种简单连贯的方法,可以不安装任何 IRIS,在原版 Linux 客户端中让 PyODBC/unixODBC 针对远程 IRIS 服务器运行?

 

范围

最近,我花了点时间研究如何在 Linux Docker 环境的 Jupyter Notebook 中从头开始让一个 PyODBC 演示运行起来, 记录下这篇稍微有些繁琐的笔记,以供日后快速参考。  

范围内: 

这篇笔记将涉及以下组件:

  • PyODBC over unixODBC 
  • 安装了 TensorFlow 2.2 和 Python 3 的 Jupyter Notebook 服务器
  • 带有 IntegratedML 的 IRIS2020.3 CE 服务器,包括示例测试数据。
  • 1
    0 518
    文章 Jingwei Wang · 八月 30, 2022 3m read

    InterSystems IRIS 允许从任何符合DB-API的Python应用程序对InterSystems IRIS 进行快速、无缝地访问。Python DB-API驱动是对PEP 249 v2.0(Python数据库API规范 v2.0)的完整兼容。

     

    步骤

    1. 前提是要有一个Python的开发环境。
      本示例使用vs code 如下所示创建一个dbapi.py文件。
      dbapi.py :
      # Embedded Python examples from summer 2022
      import iris as dbapi
      ​
      mytable = "mypydbapi.test_things"
      conn = dbapi.connect(hostname='localhost', port=1972, namespace='IRISAPP', username='superuser', password='iris')
      ​
      # Create table
      cursor = conn.cursor()
      try:
       cursor.
    1
    0 405
    问题 y g · 七月 16, 2024

    ubuntu系统中,查询到的数据都是空字符串

     

     python3 httpTest2.py
    ('', '', '', '', None, '')
    ('', '', '', '', None, '')
    ('', '', '', '', None, '')
    ('', '', '', '', None, '')
    ('', '', '', '', None, '')
    ('', '', '', '', None, '')
    ('', '', '', '', None, '')
    ('', '', '', '', None, '')
    ('', '', '', '', None, '')
    ('', '', '', '', None, '')

     

    代码如下
    import pyodbc
    import requests

    driver = '/usr/irisodbc/bin/libirisodbc35.so'
    server = 'xx'
    database = 'xx'
    username = 'xx'
    password = 'xx'
    port = 'xx'


    cnxn = pyodbc.connect(driver=driver, server=server,port='51773', database=database, uid=username, pwd=password,charset='UTF-8')
    cursor = cnxn.

    0
    0 90
    文章 Yongfeng Hou · 十一月 23, 2023 3m read

            IRISHealth以其完备且系统化的安全特性在医疗行业的数据库中独树一帜,这些特性包括安全认证、安全授权、安全审计、数据加密以及安全配置。其中数据传输无疑是其中最重要的一环。为此,IRISHealth采用了SSL/TLS技术来对传输的数据进行加密,有效保障了从IRIS数据平台的超级服务数据传输、Telnet服务数据传输、java/.net/Studio客户端的访问数据传输、MIRROR与DB的数据传输,到DBServer和ECPApp之间的数据传输的安全性。


            本文是在两个IRISHealth2021实例之间进行ECP服务通信的示例,一个作为DBServer,一个作为ECPApp,两个实例之间通过使用SSL/TLS的ECP协议进行TCP的加密传输通信。

    1.IRIS的DB和ECP环境:




    DBServer 

    ECPApp

    10.1.30.231  10.1.30.232

     

    2. CA证书的环境:




    CA根服务器 

    DBServer

    ECPApp

    10.1.30.231 10.1.30.231 10.1.30.232
    CARoot.cer DataSever.cer ECPApp.cer
    CARoot.key DataSever.key ECPApp.
    5
    3 426
    文章 liu bo · 七月 7, 2024 1m read

    问题:锁管理里边包含很多WorkQueueMgr的锁,我想批量去移除,比较多,一个一个移除比较慢

    解决:查询所有的进程,过滤routine不包含某个routine的进程,进行终止

    代码:

    ClassMethod BatchTerminalProcessQuery()
    {     Set Rset = ##class(%ResultSet).%New("%SYS.ProcessQuery:ListPids")
    Rset.Execute()
    While Rset.Next() {
       CurrentLineAndRoutine=""
       &sql(SELECT CurrentLineAndRoutine INTO :CurrentLineAndRoutine FROM %SYS.ProcessQuery WHERE Pid = :Rset.GetData(1))
       continue:CurrentLineAndRoutine'[".WorkQueueMgr"
       CurrentLineAndRoutine,!
       pid=Rset.GetData(1)
       sc= $System.Process.Terminate(pid)
       sc,!
       ;w $ZU(4,pid,1)
    }
    Rset.Close()
    }

    1
    0 223
    文章 Michael Lei · 七月 11, 2024 1m read

    在当今充满活力的医疗保健行业,获取全面、精简的医疗记录对于做出明智的决策至关重要。人工智能驱动的健康图表应用程序是一个开创性的解决方案,旨在为医生提供一种获取和理解健康数据的有效方式。

    主要功能

    - 全面的数据检索: 健康图表应用程序通过提取各种健康数据,包括过敏症、病情、手术、免疫接种、药物、家族史、社会史、生命体征和化验结果,超越了传统记录。这种全面的视角可以让人们深入了解患者的健康历程。

    - 通过人工智能增强洞察力:通过利用人工智能的力量,Health Chart 应用程序可以智能处理数据。人工智能引擎将原始信息转化为可操作的洞察,生成健康摘要和风险评估。这不仅节省了医生的宝贵时间,还提高了患者护理质量。

    公司介绍:https://www.prairiebyte.com

    软件试用

    目标使用者--临床医生

    类别--护理协调, 数据可视化, 疾病管理/基层医疗

    应用程序类型--SMART ON FHIR应用程序

    FHIR 版本--R4

    支持的电子病历系统--Cerner、Epic等支持FHIR API的软件系统

    0
    0 251
    文章 Michael Lei · 七月 9, 2024 1m read

    Abstractive Health是一款医生人工智能助手,可帮助医生创建最佳病历。我们直接与国家 HIE 和 EHR 集成。我们的医疗摘要可用于门诊、住院和急诊护理,实现临床笔记的自动化,如 SOAP 笔记、进展笔记、护理过渡、ED Provider 笔记和出院摘要。我们使用生成式人工智能和 LLM 来压缩数百页的医疗笔记,从而节省您的时间,让您可以专注于病人护理。

    公司介绍:https://www.abstractivehealth.com

    软件试用

    目标使用者--临床医生

    类别--护理协调, 数据可视化, 人口健康

    应用程序类型--SMART ON FHIR应用程序

    FHIR 版本--R4

    支持的电子病历系统--Allscripts、Athena Health、Cerner、Epic等支持FHIR API的软件系统

    安全和隐私政策: https://www.abstractivehealth.com/security-and-privacy

    0
    0 156
    文章 Michael Lei · 七月 7, 2024 1m read

    InterSystems 常见问题系列FAQ

    如果要让超时功能失效, 在DSN设置查询超时为disabled:

    Windows Control Panel > Administrative Tools > Data Sources (ODBC) > System DSN configuration

    如果勾选了Disable query timeout , 超时就会失效.

    如果想在应用侧修改,你可以在ODBC API 层设置:在连接数据源之前,调用ODBC SQLSetStmtAttr功能设置SQL_ATTR_QUERY_TIMEOUT 属性 

    0
    0 218
    文章 Michael Lei · 七月 7, 2024 1m read

    InterSystems 常见问题FAQ

    如果您想在InterSystems 产品启动时执行一个操作系统可执行文件,命令或者程序,可以在SYSTEM^%ZSTART routine里面写明流程 ( %ZSTART routine在 %SYS 命名空间里面创建).

    在 SYSTEM^%ZSTART 里面写代码之前, 请确保他可以在任何情况下能正常工作

    如果 ^%ZSTART routine 写的不对,或者没有响应或者发生错误,InterSystems 产品可能会无法启动。

    更多信息,请参考一下文档。

    About writing %ZSTART and %ZSTOP routines [IRIS]
    About writing %ZSTART and %ZSTOP routines

    0
    0 131
    文章 Michael Lei · 七月 7, 2024 4m read

    InterSystems  常见问题系列FAQ

    InterSystems 产品里数据 (表、对象、实例数据) 是存在global 变量里的。
    每个global 的数据大小可以从管理门户中中点击属性查看Management Portal > System > Configuration > Local Database > Globals page, 然后在global 属性页点击计算大小Calculate Size 按钮。
    你可以在终端上调用^%GSIZE  来在命名空间里显示数据大小,方法如下.

    USER>do ^%GSIZE
     
    Directory name: c:\intersystems\ensemble\mgr\user\ =>
    All Globals? No => Yes
    ^DeepSee.ActiveTasks contains no data
    Include it anyway? No => Y
    Include any other similar globals without asking again? Yes =>
    ^DeepSee.ActiveTasks contains no data
    Include it anyway? No => Yes
    Include any other similar globals without asking again?
    0
    0 164