– 5个新公告
– 1个新问题
✓ 十月有 408 位新成员加入
✓ 所有时间发布了 2,251 篇帖子
✓ 所有时间有 2,431 位成员加入
✓ 十月有 408 位新成员加入
✓ 所有时间发布了 2,251 篇帖子
✓ 所有时间有 2,431 位成员加入
我们公司在和其他公司合作,需要从Cache2016的数据库中执行sql获取数据
sql的内容是调用存储过程
CALL DHCXXXXice.MKPIQuery_QueryXXXX('K007XXXX.JJR','2024-08-01','2024-08-01')
在java代码中执行会报错误如下

但是通过数据库连接工具却能查询到结果
通过数据库连接工具查询到 该存储过程,可接收参数为8个
.png)
尝试 CALL DHCXXXXice.MKPIQuery_QueryXXXX('K007XXXX.JJR','2024-08-01','2024-08-01',null,null,null,null,null)
在通过java连接查询时,依然报Parameter list mismatch错误
通过jdbc连接工具依然能查出结果
当使用 I/O 命令OPEN 、 USE和CLOSE在除正在使用的设备之外的任何设备上处理 I/O 时,必须指定一个 I/O 设备。可以根据设备类型以三种方式之一指定设备,如下表所示。
I/O 命令中指定设备| Type of Specification 规格类型 | Use for these Devices 用于这些设备 |
|---|---|
| IRIS 设备名称 | Terminals and Printers 终端和打印机 |
| IRIS 设备 ID 或设备别名 | 除顺序文件外的所有设备 |
| File Name 文件名 | Sequential Files 顺序文件 |
请注意,Windows 和 UNIX® 处理打印机I/O 的方式不同。有关详细信息,请参阅打印机。
如果的 I/O 操作是针对终端(或某些平台上的打印机),则可以使用操作系统(UNIX® 或 Windows)应用的设备名称来指定设备。形式如下:
OPEN "device"
USE "device"
CLOSE "device"
其中device是设备的操作系统名称,用引号引起来。设备的最大长度为 256 个字符。
USE 0或USE $principal向进程的主体设备隐式发出OPEN命令。如果另一个进程拥有该设备,则该进程会挂在隐式OPEN上,就像它遇到任何OPEN时一样。
为该进程不拥有的任何其他设备(由于先前的OPEN命令)发出USE命令会产生错误。
仅当进程获取设备时,没有超时的OPEN命令才将控制权返回给进程。可以通过键盘中断命令(如Ctrl-C )中断打开命令。由于保护问题或无效设备名称而无法成功的OPEN将永远挂起。当在OPEN命令中指定超时时, OPEN将在超时到期时将控制权返回给进程。
根据主要设备的性质,可以指定其他特定于设备的参数,这些参数对于管道(进程间通信) 、文件和终端 I/O是不同的。例如,可以使用 TLS 连接打开主设备:
USE $principal:(::/TLS=ConfigName)
其中ConfigName是同一实例中定义的 TLS 配置的名称。
如果应用程序生成不希望出现在屏幕上的无关输出,可以将该输出定向到空设备。可以通过发出带有适当参数的 IRIS OPEN命令来指定空设备(见表)。 IRIS 将其视为虚拟设备。
| Platform 平台 | Null Device Argument 空设备参数 |
|---|---|
UNIX® |
/dev/null/ |
Windows |
//. |
一次只有一个进程可以拥有一个设备,顺序文件除外。
换句话说,在进程成功向设备发出OPEN命令后,在第一个进程释放该设备之前,其他进程都无法打开该设备。进程通过以下任一方式释放设备:
通过显式发出CLOSE命令。
通过停下来。
每个 IRIS 进程都有一个主要输入设备和一个主要输出设备。默认情况下,这些是同一设备。当您登录终端并激活 IRIS 时,该终端将成为主要设备。由于 IRIS 隐式向该终端发出OPEN和USE命令,因此可以立即向它发出READ和WRITE命令。 IRIS 主设备是操作系统指定为主输入设备的设备。 $PRINCIPAL特殊变量包含主设备的设备 ID。
IRIS 将 I/O 命令定向到当前设备IRIS 将输入和输出操作(包括READ 、 WRITE 、 PRINT和ZLOAD命令)定向到当前设备。 $I特殊变量包含当前设备的设备 ID。当在终端上登录 IRIS 时, $IO最初包含终端的设备名称。换句话说,登录后,主设备和当前设备是相同的。在发出USE命令后,当前的设备( $IO中包含的设备)通常是执行的最后一次USE命令中指定的设备。
尽管可以在编程器模式下对主设备以外的设备发出OPEN和USE ,但每次 IRIS 返回到>提示符时,它都会隐式发出USE 0。
Read 命令该命令从当前设备读取数据。对于某些设备,以星号开头的参数返回 ASCII 数字信息;对于其他人来说,它们表示控制功能。
READ variable:timeout
该命令将数据写入当前设备。对于某些设备,以星号开头的参数允许使用其 ASCII 数值写入 ASCII 字符;对于其他人来说,它们表示控制功能。对于某些设备,以 # 字符开头的参数指示写入该字符的次数。
WRITE variable
WRITE /mnemonicWRITE /mnemonic 语法允许使用在助记符空间中的 IRIS 代码中定义的助记符来控制设备。助记符空间是一个 IRIS 例程,必须在OPEN或USE命令中激活它,或者使用管理门户将其配置为设备的默认值。要了解如何定义和激活助记符空间,请参阅定义默认助记符空间。
要使用预定义的 ^%X364 助记符空间将光标移动到终端屏幕上的第 1 列第 2 行,请发出以下命令:
WRITE /CUP(1,2)
CLOSE 命令CLOSE命令释放指定设备的所有权。 CLOSE反转OPEN命令的效果。
CLOSE device[:params]
device所需的设备名称、ID 号或助记符。
params参数K在 IRIS 级别关闭设备,而不在操作系统级别关闭它。
Automating Configuration of InterSystems IRIS with Configuration Merge
CPF merge通过合并一个人工编辑的merge file, 自动的配置新创建的iris instance, 或者修改已有的iris instance。适用于:
Caché 和早期的IRIS版本提供了manifest功能,用来做IRIS实例的配置。 Manifest很繁琐,而且各个版本的配置中有细微的区别,非常难以管理。 如今有了CPF merge, maifest的所有功能都可以在CPF merge实现, 因此manifest在新版IRIS中也就完全被替代了。

执行merge可以在操作系统命令行下执行, 如下面的例子
# 第2个参数可选,如果为空,自动使用系统当前的iris.cpf
$ iris merge iris /external/irismerge.iris-main是IRIS镜像的的ENTRYPOINT程序。 在Container中,ENTRYPOINT 指令允许你指定一个可执行程序或者脚本,作为容器启动后运行的主程序。这个程序会在容器启动时自动执行。
执行docker ps 命令可以看到当前container的ENTRYPOINT是什么:
hma@CNMBP23HMA demo % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8f31a857dc90 ./irishealth:2024.2 "/tini -- /iris-main" 3 days ago Up 3 days 2188/tcp, 52773/tcp, 53773/tcp, 54773/tcp, 0.0.在创建webgateway的container时,可以使用ISC_DATA_DIRECTORY=参数, 选择把CSP文保存在主机而不仅仅是container内部。如下面的例子: 使用volumnes映射了主机的./dur-wg-a目录到container的/dur目录, 而command中的ISC_DATA_DIRECTORY=/dur会讲webgateway的配置文件, log文件等保存在主机。
webgateway-apache:
image: containers.intersystems.com/intersystems/webgateway-arm64:2024.1
container_name: wg-tls
hostname: wg-tls
ports:
- "8080:80"
- "4433:443"
volumes:
- ./webgateway/csp:/external
- .上一篇文章使用人工配置的方法简单的配置了webgateway container. 接下来来介绍如何在docker-compose里做自动化部署。
先总结我们要做的事情:
这些是最基本的功能。除此之外, 用户还可能会要求建立WebGateway到IRIS的TLS连接,或者在Apache2部署自己的网页等等。后面的文章会一一介绍。
上一篇文章中,我通过Webgateway管理页面定义了Webgateway到IRIS的连接,其实是定义了webgateway的配置文件CSP.ini。 无论WebServer是什么类型,IIS,Apache, Nginx, CSP.ini的都是一样的。在Linux中, CSP.ini位于/opt/webgateway/bin目录。
InterSystems提供了一个工具叫 CSP merge。 简单的说,就是可以定义一个被合并的文件, webgateway运行时会不停的扫描这个文件,发现有内容的修改,就把修改后的配置项合并到工作中的CSP.
在https://containers.intersystems.com网站上获得可以下载的InterSystems的各种docker镜像。如果只是安装Community版本, 不需要注册。如果是下载安装正式的版本,需要在网站注册,然后获得Login Token登陆。
#;这一部有可能需要科学上网,否则无法正常登陆
hma@CNMBP23HMA ~ % docker login -u="hma" -p="k8zIqpoafIUaViP2BA4gCZdcC4EeKyb0svSjnyVtcWMb" containers.intersystems.com
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded
# pull iris image,webgateway,Passhash, arbiter, etc.
hma@CNMBP23HMA ~ % docker pull containers.intersystems.com/intersystems/healthconnect-arm64:latest-cd
hma@CNMBP23HMA ~ % docker pull containers.我在3年前写过同样内容的文章。随着IRIS版本的更新,安装的细节有了些变化,而且,尤其是2024年以后的版本不再使用PWS(Private Web Server), 安装最新版本的IRIS通常同时要安装一个外部的Web服务器,Apache或者nginx。 另外, 大家对自动部署的需要越来越多,因此我也会在下面的内容里面包括自动部署,配置iris, 安装软件等等内容。希望给各位一个基本完整的介绍。
内容列表如下:
基础篇
iris-main和在container外保存iris数据随时更新
此命令使指定设备成为当前设备,并将特殊变量$IO设置为该设备。要使用主设备以外的设备,必须首先对其发出OPEN命令;否则,将收到错误。参数的含义与OPEN命令中的相同。
USE device:(args):"mnespace"
所需的设备名称、ID 号或别名。设备的最大长度为 256 个字符。
可选— 某些设备所需的附加信息。管道(进程间通信) 、文件和终端 I/O的可用参数不同。
可选— IRIS 例程的名称,包含控制助记符的定义,当将 I/O 定向到该设备时,可以与WRITE /mnemonic 命令一起使用。
此 Windows 示例显示了用于通过 TCP 连接到远程主机larry上的时钟服务器的命令。它使用服务名称daytime ,本地系统将其解析为端口号。
OPEN建立指定设备的所有权并打开指定设备的 I/O 通道。此所有权将持续存在,直到发出CLOSE命令、进程终止或某些物理操作关闭设备。对于物理 I/O 设备或进程间通信(例如 TCP 连接),此所有权会阻止所有其他进程访问该设备。对于逻辑 I/O 设备(例如顺序文件),此所有权可能允许其他进程以某种形式共享访问该文件。打开同一顺序文件的多个进程的处理高度依赖于平台。强烈建议使用LOCK命令来限制对顺序文件的访问。
OPEN device{:{(parameters)}{:{timeout}{:"mnespace"}}}
所需的设备名称、ID 号或助记符。设备的最大长度为 256 个字符。
可选— 一个或多个参数,指定某些设备所需的附加信息。该参数列表用括号括起来,列表中的参数之间用冒号分隔。管道(进程间通信) 、文件和终端 I/O的可用参数不同。
可选— 等待请求成功的秒数。前面的冒号是必需的。超时必须指定为整数值或表达式。如果超时设置为零 (0), OPEN将尝试打开文件一次。如果尝试失败, OPEN会立即失败。如果尝试成功,则成功打开文件。如果未设置超时 IRIS 将继续尝试打开设备,直到打开成功或手动终止该过程。
本页概括地描述了如何在 IRIS 数据平台应用程序中以及在 IRIS 提示符下使用 I/O 设备。
IRIS 数据平台为多种不同类型的逻辑和物理设备提供支持。支持的逻辑设备包括:
TCP连接IJC) 设备用于在 IRIS 进程之间进行通信支持的物理设备包括
I/O 命令概述I/O 命令允许拥有、使用、读取、写入和关闭设备。要将 I/O 操作定向到设备,请首先发出以下命令:
OPEN命令来建立所有权,除非该设备是主要设备。USE命令使该设备成为当前设备。READ和WRITE命令将从该设备读取或写入该设备。CLOSE命令释放设备的所有权,以便其他进程可以使用该设备。以下通用语法适用于支持 ObjectScript 中 I/O 命令关键字的 I/O 命令:
OPEN device:paramlist:timeout:"mnespace"
USE device:paramlist:"mnespace"
CLOSE device:paramlist
其中paramlist可以是单个参数,也可以是括在括号中并用冒号分隔的参数列表:
parameter (parameter:parameter[:.一个实例上的最大命名空间数量是 2047. 但是,要使用这么大量的命名空间,你需要相应地配置好内存。
一个实例里可以创建的数据库的最大数量(包括远程数据库) 15998. 根据授权的类型,可能会有所限制。具体细节请参考以下文档。
Database Configuration [IRIS]
Database Configuration
本节讨论在消息头中用作 <Security>子元素的 <ReferenceList> 元素。当以这种方式使用 <ReferenceList> 时,可以在签名之前执行加密。以下显示了此元素的一个示例:
<ReferenceList xmlns="http://www.w3.org/2001/04/xmlenc#">
<DataReference URI="#Enc-358FB189-81B3-465D-AFEC-BC28A92B179C"></DataReference>
<DataReference URI="#Enc-9EF5CCE4-CF43-407F-921D-931B5159672D"></DataReference>
</ReferenceList>
在每个 <DataReference> 元素中,URI 属性指向消息中其他位置的 <EncryptedData> 元素的 Id 属性。
<DerivedKeyToken> 的目的是携带发送者和接收者可以独立使用的信息来生成相同的对称密钥。这些方可以使用该对称密钥对 SOAP 消息的相关部分进行加密、解密、签名和签名验证。
以下显示了部分示例:
<DerivedKeyToken xmlns="[parts omitted]ws-secureconversation/200512"
xmlns:wsc="[parts omitted]ws-secureconversation/200512"
wsu:Id="Enc-943C6673-E3F3-48E4-AA24-A7F82CCF6511">
<SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.
一个将文件转换成Studio导出的xml格式的工具
通过此工具可以将本地文件转换成xml格式文件,然后通过Studio导入到服务器中,而不再需要其他工具将文件传至服务器。
下面以为ensemble2016自带的一个示例界面增加背景图为例。
http://localhost:57772/csp/samples/cinema/Cinema.csp
.png)
确定此示例界面的Web应用程序为:/csp/samples
.png)
选择本地电脑要作为背景图的图片
.png)
.png)
想要放到cinema下,故相对于web应用程序的路径为:cinema
想要将文件命名为:search_bg.jpg
.png)
.png)
.png)
.png)
.png)
然后修改下Search.csp的样式代码,就可以使用此背景图了
.png)
.png)
工具地址:
如何启用SSL协议,并能够在使用DBeaver连接时捕获SSL协议交互流量?
如果方便的话,能否提供一个假数据的ssl包?
非常感谢
<Signature>的目的是携带可由消息接收者验证的数字签名。可以使用数字签名来检测消息更改,或者只是验证消息的某个部分是否确实由列出的实体生成。与传统的手写签名一样,数字签名是对文档的附加,只能由文档的创建者创建,并且不易伪造。
以下显示了部分示例:
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
</CanonicalizationMethod>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256"></SignatureMethod>
<Reference URI="#Timestamp-48CEE53E-E6C3-456C-9214-B7D533B2663F">
<Transforms>
<Transform Algorithm="http://www.w3.<EncryptedData> 的作用是携带加密数据,部分示例如下:
<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 会自动生成此标识符。<EncryptionMethod> 表示用于加密该数据的算法。<CipherData>携带加密数据,作为 <CipherValue>元素中的值。该元素的各部分如下:
<EncryptionMethod> 表示用于加密对称密钥的算法。在 IRIS 中,可以指定密钥传输算法(由 <EncryptionMethod> 的 Algorithm 属性显示)。请参阅指定密钥传输算法。
<KeyInfo> 标识用于加密此对称密钥的密钥。在 IRIS 中,<KeyInfo> 包含 <SecurityTokenReference>,其具有以下形式之一:
WS-Security 标头中较早位置的 <BinarySecurityToken> 的引用,如前面的示例所示。<SecurityTokenReference> 可以包含证书的 SHA1 指纹,如下所示:<SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.本主题讨论 SOAP 消息中较常见的安全元素,特别是 IRIS Web 服务和客户端可以发送的变体。此信息旨在帮助那些不经常使用 SOAP 的人重温记忆。此处的详细信息也可能有助于故障排除。
<BinarySecurityToken><BinarySecurityToken> 的目的是携带消息中其他元素使用的安全凭证,供消息接收者使用。安全凭证以序列化、编码的形式携带。以下显示了部分示例:
<BinarySecurityToken wsu:Id="SecurityToken-4EC1997A-AD6B-48E3-9E91-8D50C8EA3B53"
EncodingType="[parts omitted]#Base64Binary"
ValueType="[parts omitted]#X509v3">
MIICnDCCAYQ[parts omitted]ngHKNhh
</BinarySecurityToken>
该元素的各部分如下:
Id 是此令牌的唯一标识符,包含该标识符以便此消息中的其他元素可以引用此令牌。如有必要, IRIS 会自动生成此标识符。本节讨论 IRIS Web 服务和 Web 客户端中可能出现的与安全相关的错误:
IRIS Web 服务或客户端,则可能尚未配置为识别 WS-Security 标头。在这种情况下,当您尝试执行 Web 方法时,会收到如下一般错误:<ZSOAP>zInvokeClient+269^%SOAP.WebClient.1
将以下内容添加到Web服务或客户端并重新编译:
Parameter SECURITYIN="REQUIRE";
这种一般错误也可能是由于错误地调用 Web 方法(例如,在 Web 方法没有返回值时引用返回值)造成的。
如果使用 WS-Policy,则此项不适用。
Web 方法时,可能会收到以下安全错误:ERROR #6454: No supported policy alternative in configuration
Policy.Client.Demo1SoapConfig:service
SOAP 日志会指出这一点。例如:08/05/2011 14:40:11 *********************
Input to Web client with SOAP action = http://www.myapp.本主题提供信息来帮助识别 IRIS 中 SOAP 安全问题的原因。
有关与安全无关的问题的信息,请参阅 IRIS 中的 SOAP 问题故障排除。
要解决 SOAP 问题,通常需要以下信息:
WSDL 及其引用的所有外部文档。| Option | Usable with SSL/TLS? | Shows HTTP headers? | Comments |
|---|---|---|---|
| IRIS SOAP log | Yes | No | 对于安全错误,此日志显示的详细信息比 SOAP 故障中包含的更多。 |
| Web Gateway trace | Yes | Yes | 对于使用 MTOM(MIME 附件)的 SOAP 消息问题,查看 HTTP 标头至关重要。 |
| Third-party tracing tools | No | Depends on the tool | 一些跟踪工具还显示较低级别的详细信息,例如实际发送的数据包,这在进行故障排除时至关重要。 |
这 IRIS 中的 SOAP 问题故障排除中进行了讨论。
SOAP 客户端会使用 `HTTP 身份验证,请注意,可以启用身份验证的日志记录;请参阅提供登录凭据。正确处理故障也非常有用,这样就可以收到最好的信息。
<SubjectConfirmation>与 <EncryptedKey>要添加带有 <SubjectConfirmationData>(其中包含 <EncryptedKey> 元素)的 <SubjectConfirmation>,请执行以下操作:
%SYS.X509Credentials 的实例。或者使用与签署断言时使用的相同凭证集。
SAML 断言对象的 Subject 属性的 NameID 属性。SAML 断言对象的 Subject 属性的 AddEncryptedKeyConfirmation() 方法。method AddEncryptedKeyConfirmation(credentials As %X509.Credentials) as %Status
对于参数,请使用之前创建的 %SYS.X509Credentials实例。
开发者社区的成员,大家好!
我们都喜欢编码,但我们应该时不时地放下代码去锻炼身体! InterSystems 步行挑战将帮助您恢复精力、增强体质。 历史悠久的 Salt Road 在几个世纪以前连接起欧洲,沿着这条传奇的贸易路线,踏上从吕贝克到吕讷堡的虚拟赛道。
赢取跑步机、智能手表和奖牌等精美礼品。
👟🚶🧑🦼系紧鞋带,放下工作,更好地编码! 🔋💻💪
📅日期:9 月 23 日 - 10 月 20 日(可能有变动)
想加入吗? 详细信息如下。
<Subject>元素要将 <Subject> 元素添加到 %SAML.Assertion 实例,执行以下操作:
%SAML.Subject 的新实例。Subject 属性设置为等于此实例。<SubjectConfirmation> 元素要将 <SubjectConfirmation> 元素添加到的 %SAML.Assertion 实例,请使用以下某个小节中的步骤。
<SubjectConfirmation>使用方法 Holder-of-key要使用 Holder-of-key 方法添加 <SubjectConfirmation>,请执行以下操作:
%SYS.X509Credentials 的实例。或者使用与签署断言时使用的相同凭证集。
要创建令牌,调用 %SOAP.Security.BinarySecurityToken 的 CreateX509Token() 类方法。例如:
set bst=##class(%SOAP.Security.BinarySecurityToken).<BinarySecurityToken><BinarySecurityToken> 包含序列化、base-64 编码格式的证书。可以忽略此令牌,而改用标识证书的信息;接收方使用此信息从相应位置检索证书。为此,请使用上述步骤,并进行以下更改:
2 和 3。也就是说,不要创建和添加 <BinarySecurityToken>.。4 中,使用凭证集(而不是二进制安全令牌)作为 CreateX509() 的第一个参数。例如: set assertion=##class(%SAML.Assertion).CreateX509(credset,referenceOption)
对于 referenceOption,可选择指定一个值,如 X.509 凭证的参考选项中所述。可以使用除 $$$SOAPWSReferenceDirect 之外的任意值。
如果指定凭证集作为第一个参数(正如我们在这个变体中所做的那样),则默认引用选项是证书的指纹。
要创建未签名的 SAML 断言,请使用上述步骤,并进行以下更改:
1、2 和 3。也就是说,不要创建和添加 <BinarySecurityToken>