问题 kun an · 六月 9, 2021

请问cahce中所有的数据库访问都是通过cache server完成的吗,比如使用终端访问数据库、studio开发的应用、使用第三方库使用代码都是先访问cache server,然后通过cache server对数据进行存取的吗?使用studio开发的应用程序也是跑在cache server中吗? 如果是的话studio开发的应用程序(比如web程序)如何跟cache server分开部署呢?

4
0 254
问题 Michael Lei · 六月 8, 2021

Hi colleagues!

Is there a way to export globals in XML if I have the access to Management Portal or any other web app?

Currently, it gives the option to export into gof format only.

Hi 同事们好!

是否有办法通过管理门户或任何其他的web app以XML的形式导出globals?

目前,它只提供了导出为gof格式的选项。

1
0 238
文章 Qianzhu Liu · 六月 9, 2021 7m read

门诊医生工作站是帮助医生规范和高效的完成日常处方、病历书写、结果查询、会诊转诊等一系列诊疗行为的综合应用平台。该平台以电子病历为中心,内置常用模版和术语库;与医嘱系统、实验室系统、影像系统等相联通,为医生提供便捷、快速的辅助工具。

然而,日渐增长的患者数量、逐步扩大的职责范围和频繁添加的系统功能,都对医生的工作密度和强度造成影响。传统模式化的交互页面无法精准应对复杂多变的临床场景,且难以满足医生的个性化需求。

说到医院信息系统(EHR)的“个性化需求”,就不得不提到国际知名调研组织KLAS2019年发布的The Arch Collaborative项目报告。该项目在179家已经部署EHR的医疗机构中,采取问卷和访谈的形式,通过对收集到的八万余份回复进行分析,得出如下结论:1)决定EHR应用功效的首要因素是医务人员(占所有因素的60%),2)决定医务人员EHR满意度的首要因素是可否满足个性化需求(占所有因素的32%);3)医务人员EHR满意度高的医疗机构无一例外的开展了严格的用户培训、进行了充分的上线前交流、实施了细致的个性化配置;4)部分在上线初期医务人员EHR满意度较低的医疗机构,采纳上述改进方案后,满意度提升了80%以上。

0
0 418
文章 姚 鑫 · 六月 9, 2021 6m read

第二章 从对象写入XML输出

本章介绍如何从InterSystems IRIS对象生成XML输出。

创建XML编写器概述

InterSystems IRIS提供了用于为InterSystems IRIS对象生成XML输出的工具。可以指定XML投影的详细信息,如将对象投影到XML中所述。然后创建一个Writer方法,该方法指定XML输出的整体结构:字符编码、对象的显示顺序、是否包括处理指令等。

基本要求如下:

  • 如果需要特定对象的输出,则该对象的类定义必须扩展%XML.Adaptor。除了少数例外,该对象引用的类还必须扩展%XML.Adaptor

  • 输出方法必须创建%XML.Writer的实例,然后使用该实例的方法。

下面的终端会话显示了一个简单的示例,在该示例中,我们访问启用了XML的对象并为其生成输出:

/// d ##class(Sample.Person).Populate(100)
/// w ##class(PHA.TEST.Xml).Obj2Xml(1)
ClassMethod Obj2Xml(ID)
{
	s obj = ##class(Sample.Person).%OpenId(ID)
	s xml = ##class(%XML.Writer).%New()
	s xml.Indent=1
	s status = xml.RootObject(obj)
	q ""
}

0
1 230
文章 姚 鑫 · 六月 8, 2021 8m read

第一章 InterSystems XML工具简介

介绍了如何使用 IRIS XML工具。

InterSystems IRIS为XML处理带来了对象的力量--可以使用对象作为XML文档的直接表示,反之亦然。由于InterSystems IRIS包括本机对象数据库,因此可以将此类对象直接用于数据库。此外,InterSystems IRIS提供了用于处理XML文档和DOM(文档对象模型)的工具,即使它们与任何InterSystems IRIS类无关。

用XML表示对象数据

有些InterSystems IRIS XML工具主要用于支持XML的类。要为类启用XML,需要将%XML.Adaptor添加到其超类列表中。%XML.Adaptor类使能够将该类的实例表示为XML文档。可以添加类参数和属性参数来微调投影。

对于启用了XML的类,数据可以采用以下所有形式:

  • 包含在类实例中。根据类的不同,还可以将数据保存到磁盘,在磁盘中数据可以像其他持久类一样以所有相同的方式使用。
  • 包含在XML文档中,可以是文件、流或其他文档。
  • 包含在DOM(文档对象模型)中。

下图概述了用于在这些表单之间转换数据的工具:

%XML.Writer类使能够创建XML文档。输出目的地通常是文件或流。确定要包括在输出中的对象,系统根据在类定义中建立的规则生成输出。

0
0 313
文章 姚 鑫 · 六月 6, 2021 2m read

Caché 网络实用工具

第一章 发送HTTP请求☆☆☆☆☆

第二章 设置和获取HTTP标头☆☆☆☆☆

第三章 发送HTTP请求☆☆☆☆☆

第四章 收发电子邮件☆

第五章 向邮件添加附件☆

第六章 从POP3服务器提取电子邮件☆

第七章 从POP3服务器提取电子邮件☆

第八章 处理收到的电子邮件☆

第九章 创建、编写和阅读MIME邮件☆

第十章 使用FTP☆☆☆☆☆

第十一章 发送和接收IBM WebSphere MQ消息☆

第十二章 IBM WebSphere MQ检索邮件☆

第十三章 使用SSH☆

第十四章 其他InterSystems %Net工具☆☆☆

第十五章 Caché WebSocket☆☆☆

前言

手册帮助程序员使用%Net包中的一些关键类,这些类为许多有用的Internet协议提供了易于使用的接口。因为这个包的类文档相当广泛,所以本手册提供了一个快速、有条理的概述,而不是深入研究每个参数、属性和方法。熟悉本手册中提到的协议和第三方工具。

预告

下一期系列将用一个月的时间连载,《Caché XML》,敬请期待。

交流群

大型免费课程,进群410039091获取课程目录

  • 适合所有阶段程序员,总有一款你遗漏的知识点!
0
0 205
文章 姚 鑫 · 六月 5, 2021 5m read

第七章 Caché JSON %JSON快速参考

%JSON快速参考

本节提供本章中讨论的%JSON方法、属性和参数的快速参考。

%JSON.Adaptor方法

这些方法提供了从JSON序列化和序列化到JSON的能力。

%JSONExport()

%JSON.Adaptor.%JSONExport()将启用JSON的类序列化为JSON文档,并将其写入当前设备。

   method %JSONExport(%mappingName As %String = "") as %Status
  • %mappingName(可选)-要用于导出的映射的名称。基本映射由"" 表示,并且是默认映射。

%JSONExportToStream()

%JSON.Adaptor.%JSONExportToStream()将启用`JSON的类序列化为JSON文档并将其写入流。

   method %JSONExportToStream(ByRef export As %Stream.Object, 
      %mappingName As %String = "") as %Status
  • export - 包含序列化的JSON文档的导出流。
  • %mappingName(可选)-要用于导出的映射的名称。基本映射由""表示,并且是默认映射。

%JSONExportToString()

0
0 324
文章 姚 鑫 · 六月 5, 2021 7m read

第六章 Caché JSON 使用JSON适配器

JSON适配器是一种将ObjectScript对象(registered, serial or persistent)映射到JSON文本或动态实体的方法。本章涵盖以下主题:

  • 导出和导入-介绍启用JSON的对象并演示%JSON.Adaptor导入和导出方法
  • 带参数映射-描述控制如何将对象属性转换为JSON字段的属性参数。
  • 使用扩展数据映射块-介绍将多个参数映射应用到单个类的方法。
  • 格式化JSON-演示如何使用%JSON.ForMatter格式化JSON字符串。
  • %JSON快速参考-提供本章中讨论的每个%JSON类成员的简要说明。

Exporting and Importing

从JSON序列化或序列化到JSON的任何类都需要子类%JSON.Adaptor,它包括以下方法:

  • %JSONExport()将启用JSON的类序列化为JSON文档,并将其写入当前设备。
  • %JSONExportToStream()将启用JSON的类序列化为JSON文档并将其写入流。
  • %JSONExportToString()将启用JSON的类序列化为JSON文档并将其作为字符串返回。
  • %JSONImport()将JSON作为字符串或流导入,或者作为%DynamicAbstractObject的子类导入,并返回启用JSON的类的实例。
0
0 252
文章 Hao Ma · 六月 4, 2021 3m read

之所以称为Dynamic,是说这个对象在代码编译的时候可以不定义对象的属性和结构,在runtime时才根据装入的数据来产生对象定义。IRIS里用Dynamic Object来处理JSON数据。简单说: 先定义一个Dynamic Object, 把JSON数据装进去,然后用对象的方式处理JSON文档。

让我们看看是它是怎么工作的。

创建一个Dynamic Object很简单, 标准而且啰嗦的写法是:

set dynObject1 = ##class(%DynamicObject).%New()

大家通常用简单的写法,像这样用一个{}来定义Dynamic Object:

DEMO>set dynObject1 = {}
DEMO>zw dynObject1
dynObject1={}  ; <DYNAMIC OBJECT>

字符串,流到DynamicObject的导入导出

把JSON数据从字符串或者流导入DynamicObject被称作Deserializing;反之,把DynamicObject里的JSON导出来到String或者Stream叫Serializing。在类%DynmicObject中用的是%FromJSON()和%ToJSON()两个方法,一个是类方法,一个是实例方法:

0
0 312
文章 姚 鑫 · 六月 3, 2021 10m read

第十五章 Caché WebSocket

使用WebSockets (RFC 6455)

web是围绕请求/响应范例构建的:客户机向服务器发送请求,服务器通过向客户机发送响应进行响应。此范式和HTTP本身不允许此通信协议的反向形式,即服务器与客户机启动请求/响应周期。已经开发了许多技术来解决了这个问题,即服务器可以启动与客户机的对话。这些技术通常被称为基于推送或 comet-based的技术,它们都存在不适合在web基础设施上进行全面部署的问题。目前使用的三种主要技术如下所述。

Short Polling 短轮询

使用这种技术,客户端定期发送HTTP请求来检测服务器状态的变化,服务器被编程为立即响应。空响应表示没有变化。

问题:

  • 轮询频率(和响应能力)受到客户机可以容忍的刷新延迟的限制。
  • 每个请求都是一个完整的HTTP请求/响应往返过程,这会导致大量的HTTP流量,而这又会给服务器和网络基础设施带来无法接受的负担
  • 每个消息交换都承载着HTTP协议的开销,如果消息大小超过了最大传输单元(MTU)(通常是以太网的1500字节),则会特别繁重。

Long Polling 长轮询

使用这种技术,客户端发送HTTP请求,但服务器只在需要通知客户端更改时才响应。客户端通常在服务器发送响应消息时发送另一个“长轮询”请求。

问题:

0
0 171
文章 姚 鑫 · 六月 2, 2021 2m read

第十四章 其他InterSystems %Net工具

下面是%Net中其他一些有用类的简短列表:

%Net.URLParser

InterSystems IRIS提供了一个实用程序类%Net.URLParser,可以使用它将URL字符串解析为其组成部分。例如,当您重定向HTTP请求时,这很有用。

该类包含一个类方法Parse(),它接受一个包含URL值的字符串,并通过引用返回一个包含URL各部分的数组。例如:

/// w ##class(PHA.TEST.HTTP).URLParser()
ClassMethod URLParser()
{
	Set url = "https://www.google.com/search?q=Java+site%3Adocs.intersystems.com&oq=Java+site%3Adocs.intersystems.com"
	Do ##class(%Net.URLParser).Parse(url,.components)
	zw components
}
0
0 150
文章 姚 鑫 · 六月 1, 2021 3m read

第十三章 使用SSH

%Net.SSH软件包支持SSH(安全外壳)通信。本主题简要介绍此包中的类。

创建SSH会话

%Net.SSH.Session表示SSH会话。要使用此类,请执行以下操作:

  1. 创建类的实例。
  2. 使用Connect()实例方法连接到服务器。
  3. 使用AuthenticateWithKeyPair()AuthenticateWithUsername()向服务器验证身份。
  4. 使用%Net.SSH.Session的其他方法执行进出远程系统的单个文件的SCP(安全复制)操作、执行远程命令、传输TCP通信或执行SFTP操作。

例如,使用SFTP将会话用于SFTP操作。此方法通过引用返回可用于SFTP操作的%Net.SSH.SFTP实例。

重要提示:有关可以使用这些类的受支持平台的信息,请参阅%Net.SSH.Session%Net.SSH.SFTP的类参考。

示例:通过SFTP列出文件

以下方法显示了如何通过SFTP在服务器上写入文件列表:

0
0 195
文章 Michael Lei · 六月 1, 2021 4m read

什么是 Data Fabric?

“这是一套用于在公司中实施、管控、管理和执行数据操作的硬件基础架构、软件、工具和资源,功能包括跨所有数据存储平台的数据采集、转换、存储、分发、整合、复制、可用性、安全性、保护、灾难恢复、演示、分析、保存、保留、备份、恢复、归档、召回、删除、监视和容量规划,并可使应用程序的使用满足公司的数据需求”。 (Alan McSweeney)

Data Fabric 是一种可利用包括多模型数据库、Analytics、AI、ESB/SOA、微服务和 API 管理在内的所有可用资源和技术创新来获取商业价值的新型数据操作方法。

Data Fabric 原则

Alan McSweeney 列出了以下 Data Fabric 使用原则:

0
0 397
问题 kun an · 五月 27, 2021

按照此网址的指示 https://gettingstarted.intersystems.com/language-quickstarts/java-quick… 下载quickstarts-java示例代码 运行xepplaystocktsTask1模块程序提示InterSystems XEP is not supported by the specified server 请问有人知道具体原因吗我的server有什么不对吗。

使用客户端的server manager添加server没有server类型的选项,是因为我使用的cache版本目前不支持吗

3
0 197
文章 姚 鑫 · 五月 31, 2021 4m read

第十二章 IBM WebSphere MQ检索邮件

检索邮件

要检索邮件,请执行以下操作:

  1. 按照“创建连接对象”中的说明创建连接对象。在这种情况下,请创建%Net.MQRecv的实例。Connection对象有一个消息队列,可以从中检索消息。
  2. 根据需要调用以下方法:
  • %Get()-通过引用返回字符串消息作为第一个参数。
  • %GetStream()-给定初始化的文件字符流,此方法从队列中检索消息,并将其放入与该流关联的文件中。请注意,必须设置流的Filename属性才能对其进行初始化。不支持二进制流。
  1. 检查调用的方法返回的值。请参阅“获取错误代码”。请记住,当队列为空时,IBM WebSphere MQ返回2033
  2. 检索完消息后,调用Connection对象的%Close()方法以释放动态链接库的句柄。

示例1:ReceiveString()

下面的类方法从mqtest队列检索消息。

0
0 213
文章 Hao Ma · 五月 31, 2021 6m read

HealthConnect中创建HTTP服务端

这里我说说怎么在HealthConnect上开发HTTP服务。

作为消息引擎,HealthConnect会需要从一个接口接收HTTP请求发送到另一个接口,中间做消息转换,路由等等,目的的接口可能是HTTP,或者SOAP,REST等等。这里只介绍HTTP服务的内容,也就是最简单的两种实现:

第一种:实现客户定制的HTTP服务业务服务组件(Business Servie)

创建Business Service类,继承EnsLib.HTTP.Service, 如下面的示例:

0
1 466
文章 Louis Lu · 五月 30, 2021 7m read

本文主要总结了在InterSystems IRIS 中如何保存、查询List类型数据

假设我们设计的对象中包含姓名,同时每个姓名下可以包含多个电话。我们可以使用下面方法进行处理。

1. 传统方式

我们可以把每一个姓名和电话放在不同列中。

Class Test.Person Extends %Persistent
{

Property Name As %String;

Property Phone As %String;

}

我们使用SQL语句插入数据:

insert into Test.Person values ('a','111-111-1111');

insert into Test.Person values ('b','222-111-1111');

insert into Test.Person values ('a','111-222-1111');

insert into Test.Person values ('c','333-111-1111');

insert into Test.Person values ('b','222-222-1111');

数据在表中是这样的:

0
0 259
问题 Michael Lei · 五月 24, 2021

您好,我想问一下为什么我无法通过Iris中的内置转换模板将从HAPI-FHIR服务器下载的患者资源转换为SDA格式。它总是表明缺少某个默认值,或者这就是我们需要更改格式吗?我想问一下我们如何快速创建自己的映射,以及如何通过json将所需的数据转换为sda并将其存储在iris中,然后我们可以通过齐柏林飞艇进行调用,非常感谢您解决我的问题问题

1
0 219
文章 姚 鑫 · 五月 30, 2021 8m read

第十一章 发送和接收IBM WebSphere MQ消息

InterSystems IRIS为IBM WebSphere MQ提供了一个接口,可以使用该接口在InterSystems IRIS和IBM WebSphere MQ的消息队列之间交换消息。要使用此接口,必须能够访问IBM WebSphere MQ服务器,并且IBM WebSphere MQ客户端必须与InterSystems IRIS在同一台计算机上运行。

该接口由%Net.MQSend%Net.MQRecv类组成,这两个类都是%Net.abstractMQ的子类。这些类使用由InterSystems IRIS在所有合适的平台上自动安装的动态链接库。(这是Windows上的MQInterface.dll;其他平台的文件扩展名不同。)。反过来,InterSystems IRIS动态链接库需要IBM WebSphere MQ动态链接库。

该界面仅支持发送和接收文本数据,不支持二进制数据。

使用IBM WebSphere MQ的RIS接口

通常,要使用IBM WebSphere MQ的InterSystems IRIS接口,请执行以下操作:

  1. 确保有权访问IBM WebSphereMQv7.x或更高版本。具体而言:
0
0 492
文章 姚 鑫 · 五月 29, 2021 4m read

第十章 使用FTP

IRIS提供了一个类%Net.FtpSession,可以使用它从InterSystems IRIS内建立与FTP服务器的会话。

建立FTP会话

要建立FTP会话,请执行以下操作:

  1. 创建%Net.FtpSession的实例。
  2. 可以选择设置此实例的属性,以控制会话的常规行为:
  • Timeout 超时指定等待FTP服务器回复的时间(以秒为单位)。
  • SSLConfiguration指定用于连接的激活的SSL/TLS配置(如果有)。如果FTP服务器使用HTTPS,请使用此选项。
  • TranslateTable指定在读取文件内容或写入文件内容时要使用的转换表。
  • UsePASV启用PASV模式。
  • FTP服务器使用https时,SSLCheckServerIdentity适用。默认情况下,当%Net.FtpSession的实例连接到SSL/TLS服务器时,它会检查证书服务器名称是否与用于连接到服务器的DNS名称匹配。如果这些名称不匹配,则不允许连接。

若要禁用此检查,请将SSLCheckServerIdentity属性设置为0。

  1. 调用Connect()方法以连接到特定的FTP服务器。
  2. 调用ascii()binary()方法将传输模式分别设置为ASCII模式或二进制模式。要查看当前传输模式,请检查实例的Type属性的值。
0
0 297
文章 姚 鑫 · 五月 28, 2021 5m read

第九章 创建、编写和阅读MIME邮件

Iris提供了一个可以用于创建MultiPart Mime消息(%Net.MimePart)的类。创建要添加到SOAP消息的附件时,请使用此类;请参阅创建Web服务和Web客户端。因为MIME是一个常见的标准,所以有许多其他可能的应用程序,例如电子邮件处理和HTTP Multipart Post。

MIME消息概述

MIME格式的文档被称为MIME部分。每个MIME部件都有标题,包含邮件正文(文本或二进制)或包含额外的MIME部件。具有MIME版本标题的MIME部分可以用作顶级文档,称为MIME消息。下图显示了示例:

在该示例中,EF具有未显示的附加子部分。

要表示MIME部件,请使用 %Net.MIMEPart类,该类提供用于设置零件的标题和内容的属性。

创建MIME部分

要创建一个MIME部件,执行以下步骤:

  1. 创建%Net.MIMEPart的实例。
  2. 做以下其中一项:
  • 添加文本或二进制正文。为此,请创建流(文本或二进制)的实例,并将MIME部分的Body属性设置为等于该流。使用标准流接口将数据写入此流。不要为Parts属性指定值。
  • 添加MIME部件列表。为此,请按此处所述创建MIME部件,并将Parts属性设置为等于这些部件的列表。不要为Body属性指定值。
  1. 可以选择按照“设置和获取MIME部件标头”中的说明设置标头。

设置和获取MIME部件标头

0
0 205
文章 姚 鑫 · 五月 27, 2021 5m read

第八章 处理收到的电子邮件

处理收到的电子邮件

本节介绍如何处理通过%Net.POP3检索到的电子邮件(%Net.MailMessage)。

Message Basics

检索电子邮件(%Net.MailMessage)后,通常首先确定它是哪种类型的邮件以及如何阅读它;也就是说,它是否是多部分邮件以及各部分是否是二进制的。在此步骤中,您可以使用ContentType属性。或者,可以使用IsBinaryIsHTMLIsMultiPart属性,它们间接提供与contentType相同的信息。

如果消息是多部分消息,则每个部分都是%Net.MailMessagePart的一个实例。

Message Headers

消息本身和消息的每个部分都有一组标头。

%Net.MailMessage%Net.MailMessagePart类提供的属性使可以轻松访问最常用的标头。例如,%Net.MailMessage提供收件人、发件人、主题和日期等属性。Headers数组属性允许访问任何自定义标题.

此外,如果已通过%Net.POP3检索到消息,则可以使用GetAttribute()方法。在给定标头名称和属性的情况下,此方法返回该属性的值。

Message Contents

了解常规消息结构后,请使用以下技术检索内容:

0
0 201
问题 Michael Lei · 五月 24, 2021

单位cache2016.2用rose做的双机,数据库放在阵列上,通过rose切换挂载同一个阵列磁盘,本质上是一个实例,另外做了个mirror机。

这样的结构在容灾备份上有什么问题没,希望给点建议。谢谢

1
0 245
文章 姚 鑫 · 五月 26, 2021 6m read

第七章 从POP3服务器提取电子邮件

将附件另存为文件

Content-Disposition标头可以指定附件,可以带文件名,也可以不带文件名。例如:

Content-Disposition: attachment; filename=genome.jpeg;

如果Content-Disposition标头确实指定了附件,则%Net.POP3实例可以将邮件中的所有附件保存到文件。要实现这一点,请执行以下操作:

  1. 指定%Net.POP3实例的以下属性:
  • StoreAttachToFile指定为%1
  • StoreInlineToFile指定为%1
  • AttachDir指定有效目录。根据操作系统的不同,确保使用斜杠(/)或反斜杠(\)结束目录名称。还要确保该目录已经存在,并且用户对其具有写访问权限。
  1. 调用%Net.POP3实例的Fetch()FetchMessage()

每个文件名的确定方式如下:

  1. 如果Content-Disposition标头指定了文件名,则使用该文件名。
  2. 否则,如果Content-Type标头指定了文件名,则使用该文件名。
  3. 否则,系统将创建格式为ATTxxxxx.dat的名称。

请注意以下几点:

0
0 190
问题 Michael Lei · 四月 21, 2021

嗨,社区,

我正在尝试访问对象的另一个进程的内容,例如%request和%session。我正在使用类/方法“%SYS.ProcessQuery:VariableByPid”。有谁知道如何从数据库服务器上运行的一个进程中获取诸如%request.Data(“ ID”,1)之类的属性的值?

我想做的例子:

        set rs=##class(%ResultSet).%New("%SYS.ProcessQuery:VariableByPid")
        set tsc=rs.Execute(ProcessID,"%request")
        while rs.%Next() { 
            w "Name:"_$g(rs.Data("Name")),!
             w "Value:"_$g(rs.Data("Value")),!
        }
        do rs.Close()

Output:

Name:%request
Value:1@%CSP.Request

我只是可以看到对象引用1@%CSP.Request,我不确定我们是否有办法检查对象属性。

谢谢,

丹尼尔

Hi Community,

1
0 232