嗨,开发者们!
在这篇文章中,我们想告诉你如何充分利用开发者社区,从InterSystems的技术专家那里学到尽可能多的东西!

请注意这些步骤,以成为我们社区的高级用户!
嗨,开发者们!
在这篇文章中,我们想告诉你如何充分利用开发者社区,从InterSystems的技术专家那里学到尽可能多的东西!

请注意这些步骤,以成为我们社区的高级用户!
开发者们好!
这是我们在2021年6月改进开发者社区的一个版本。主要特点是。
改进的月度摘要
直接信息的全新设计(包括新功能)。
请看下面的细节。
XPath(XML路径语言)是一种基于XML的表达式语言,用于从XML文档获取数据。使用类中的%XML.XPATH.Document,可以轻松地计算XPath表达式(给定提供的任意XML文档)。
注意:使用的任何XML文档的XML声明都应该指明该文档的字符编码,并且文档应该按照声明的方式进行编码。如果未声明字符编码,InterSystems IRIS将使用本书前面的“输入和输出的字符编码”中描述的默认值。如果这些默认值不正确,请修改XML声明,使其指定实际使用的字符集。
要使用InterSystems IRIS XML支持使用任意XML文档计算XPath表达式,请执行以下操作:
%XML.XPATH.Document的实例。为此,请使用以下类方法之一:CreateFromFile()、CreateFromStream()或CreateFromString()``。使用这些方法中的任何一种,都可以将输入XML文档指定为第一个参数,并接收%XML.XPATH.Document的一个实例作为输出参数。这一步使用内置的XSLT处理器解析XML文档。
%XML.XPATH.Document实例的EvaluateExpression()方法。对于此方法,需要指定节点上下文和要计算的表达式。为什么我用webservice上传文件比csp上传文件快?
webservice用的soap协议也得走http呀。csp直接处理http,少了xml的封装,按理来说应该更快。
经测试,1M的文件,csp慢了0.1s左右。在网关连接到1972后,有0.1s左右的停滞,不知道原因。
有什么办法能够使csp的文件上传速度比webservice快吗?
要在文档中导航,请使用文本阅读器的以下方法:Read()、ReadStartElement()、MoveToAttributeIndex()、MoveToAttributeName()、MoveToElement()、MoveToContent()和Rewind()。
要移动到文档中的下一个节点,请使用read()方法。Read()方法返回TRUE值,直到没有更多节点可读为止(即,直到到达文档末尾)。前面的示例在如下所示的循环中使用了此方法:
While (textreader.Read()) {
...
}
可以移动到文档中特定元素的第一个匹配项。为此,请使用ReadStartElement()方法。除非找不到元素,否则此方法返回TRUE。如果未找到该元素,则该方法到达文件末尾。
ReadStartElement()方法有两个参数:元素的名称和命名空间URI(可选)。请注意,类中的%XML.TextReader不会对命名空间前缀进行任何处理。因此,ReadStartElement()方法将以下两个元素视为具有不同的名称:
<Person>Smith,Ellen W. xmlns="http://www.下载网址:
https://hub.docker.com/r/yape/yape/
$ docker container run --rm -v "$(pwd)":/data yape/yape --version yape 2.2.6
在以下网址查看自述文件:
https://github.com/murrayo/yape
更改包括:
现在,GitHub 和容器保持同步。
如前所述,类中的%XML.TextReader解析XML文档并创建一个text reader对象,该对象由一组与文档组件相对应的节点组成;节点类型在本章前面的“文档节点”中进行了描述。
当将焦点更改到其他节点时,text reader对象的属性将更新,以包含有关当前检查的节点的信息。本节介绍类中%XML.TextReader的所有属性。
如果当前节点是元素或属性,则此属性指示元素的属性数。在给定元素中,第一个属性编号为1。对于任何其他类型的节点,此属性为0。
指示文档中当前节点的深度。根元素位于深度1;根元素之外的项位于深度0。请注意,属性与其所属元素的深度相同。同样,错误或警告与导致错误或警告的项的深度相同。
如果读取器已到达源文档的末尾,则为true;否则为false。
如果当前节点是一个元素,则如果该元素具有属性,则此属性为true(如果没有属性,则为false)。如果当前节点是属性,则此属性为true。对于任何其他类型的节点,此属性为False。
如果当前节点是具有值的节点类型(即使该值为空),则为True。否则,此属性为false。
%XML.TextReader类提供了一种简单、容易的方法来读取可能直接映射到InterSystems IRIS对象,也可能不直接映射到InterSystems IRIS对象的任意XML文档。具体地说,该类提供了导航格式良好的XML文档并查看其中信息(元素、属性、注释、名称空间URI等)的方法。该类还基于DTD或XML架构提供完整的文档验证。但是,与%XML.Reader不同的是,%XML.TextReader不提供返回DOM的方法。如果需要DOM,请参阅前面的“将XML导入对象”一章。
注意:使用的任何XML文档的XML声明都应该指明该文档的字符编码,并且文档应该按照声明的方式进行编码。如果未声明字符编码,InterSystems IRIS将使用前面的“输入和输出的字符编码”中描述的默认值。如果这些默认值不正确,请修改XML声明,使其指定实际使用的字符集。
Text Reader方法要读取不一定与 IRIS对象类有任何关系的任意XML文档,可以调用%XML.TextReader类的方法,该类将打开文档并将其作为文本阅读器对象加载到临时存储中。文本阅读器对象包含一个可导航的节点树,每个节点都包含有关源文档的信息。然后,方法可以导航该文档并查找有关该文档的信息。对象的属性提供有关文档的信息,这些信息取决于在文档中的当前位置。
本章介绍如何向XML文档添加数字签名。
数字签名的XML文档包括一个或多个<Signature>元素,每个元素都是数字签名。
每个<Signature>元素对文档中的特定元素进行如下签名:
<Person xmlns="http://mynamespace" Id="123456789">
<Signature>元素包含一个<Reference>元素,它指向该Id,如下所示:<Reference URI="#123456789">
<Signature>元素是由私钥签名的。此元素包括由签名机构签署的X.509证书。如果已签名文档的接收方信任此签名机构,则接收方可以验证证书,并使用包含的公钥验证签名。
注意: IRIS还支持一种变体,其中有签名的元素有一个名为ID的属性,而不是ID。
下面是一个示例,为了便于阅读,添加了空格:
<?xml version="1.0" encoding="UTF-8"?除了控制命名空间分配外,还可以控制命名空间分配在XML输出中的显示方式。具体地说,可以控制以下内容:
将元素和属性分配给命名空间时,XML中有两种等效的表示形式,由编写器实例的SuppressXmlns属性控制。
为一个名为Person的对象生成XML输出,该对象被分配给名称空间“http://www.person.org”(通过前面讨论的namespace类参数)。
使用缺省输出(SuppressXmlns等于0)的示例如下:
<Person xmlns="http://www.person.com" GroupID="4">
<Name>Uberoth,Amanda Q.</Name>
<DOB>1952-01-13</DOB>
</Person>
另一种可能的形式完全相同,如下所示。
这是使用SuppressXmlns等于1生成的,它确保显式分配给名称空间的每个元素都显示为该名称空间的前缀。
<s01:Person xmlns:s01="http://www.person.com" GroupID="4">
<s01:Name>Uberoth,Amanda Q.本章介绍如何加密XML文档。
提示:发现在此命名空间中启用SOAP日志记录非常有用,这样就可以收到有关任何错误的更多信息。
加密的XML文档包括以下元素:
<EncryptedData>元素,其中包含由随机生成的对称密钥加密的加密数据。(使用对称密钥加密比使用公钥加密更有效。)<EncryptedKey>元素。每个<EncryptedKey>元素携带用于加密数据的对称密钥的加密副本;它还包含一个带有公钥的X.509证书。拥有匹配私钥的接收方可以解密对称密钥,然后解密<EncryptedData>元素。<?xml version="1.0" encoding="utf-8"?>
<Container xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptedKey>
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p">
<DigestMethod xmlns="http://www.w3.org/2000/09/xmldsig#" Algorithm="http://www.w3.要创建DOM或修改现有DOM,请使用%XML.Document的以下方法在:
classmethod CreateDocument(localName As %String,
namespace As %String)
as %XML.Document
在仅包含根元素的返回%XML.Document新实例。
method AppendCharacter(text As %String)
将新的字符数据节点追加到此元素节点的子节点列表中。当前节点指针不变;此节点仍然是追加的子节点的父节点。
method AppendChild(type As %String)
将新节点追加到此节点的子节点列表中。当前节点指针不变;此节点仍然是追加的子节点的父节点。
部分 Ansible 帮助我解决了快速部署 Caché 和应用程序组件以进行数据平台基准测试的问题。 您可以使用相同的工具和方法来建立您的测试实验室、培训系统、开发或其他环境。 如果在客户站点部署应用程序,可以将大量部署自动化,并确保系统、Caché 和应用程序的配置符合您的应用程序最佳做法标准。
一位客户请求估计使用 cvencrypt 实用工具加密一个数据库需要多久。
这个问题有点像问一根绳子有多长 — 视情况而定。 但这是一个有趣的问题。 答案主要取决于客户使用的目标平台上的 CPU 和存储的性能,因此答案更关乎的是提出一个简单方法,可以在运行 cvencrypt 时使用该方法对 CPU 和存储进行基准测试。
注(2019 年 6 月):许多内容发生了变化,最新的详细信息请参见此处 注(2018 年 9 月):自本帖首次发布以来,内容已经有了很大改动,我建议使用 Docker 容器版本,以容器形式运行的项目以及详细信息仍然在 GitHub 的同一个地址发布,您可以下载、运行并根据需要进行修改。
与客户合作进行性能评估、容量规划和故障排除时,我经常解包和查看来自 pButtons 的 Caché 和操作系统指标。 我不久前发布了一个帖子,介绍了一个用来解包 pButtons 指标的实用工具(该实用工具使用 unix shell、perl 和 awk 脚本编写),而不是费力地浏览 html 文件,再将需要绘制的部分剪切并粘贴到 excel 中。 虽然这是一个有用的省时工具,但还不够完善... 我还使用脚本自动绘制指标图表,以便快速查看并包含在报告中。 但是,这些绘图脚本不容易维护,并且当需要站点特定的配置(例如 iostat 或 Windows perfmon 的磁盘列表)时会变得特别混乱,所以我从未公开发布过绘图实用工具。 不过我现在可以很高兴地说,已经有了简单得多的解决方案。
当我与 Fabian 一起在客户站点查看系统性能时,有了意外发现,他向我展示了使用实用的 Python 绘图模块所做的工作。
InterSystems 数据平台包括了用于系统监视和警报的实用程序及工具,但对于不熟悉构建于 InterSystems 数据平台(又名 Caché)的解决方案的系统管理员来说,他们需要知道从何处下手以及需要配置什么。
本指南以在线文档和开发者社区帖子为参考,介绍了实现最低限度的监视和警报解决方案的途径,以及如何启用和配置以下组件:
我在用.net通过ODBC连接cache数据库,OdbcConnection connection = new OdbcConnection(dbConnection);connection.Open();打开链接时报这错,请教大佬们,这应该怎么解决吗?不胜感激!
亲爱的社区开发者们,大家好!
你可能已经听说过Discord,很多人或许已经是Discord的资深用户了。此刻我们邀请您走近InterSystems技术的世界,加入我们的开发人员社交俱乐部!
用一种超级便捷的方式交流沟通:
可以使用%XML.Node的以下方法。以检查当前节点的属性。
AttributeDefined() 如果当前元素具有具有给定名称的属性,则返回非零(TRUE)。FirstAttributeName() 返回当前元素的第一个属性的属性名称。GetAttributeValue() 返回给定属性的值。如果元素没有该属性,则该方法返回NULL。GetNumberAttributes() 返回当前元素的属性数。LastAttributeName() 返回当前元素的最后一个属性的属性名称。NextAttributeName() 在给定属性名称的情况下,无论指定的属性是否有效,此方法都会按排序顺序返回下一个属性的名称。PreviousAttributeName() 在给定属性名称的情况下,无论指定的属性是否有效,此方法都会按排序顺序返回上一个属性的名称。下面的示例遍历给定节点中的属性并编写一个简单报表:
/// d ##class(Demo.XmlDemo).ShowAttributes("<?xml version='1.0'?一个实例中可创建的最大命名空间数量为2048个。这个上限不可修改。
一个实例中可创建的最大数据库数量(包括远程数据库)为15998个。这个上限也不可修改。
一个实例中可创建数据库的总数量还有其他因素制约:
1. 数据库路径信息总量最大为256KB,也就是所有数据库的路径字符加起来不能多于256KB。设置的路径越长,可创建的数据库数量越少。
计算公式:最大数据库数量=258048/(平均数据库路径长度+3)
2. 镜像的数据库一个按两个算。也就是创建一个镜像的数据库,相当于创建了2个非镜像数据库。
更多细节请参考在线文档:
https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=G…
%XML.Document和%XML.Node类识别以下DOM节点类型:
$$$xmlELEMENTNODE)请注意,这些宏在%xml.DOM.inc包含文件中定义。
Text ($$$xmlTEXTNODE)
Whitespace ($$$xmlWHITESPACENODE).
其他类型的DOM节点被简单地忽略。
请以下XML文档:
<?xml version="1.0"?%XML.Document类和%XML.Node类使可以将任意XML文档表示为DOM(文档对象模型)。然后,可以导航此对象并对其进行修改。还可以创建一个新的DOM并将其添加到其中。
注意:使用的任何XML文档的XML声明都应该指明该文档的字符编码,并且文档应该按照声明的方式进行编码。如果未声明字符编码,InterSystems IRIS将使用本书前面的“输入和输出的字符编码”中描述的默认值。如果这些默认值不正确,请修改XML声明,使其指定实际使用的字符集。
要打开现有XML文档以用作DOM,请执行以下操作:
%XML.Reader的实例。Format属性,以指定要导入的文件的格式。默认情况下, IRIS假定XML文件为文字格式。如果文件是SOAP编码格式,则必须指明这一点,以便可以正确读取该文件。
除非使用Correlate()和Next(),否则此属性无效。
%XML.Reader的以下方法之一。OpenFile() — 打开一个文件。OpenStream() —打开一个流。OpenString() — 打开字符串。OpenURL() — 打开URL。在每种情况下,都可以选择为该方法指定第二个参数,以重写Format属性的值。
Document属性,它是一个DOM。/// desc:灵活读取类
ClassMethod Read(mydir, myfile, class, element)
{
set reader=##class(%XML.Reader).%New()
if $extract(mydir,$length(mydir))'="/" {set mydir=mydir_"/"}
set file=mydir_myfile
set status=reader.OpenFile(file)
if $$$ISERR(status) {do $System.Status.DisplayError(status)}
do reader.Correlate(element,class)
while reader.Next(.object,.status)
{
if $$$ISERR(status) {do $System.Status.DisplayError(status)}
set status=object.%Save()
if $$$ISERR(status) {do $System.Status.DisplayError(status)}
}
}
请注意,当读入Person对象时,会自动读入其相应的Address对象。
当%XML.Reader找到与启用了XML的类相关的XML元素时,读取器会调用该类的XMLNew()方法,后者又会在默认情况下调用%New()。也就是说,当读取器找到相关元素时,它会创建相关类的新对象。新对象由从XML文档读取的数据填充。
可以通过在启用XML的类中(或在自己的自定义XML适配器中)重新定义XMLNew()来自定义此行为。例如,此方法可以改为打开该类的现有实例。然后,现有实例接收从XML文档读取的数据。
以下示例显示如何修改XMLNew()以使用XML文档中的新数据更新现有实例。
在这两个示例中,为简单起见,我们假设XML文档中的一个节点包含一个ID,我们可以将该ID与类的范围中的ID进行比较。当然,我们可以用其他方式将XML文档与现有对象进行比较。
%XML.Reader调用XMLNew()时作为参考,%XML.Reader在两种情况下自动调用XMLNew()方法:
%XML.Reader在调用%XML.Reader的Next()方法调用XMLNew()。在将XML元素(在外部文档中)与启用了XML的类关联之后,%XML.Reader Next()方法从文档中获取下一个元素,调用XMLNew()创建相应对象的实例,然后将该元素导入到对象中。%XML.为Caché 进行 Prometheus 监控时,配置好应用程序/metrics, Prometheus配置文件配置完成后,抓取不到cache监控数据,提示“server returned HTTP status 404 Not Found”。请问是什么原因?
默认情况下,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.Reader将XML文档导入到 IRIS对象中。
注意:使用的任何XML文档的XML声明都应该指明该文档的字符编码,并且文档应该按照声明的方式进行编码。如果未声明字符编码, IRIS将使用前面的“输入和输出的字符编码”中描述的默认值。如果这些默认值不正确,请修改XML声明,使其指定实际使用的字符集。
还可以使用%XML.Reader读取任意XML文档并返回DOM(文档对象模型)。
IRIS提供了一些工具,用于读取XML文档并创建与该文档的元素相对应的启用XML的 IRIS对象的一个或多个实例。基本要求如下:
%XML.Adaptor。除了少数例外,该对象引用的类还必须扩展%XML.Adaptor。提示:如果相应的XML模式可用,可以使用它来生成类(以及任何支持的类)。
%XML.Reader的实例,然后调用该实例的方法。这些方法指定XML源文档,将XML元素与启用XML的类相关联,并将源中的元素读取到对象中。%XML.Reader使用类中的%XML.Adaptor提供的方法执行以下操作:
为了解国内外最新的互联互通标准,共同助推我国卫生信息互联互通标准化成熟度测评工作,指导各地医院信息平台的建设,《中国卫生信息管理杂志》社决定召开国内外互联互通标准解读与实践线上交流会。会议由《中国卫生信息管理杂志》社主办,InterSystems中国协办,欢迎报名参会!