#InterSystems IRIS for Health

0 关注者 · 924 帖子

InterSystems IRIS for Health™ 是全球第一个也是唯一一个专门为医疗应用程序的快速开发而设计的数据平台,用于管理全世界最重要的数据。它包括强大的开箱即用的功能:事务处理和分析、可扩展的医疗保健数据模型、基于 FHIR 的解决方案开发、对医疗保健互操作性标准的支持等等。所有这些将使开发者能够快速实现价值并构建具有突破性的应用程序。了解更多信息

文章 姚 鑫 · 八月 26, 2024 3m read

第八章 创建和使用策略

本主题介绍如何在 IRIS 中使用 WS-Policy 支持。WS-Policy 使您能够指定要使用或预期的 标头。它还使能够指定 标头和 的使用(在创建 服务和 客户端中描述)。可以在单独的类中创建策略,而不是直接编辑 服务或 客户端。在大多数情况下,不需要进行低级编程。

概述

在 中, 服务或客户端的策略(或策略集合)包含在单独的配置类中,即 %SOAP.Configuration的子类。编译该类时,策略生效。

通常不需要编码。但是,在某些情况下,可以通过编程指定详细信息,而不是将该元素硬编码到策略中。

配置类的作用

当编译配置类时, 服务或客户端的未来操作将受到如下影响:

  • Web 服务或客户端根据策略的详细信息在出站消息中包含额外的标头元素。
  • Web 服务或客户端根据策略验证传入的 SOAP 消息。这包括在适当的情况下解密传入的消息。
  • 如果合适, 服务或客户端可以选择加密传出消息。
  • 对于 服务, 会自动受到影响。具体来说,会添加 元素,并且命名空间声明包括以下内容:
xmlns:wsp="http://www.w3.org/ns/ws-policy"

重要提示:如果配置类映射到多个命名空间,则必须在每个命名空间中对其进行编译。

与 、

0
0 96
InterSystems 官方 Claire Zheng · 十一月 24, 2025

InterSystems IRIS® 数据平台、InterSystems IRIS® data platform, InterSystems IRIS® for HealthTMHealthShare® Health Connect 2025.3 版本现已全面发布 (GA)。这是一个持续交付 (CD) 版本。

版本亮点:

  • 安全钱包: 用于管理敏感数据的新加密框架,建立在 IRISSECURITY 数据库上,提高了系统安全性和访问控制。
  • 扩展的可观察性和云集成:增强的 OpenTelemetry 指标,包括新增的进程指标和 ECP 指标,此外,日志存档现在支持使用 Azure Blob 存储,以实现经济高效的留存。
  • 数据和人工智能改进:外部表现在支持JOIN下推功能,以提升SQL性能;同时,向量搜索的HNSW索引已升级,可实现更快、更稳健的相似性搜索。
  • 医疗保健增强功能:改进了 FHIR 批量数据访问和身份验证功能。
  • 开发人员和用户界面更新: 互操作性用户界面增加了批量管理操作,扩大了生产配置中的搜索范围,提高了大规模生产的可用性,强化了现代化的用户体验。

请通过开发者社区分享您的反馈意见,以便我们共同打造更好的产品。

文档

有关所有重点功能的详细信息,请访问以下链接:

0
0 95
文章 姚 鑫 · 七月 14, 2023 2m read

第五十八章 开发Productions - ObjectScript Productions - 测试和调试Production

本主题介绍可用于测试和调试产品的工具。该信息对于故障排除和调整企业已在使用的Production软件也很有用。

纠正Production问题状态

如果Production暂停或出现问题,请阅读本节。

暂停Production

Production在队列中的所有异步消息可以被处理之前停止时,就会发生暂停Production。如果不手动清除这些异步消息,它们会在开始备份时自动处理。如果希望处理消息,则在开始暂停之前不需要其他步骤。

恢复陷入困境的

如果 停止但没有正常关闭,将获得故障状态。如果在没有先停止的情况下重新启动 或重新启动机器,就会发生这种情况。

在这种情况下,“恢复”命令将显示在“配置”页面上。单击“恢复”关闭并清理有问题的实例,以便可以在准备好时运行新实例。

或者可能需要使用命令行来恢复Production。请参阅使用 启动和停止。

重置命名空间中的

在开发过程中,可能希望绝对确保一个的所有队列都已清除,或者在开始另一个之前删除有关的所有信息。 方法清除队列。

警告:切勿在实时部署的中使用此过程。

0
0 95
文章 姚 鑫 · 九月 26, 2024 2m read

第三十四章 使用派生密钥令牌进行加密和签名 - 使用 进行签名

要使用 进行签名,请使用以下步骤:

  1. 如果想要签署任何安全标头元素,请创建这些安全标头元素。
  2. 创建 并将其添加到 WS-Security 标头,如创建和添加 中所述。

请注意,此步骤还会创建并添加 所基于的 元素。

  1. 根据派生的密钥令牌创建 元素。为此,请调用 %XML.Security.Signature的 类方法。例如:
 set dsig=##class(%XML.Security.Signature).Create(dkt)

此方法返回 %XML.Security.Signature 的实例,该实例表示 标头元素。签名值通过 HMAC-SHA1 摘要算法计算,使用 隐含的对称密钥。

元素适用于消息的一组默认部分;可以指定一组不同的部分。

  1. 将数字签名添加到 WS-Security 标头元素。为此,请调用 Web 客户端或 Web 服务的 属性的 方法。对于参数,请指定上一步中创建的签名对象。例如:
 do ..SecurityOut.AddSecurityElement(dsig)

例如,以下客户端代码对

0
0 94
文章 姚 鑫 · 十月 11, 2024 2m read

第四十五章 创建和添加 SAML 令牌 - 变体:不使用

变体:不使用

包含序列化、base-64 编码格式的证书。可以忽略此令牌,而改用标识证书的信息;接收方使用此信息从相应位置检索证书。为此,请使用上述步骤,并进行以下更改:

  • 跳过步骤 23。也就是说,不要创建和添加 .。
  • 在步骤 中,使用凭证集(而不是二进制安全令牌)作为 的第一个参数。例如:
 set assertion=##class(%SAML.Assertion).CreateX509(credset,referenceOption)

对于 referenceOption,可选择指定一个值,如 X.509 凭证的参考选项中所述。可以使用除 $$$SOAPWSReferenceDirect 之外的任意值。

如果指定凭证集作为第一个参数(正如我们在这个变体中所做的那样),则默认引用选项是证书的指纹。

变体:创建未签名的 SAML 断言

要创建未签名的 断言,请使用上述步骤,并进行以下更改:

  • 跳过步骤 1、 和 。也就是说,不要创建和添加 .。
  • 对于步骤 ,请使用 方法而不是 CreateX509()。此方法不带参数。例如:
 set assertion=##class(%SAML.Assertion).Create()

此方法返回 的一个实例。 会自动设置此实例的 和 属性。S 属性为空。

0
0 94
公告 Hao Ma · 十一月 14, 2023

我们最近发布了一份关于在镜像环境中使用报告节点(完整的“异步报告镜像成员”)的新白皮书。越来越多的客户正在研究这种机制,将其作为一种快速、简单的方法来设置保持最新的生产数据副本,但可以用于分析查询或重型报告工作负载,而不影响源系统。 请在此处阅读白皮书

与往常一样,我们很想听听您对如何在组织中使用此镜像选项的反馈,以及您是否对我们如何提高其效率有想法。

0
0 94
文章 姚 鑫 · 十二月 10, 2023 2m read

第三十一章 控制到 XML 模式的映射 - %ListOfDataTypes

%ListOfDataTypes

本部分显示从支持 XML 的类生成的 XML 架构的一部分,该类包含中定义为%ListOfDataTypes 的属性。例如,考虑以下属性定义:

Property PropName As %ListOfDataTypes(XMLITEMNAME = "MyXmlItemName");

如果此属性位于名为 的启用 的类中,则该类的 XML 架构包含以下内容:

<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:s="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="mytypes">
  <complexType name="DemoList">
    <sequence>
      <element minOccurs="0" name="PropName" type="s01:ArrayOfMyXmlItemNameString" xmlns:s01="mytypes"/>
    </sequence>
  </complexType>
  <complexType name="ArrayOfMyXmlItemNameString">
    <sequence>
      <element maxOccurs="unbounded" minOccurs="0" name="MyXmlItemName" nillable="true" type="s:string"/>
    </sequence>
  </complexType>
</schema>
0
0 92
文章 姚 鑫 · 十一月 6, 2024 2m read

第十三章 本地进程间通信(管道) - 用于进程间通信的 READ 命令

用于进程间通信的 READ 命令

语法

READ:pc readargument,...

READ 从管道读取数据。

其中reargument可以是:

formatting-mode
string
variable:timeout
*variable:timeout
variable#n:timeout

I格式化模式参数与管道一起使用。 参数允许对命名管道发出定时READ,而不会丢失跟随在一个部分记录中的任何数据。错误。当在上使用此参数时, 会忽略消息。

默认情况下,格式化模式的值处于关闭状态。如果在没有超时的情况下在命令中包含此参数,则进程将挂起,直到有数据要处理。

退出代码

可以检索命令管道 () 进程的退出代码。必须在 之前检索此退出代码设备已关闭。它是通过%SYSTEM.Process 类的方法获得的。退出代码始终是整数值。如果退出代码不可用,该方法将返回空字符串并设置状态参数和解释,如以下示例所示:

  SET exitcode=$SYSTEM.Process.PipeExitCode(device, .status)
  IF exitcode="" {DO $SYSTEM.OBJ.DisplayError(status)}
  ELSE {WRITE "CPIPE exit code is ",exitcode } 
0
0 92
文章 姚 鑫 · 十月 17, 2024 2m read

第五十章 安全元素的详细信息

本主题讨论 SOAP 消息中较常见的安全元素,特别是 IRIS Web 服务和客户端可以发送的变体。此信息旨在帮助那些不经常使用 SOAP 的人重温记忆。此处的详细信息也可能有助于故障排除。

的目的是携带消息中其他元素使用的安全凭证,供消息接收者使用。安全凭证以序列化、编码的形式携带。以下显示了部分示例:

<BinarySecurityToken wsu:Id="SecurityToken-4EC1997A-AD6B-48E3-9E91-8D50C8EA3B53" 
                     EncodingType="[parts omitted]#Base64Binary" 
                     ValueType="[parts omitted]#X509v3">
             MIICnDCCAYQ[parts omitted]ngHKNhh
</BinarySecurityToken>

详细

该元素的各部分如下:

  • Id 是此令牌的唯一标识符,包含该标识符以便此消息中的其他元素可以引用此令牌。如有必要, IRIS 会自动生成此标识符。
  • EncodingType 表示用于生成 <`BinarySecurityToken>IRIS中使用的唯一编码是base-64` 编码。
0
0 92
文章 姚 鑫 · 十月 21, 2024 1m read

第五十二章 安全元素的详细信息 - 详情

的作用是携带加密数据,部分示例如下:

<EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#" 
               Id="Enc-143BBBAA-B75D-49EB-86AC-B414D818109F" 
               Type="http://www.w3.org/2001/04/xmlenc#Content">
   <EncryptionMethod Algorithm="[parts omitted]#aes128-cbc"></EncryptionMethod>
   <CipherData>
      <CipherValue>MLwR6hvKE0gon[parts omitted]8njiQ==</CipherValue>
   </CipherData>
</EncryptedData>

详情

该元素的各部分如下:

  • Id 是元素的唯一标识符。 IRIS 会自动生成此标识符。
  • 表示用于加密该数据的算法。
  • 携带加密数据,作为 元素中的值。在此示例中,值 MLwR6hvKE0gon[parts divided]8njiQ== 为加密数据。
  • (未包含在示例中 标识对称密钥。
0
0 92
文章 姚 鑫 · 七月 13, 2023 3m read

第五十七章 开发Productions - ObjectScript Productions - 不常见的任务 - 以编程方式使用查找表

IRIS 提供了名为 Lookup() 的实用函数,以便可以轻松地从业务规则或 DTL 数据转换中执行表查找。此功能仅在创建至少一个查找表并用适当的数据填充后才起作用。

有关定义查找表的信息,请参阅配置产品中的定义数据查找表。

如果需要比管理门户提供的更直接的查找表操作,请在类中使用 。此类公开查找表以通过对象或 进行访问。此外,它还提供类方法来清除表、将数据导出为 XML 以及从 导入数据。

提供以下字符串属性:

查找表的名称,最多 255 个字符。可以通过在 IRIS 门户中选择“互操作性”、“配置”和“数据查找表”,然后选择“打开”来查看命名空间中定义的查找表。

KeyName

查找表中条目的键,最多 个字符。这是互操作性 > 配置 > 数据查找表页面上键字段的值。

查找表中与此键关联的值,最多 个字符。这是互操作性 > 配置 > 数据查找表页面上的值字段中的值。

示例 查询是:

还提供了以下类方法:

删除指定查找表的内容。

从指定的 文件导入查找表数据。要成功导入,文件必须使用与此类的 方法提供的相同的 XML 格式。

将查找表数据导出到指定的 文件。如果该文件存在, 会用新数据覆盖它。

0
0 92
文章 姚 鑫 · 十二月 18, 2023 2m read

第三十九章 其他特殊主题 - 映射 IRIS ID 以供导出

当在顶层映射 IRIS 对象(而不是作为另一个对象的属性)时,其内部 IDOID 和全局唯一 不能用作对象属性,因此不会映射这些 。但是,在某些情况下,可能希望使用对象 作为唯一标识符。然后,例如,可以在更新存储的对象之前将传入(已更改)的对象与相应的存储对象进行匹配。

支持提供了多个帮助程序类,可用于将 对象标识符投影到 XML 文档: 中(对于内部 ID)、(对于 ``)和 (用于全局唯一 )。

要使用这些类,请向支持 的类添加一个特殊属性,该属性的用途是包含要导出的 。该属性的类型必须为 %XML.Id、或 。确保该属性已映射,并将其标记为瞬态,以便它不包含在该类的 映射中。

当导出到 时,将支持 的类的对象带入内存。当对象位于内存中时,添加的特殊属性将从 IRIS 内部存储中检索请求的 并包含该值(以便您可以导出它)。

例如,考虑以下类:

Class MyApp4.Obj.Person4 Extends (%Persistent,%Populate,%XML.Adaptor) 
{

Property IdForExport As %XML.Id 
(XMLNAME="IRISID", XMLPROJECTION="ELEMENT") [Private, Transient];

Property Name As %Name;

Property DOB As %Date(FORMAT = 5, MAXVAL = "+$h");

}
0
0 92
文章 姚 鑫 · 十月 13, 2024 2m read

第四十六章 创建和添加 SAML 令牌 - 使用方法 Holder-of-key

添加元素

要将 元素添加到 %SAML.Assertion 实例,执行以下操作:

  1. 创建 %SAML.Subject 的新实例。
  2. 根据需要设置主题的属性。
  3. 将断言对象的 Subject 属性设置为等于此实例。

添加 元素

要将 元素添加到的 %SAML.Assertion 实例,请使用以下某个小节中的步骤。

使用方法 Holder-of-key

要使用 Holder-of-key 方法添加 ,请执行以下操作:

  1. 按照以编程方式检索凭证集中所述,创建 %SYS.X509Credentials 的实例。

或者使用与签署断言时使用的相同凭证集。

  1. 可以选择创建并添加包含与给定凭据集关联的证书的二进制安全令牌。

要创建令牌,调用 的 类方法。例如:

 set bst=##class(%SOAP.Security.BinarySecurityToken).CreateX509Token(credset)

其中 是在上一步中创建的凭证集。

要将此令牌添加到 WS-Security 标头元素,请调用 客户端或 Web 服务的 属性的 方法。

0
0 92
文章 姚 鑫 · 十月 3, 2024 3m read

第三十八章 验证和解密入站消息 - 实例身份验证和 WS-Security

实例身份验证和 WS-Security

了解 IRIS 网络服务有两个独立的机制在起作用是很有用的:IRIS 服务器和网络服务代码。

  • 在管理门户中,您可以为 Web 应用程序指定允许的身份验证模式,从而控制对 %Service_WebGateway 服务的访问。(有关详细信息,请参阅时间戳和用户名令牌示例。有关更多背景信息,请参阅 Web 应用程序。)如果您选择密码选项,则 Web 应用程序可以接受 用户名/密码对;这称为实例身份验证。
  • 除此之外, 服务还可以要求 用户名/密码对。

这些机制协同工作如下:

  1. 收到消息后, 服务将检查是否存在名为 的标头元素,而不会检查该元素的内容。
  2. 如果不存在 标头元素并且 参数等于 ,则 Web 服务将发出故障并退出。
  3. 如果 标头元素包含 元素:
  • 如果为 Web 应用程序选择了密码选项,则 服务将读取 元素,从中获取用户名和密码,并登录到 应用程序。

服务对 参数的任何值( 除外)都执行此操作。

用户名可在 特殊变量和 服务的 Username 属性中找到。密码不可用。

  • 如果没有选择密码选项,则不会登录。

注意:如果关联(和编译)配置类中存在安全策略,则 参数将被忽略。

检索安全标头元素

在某些情况下,可能希望为 标头元素添加自定义处理。

0
0 92
文章 姚 鑫 · 十一月 28, 2024 2m read

第三十五章 终端输入 输出 - 特殊变量显示 I O 条件

WRITE * and $X and $Y

WRITE *不会更改$X$Y 。因此,可以将控制序列发送到终端, 和仍将反映真实的光标位置。某些控制序列确实会移动光标,因此可以在需要时直接设置或 。

和 示例

在以下示例中,控制序列将 VT100 终端中的光标移动到第 行、第 20 列,并相应地设置和 。

 ; set DY and DX to desired 
 ; values for $Y and $X 
 SET DY=10
 SET DX=20
 ; ...
 ; escape sequence moves
 ; cursor to desired position
 WRITE *27, *91, DY+1, *59, DX+1, *72
 ; ...
 ; updates $X and $Y
 SET $Y=DY
 SET $X=DX

转义序列对 和 的影响各不相同

转义序列可以改变和值上的回显效果。三个因素控制着这种影响:

  • 操作系统,设置默认行为。
  • 是否在OPENUSE命令中指定了 (禁用和处理)。
  • 可以使用类的 方法来设置如何处理当前进程的转义序列。可以通过类中设置 的 属性来建立系统范围的默认行为。

转义序列影响 和 系统上的 $X

默认情况下,在 和

0
0 90
文章 姚 鑫 · 一月 9, 2025 2m read

第六十九章 打印机 - 使用助记词空间控制设备

助记词是执行设备控制操作(如光标移动和设备属性)的 IRIS 例程。每个操作都与一个标签相关联。这些标签是 WRITE /mnemonic 命令中使用的助记词。有关 WRITE /mnemonic 语法的更多信息,请参阅本文档其他页面中每种设备类型的 命令说明。

预定义的助记词空间

提供下表中描述的预定义助记词空间。

预定义的助记词空间

Routine Name 例程名称 Device Type Default 设备类型 默认 Description 描述
^%X364 终端、顺序文件、其他设备 X3.64 (ANSI) 端子的助记词空间。有关信息,请参阅 X3.64 的助记词空间。
DTM PC 控制台的助记词空间。有关信息,请参阅 的助记词空间。

设置默认助记词

可以在 中更改以下设备类型的默认助记词空间。依次选择 System Administration、Configuration (配置)、Device Settings (设备设置)、 IO Settings (IO 设置)。这将显示以下内容的助记词:

  • Terminals 终端

  • Sequential files 顺序文件

  • Other

0
0 90
文章 姚 鑫 · 九月 25, 2024 1m read

第三十三章 使用派生密钥令牌进行加密和签名 - 使用

进行加密(一)

  1. 如果加密了任何安全标头元素,请将它们添加到 WS-Security 标头元素中。为此,请调用 Web 客户端或 Web 服务的 属性的 方法。在这种情况下,需要两个参数:

a. 安全标头元素(而不是从中生成的的 %XML.Security.EncryptedData)。

b. 引用列表实例。第二个参数指定将第一个参数指定的项目放在何处。如果参数是 AB,则 IRIS 确保 在 之后。指定此项以便收件人首先处理引用列表,然后再处理依赖于它的加密安全标头元素。

 do client.SecurityOut.AddSecurityElement(userToken,reflist)

如果仅加密了 主体,系统会自动将 元素作为 的子元素。

  1. 发送 SOAP

例如,以下客户端代码对 SOAP进行加密:

  // Create UsernameToken
  set userToken=##class(%SOAP.Security.UsernameToken).Create("_SYSTEM","SYS")
 
  // get credentials for encryption
  set cred = ##class(%SYS.X509Credentials).GetByAlias("servercred") 

  // get EncryptedKey element to encrypt <UsernameToken)
  // $$$SOAPWSEncryptNone means that this key does not encrypt the body
  set enckey=##class(%XML.Security.EncryptedKey).CreateX509(cred,$$$SOAPWSEncryptNone)
  //add to WS-Security Header
  do client.SecurityOut.AddSecurityElement(enckey)

  // get derived key to use for encryption
  // second argument specifies how the derived key 
  // refers to the key on which it is based
  set dkenc=##class(%SOAP.WSSC.DerivedKeyToken).Create(enckey,
     $$$SOAPWSReferenceEncryptedKey)
  //add to WS-Security Header
  do client.SecurityOut.AddSecurityElement(dkenc)
  
  // create <EncryptedData> element to contain <UserToken>
  set encdata=##class(%XML.Security.EncryptedData).Create(dkenc,userToken,
     $$$SOAPWSReferenceDerivedKey)
  
  // create <EncryptedData> element to contain SOAP body
  set encdata2=##class(%XML.Security.EncryptedData).Create(dkenc,"",
     $$$SOAPWSReferenceDerivedKey)

  // create <ReferenceList> with <DataReference> elements that
  // point to these two <EncryptedData> elements
  set reflist=##class(%XML.Security.ReferenceList).%New()
  set dataref=##class(%XML.Security.DataReference).Create(encdata)
  do reflist.AddReference(dataref)
  set dataref2=##class(%XML.Security.DataReference).Create(encdata2)
  do reflist.AddReference(dataref2)

  // add <ReferenceList> to WS-Security header
  do client.SecurityOut.AddSecurityElement(reflist)
  // add encrypted <UserName> to security header;
  // 2nd argument specifies position
  do client.SecurityOut.AddSecurityElement(userToken,reflist)

  // encrypted SOAP body is handled automatically

0
0 90
文章 姚 鑫 · 九月 23, 2024 2m read

第三十一章 使用派生密钥令牌进行加密和签名 - 变体:创建隐式

变体:创建隐式

还可以创建隐式 ,这是引用 的快捷方法。在此方法中:

  • 消息中不包含
  • 在使用 的元素中, 元素指定 Nonce 属性,该属性包含用于 的 nonce 值。这向消息接收者表明派生密钥令牌是隐含的,并且是从引用的令牌派生的。

要创建隐式 ,请使用前面描述的一般过程,但有两处更改:

  1. 对于派生的密钥令牌实例,将 属性设置为 1
 set dkt.Implied=1
  1. 请勿将 元素添加到 WS-Security 标头元素。

使用 的方式与将其包含在消息中的方式完全相同。

变体:引用 的 SHA1 哈希

在此变体中(仅适用于 服务),发送者不在消息中包含 元素,而是引用密钥的 SHA1 哈希。 服务可以引用在入站消息中收到的 元素。

使用前面的一般程序,但需做以下更改:

  • 步骤 2-4 是可选的。.
  • 省略步骤 (不要添加 )。
  • 在步骤 中,当您使用 创建派生密钥令牌时,若要使用从客户端收到的 ,请省略第一个参数。或者,如果您已创建 ,请将其用作第一个参数。

指定 作为第二个参数。

例如,要使用从 客户端收到的消息中的第一个 元素:

 set refopt=$$$SOAPWSReferenceEncryptedKeySHA1
 set dkenc=##class(%SOAP.WSSC.DerivedKeyToken).Create(,refopt)
0
0 89
文章 姚 鑫 · 九月 12, 2024 3m read

第二十三章 加密安全标头元素

本主题介绍如何加密 Web 服务和 Web 客户端发送的消息中的 WS-Security 标头内的元素。(此处描述的工具也可单独使用或与安全标头元素结合使用来加密 主体。)

通常,会同时执行加密和签名。为简单起见,本主题仅介绍加密。有关结合加密和签名的信息,请参阅结合加密和签名。

使用派生密钥令牌进行加密和签名主题描述了加密 消息部分内容的另一种方法。

加密安全标头元素

与上一主题中显示的加密技术不同,加密 标头元素的过程要求您指定 元素如何连接到相应的 元素。

要加密安全标头元素,请执行以下操作:

  1. 可选择包含 %soap.inc 包含文件,它定义了可能需要使用的宏。
  2. 创建要加密的标头元素。例如:
 set userToken=##class(%SOAP.Security.UsernameToken).Create("_SYSTEM","SYS")
  1. 获取包含将接收 SOAP 消息的实体的公钥的凭证集。请参阅以编程方式检索凭证集。
 set credset=..SecurityIn.Signature.X509Credentials

请务必检查返回对象的类型,看它是否是 的实例,如以编程方式检索凭据集中所述。

  1. 根据凭证集创建加密密钥。为此,调用 %XML.Security.EncryptedKeyCreateX509()
0
0 87
文章 姚 鑫 · 八月 10, 2024 2m read

[toc]

第六章 定义单向 Web 方法

通常,当 Web 客户端调用 Web 服务时,会返回 SOAP 消息,即使该方法没有返回类型并且在 数据平台中执行时不返回任何内容。

在极少数情况下,可能需要将 方法定义为单向的。此类方法不得返回任何值,并且消息不需要 响应。

注意:通常不应使用单向方法。请求-响应对更为常见、更受支持且更受期待 — 即使对于没有返回类型的方法也是如此。

要定义单向 Web 方法,请将该方法的返回类型定义为 。WSDL 未定义此 方法的输出,并且 服务不返回 消息。

向二进制数据添加换行符

可以使 服务在新选项卡中为 类型属性中为 类型属性添加自动换行符。为此,请执行以下操作之一:

  • Web 服务类中将 BASE64LINEBREAKS 参数设置为 。
  • 对于 服务类实例,将 属性设置为 。此属性的值优先于 参数设置的值。

对于参数和属性,默认值为 0;默认情况下, 服务不包括新选项卡中 类型属性或中 类型的属性的自动换行符。

向 消息添加字节顺序标记

默认情况下, 客户端发送的消息不以 (字节顺序标记)开头。

通常不需要 ,因为消息以 编码,不存在字节顺序问题。但是,在某些情况下,在 消息中包含 是必要的或可取的;此 仅表示消息是 。

要将 添加到

0
0 87
文章 姚 鑫 · 九月 15, 2024 4m read

第二十六章 添加数字签名 - 示例

示例

此示例显示了对其响应消息进行签名的 Web 服务。

为了使此示例在自己的环境中运行,请首先执行以下操作:

  • 为服务器创建证书。
  • 将此证书加载到服务器端的 IRIS 中,创建名为 servercred 的凭证。执行此操作时,还要加载私钥文件并提供其密码(这样 Web 服务在签署其响应消息时就不必提供该密码。)

Web 服务指的是具有此确切名称的 IRIS 凭证集。

Class DSig.DivideWS Extends %SOAP.WebService
{

///  Name of the Web service.
Parameter SERVICENAME = "DigitalSignatureDemo";

///  SOAP namespace for the Web service
Parameter NAMESPACE = "http://www.myapp.org";

/// use in documentation
Method Divide(arg1 As %Numeric = 2, arg2 As %Numeric = 8) As %Numeric [ WebMethod ]
{
 Do ..SignResponses()
 Try {
  Set ans=arg1 / arg2
  }Catch{
    Do ..ApplicationError("division error")
  }
 Quit ans
}

/// use in documentation
/// signs and includes a binary security token
Method SignResponses()
{
 //Add timestamp because that's commonly done
 Set ts=##class(%SOAP.Security.Timestamp).Create()
 Do ..SecurityOut.AddSecurityElement(ts)

 //access previously stored server certificate & private key file
 //no need to use private key file password, because that has been saved
 Set x509alias = "servercred" 
 Set cred = ##class(%SYS.X509Credentials).GetByAlias(x509alias)
 set bst=##class(%SOAP.Security.BinarySecurityToken).CreateX509Token(cred)
 do ..SecurityOut.AddSecurityElement(bst)

 //Create WS-Security Signature object
 Set signature=##class(%XML.Security.Signature).CreateX509(bst)
 
 //Add WS-Security Signature object to the outbound message
 Do ..SecurityOut.AddSecurityElement(signature)
 Quit
}


///  Create our own method to produce application specific SOAP faults.
Method ApplicationError(detail As %String)
{
    Set fault=##class(%SOAP.Fault).%New()
    Set fault.faultcode=$$$FAULTServer
    Set fault.detail=detail
    Set fault.faultstring="Application error"
    // ReturnFault must be called to send the fault to the client.
    // ReturnFault will not return here.
    Do ..ReturnFault(fault)
}


}
0
0 87
文章 姚 鑫 · 一月 23, 2024 3m read

第七章 使用 SQL Search - 同义词表

同义词表

要实现同义词表,请将该表定义为扩展 iFind.Synonym 抽象类的持久类。

此类定义了两个属性:FromTermToTerm。一对 FromTerm 和 属性将 定义为 的同义词。如果查询包含 , 搜索将使用 来扩展查询。

该查询使用此类的 方法根据查询词在同义词表中搜索同义词。

在查询执行期间, 搜索会检查单个单词单元或位置搜索短语是否存在任何同义词。例如,在同义词表中定义了两个同义词对(“persons”、“people”)(“walk”、“run”)。对短语执行 搜索查询。如果同义词表与查询关联,则 搜索不仅返回与原始查询匹配的文档,还返回与以下任一查询匹配的文档:和。

但是,如果 字符串为 ,则不会发生查询扩展,因为 搜索不会扩展位置短语搜索中的任何单词。位置短语本身是查询扩展的最小单位。但是,如果定义一个同义词对,如 (、), 搜索会将查询扩展为。如果 包含多个单词, 搜索会将其视为位置短语。 可以是任何有效的位置短语;它可以包含 或 通配符。

注意:同义词表不能与正则表达式搜索 () 一起使用。

高亮

可以使用 语法突出显示返回文本中的单词。

0
0 86
文章 姚 鑫 · 十一月 12, 2024 3m read

第十九章 TCP 客户端 服务器通信 - 数据包模式

数据包模式

如果未指定模式,则默认为数据包模式。如果流模式被禁用,则该模式默认为分组模式。

在分组模式中,只要有一些数据要返回,读取命令就会完成。数据包模式允许在输出缓冲区中构建整个TCP数据段,然后通过发出WRITE*-3WRITE!命令。

如果在没有要发送的字符的情况下发出来启动一个发送操作,则会收到一个错误。如果发出空字符串,则会收到错误。

在分组模式下可以发送的字符串的最大长度为1024个字符。如果在未刷新缓冲区的情况下超过此限制,则会收到错误。

因为 TCP/IP 忽略长度为 的记录,所以如果在其中没有字符时刷新写入缓冲区,会收到 错误。

在服务器收到连接请求之前,从服务器到客户端的命令会在服务器上产生 错误。

回车模式(模式)

此模式修改对输入和输出的回车处理。

在输出时, 生成,而WRITE#生成。

在输入时,在启用模式的情况下,服务器尝试将相邻的和或相邻的和记录为中的单个终止符。如果和没有在彼此的短时间间隔内到达,则将它们作为单独的终结器进行处理。默认情况下,间隔为秒。

监控断开模式(模式)

此模式打开或关闭异步断开监控。通过指定模式字符或关键字参数来激活此模式。当指定时,将激活断开监视;当指定时,将停用断开监视。

当被激活时,大约每隔秒轮询一次连接。当检测到断开连接时,会发出一个错误。

0
0 86
文章 姚 鑫 · 十二月 17, 2023 2m read

第三十八章 其他特殊主题

类和属性参数

  • XMLNAME
  • XMLSEQUENCE
  • XMLUNSWIZZLE

控制元素的关闭

XML 中,仅包含属性的元素可以用以下任一方式表示:

IRIS 认为这些形式是等效的。当使用 %XML.Writer 导出对象时,可以控制关闭形式,但不能通过修改 投影本身来控制。

处理具有多个同名标签的文档

中的给定元素可以包含多个具有相同名称的元素;这些元素通过它们的顺序彼此区分。例如,以下是一个合法的 文档:

<?xml version="1.0" encoding="UTF-8"?>
<Root>
   <Person>
      <Name>Able, Andrew</Name>
      <DOB>1977-10-06</DOB>
      <Address>
         <Street>6218 Clinton Drive</Street>
         <City>Reston</City>
         <State>TN</State>
         <Zip>87639</Zip>
      </Address>
      <Address>
         <Street>110 High Street</Street>
         <City>Zanesville</City>
         <State>OR</State>
         <Zip>80719</Zip>
      </Address>
   </Person>
</Root>
0
0 86
文章 姚 鑫 · 十月 28, 2024 2m read

第四章 I O 输入输出简介 - Read 命令

Read 命令

该命令从当前设备读取数据。对于某些设备,以星号开头的参数返回 ASCII 数字信息;对于其他人来说,它们表示控制功能。

语法

READ variable:timeout

WRITE 命令

该命令将数据写入当前设备。对于某些设备,以星号开头的参数允许使用其 ASCII 数值写入 ASCII 字符;对于其他人来说,它们表示控制功能。对于某些设备,以 字符开头的参数指示写入该字符的次数。

语法

WRITE variable

语法允许使用在助记符空间中的 代码中定义的助记符来控制设备。助记符空间是一个 例程,必须在或命令中激活它,或者使用管理门户将其配置为设备的默认值。要了解如何定义和激活助记符空间,请参阅定义默认助记符空间。

要使用预定义的 助记符空间将光标移动到终端屏幕上的第 列第 2 行,请发出以下命令:

   WRITE /CUP(1,2)

命令

命令释放指定设备的所有权。 反转命令的效果。

语法

所需的设备名称、 号或助记符。

参数在 级别关闭设备,而不在操作系统级别关闭它。

K参数对 系统没有影响。该文件在操作系统级别关闭。

如果对主设备发出命令,则主设备将保持分配给您的进程,直到注销为止。

其他几个条件可能会影响的行为:

  • 如果由于某种原因停止向设备的输出, IRIS
0
0 86
文章 姚 鑫 · 十月 4, 2024 3m read

第三十九章 创建安全对话

IRIS 支持安全对话,遵循 WS-SecureConversation 1.3 规范。本页介绍如何手动创建安全对话。

概述

在安全对话中,Web 客户端向 服务发出初始请求并接收包含 <`SecurityContextToken>` 的消息。此元素包含双方都可以使用的对称密钥的信息。此信息指的是只有双方知道的共享密钥。然后双方可以在后续交换中使用对称密钥,直到令牌过期或客户端取消令牌。

双方不应该直接使用 执行这些任务(不推荐),而应该从中生成一个 ,然后使用它进行加密、签名、解密和签名验证。

共享密钥可以通过以下任一方式指定:

  • 双方共同提供随机熵值。这是典型的情况。
  • 由客户端,如果客户端提供了一个随机的客户端熵值。
  • 由服务提供,如果服务提供了随机的服务熵值。

开始安全对话

Web 客户端启动安全对话。要在 IRIS 中执行此操作,请在 Web 客户端中执行以下操作:

  1. 加密 SOAP 主体。客户端发送的请求包含必须保护的信息;此信息在 SOAP 主体中携带。

根据需要,可以选择采用其他方式保护请求消息。

  1. 在调用 %SOAP.WST.EntropyCreateBinarySecret() 方法。此方法返回表示随机客户端熵的该类的实例。该方法接受一个参数,即熵的大小(以字节为单位)。
 set clientEntropy=##class(%SOAP.WST.Entropy).CreateBinarySecret(32)
0
0 86
文章 姚 鑫 · 十二月 22, 2023 3m read

第二章 $ZF Callout函数概述

IRIS $ZF系统功能是一套相关功能的容器。$ZF套件中的大多数函数都由函数调用的第一个参数标识,该参数将是一个负数,-100或到。例如,调用操作系统命令的函数具有)的形式,其中是包含要执行的命令的字符串。当讨论这个函数时,它将被称为。以同样的方式,其他函数将被称为$ZF(-3)到,只使用实际函数调用的第一个参数。也可以在不带负数参数的情况下调用函数,在这种情况下,它调用名为的特殊库中的函数。

注:是动态链接的文件(为DLL文件,及相关操作系统为文件)。库是一个共享库,它包含到接口的钩子,允许各种函数在运行时加载它并调用库函数。

函数集包括以下接口:

函数(不带负数参数)

主要的$ZF()函数提供了对来自名为iriszf的特殊库的函数的直接访问。当定义并编译了这个自定义库后,只需指定函数名和参数(例如,,就可以调用它的函数。与、或不同,不需要加载库或指定库标识符。

函数

函数用于运行shell命令和操作系统服务调用。它不用于访问库,可以在没有任何先前设置的情况下调用。

函数

函数是一种加载库并使用一条语句调用库函数的简单方法。库及其函数都是通过名称指定的,并且库保留在内存中,直到被对另一个库的调用所替换。

函数

函数为和提供了一组服务。它是由前两个参数(到)标识的八个效用函数的容器。

0
0 86
文章 姚 鑫 · 十一月 27, 2024 2m read

第三十四章 终端输入 输出

概述

ObjectScript 提供支持串行异步 ASCII 终端的命令。还可以将这些命令与控制台 I/O 结合使用。

使用终端 ,例程可以:

  • 启用或禁用传入字符的回显。
  • 发送和接收 ANSI 标准转义序列。
  • 控制键盘中断并编程特殊的用户交互,包括格式化屏幕、反向视频和用于跳过字段的特殊键。
  • 启用和禁用Ctrl-C中断的识别。
  • 通过 XON ( ) 和 ( ) 控制传入和传出数据流。
  • 指定 端口状态参数和调制解调器波特率。
  • 当指定自己的终止字符集时,请遵循外部协议。
  • 与非终端设备通信,例如自动化仪器。

在大多数平台上,打印机被视为终端 设备。 系统始终将打印机作为终端 I/O 设备来处理。在 上,通过串行通信端口连接的打印机被视为终端 设备。否则, 系统将打印机作为顺序文件 设备处理。

登录终端或控制台是主要设备

登录 的终端或控制台是主要设备。无需打开主要设备。如果尚未发出和 ,则进程第一次发出或时,系统会自动打开主设备,并将其设置为当前设备,就像您已显式发出一样。

在本页的其余部分中, “终端”一词用于指代终端和控制台。

特殊变量显示 条件

命令可以影响特殊变量的值。您可以测试这些变量以确定 条件:

  • 包含当前设备的名称。
  • $TEST包含一个布尔值,显示最近的定时操作是否成功。
  • $X$Y显示光标的位置。
  • 、 和显示有关操作的信息。 和
0
0 85
文章 姚 鑫 · 十一月 3, 2024 2m read

第十章 本地进程间通信(管道) - 用于进程间通信的 OPEN 命令

用于进程间通信的 OPEN 命令

OPEN命令允许程序与 IRIS 外部的进程进行通信。

OPEN Arguments

管道名称

仅命令管道— “|CPIPE|”或"" ,其中表示用户指定的唯一标识符。

程序

命令管道可以使用命令 或不使用命令 shell(直接)执行程序。在大多数情况下,首选不使用命令 shell 执行。标准管道使用命令 执行程序。

仅命令管道— 要在不使用命令 的情况下执行,请指定 。如果程序有参数,则必须使用 关键字指定它们。如果指定 或 关键字,则无需命令 即可执行程序: 、 和都是有效的语法。 可以采用单个参数、以逗号分隔的参数列表或数组。例如, 。可以使用数组指定可变数量的参数:

  SET array(1)=arg1, array(2)=arg2, array=2
  OPEN device:(/COMMAND=cmd:/ARGS=array...)

要使用命令 执行,请指定 ,并省略 和 关键字。

程序字符串包含系统上安装的程序的完整路径名。它包含要在主机系统上执行的命令名称及其参数(如果有)。对于标准管道,限制为 个字符。

0
0 85
文章 姚 鑫 · 十二月 20, 2023 2m read

第四十一章 XML 映射参数摘要

Topic Parameters
启用 XML 映射。 类参数
将属性映射到元素或属性。 XMLPROJECTION property parameter ("NONE", "ATTRIBUTE", "XMLATTRIBUTE", "CONTENT", "ELEMENT", or "WRAPPED")
XMLDEFAULTREFERENCE class parameter ("SUMMARY", "COMPLETE", "ID", "OID", or "GUID")
XMLREFERENCE property parameter ("SUMMARY", "COMPLETE", "ID", "OID", or "GUID")
元素名称和属性名称。
XMLKEYNAME property parameter
默认值基于 类型名称。
类型 XMLTYPE class parameter
命名空间 NAMESPACE class parameter
You can override this upon export.
0
0 85