为Caché 进行 Prometheus 监控时,配置好应用程序/metrics, Prometheus配置文件配置完成后,抓取不到cache监控数据,提示“server returned HTTP status 404 Not Found”。请问是什么原因?
第十章 XML元素和属性
检查必需的元素和属性
默认情况下,next()方法不检查是否存在与标记为必需的属性相对应的元素和属性。要使读取器检查此类元素和属性是否存在,请在调用Next()之前将读取器的CheckRequired属性设置为1。出于兼容性原因,此属性的默认值为0。
如果将CheckRequired设置为1,并且调用next(),而导入的XML缺少必需的元素或属性,则next()方法会将sc参数设置为错误代码。例如:
SAMPLES>set next= reader.Next(.object,.status)
SAMPLES>w next
0
SAMPLES>d $system.Status.DisplayError(status)
ERROR #6318: Property required in XML document: ReqProp
处理意外的元素和属性
由于源XML文档可能包含意外的元素和属性,因此%XML.Adaptor提供参数来指定导入此类文档时的反应方式。
控制如何导入空元素和属性
为对象启用XML时,需要指定将空值和空字符串投影到XML的方式
其中一个选项是在支持XML的类中将XMLIGNORENULL设置为等于“Runtime”(不区分大小写)。在这种情况下,当使用%XML.
cache的webservice soap不会消耗license,csp要怎样也能不消耗license?
https://openexchange.intersystems.com/package/sql-rest-api
https://openexchange.intersystems.com/package/ObjectScript-Package-Mana… (ZPM is the most useful tool for installing Open Exchange Applications
https://openexchange.intersystems.com/package/zpm-registry This will show you a list of OEX apps that are zpm ready
https://github.com/robtweed/qewd
but also look at the QEWD-related postings I've put in here on Open Exchange:
https://openexchange.intersystems.com/package/QEWD-js
https://openexchange.intersystems.com/package/qewd-jsdb-kit-iris
第九章 将XML导入到对象中
本章介绍如何使用%XML.Reader将XML文档导入到 IRIS对象中。
注意:使用的任何XML文档的XML声明都应该指明该文档的字符编码,并且文档应该按照声明的方式进行编码。如果未声明字符编码, IRIS将使用前面的“输入和输出的字符编码”中描述的默认值。如果这些默认值不正确,请修改XML声明,使其指定实际使用的字符集。
还可以使用%XML.Reader读取任意XML文档并返回DOM(文档对象模型)。
创建XML读取器概述
IRIS提供了一些工具,用于读取XML文档并创建与该文档的元素相对应的启用XML的 IRIS对象的一个或多个实例。基本要求如下:
- 该对象的类定义必须扩展
%XML.Adaptor。除了少数例外,该对象引用的类还必须扩展%XML.Adaptor。
提示:如果相应的XML模式可用,可以使用它来生成类(以及任何支持的类)。
- 要导入XML文档,创建
%XML.Reader的实例,然后调用该实例的方法。这些方法指定XML源文档,将XML元素与启用XML的类相关联,并将源中的元素读取到对象中。
%XML.Reader使用类中的%XML.Adaptor提供的方法执行以下操作:
- 它使用InterSystems IRIS SAX接口解析和验证传入的XML文档。验证可以包括DTD或XML架构验证。
为了解国内外最新的互联互通标准,共同助推我国卫生信息互联互通标准化成熟度测评工作,指导各地医院信息平台的建设,《中国卫生信息管理杂志》社决定召开国内外互联互通标准解读与实践线上交流会。会议由《中国卫生信息管理杂志》社主办,InterSystems中国协办,欢迎报名参会!
IRISHealth-2019.1.0.510.4 能在 CentOS 7.5上部署吗?
InterSystems非常高兴地宣布,InterSystems IRIS数据平台、InterSystems IRIS for Health和HealthShare Health Connect的2021.1版本现已向我们的客户和合作伙伴全面开放。
这个版本的为开发者提供了更大的自由度,使他们可以用自己选择的编程语言在服务器端和客户端建立快速和强大的应用程序。这个版本还使用户能够通过新的和更快的分析能力更有效地消费大量的信息。
第八章 Other Options of the Writer
Other Options of the Writer
Canonicalize()
方法的作用是:以规范化的形式编写XML节点。此方法具有以下签名:
method Canonicalize(node As %XML.Node, ByRef PrefixList, formatXML As %Boolean = 0) as %Status
node是文档的一个子树,作为%XML.Node的实例。PrefixList是以下其中之一:- 对于包含式规范化,将
PrefixList指定为“c14n”。 在本例中,输出的形式是XML Canonicalization Version 1.0,由https://www.w3.org/TR/xml-c14n。 - 对于排他规范化,将
PrefixList指定为具有以下节点的多维数组:
- 对于包含式规范化,将
| Node | Value |
|---|---|
PrefixList(前缀),其中前缀是名称空间前缀 |
与此名称空间前缀一起使用的名称空间 |
FormatXML控制格式。如果format XML为true,则编写器使用为编写器实例指定的格式,而不是XML规范化规范指定的格式。因此,输出不是规范的XML,但是已经对规范的XML进行了命名空间处理。
本帖概述了通过为 InterSystems 数据平台(InterSystems IRIS、Caché 和 Ensemble)上的数据库磁盘创建 LVM 物理盘区 (PE) 条带来实现低延迟存储 IO 的最佳实践配置,并提供了有用链接。
一致的低延迟存储是获得最佳数据库应用程序性能的关键。 例如,对于在 Linux 上运行的应用程序,经常在数据库磁盘中使用逻辑卷管理器 (LVM) ,因为它能够扩展卷和文件系统,或者为在线备份创建快照。 对于数据库应用程序,在使用 LVM PE 条带化逻辑卷的情况下,并行写入还可提高数据 I/O 的效率,从而有助于提高大规模连续读取和写入的性能。
第六章 控制名称空间的使用
控制名称空间的使用
如将对象投射到XML中所述,可以将类分配给名称空间,以便相应的XML元素属于该名称空间,还可以控制类的属性是否也属于该名称空间。
将类中的对象导出为XML时,%XML.Write提供其他选项,例如指定元素是否为其父级的本地元素。本节包括以下主题:
- 默认情况下,
%XML.Writer如何处理命名空间 - 如何指定本地元素是否合格
- 如何指定元素是否为其父元素的本地元素
- 如何指定属性是否合格
- 命名空间分配方式的摘要
注意:在InterSystems IRIS XML支持中,可以按类指定名称空间。通常,每个类都有自己的命名空间声明;但是,通常只需要一个或少量的命名空间。还可以在逐个类的基础上指定相关信息(而不是以某种全局方式)。这包括控制元素是否为其父元素的本地元素以及子元素是否合格的设置。为简单起见,建议使用一致的方法。
名称空间的默认处理
若要将启用XML的类分配给命名空间,请设置该类的Namespace参数,如将对象投影到XML中所述。在%XML.Writer会自动插入命名空间声明,生成命名空间前缀,并在适当的地方应用前缀。例如,以下类定义:
Class GXML.Objects.WithNamespaces.Person Extends (%Persistent, %Populate, %XML. 第五章 生成XML元素
生成XML元素
如果使用RootElement()启动文档的根元素,则负责生成该根元素内的每个元素。有三个选择:
将对象生成为元素
可以从InterSystems IRIS对象生成输出作为元素。在本例中,使用object()方法,该方法写入支持XML的对象。输出包括该对象中包含的所有对象引用。可以指定此元素的名称,也可以使用在对象中定义的默认值。
只能在RootElement()和EndRootElement()方法之间使用object()方法。
此示例为给定启用XML的类的所有已保存实例生成输出:
/// desc:将表里数据输出本地文件里
/// w ##class(PHA.TEST.Xml).WriteAll("Sample.Person")
ClassMethod WriteTableAllToXml(cls As %String = "", directory As %String = "E:\temp\")
{
if '##class(%Dictionary.CompiledClass).%ExistsId(cls) {
Write !, "类不存在或未编译"
Quit
}
s check=$classmethod(cls, "%Extends", "%XML. 第四章 添加命名空间声明
添加命名空间声明
默认行为
在%XML.Writer会自动插入命名空间声明,生成命名空间前缀,并在适当的地方应用前缀。例如,以下类定义:
Class Sample.Person Extends (%Persistent, %Populate, %XML.Adaptor)
{
Parameter NAMESPACE = "http://www.yaoxin.com";
}
如果导出此类的多个对象,则会看到类似以下内容:
DHC-APP> w ##class(Demo.XmlDemo).Obj2Xml(1)
yaoxin
111-11-1117
1990-04-25
889 Clinton Drive
St Louis
WI
78672
9619 Ash Avenue
Ukiah
AL
56589
濮氶懌
111-11-1115
Red
Orange
Yellow
Green
Red
Orange
Yellow
31
名称空间声明会自动添加到每个 元素。只将其添加到文档的根目录。
手动添加声明
可以控制何时将命名空间引入XML输出。
第三章 指定输出的字符集
指定输出的字符集
若要指定要在输出文档中使用的字符集,可以设置Writer实例的Charset属性。选项包括“UTF-8”、“UTF-16”以及InterSystems IRIS支持的其他字符集。
Writing the Prolog
XML文件的序言(根元素之前的部分)可以包含文档类型声明、处理指令和注释。
影响Prolog的属性
在writer实例中,以下属性会影响prolog:
Charset
控制两件事:XML声明中的字符集声明和(相应的)输出中使用的字符集编码。
NoXmlDeclaration
控制输出是否包含XML声明。在大多数情况下,默认值是0,这意味着已经编写了声明。如果没有指定字符集,并且输出定向到字符串或字符流,则默认为1,并且不写入任何声明。
生成文档类型声明
在根元素之前,可以包含文档类型声明,该声明声明了文档中使用的模式。
要生成文档类型声明,需要使用WriteDocType()方法,该方法有一个必选参数和三个可选参数。
就本文档而言,文档类型声明包括以下可能的部分:
如这里所示,文档类型有一个名称,根据XML规则,该名称必须是根元素的名称。 声明可以包含外部子集、内部子集或两者。
external_subset 部分指向其他地方的DTD文件。
请问cahce中所有的数据库访问都是通过cache server完成的吗,比如使用终端访问数据库、studio开发的应用、使用第三方库使用代码都是先访问cache server,然后通过cache server对数据进行存取的吗?使用studio开发的应用程序也是跑在cache server中吗? 如果是的话studio开发的应用程序(比如web程序)如何跟cache server分开部署呢?
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格式的选项。
门诊医生工作站是帮助医生规范和高效的完成日常处方、病历书写、结果查询、会诊转诊等一系列诊疗行为的综合应用平台。该平台以电子病历为中心,内置常用模版和术语库;与医嘱系统、实验室系统、影像系统等相联通,为医生提供便捷、快速的辅助工具。
然而,日渐增长的患者数量、逐步扩大的职责范围和频繁添加的系统功能,都对医生的工作密度和强度造成影响。传统模式化的交互页面无法精准应对复杂多变的临床场景,且难以满足医生的个性化需求。
说到医院信息系统(EHR)的“个性化需求”,就不得不提到国际知名调研组织KLAS在2019年发布的The Arch Collaborative项目报告。该项目在179家已经部署EHR的医疗机构中,采取问卷和访谈的形式,通过对收集到的八万余份回复进行分析,得出如下结论:1)决定EHR应用功效的首要因素是医务人员(占所有因素的60%),2)决定医务人员EHR满意度的首要因素是可否满足个性化需求(占所有因素的32%);3)医务人员EHR满意度高的医疗机构无一例外的开展了严格的用户培训、进行了充分的上线前交流、实施了细致的个性化配置;4)部分在上线初期医务人员EHR满意度较低的医疗机构,采纳上述改进方案后,满意度提升了80%以上。
很多EHR已经将“个性化配置”列入其产品改进计划的重要部分,并且“医嘱偏好”、“诊断偏好”、“病历模板”等功能的出现,可以满足医务人员对“个性化”的一部分需求。
第二章 从对象写入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. 第一章 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文档。输出目的地通常是文件或流。确定要包括在输出中的对象,系统根据在类定义中建立的规则生成输出。
%XML.Reader类使能够将合适的XML文档导入到类实例中。
如果您在升级了系统之后,打开SMP时看到如下报错,
ERROR #5001: 对象的服务器版本与客户端发送的版本不一致: %ZEN.Component.vgroup
一般情况下,这个报错是由浏览器缓存中残留的过期信息造成的,可以通过清除浏览器缓存来解决。
如果清除浏览器缓存之后仍然未能解决此问题,请您前往系统安装目录, 如:d:\InterSystems\IRIS\CSP\broker,查看css/js文件的时间戳在本次更新安装之后是否并没有相应地更新,如果没有,请您做以下尝试,
1)在IRIS中更改数据库IRISLIB, 之前的版本是CACHELIB, 取消只读装载,方法如下,打开管理门户SMP, 系统管理->配置->本地数据库,选择要更改的数据库,取消"只读方式挂载",点击【保存】。
2)重新编译%Zen组件,
w ##class(%SYSTEM.OBJ).Compile("%ZEN.Component.vgroup")
此时,再次前往,d:\InterSystems\IRIS\CSP\broker,会看到相关的css/js文件时间戳已经更新。
3)恢复上述数据库的只读装载。
如果以上办法仍然未能解决您的问题,建议您联系WRC,寻求Support的进一步帮助。
.png)
这是一个系列的第一篇文章。我将使用bpmn符号提供细节,如何开发、部署、保护、运营和消费IRIS数字服务,并与IRIS文档相联系。每一个子流程都将用一个单独的bpmn图来描述。这就是宏观过程。
Documentation links:
1. https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=PAGE_data_science
2. https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=D2GS
3. https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=PAGE_rest_json, https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=PAGE_soap
4. https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=PAGE_multimodel
5. https://docs.intersystems.com/irislatest/csp/docbook/Doc.
新安装的cache在本地可以连接terminal,外部主机连接不上,网络通畅,可以连接studio,端口telnet 23端口不通
ensemble提供的soap服务如何自定义URL地址
如将mirror主机转为生产机:详细操作步骤或命令
Caché 网络实用工具
第一章 发送HTTP请求☆☆☆☆☆
第二章 设置和获取HTTP标头☆☆☆☆☆
第三章 发送HTTP请求☆☆☆☆☆
第四章 收发电子邮件☆
第五章 向邮件添加附件☆
第六章 从POP3服务器提取电子邮件☆
第七章 从POP3服务器提取电子邮件☆
第八章 处理收到的电子邮件☆
第九章 创建、编写和阅读MIME邮件☆
第十章 使用FTP☆☆☆☆☆
第十一章 发送和接收IBM WebSphere MQ消息☆
第十二章 IBM WebSphere MQ检索邮件☆
第十三章 使用SSH☆
第十四章 其他InterSystems %Net工具☆☆☆
第十五章 Caché WebSocket☆☆☆
前言
手册帮助程序员使用%Net包中的一些关键类,这些类为许多有用的Internet协议提供了易于使用的接口。因为这个包的类文档相当广泛,所以本手册提供了一个快速、有条理的概述,而不是深入研究每个参数、属性和方法。熟悉本手册中提到的协议和第三方工具。
预告
下一期系列将用一个月的时间连载,《Caché XML》,敬请期待。
交流群
- QQ群号:410039091
- 笔者QQ:454115408
- 公众号:技术理科直男
- intersys版主:姚鑫
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f9VqwzNP-1608850948003)(3E1D939266954ED48BDAEA9B8086B11E)]](https://img-blog.csdnimg.cn/20201225070433434.png)
大型免费课程,进群410039091获取课程目录
- 适合所有阶段程序员,总有一款你遗漏的知识点!

第七章 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()
%JSON.Adaptor.
第六章 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的类的实例。
之所以称为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={} ;
字符串,流到DynamicObject的导入导出
把JSON数据从字符串或者流导入DynamicObject被称作Deserializing;反之,把DynamicObject里的JSON导出来到String或者Stream叫Serializing。在类%DynmicObject中用的是%FromJSON()和%ToJSON()两个方法,一个是类方法,一个是实例方法:
//从字符串,流里导入数据到%DynmicObject。 第十五章 Caché WebSocket
使用WebSockets (RFC 6455)
web是围绕请求/响应范例构建的:客户机向服务器发送请求,服务器通过向客户机发送响应进行响应。此范式和HTTP本身不允许此通信协议的反向形式,即服务器与客户机启动请求/响应周期。已经开发了许多技术来解决了这个问题,即服务器可以启动与客户机的对话。这些技术通常被称为基于推送或 comet-based的技术,它们都存在不适合在web基础设施上进行全面部署的问题。目前使用的三种主要技术如下所述。
Short Polling 短轮询
使用这种技术,客户端定期发送HTTP请求来检测服务器状态的变化,服务器被编程为立即响应。空响应表示没有变化。
问题:
- 轮询频率(和响应能力)受到客户机可以容忍的刷新延迟的限制。
- 每个请求都是一个完整的
HTTP请求/响应往返过程,这会导致大量的HTTP流量,而这又会给服务器和网络基础设施带来无法接受的负担 - 每个消息交换都承载着
HTTP协议的开销,如果消息大小超过了最大传输单元(MTU)(通常是以太网的1500字节),则会特别繁重。
Long Polling 长轮询
使用这种技术,客户端发送HTTP请求,但服务器只在需要通知客户端更改时才响应。客户端通常在服务器发送响应消息时发送另一个“长轮询”请求。
第十四章 其他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
}
DHC-APP>w ##class(PHA.TEST.HTTP).URLParser()
components("fragment")=""
components("host")="www.google.com"
components("netloc")="www.google.
