IRIS老是断网是什么原因呢?网络没问题。
根据剑桥词典的解释,令牌化数据是“用令牌(=代表第一个数据的不同数据)替换隐私数据,以防止隐私信息被不被允许做的人看到”(https://dictionary.cambridge.org/pt/dicionario/ingles/tokenize)。如今,一些公司… 和 LGPD)要求的重要策略。但是,为什么不使用加密呢?保护敏感数据的令牌化过程比数据加密更常用,原因如下:
- 更好的性能:在密集的操作处理中动态加密和解密数据会提高性能并需要更多的处理器能力。
- 测试:可以标记生产数据库并复制到测试数据库,并维护适合更真实的单元和功能测试的测试数据。
- 更好的安全性:如果黑客破解或获得密钥,所有加密数据都将可用,因为加密是一个可逆过程。令牌化过程是不可逆的。如果您需要从令牌化数据中获取原始数据,则需要维护一个安全且独立的数据库来链接到原始数据和令牌化数据。
令牌化架构
令牌化架构需要两个数据库:应用程序数据库(App DB)用于存储令牌化数据和来自业务的其他数据;令牌数据库(Token Database)用于存储原始值和令牌化值,因此当您需要时,您的应用程序可以获得原始值以向用户显示。还有一个 令牌生成器 REST API 用于标记敏感数据、存储到令牌数据库中并返回票证。
[toc]
第三十三章 Objects - OREFs
OREFs
对象类的 %New() 方法创建一个内部内存结构来包含对象的数据,并返回指向该结构的 OREF(对象引用)。 OREF 是 IRIS 中的一种特殊值。应该记住以下几点:
- 在终端中,
OREF的内容取决于所使用的语言:- 在
ObjectScript中,会看到一个由数字、@符号和类名称组成的字符串。 - 在
Python中,会看到一个包含类名和内存中18个字符的唯一位置的字符串。
- 在
例如:
TESTNAMESPACE>set myobj=##class(Sample.Person).%New()
TESTNAMESPACE>w myobj
3@Sample.Person
>>> myobj=iris.cls("Sample.Person")._New()
>>> print(myobj)
<iris.Sample.Person object at 0x000001A1E52FFD20>
- 如果没有使用预期的
OREF或者使用了错误类型的OREF,IRIS将返回错误。此错误与ObjectScript终端和Python终端不同:
TESTNAMESPACE>set x=2
TESTNAMESPACE>set x.Name="Fred Parker"
SET x.第三十一章 Classes - 继承规则
继承规则
与其他基于类的语言一样,可以通过继承组合多个类定义。 类定义可以扩展(或继承)多个其他类。这些类又可以扩展其他类。
请注意,类不能继承 Python 中定义的类(即 .py 文件中包含的类定义),反之亦然。
以下小节提供了中类继承的基本规则。
继承顺序
使用以下继承顺序规则:
- 默认情况下,如果在多个超类中定义了给定名称的类成员,则子类将从超类列表中最左边的类中获取定义。
- 如果类定义包含
Inheritance = right,则子类从超类列表中最右侧的类中获取定义。
由于历史原因,大多数类都包含 Inheritance = right。
主要的超类
任何扩展其他类的类都有一个主要超类。
无论类使用哪种继承顺序,主超类都是第一个,从左到右阅读。
对于任何类级编译器关键字,给定类使用其主超类中指定的值。
对于持久化类来说,主超类尤其重要。
最具体的类型类Most-Specific Type Class
尽管一个对象可以是属于多个类extent的实例(例如各种超类的extent),但它始终具有最特定的类型类 (MSTC)。当该对象是该类的实例但不是该类的任何子类的实例时,类是该对象的最具体类型。
重写方法
类从其一个或多个超类继承方法(类方法和实例方法),可以覆盖这些方法。如果这样做,必须确保方法定义中的签名与要重写的方法的签名匹配。
如今,关于大语言模型、人工智能等的消息不绝于耳。向量数据库是其中的一部分,并且已经有非IRIS的技术实现了向量数据库。
为什么是向量?
- 相似性搜索:向量可以进行高效的相似性搜索,例如在数据集中查找最相似的项目或文档。传统的关系数据库是为精确匹配搜索而设计的,不适合图像或文本相似性搜索等任务。
- 灵活性:向量表示形式用途广泛,可以从各种数据类型派生,例如文本(通过 Word2Vec、BERT 等嵌入)、图像(通过深度学习模型)等。
- 跨模态搜索:向量可以跨不同数据模态进行搜索。例如,给定图像的向量表示,人们可以在多模式数据库中搜索相似的图像或相关文本。
还有许多其他原因。
因此,对于这次 pyhon 竞赛,我决定尝试实现这种支持。不幸的是我没能及时完成它,下面我将解释原因。

.png)
增强的密码管理:无缝编辑密码
在不断发展的数字安全领域,强大的密码管理工具已变得不可或缺。我们的密码管理应用程序旨在简化和保护您的在线生活,现在提供了一项增强功能 - 轻松编辑密码的能力。
为什么这个功能会改变游戏规则?
- 灵活性:生活是动态的,我们的在线帐户也是如此。借助新的编辑密码功能,您可以在需要时灵活地修改已保存的密码。无论您是出于安全考虑想要更改密码还是只是更新密码,此功能都可以让您轻松适应。
- 简化的体验:编辑密码是无缝且用户友好的。不再需要繁琐的过程或从头开始创建新条目。只需点击几下,您的密码就会更新,从而使您的记录保持井然有序且最新。
- 增强安全性:我们将安全性放在首位。编辑密码功能可确保使用现有加密密钥对更新后的密码进行加密。这意味着即使修改密码,您的数据仍然受到保护。
- 个性化:您的密码,您做主。根据需要自定义标题、登录名和密码。此功能使您能够使您的密码管理器真正个性化,适合您独特的偏好和组织风格。
怎么运行的:
- 登录到您的帐户。
- 导航到您要编辑的密码。
- 单击“编辑”图标。
- 修改密码标题、登录名或密码本身。
- 保存您的更改。
- 您更新的密码现已安全存储并可供使用。
保持安全,保持井井有条:
凭借增强的编辑密码功能,我们的密码管理器为您的安全需求提供了更全面的解决方案。确保安全、井井有条并放心地管理您的密码。
第三十章 Classes - 方法生成器
方法生成器
方法生成器是类编译器在类编译期间调用的程序。它的输出是该方法的实际运行时实现。方法生成器提供了一种继承方法的方法,可以生成根据继承类或属性的需要定制的高性能、专用代码。在 IRIS 库中,方法生成器广泛用于数据类型和存储类。
Class Queries
类可以包含类查询。类查询定义可由该类使用的 SQL 查询,并指定用作查询容器的类。下面显示了一个示例:
Query QueryName(Parameter As %String) As %SQLQuery
{
SELECT MyProperty, MyOtherProperty FROM MyClass
WHERE (MyProperty = "Hello" AND MyOtherProperty = :Parameter)
ORDER BY MyProperty
}
定义类查询以提供预定义的查找以供在应用程序中使用。例如,可以按某些属性(例如按名称)查找实例,或提供满足一组特定条件的实例列表,例如从巴黎到马德里的所有航班。此处显示的示例使用参数,这是提供灵活查询的常用方法。请注意,可以在任何类中定义类查询;不需要在持久类中包含类查询。
执行SQL语句查询数据时,提示unexpected status code, unable to process HyperEvent:Gateway timeout(504)
有时,InterSystems 必须重新发布版本以纠正 1-2 个问题。此过程会生成称为“小数点版本”的新套件。
小数点版本与维护或功能版本不同。其目标是快速、像做外科手术地纠正该领域的紧急问题。
如何识别小数点发布
InterSystems 数据平台产品遵循以下发布约定:
<系统间产品> <年份>.<专业>.<维护>.<构建号>.<点>
例如:InterSystems IRIS 2022.1.4.204.1
识别小数点版本很简单:如果产品套件的最后一位数字非零,则您正在使用小数点版本。
我如何知道是否应该更换当前的软件?
每次推出小数点版本时,InterSystems 都会向我们的客户宣布并解释其解决的问题。公告是通过我们的开发者社区 ( https://community.intersystems.com/tags/intersystems-official ) 和产品警报发布的。
每个公告都会解释该版本解决的问题和相应的修复,并提供有关是否更换套件和容器的说明。因此,请阅读公告,如果您有任何疑问,请联系我们!
注意:如果您没有收到产品警报电子邮件,请访问我们的页面并注册: https: //www.intersystems.com/support/product-alerts-advisories/
第二十八章 Classes - 引用其他类的方法
引用其他类的方法
在方法(或例程)中,使用下面的语法来引用其他类中的方法:
要调用类方法并访问其返回值,请使用如下表达式:
##class(Package.Class).MethodName(arguments)
iris.cls("Package.Class").MethodName(arguments)
例如:
Set x=##class(Util.Utils).GetToday()
x=iris.cls("Util.Utils").GetToday()
也可以调用一个类方法而不访问它的返回值,如下所示:
Do ##class(Util.Utils).DumpValues()
iris.cls("Util.Utils").DumpValues()
注意:##class不区分大小写。
- 要调用实例方法,创建一个实例,然后在
ObjectScript或Python中使用如下表达式来调用该方法并访问其返回值:
instance.MethodName(arguments)
例如:
Set x=instance.GetName()
x=instance.GetName()
你也可以在不访问返回值的情况下调用实例方法,方法如下:
Do instance.InsertItem("abc")
instance.是时候宣布八月份的获奖者了!请欢迎我们出色的Global Masters英雄!
热烈的掌声归于这些开发者以及他们在 8 月份为我们全球开发者社区做出的巨大贡献:
🥇@Sylvain Guilbaud
🥈@Ashok Kumar T
🥉 @罗伯特·森珀

请在下面了解有关比赛和我们的优秀获奖者的更多信息。
InterSystems 还发布了容器化部署的IRIS。这篇文章旨在演示 InterSystems IRIS 和依赖 IRIS 后端的应用程序如何打包到镜像中并在容器中的其他计算机中运行,以及这样做有多么简单。
容器运行包含所有必需的可执行文件、二进制代码、库和配置文件的镜像。镜像可以从一台机器移动到另一台机器,像 Docker Hub 这样的镜像存储库可以简化这个过程。
我在本演示中使用了 Open Exchange 的应用程序。
演示视频: https://www.loom.com/share/93f9a760b5f54c0a8811b7a212387b9d
IRIS 数据平台社区版的镜像(image)可以在 InterSystems 容器注册表中找到:
https: //containers.intersystems.com/contents
为了在主机中使用 IRIS 的容器化实例,应在运行时拉取它。
为此,Dockerfile 需要具有以下命令,如下所示:
Dockerfile:
Dockerfile
|
|
昨天,我在一个客户网站提供从 Studio 迁移到 VS Code 的定制咨询时,就遇到了这种情况。
该站点的服务器已配置为使用delegated authentication,但尚未针对 /api/atelier Web 应用程序设置“delegated”复选框,而 InterSystems ObjectScript 扩展包的成员正是使用该复选框进行连接的。
一旦我们的应用程序设置了其复选框并单击了服务器管理器刷新按钮,就可以在服务器上枚举命名空间。
如题,我根据日志发现并没有snmpext.dat文件
第二十七章 Classes - 引用其他类成员
引用其他类成员
在方法中,使用下面的语法来引用其他类成员:
- 要引用
ObjectScript中的参数,使用如下表达式:
..#PARAMETERNAME
只能使用ObjectScript直接访问参数。要从Python访问参数,请使用ObjectScript包装器方法返回参数,并在需要时调用此方法。例如:
Class User.Employee Extends %RegisteredObject
{
Parameter ADDRESS = "123 Main St.";
ClassMethod AddressWrapper() As %String [ Language = objectscript ]
{
return .#ADDRESS
}
ClassMethod OfficeLocation() [ Language = python ]
{
import iris
location=iris.cls("User.Employee").InterSystems 团队本周末将前往麻省理工学院最大的黑客马拉松,届时我们将为黑客们带来一项技术挑战。
我们为黑客们提供在他们的项目中使用 IntegratedML 或 InterSystems Supply Chain Orchestrator 的机会,以便争夺一些非常酷的奖品!
如果您在波士顿并且有兴趣成为活动中的 InterSystems 导师,请给我们写信。

我们最近发布了 IRIS 2023.2版本。
此版本从此类“HS.HC.Util.Installer”中删除了“InstallFoundation”。
这是一个没有记录在官方文档中的私有的方法,但它被社区广泛用来安装 FHIR 服务器。
所以如果你遇到这个错误:在构建我们自己的 FHIR 服务器的演示时,您可以通过替换此行来修复它: 把do ##class(HS.HC.Util.Installer).InstallFoundation (namespace) 替换成 Do ##class(HS.Util.Installer.Foundation).Install(namespace) `
第二十六章 Classes - Methods
Methods
方法有两种:实例方法和类方法(在其他语言中称为静态方法)。
指定方法关键字
在方法定义中,可以包含影响方法行为的可选编译器关键字。以下列表显示了一些最常见的方法关键字:
Language
在 IRIS 中,可以用 ObjectScript 或 Python 编写方法。要指定编写方法所用的语言,请使用以下语法:
Method MyMethod() [ Language = objectscript ]
{
// implementation details written in ObjectScript
}
Method MyMethod() [ Language = python ]
{
# implementation details written in Python
}
如果方法不使用 Language 关键字,编译器将默认该方法是用 ObjectScript 编写的。
必须以全部小写字母编写方法的语言,如示例中所示。
Private
该关键字指定该方法是私有的,并且只能与 ObjectScript 方法一起使用。子类继承 Private 关键字的值并且不能覆盖它。
默认情况下,方法是公共的并且可以在任何地方访问。可以将方法标记为私有(通过 Private 关键字)。如果你这样做:
- 只能通过它所属类的方法来访问。
第二十五章 Classes - 基于数据类型的属性
基于数据类型的属性
当定义属性并将其类型指定为数据类型类时,可以使用特殊选项来定义和使用该属性,如本节中所述。
数据类型类
数据类型类使能够强制执行有关属性值的规则集。
IRIS 提供的数据类型类包括 %Library.String、 %Library.Integer、 %Library.Numeric、%Library.Date等等。因为 %Library 包的类名可以缩写,所以可以缩写其中的许多类;例如, %Date 是 %Library.Date的缩写。
每个数据类型类都具有以下特征:
-
它指定编译器关键字的值。对于属性,编译器关键字可以执行以下操作:
- 使属性成为必需的
- 指定属性的初始值
- 控制如何将属性映射到
SQL、ODBC和Java客户端
-
它指定影响细节的参数值,如下所示:
- 数据类型允许的最大和最小逻辑值
- 字符串可以包含的最大和最小字符数
- 小数点后的位数
- 如果字符串超过最大字符数是否截断
- 显示格式
- 如何转义任何特殊的
XML或HTML字符 - 可在任何用户界面中使用的逻辑值和显示值的枚举列表
- 字符串必须匹配的模式(自动使用模式匹配运算符)
- 导入或导出到
XML时是否尊重或忽略UTC时区
-
它提供了一组方法来在存储(磁盘上)、逻辑(内存中)和显示格式之间转换文字数据。
可以添加自己的数据类型类。
InterSystems 很高兴地宣布InterSystems Supply Chain Orchestrator™的核心组件,即 InterSystems IRIS for Supply Chain 2023.1 版,现已正式发布 (GA)。
InterSystems Supply Chain Orchestrator (InterSystems 供应链协调器)基于 InterSystems IRIS® 构建,InterSystems IRIS® 是我们完整的云优先数据平台,支持智能数据编织(smart data fabric)架构,使构建和部署连接数据和应用程序孤岛的高性能、支持机器学习的应用程序变得更加容易。它将 InterSystems IRIS 的强大功能与供应链特定的加速器和框架结合在一起,为供应链编排、需求感知和预测、履行以及快速消费品重新包装提供优化的解决方案。
InterSystems Supply Chain Orchestrator 的一个关键组件是 InterSystems IRIS for Supply Chain,它使 InterSystems IRIS 提供的智能数据编织(smart data fabric)架构更接近供应链用例,并有助于加速实现价值。

第二十四章 Classes - 指定属性关键字
指定属性关键字
在属性定义中,可以包含影响属性使用方式的可选属性关键字。以下列表显示了一些最常见的关键字:
Required
指定可以将此类实例之前设置的属性值存储到磁盘。默认情况下,属性不是必需的。在子类中,可以将可选属性标记为必需,但不能执行相反的操作。
InitialExpression
指定属性的初始值。默认情况下,属性没有初始值。子类继承InitialExpression关键字的值并且可以覆盖它。指定的值必须是有效的 ObjectScript 表达式。
Transient
指定该属性不存储在数据库中。默认情况下,属性不是瞬态的。子类继承 Transient 关键字的值并且不能覆盖它。
Private
指定该属性是私有的。子类继承 Private 关键字的值并且不能覆盖它。
默认情况下,属性是公共的并且可以在任何地方访问。可以将属性标记为私有(通过 Private 关键字)。如果是这样,则只能通过其所属对象的方法来访问它
在 IRIS 中,私有属性始终是继承的,并且对定义该属性的类的子类可见。
在其他编程语言中,这些通常称为受保护的属性。
Calculated
指定在实例化包含该属性的对象时,没有为其分配内存存储。默认情况下,不计算属性。子类继承了Calculated关键字并且不能重写它。
MultiDimensional
指定属性是多维的。
第二十三章 Classes - 属性
形式上 IRIS 有两种属性:
-
属性,保存值。该值可以是以下任意值:
- 单个文字值,通常基于数据类型。
- 对象值(包括集合对象和流对象)。
- 多维数组。这种情况不太常见。
属性一词通常仅指作为
properties的attributes,而不是指具有关联的属性。 -
关系,保持对象之间的关联。
可以在包含 ObjectScript 方法、Python 方法或两者组合的类中定义属性。但是,无法从 Python 方法访问关系。本节展示了一个示例类,其中包含显示以下一些变体的属性定义:
Class MyApp.Main.第二十二章 Classes - 调用类方法的快捷方式
调用类方法的快捷方式
使用 ObjectScript 调用类方法时,在以下情况下可以省略包(或更高级别的包):
- 引用是在一个类内,并且被引用的类在同一个包或子包中。
- 引用位于类内,并且该类使用
IMPORT指令导入包含引用的类的包或子包。 - 该引用位于方法内,并且该方法使用
IMPORT指令导入包含引用的类的包或子包。
从 ObjectScript 或 Python 调用类方法时,在以下情况下可以省略包(或更高级别的包):
- 指的是
%Library包中的一个类,该类是经过特殊处理的。可以将类%Library.ClassName引用为%ClassName。例如,可以将%Library.String引用为%String。 - 指的是
User包中的一个类,该类是经过特殊处理的。例如,可以将User.MyClass引用为MyClass。
在 User 包中不提供任何类,这些类是保留给使用的。
在所有其他情况下,必须始终使用完整的包和类名称来调用类方法。
类参数
类参数定义一个对于给定类的所有对象都相同的值。除了极少数例外,该值是在编译类时确定的,并且不能在运行时更改。将类参数用于以下目的:
- 定义一个在运行时无法更改的值。
- 定义有关类定义的用户特定信息。类参数只是一个任意的名称-值对;可以使用它来存储您喜欢的有关课程的任何信息。
您好!社区的各位老师,
在我的上一篇文章中,我们学习了以下主题:
-
什么是 Docker?
-
Docker 的一些好处
-
Docker 是如何工作的?
-
Docker 镜像
-
Docker容器
-
Docker 镜像存储库
-
InterSystems 的 Docker 镜像存储库
-
Docker安装
-
Docker 基本命令
-
使用 Docker 运行 IRIS 社区版
-
Docker 桌面图形用户界面
在本文中,我们将讨论以下主题:
-
使用 Docker Compose 文件( YAML 文件)
-
Docker 文件的使用(用于构建 Docker 镜像)
-
Docker 卷的使用
那么让我们开始吧。
嗨,开发者们!
今天我想谈谈一个让我感到困难的话题。我相信你们中的很多人一定已经遇到过这种情况(所谓的“瓶颈”)。由于这是一个广泛的主题,因此本文将仅重点关注识别可能导致缓慢问题的传入 HTTP 请求。我还将向您提供我开发的一个小工具来帮助识别它们。
我们的软件变得越来越复杂,处理来自不同来源的大量请求,无论是前端还是第三方后端应用程序。为了确保最佳性能,必须有一个能够记录一些关键测量的日志系统,例如响应时间、global引用的数量以及每个 HTTP 响应执行的代码行数。作为工作的一部分,我参与了 EMR 软件的开发以及事件分析。由于用户负载主要来自 HTTP 请求(REST API 或 CSP 应用程序),因此在发生普遍缓慢问题时进行此类测量的需求变得显而易见。
第十九章 ObjectScript - 执行例程
执行例程
执行例程时,使用DO命令,如下所示:
do ^routinename
要执行一个过程、函数或子程序(不访问其返回值),可以使用以下命令:
do label^routinename
或
do label^routinename(arguments)
要执行过程、函数或子例程并引用其返回值,可以使用$$label^routinename或$$label^routinename(参数)形式的表达式。例如:
set myvariable=$$label^routinename(arguments)
在所有情况下,如果标签位于同一个例程中,则可以省略插入符号和例程名称。例如:
do label
do label(arguments)
set myvariable=$$label(arguments)
在所有情况下,传递的参数可以是文字值、表达式或变量名。
New 命令
IRIS提供了另一种机制,使能够控制例程中变量的作用域:NEW命令。此命令的参数是一个或多个变量名,以逗号分隔的列表表示。变量必须是公共变量,不能是Global。
该命令为变量建立一个新的有限上下文(可能已经存在,也可能不存在)。
大家好!
我们的第二届 InterSystems Idea-A-Thon创意马拉松顺利结束,产生了29 个与竞赛主题相关的精彩创意:
💡使用 InterSystems IRIS 快速、安全、绿色地运行解决方案💡
感谢大家的想法、评论和投票!
现在是时候宣布获奖者了!

第十八章 ObjectScript - 使用例程
例程
可以将例程视为 ObjectScript 程序。例程可以从头开始编写,也可以在编译类时自动生成。
Procedures, Functions, and Subroutines 过程、函数和子程序
在 ObjectScript 例程中,标签定义以下代码单元之一的起点:
Procedures过程(可选地返回一个值)。过程中定义的变量是该过程私有的,这意味着它们不可用于其他代码。对于函数和子例程来说,情况并非如此。
过程也称为过程块。
- 函数(返回值)。
- 子例程(不返回值)。
建议使用过程Procedures,因为这可以简化控制变量范围的任务。然而,在现有代码中,可能还会看到函数和子例程,并且能够识别它们非常有用。以下列表显示了所有这些形式的代码的外观。
procedure
label(args) scopekeyword {
zero or more lines of code
QUIT returnvalue
}
或者
label(args) scopekeyword {
zero or more lines of code
}
label 是过程的标识符。
args 是可选的以逗号分隔的参数列表。即使没有参数,也必须包含括号。
大家好。
在上一篇文章中,我们了解了如何配置 EMPI 来接收 FHIR 消息。为此,我们安装了 InterSystems 提供的 FHIR 适配器,该适配器配置了一个可以向其发送 FHIR 消息的 REST 端点。然后,我们将获取消息并将其转换为 %String,我们将通过 TCP 将其发送到 HSPIDATA 命名空间中配置的 EMPI 的输出。
好吧,是时候看看我们如何检索消息、将其转换回 %DynamicObject 并将其解析为 EMPI 用来存储信息的类。
TCP消息接收
正如我们所指出的,从配置了 FHIR 资源接收的生产中,我们已将消息发送到我们有业务服务侦听的特定 TCP 端口,在我们的例子中,该业务服务将是一个简单的EnsLib.TCP。 PassthroughService的目标是捕获消息并将其转发到业务流程,我们将在其中执行所需的数据转换。
这里有我们的商业服务:
.png)
这是它的基本配置:
.png)
FHIR 消息的转变
正如你所看到的,我们只配置了通过 TCP 接收消息的端口以及我们将向其发送消息的组件,在我们的例子中我们将其称为 Local.BP.FHIRProcess,让我们看一下说类来看看我们如何从 FHIR 资源中检索信息:
Class Local.BP.FHIRProcess Extends Ens.对于即将到来的Python 竞赛,我想制作一个小型演示,介绍如何使用 Python 创建一个简单的 REST 应用程序,该应用程序将使用 IRIS 作为数据库。使用这个工具
- FastAPI框架,高性能,易学,快速编码,可用于生产
- SQLAlchemy 是 Python SQL 工具包和对象关系映射器,为应用程序开发人员提供 SQL 的全部功能和灵活性
- Alembic 是一个轻量级数据库迁移工具,可与 SQLAlchemy Database Toolkit for Python 一起使用。
- Uvicorn 是 Python 的 ASGI Web 服务器实现。

