文章 Kelly Huang · 九月 3, 2023 8m read

大家好。

在上一篇文章中,我们了解了如何配置 EMPI 来接收 FHIR 消息。为此,我们安装了 InterSystems 提供的 FHIR 适配器,该适配器配置了一个可以向其发送 FHIR 消息的 REST 端点。然后,我们将获取消息并将其转换为 %String,我们将通过 TCP 将其发送到 HSPIDATA 命名空间中配置的 EMPI 的输出。

好吧,是时候看看我们如何检索消息、将其转换回 %DynamicObject 并将其解析为 EMPI 用来存储信息的类。

TCP消息接收

正如我们所指出的,从配置了 FHIR 资源接收的生产中,我们已将消息发送到我们有业务服务侦听的特定 TCP 端口,在我们的例子中,该业务服务将是一个简单的EnsLib.TCP。 PassthroughService的目标是捕获消息并将其转发到业务流程,我们将在其中执行所需的数据转换。

这里有我们的商业服务:

这是它的基本配置:

FHIR 消息的转变

正如你所看到的,我们只配置了通过 TCP 接收消息的端口以及我们将向其发送消息的组件,在我们的例子中我们将其称为 Local.BP.FHIRProcess,让我们看一下说类来看看我们如何从 FHIR 资源中检索信息:

 ClassExtendsAs

让我们更详细地看看我们正在做什么:

0
0 346
文章 Kelly Huang · 九月 3, 2023 7m read

对于即将到来的Python 竞赛,我想制作一个小型演示,介绍如何使用 Python 创建一个简单的 REST 应用程序,该应用程序将使用 IRIS 作为数据库。使用这个工具

  • FastAPI框架,高性能,易学,快速编码,可用于生产
  • SQLAlchemy 是 Python SQL 工具包和对象关系映射器,为应用程序开发人员提供 SQL 的全部功能和灵活性
  • Alembic 是一个轻量级数据库迁移工具,可与 SQLAlchemy Database Toolkit for Python 一起使用。
  • Uvicorn 是 Python 的 ASGI Web 服务器实现。
0
0 295
文章 姚 鑫 · 九月 3, 2023 2m read

第十七章 ObjectScript - 使用宏和包含文件

使用宏和包含文件

如前所述,可以定义宏并稍后在同一类或例程中使用它们。更常见的是,在包含文件中定义它们。

Macros

ObjectScript 支持定义替换的宏。定义可以是一个值、整行代码或(使用 ##continue 指令)多行。

要定义宏,请使用 指令或其他预处理器指令。例如:

#define macroname <definition> 

要引用宏,请使用以下语法:

$$$macroname

或者:

$$$macroname(arguments)

使用宏来确保一致性。例如:

为了让了解宏可以做什么,以下示例显示了内部使用的宏的定义:

这个宏接受参数,就像许多宏一样。它还引用了另一个宏。

一些系统类广泛使用宏。

预处理器指令记录在 宏和使用 中的宏预处理器中。

注意:管理门户列出了包含例程的Include files 。然而,Include files 实际上并不是例程,因为它们不可执行。

可以在类或例程中定义宏,并稍后在同一类或例程中使用它们。更常见的是,在中心位置定义它们。为此,需要创建并使用包含文件。包含文件定义宏,并且可以包含其他包含文件,并且是扩展名为 .inc 的文档。

创建包含文件后,可以执行以下操作:

  • 在任何例程的开始处包含
0
0 96
文章 姚 鑫 · 九月 2, 2023 2m read

第十六章 ObjectScript - 日期和时间值

日期和时间值

当地时间

要访问当前进程的日期和时间,可以使用 $HOROLOG 特殊变量。因此,在许多 IRIS 应用程序中,日期和时间都以此变量使用的格式存储和传输。这种格式通常称为$H 格式或 格式。

从操作系统检索日期和时间,因此始终位于本地时区。

IRIS 类库包含以更常见的格式(例如 ODBC)表示日期的数据类型类,许多应用程序使用这些数据类型而不是 $H 格式。请注意,通过数据类型类中的 支持 时间,新应用程序应使用该类来表示日期/时间值。

UTC Time

IRIS 还提供 $ZTIMESTAMP 特殊变量,其中包含 格式的协调世界时值形式的当前日期和时间。这是全球时间和日期标准;该值很可能与本地时间(和日期)值不同。

日期和时间转换

包含用于转换日期和时间值的函数。

给定 格式的日期,函数 返回一个表示指定格式的日期的字符串。

例如:

给定 格式的日期和时间,函数 $ZDATETIME 返回一个表示指定格式的日期和时间的字符串。

TESTNAMESPACE>WRITE $ZDATETIME($HOROLOG,3)
2010-12-03 14:55:48
  • 给定其他格式的字符串日期和时间,函数 和 将它们转换为 格式。
  • 函数 和 将时间与
0
0 107
文章 Jingwei Wang · 九月 1, 2023 2m read

JWT Authentication 原理及验证流程

原理

JWT 是一种结构紧凑、URL 安全的身份验证、授权或信息交换方式。在身份验证的情况下,服务器会向已通过身份验证的客户端提供一个 JWT,这样客户端在 JWT 过期之前就无需再提供密码来访问服务器上受保护的资源。

验证流程:

  1. 客户端发送Login到服务端
  2. 服务端返回 JWT给客户端
  3. 客户端校验JWT签名
  4. 客户端发送带有JWT签名的request到服务端
  5. 服务端检查JWT签名的有效期,在有效期内,则返回response给客户端,不在有效期内,返回error

JWT 配置步骤

  1. 创建REST服务
  2. 配置Web Application
  3. 安全配置
  4. 客户端发送Login,从服务器获取JWT
  5. 配置成功,发送带有JWT的request

1. 创建REST服务

在InterSystems IRIS中,可以使用/api/mgmnt自动创建REST的 .disp .impl 和 .spec 类,本篇文章不介绍具体创建REST服务的流程,具体内容请参考社区文章创建REST 服务

2.

0
0 389
文章 Michael Lei · 八月 31, 2023 1m read

InterSystems 常见问题解答

通过在持久类(=table)定义中提供的%BuildIndices() 方法的参数中指定要重建索引的 ID 的开始值和结束值,您可以仅重建该范围内的索引。

例如,要仅针对 ID=10 到 20 重建 Sample.Person 类中的 NameIDX 索引和 ZipCode 索引,请执行以下代码(ID 范围在第 5 个和第 6 个参数中指定)。

 set##class%BuildIndices

$LB() 是$ListBuild() 函数。 %BuildIndices() 方法使用它来指定索引名称。

有关如何重建索引的更多信息,请参阅文档

2018.1版本请参考此文档

0
0 293
文章 姚 鑫 · 八月 31, 2023 2m read

第十四章 ObjectScript - 系统函数

系统函数

本节重点介绍 ObjectScript 中一些最常用的系统函数。

这些函数的名称不区分大小写。

类库还提供了大量实用方法,可以像使用函数一样使用它们。

Value Choice

在给定一些输入的情况下,可以使用以下函数来选择一个值:

  • $CASE 将给定的测试表达式与一组比较值进行比较,然后返回与匹配的比较值关联的返回值。例如:
TESTNAMESPACE>set myvar=1
 
TESTNAMESPACE>write $CASE(myvar,0:"zero",1:"one",:"other")
one
  • $SELECT 检查一组表达式并返回与第一个 true 表达式关联的返回值。例如:
TESTNAMESPACE>set myvar=1
 
TESTNAMESPACE>write $SELECT(myvar=0:"branch A",1=1:"branch B")
branch B

存在函数

可以使用以下函数来测试变量或变量节点是否存在。

  • 要测试特定变量是否存在,请使用 $DATA 函数。

对于包含多个节点的变量,该函数可以指示给定节点是否存在,以及给定节点是否有值和子节点。

  • 要获取变量的值(如果存在)或获取默认值(如果不存在),请使用 函数。

列表函数

提供本机列表格式。

0
0 110
问题 li liao · 八月 30, 2023

参考 https://blog.csdn.net/InterSystems/article/details/115350635 搭建 mirror ,获取数据变更,示例给出了获取数据变更的代码:

Class ZCustom.MirrorDejournal Extends SYS.MirrorDejournal
{
    Method RunFilter(
        MirrorDBName As %String,
        GlobalReference As %String,
        RecordType As %String,
        Address As %Integer) As %Integer
{
    Set ^CDCLog( $I($^CDCLog))=$lb(MirrorDBName,GlobalReference,RecordType,Address)
    Quit 1
}

示例代码将变更存储在 global 对象 CDCLog 中,想请问下获取变更前后数据,发送到外部系统,有哪些方式?

1
0 247
文章 Louis Lu · 八月 30, 2023 1m read

大家可以通过InterSystems IRIS 管理门户SMP查看当前数据库剩余空间,路径是 Management Portal: System Operation > Database

当然大家也可以通过下面的代码查看数据库的可用磁盘空间:

 /// ZISJ.macSet
0
0 139
文章 Jingwei Wang · 八月 30, 2023 5m read

案例描述

假设您是一名 Python 开发人员或拥有一支训练有素的 Python 专业团队,但您分析 IRIS 中某些数据的期限很紧迫。当然,InterSystems 提供了许多用于各种分析和处理的工具。然而,在给定的场景中,最好使用旧的 Pandas 来完成工作,然后将 IRIS 留到下次使用。
对于上述情况和许多其他情况,您可能需要从 IRIS 获取表来管理 InterSystems 产品之外的数据。但是,当您有任何格式(即 CSV、TXT 或 Pickle)的外部表时,您可能还需要以相反的方式执行操作,您需要在其上导入并使用 IRIS 工具。
无论您是否必须处理上述问题,Innovatium让我明白,了解更多解决编码问题的方法总是能派上用场。好消息是,从 IRIS 引入表时,您不需要经历创建新表、传输所有行以及调整每种类型的繁琐过程。
本文将向您展示如何通过几行代码快速将 IRIS 表转换为 Pandas 数据框架并向后转换。您可以在我的GitHub上查看代码,您可以在其中找到包含本教程每个步骤的 Jupiter Notebook。

从 IRIS 引入一张Table

当然,您应该首先导入该项目所需的库。

 importasimport

下一步将是在 Python 文件和 IRIS 实例之间创建连接。

0
0 241
文章 姚 鑫 · 八月 29, 2023 4m read

第十三章 ObjectScript - 特殊变量

特殊变量

一些特殊变量提供有关代码运行环境的信息。其中包括以下内容:

  • $HOROLOG,包含操作系统给出的当前进程的日期和时间。请参阅日期和时间值。
  • $USERNAME$ROLES,包含有关当前使用的用户名以及该用户所属角色的信息。
 write "You are logged in as: ", $USERNAME, !, "And you belong to these roles: ",$ROLES
  • $ZVERSION,其中包含标识当前运行的 版本的字符串。

其他包括 $JOB$ZTIMEZONE$IO 和 。

其他变量提供有关代码处理状态的信息。其中包括 、、 和 。

特殊变量

特殊变量 提供对大量实用方法的轻松访问。

特殊变量 是 包的别名,其中包含提供可满足各种需求的类方法的类。引用 中方法的惯用方法是构建使用 变量的引用。例如,以下命令在类中执行 中的 方法:

由于特殊变量的名称不区分大小写(与类及其成员的名称不同),因此以下命令都是等效的:

 DO ##class(%SYSTEM.OBJ).SetFlags("ck")
 DO $System.OBJ.SetFlags("ck")
 DO $SYSTEM.OBJ.SetFlags("ck")
 DO $system.OBJ.SetFlags("ck")
0
0 109
文章 Jimmy Xu · 八月 28, 2023 2m read

大家好,由于我目前在做一个数据分析的demo,所以需要在IRIS Data platform存储百万行数据供我测试。因此使用Populate Utility 来自动生成我需要的数据。

在这篇文章中,我将会给大家分享我使用 Populate utility 包括POPSPEC parameter的心得和经验。

1.创建两个persistent class , popPatient用于存储病人信息, popSign用于存储收集到的对应病人的生命信息。在定义persistent class时需要在后面引用(%Persistent, %Populate)以支持调用Populate Utility工具.

2.1 为了使我们生成出来的数据更贴合正常的情况,我们不能取一个超出常识的值比如心跳1000次一分钟。所以我使用(MAXVAL MINVAL)来限制了生成数据的区间。

popPatient 如图所示我限制了生成病人年龄的取值范围

popSign 限制了心跳的区间

2.2 如果我们需要使用自定义的自动生成方法,这时我们需要使用 POPSPEC 来定义生成的    内容,例如 我们有预定义的method,可以直接引用并生成美国电话号码,但是我想生成一个符合澳大利亚电话号码格式的值。并且在另外一张表中(popSign)记录收集到的心率的时间戳,我们可以使用$H 的方法来收集时间戳。

0
0 189
文章 姚 鑫 · 八月 28, 2023 3m read

第十二章 ObjectScript - 命令

命令

本节概述了在 ObjectScript 常用命令。其中包括与其他语言中的命令相似的命令,以及其他语言中没有等效项的其他命令。

命令名称不区分大小写,尽管按照惯例它们在运行文本中显示为全大写。

熟悉的命令

ObjectScript 提供命令来执行熟悉的任务,如下所示:

  • 要定义变量,请使用 SET(如前所示)。

  • 要删除变量,请使用 KILL,如前所示。

  • 要控制逻辑流程,请使用以下命令:

    • IFELSEIFELSE 一起工作
    • ,可以单独使用
    • DO 和 可以一起使用
    • QUIT,也可以返回一个值

    还有其他用于流量控制的命令,但使用频率较低。

  • 要捕获错误,请使用 和 ,它们一起工作。

  • 要写入值,请使用 WRITE。这会将值写入当前设备(例如,终端或文件)。

    在不带参数的情况下使用该命令会写入所有局部变量的值。

    此命令可以使用一小组格式控制代码字符来定位输出。在现有代码中,可能会看到感叹号,它开始一个新行。例如:

  • 要从当前设备(例如终端)读取值,请使用 。

  • 要使用主设备以外的设备,请使用以下命令:

    • 使设备可供使用。
    • 指定一个打开的设备作为当前设备,供 WRITEREAD 使用。
    • 使设备不再可用。
  • 要控制并发,请使用 。请注意,

0
0 116
公告 Claire Zheng · 八月 28, 2023

SUTA培训是InterSystems专为SUTA有效期客户提供的原厂产品技术服务,具体包括产品的基础管理、编程管理、高级管理和开发培训等。2023 SUTA培训报名现已启动,汇聚技术专家,与新老客户一起探讨提升InterSystems数据平台基础管理运维的技能和知识:

  • 新客户:系统学习管理运维工作的整体架构和基础概念
  • 老客户:更加深入和全面地加强对管理运维工作的理解和提升
  • 常见运维问题解析:助力您轻松应对日常工作中的问题和挑战
  • 现场互动答疑:体验InterSystems技术专家的一对一诊断指导

点击此处,了解培训详情,报名参会(扫描下图中的二维码报名)。请关注InterSystems微信公众号,及时获取开播信息。

快来报名吧!

0
0 285
文章 姚 鑫 · 八月 27, 2023 1m read

第十一章 ObjectScript - 操作符

操作符

ObjectScript 中的运算符优先级严格是从左到右;在表达式中,运算按照它们出现的顺序执行。可以在表达式中使用显式括号来强制某些操作先于其他操作执行。

通常,即使并不严格需要括号,也会使用括号。很有用,因为它使代码的意图更加清晰。

Familiar Operators

ObjectScript 为常见活动提供以下运算符:

  • 数学运算符:加法 (+)、减法 (-)、除法 (/)、乘法 ()、整数除法 ()、模数 () 和求幂 ()
  • 一元运算符:正 () 和负 ()
  • 字符串连接运算符 ()
  • 逻辑比较运算符:等于()、大于(>)、大于等于()、小于()、小于等于()
  • 逻辑补码运算符 ()

可以在任何逻辑值之前以及逻辑比较运算符之前使用它。

  • 组合逻辑值的运算符: ()、 ()

请注意, 还支持其中每种形式的较旧的、效率较低的形式: 是 运算符的一种形式,而 是 的一种形式操作员。可能会在现有代码中看到这些旧的形式。

Unfamiliar Operators

ObjectScript 还包括某些语言中没有等效项的运算符。最重要的如下:

  • 模式匹配运算符 () 测试其左操作数中的字符是否使用其右操作数中的模式。可以指定模式出现的次数、指定替代模式、指定模式嵌套等等。

例如,如果字符串 (

0
0 108
文章 姚 鑫 · 八月 26, 2023 3m read

第十章 ObjectScript - 按值或按引用传递变量

按值或按引用传递变量

调用方法时,可以通过值或引用将变量值传递给该方法。在大多数情况下,这些变量是没有下标的局部变量,因此本节首先讨论这些变量。

与其他编程语言一样, IRIS 具有一个存储位置,其中包含每个局部变量的值。变量的名称充当内存位置的地址。

当将没有下标的局部变量传递给方法时,可以按值传递该变量。这意味着系统会复制该值,从而使原始值不受影响。要传递内存地址,请在参数列表中紧邻变量名称之前放置一个句点。

为了演示这一点,请考虑名为 Test.Parameters 的类中的以下方法:

ClassMethod Square(input As %Integer) As %Integer
{
    set answer=input*input
    set input=input + 10
    return answer
}

假设定义一个变量并将其按值传递给此方法:

TESTNAMESPACE>set myVariable = 5
 
TESTNAMESPACE>write ##class(Test.Parameters).Square(myVariable)
25
TESTNAMESPACE>write myVariable
5
0
0 112
文章 Michael Lei · 八月 26, 2023 3m read

今年两会期间,有多名两会委员联名提出了《关于建设全国统一医院电子病历系统的提案》,国家卫健委相关部门也马上给予回应,称正在研究建立全国统一的电子健康档案、电子病历。结合数字中国的主要目标之一,让数据多跑腿,群众少走路,在这一背景下,从患者端开始,建立全国统一的电子病历APP已经变得迫切而重要。这不仅有助于提高医疗服务的效率和质量,还能够让患者更好地参与到医疗决策中,实现信息的共享和整合。

电子病历与患者共享的必要性和重要性

  1. 信息共享与医疗协同: 通过建立患者全国统一的电子病历系统,医疗机构之间可以更加方便地共享患者的健康信息。这对于多学科合作诊疗、转诊和患者就诊历史的追溯具有重要意义,可以避免重复检查和繁琐的病历复印过程,提高医疗协同效率。
  2. 患者参与和知情权的加强: 电子病历使患者能够更直接地了解自己的健康状况和诊疗过程。患者可以随时访问自己的电子病历,了解诊断结果、治疗方案和用药情况,从而更好地参与医疗决策,增强自己的知情权。
  3. 紧急情况下的救治效率提升: 在紧急情况下,如意外事故或突发疾病,医护人员可以通过电子病历迅速获取患者的基本健康信息,有助于快速判断病情,做出及时救治决策。

实现方案

  1. 使用通用数据模型Common Data Model: 制定统一的患者端电子病历数据交换标准,确保不同医疗机构产生的数据可以互通互用。
0
0 253
文章 姚 鑫 · 八月 25, 2023 2m read

第九章 ObjectScript - 多维数组

多维数组

ObjectScript 中,任何变量都可以是多维数组(也称为数组)。多维数组通常用于保存一组以某种方式相关的值。 ObjectScript 提供的命令和函数可以方便、快速地访问值。

可能会也可能不会直接使用多维数组,具体取决于使用的系统类和自己的偏好。当需要一个用于存储相关值集的容器时,IRIS 提供了一种基于类的替代方案。请参阅集合类。

Basics

多维数组由任意数量的节点组成,由下标定义。以下示例设置数组的几个节点,然后打印数组的内容:

 set myarray(1)="value A"
 set myarray(2)="value B"
 set myarray(3)="value C"
 zwrite myarray

此示例显示了一个典型的数组。

  • 该数组有一个下标。在这种情况下,下标是整数 123
  • 不需要提前声明数组的结构。
  • 是数组本身的名称。
  • 提供可作用于整个数组或特定节点的命令和函数。例如:

还可以特定节点及其子节点。

  • 以下变体设置名为 ^myglobalGlobal
0
0 101
文章 姚 鑫 · 八月 24, 2023 2m read

第八章 ObjectScript - 变量的可用性和范围

变量的可用性和范围

ObjectScript 支持以下程序流程,(在大多数方面)与其他编程语言支持的程序流程类似:

  1. 用户可能从用户界面调用方法。
  2. 该方法执行一些语句,然后调用另一个方法。
  3. 该方法定义了局部变量 ABC

变量 ABC 在此方法的范围内。它们对于该方法是私有的。

该方法还定义了 。

  1. 第二个方法结束,控制返回到第一个方法。
  2. 第一个方法恢复执行。此方法不能使用不再定义的变量 AB 和 C。它可以使用^D,因为该变量立即保存到数据库中。

变量作用域总结

有几个因素控制变量在定义它的方法之外是否可用。在讨论这些之前,有必要指出以下环境细节:

  • 实例包含多个命名空间,其中包括多个系统命名空间,可能还包括定义的多个命名空间。

命名空间是任何代码运行的环境。

  • 可以在命名空间中同时运行多个进程。在典型的应用程序中,许多进程同时运行。

下表总结了可用变量的位置:

变量可用性,按变量类型细分...
0
0 117
文章 姚 鑫 · 八月 23, 2023 3m read

第七章 ObjectScript - Variables

Variables

ObjectScript 中,有两种变量,按它们保存数据的方式分类:

局部变量可以具有公共或私有范围。

  • 局部变量,在内存中保存数据。

局部变量可以具有公共或私有范围。

  • Global,在数据库中保存数据。这些也称为全局变量。与Global的所有交互都会立即影响数据库。例如,当设置Global值时,该更改会立即影响存储的内容;没有单独的步骤来存储值。同样,当删除时,数据会立即从数据库中删除。

变量名称

变量的命名遵循以下规则:

  • 对于大多数局部变量,第一个字符是字母,其余字符是字母或数字。有效名称包括 和
  • 对于大多数Global,第一个字符始终是脱字号 ()。其余字符是字母、数字或句点。有效名称包括 和

IRIS 还支持一种特殊的变量,称为百分比变量;这些不太常见。百分比变量的名称以百分比字符 (%) 开头。百分比变量的特殊之处在于它们始终是公共的;也就是说,它们对进程中的所有代码都是可见的。这包括调用堆栈中的所有方法和所有过程。

定义百分比变量时,请使用以下规则:

  • 对于局部百分比变量,名称以 或 开头。其他名称保留供系统使用。
  • 对于百分比变量,名称以 或 开头。其他名称保留供系统使用。

变量类型

中的变量是弱动态类型的。

0
0 111
文章 姚 鑫 · 八月 22, 2023 3m read

第六章 ObjectScript - Routine示例

Routine示例

下面显示了一个名为 demoroutine 的示例例程,它是用 ObjectScript 编写的。它包含的过程与上一节示例类中所示的方法执行完全相同的操作。

 ; this is demoroutine 
 write "Use one of the following entry points:"
 write !,"random"
 write !,"input"
 write !,"interesting"
 quit 
 
 //this procedure can be called from outside the routine
random() public {
    set rand=$RANDOM(10)+1        ; rand is an integer in the range 1-10
    write "Your random number: "_rand
    set name=$$getnumbername(rand)
    write !, "Name of this number: "_name
 }

 //this procedure can be called from outside the routine
input() public {
    read "Enter a number from 1 to 10: ", input
    set name=$$getnumbername(input)
    write !, "Name of this number: "_name
 }
 
 //this procedure can be called only from within this routine
getnumbername(number) {
    set name=$CASE(number,1:"one",2:"two",3:"three",
        4:"four",5:"five",6:"six",7:"seven",8:"eight",
        9:"nine",10:"ten",:"other")
    quit name
}

 /* write some interesting values
 this procedure can be called from outside the routine
 */
interesting() public {
    write "Today's date: "_$ZDATE($HOROLOG,3)
    write !,"Your installed version: "_$ZVERSION
    write !,"Your username: "_$USERNAME
    write !,"Your security roles: "_$ROLES  
    }
0
0 102
文章 姚 鑫 · 八月 21, 2023 3m read

第五章 ObjectScript

方法和例程都可以用 ObjectScript 编写,但大多数现代代码都是使用方法编写的。方法包含在类中,这允许将类似的方法分组在一起,在类参考中自动生成文档,以及使用 IRIS 的面向对象功能。

这并不意味着routines 不重要。许多有用的系统实用程序都是作为例程编写的,并且在编译类时会生成例程。

示例类

下面显示了一个名为 的示例类,其中包含用 ObjectScript 编写的方法。此示例使我们有机会了解一些常见的 ObjectScript 命令、运算符和函数,并了解代码在方法内的组织方式。

Class User.DemoClass
{

/// Generate a random number.
/// This method can be called from outside the class.
ClassMethod Random() [ Language = objectscript ]
{
    set rand=$RANDOM(10)+1        ; rand is an integer in the range 1-10
    write "Your random number: "_rand
    set name=..GetNumberName(rand)
    write !, "Name of this number: "_name
}

/// Input a number.
/// This method can be called from outside the class.
ClassMethod Input() [ Language = objectscript ]
{
    read "Enter a number from 1 to 10: ", input
    set name=..GetNumberName(input)
    write !, "Name of this number: "_name
}

/// Given an number, return the name.
/// This method can be called only from within this class.
ClassMethod GetNumberName(number As %Integer) As %Integer [ Language = objectscript, Private ]
{
    set name=$CASE(number,1:"one",2:"two",3:"three",
        4:"four",5:"five",6:"six",7:"seven",8:"eight",
        9:"nine",10:"ten",:"other")
    quit name
}

/// Write some interesting values.
/// This method can be called from outside the class.
ClassMethod Interesting() [ Language = objectscript ]
{
    write "Today's date: "_$ZDATE($HOROLOG,3)
    write !,"Your installed version: "_$ZVERSION
    write !,"Your username: "_$USERNAME
    write !,"Your security roles: "_$ROLES
}

}
0
0 121
文章 姚 鑫 · 八月 20, 2023 2m read

第四章 IRIS 编程简介 - Macros

Macros

ObjectScript 还支持定义替换的宏。定义可以是一个值、整行代码或(使用 ##continue 指令)多行。使用宏来确保一致性。例如:

#define StringMacro "Hello, World!"

write $$$StringMacro

可以在例程中定义宏,并稍后在同一例程中使用它们。更常见的是,在中心位置定义它们。为此,需要创建并使用包含文件。包含文件定义宏并且可以包含其他包含文件。

这些代码元素如何协同工作

可以混合使用 ObjectScriptPythonSQL、类定义、宏、例程等的原因是 不直接使用编写的代码。相反,当编译代码时,系统会生成它使用的较低级别的代码。这是由 引擎使用的 的 代码,以及由 引擎使用的 的 代码。

有多个步骤。无需详细了解这些步骤,但最好记住以下几点:

  • 对于除 方法之外的所有元素,类编译器将类定义和 代码处理为 代码。 代码被处理成PY代码。

在某些情况下,编译器会生成并保存您不应编辑的其他类。例如,当编译定义 服务和 Web 客户端的类时,就会发生这种情况。

类编译器还为每个类生成类描述符。系统代码在运行时使用它。

  • 对于 代码,预处理器(有时称为宏预处理器或 )使用包含文件并替换宏。它还处理例程中的嵌入式 。
0
0 170
文章 姚 鑫 · 八月 19, 2023 1m read

第三章 IRIS 编程简介 - SQL

SQL

IRIS 提供了 SQL 的实现,称为 SQL。可以在方法和例程中使用 。

从 使用

可以使用以下一种或两种方式从 ObjectScript 执行 :

  • 动态 SQL%SQL.Statement%SQL.StatementResult 类),如下例所示:
 SET myquery = "SELECT TOP 5 Name, Title FROM Sample.Employee ORDER BY Salary"
 SET tStatement = ##class(%SQL.Statement).%New()
 SET tStatus = tStatement.%Prepare(myquery)
 SET rset = tStatement.%Execute()
 DO rset.%Display()
 WRITE !,"End of data"

可以在 ObjectScript 方法和例程中使用动态 。

  • 嵌入式,如下例所示:
 &sql(SELECT COUNT(*) INTO :myvar FROM Sample.Employee)
    IF SQLCODE<0 {WRITE "SQLCODE error ",SQLCODE," ",%msg  QUIT}
    ELSEIF SQLCODE=100 {WRITE "Query returns no results"  QUIT}
 WRITE myvar
0
0 153
文章 姚 鑫 · 八月 18, 2023 2m read

第二章 IRIS 编程简介 - 同时使用类和例程

同时使用类和例程

IRIS 中,可以使用例程中的类。例如,下面显示了例程的一部分,其中我们引用了 Sample.Employee 类:

 //get details of random employee and print them
showemployee() public {
    set rand=$RANDOM(10)+1        ; rand is an integer in the range 1-10
    write "Your random number: "_rand
    set employee=##class(Sample.Employee).%OpenId(rand)  
    do employee.PrintEmployee()
    write !,"This employee's salary: "_employee.Salary
      
    }

类似地,方法可以调用例程中的标签。例如,以下代码调用例程中的标签ComputeRaise

Method RaiseSalary() As %Numeric
{
    set newsalary=$$ComputeRaise^employeeutils(..Salary)
    return newsalary
}
0
0 105
公告 Michael Lei · 八月 17, 2023

我们经常收到有关 InterSystems IRIS 数据平台支持的平台和框架列表最近和即将发生的更改的问题。此更新旨在分享最近的变化以及我们对即将发生的变化的当前最佳知识,但预测未来是一件棘手的事情,这不应被视为承诺的路线图。

话虽如此,接下来是更新……

IRIS 生产环境操作系统和 CPU 架构

红帽Linux企业版RHEL

  • 近期变动
    • RHEL 9.2 和 RHEL 8.8 于 2023 年 5 月发布。红帽计划为这些版本提供 4 年支持。 InterSystems 已通过我们称为“次要操作系统版本认证”的新流程完成了对 RHEL 9.2 和 RHEL 8.8 上的 IRIS 的额外测试,该流程旨在提供额外的安全性,确保次要操作系统更新不会破坏任何明显的功能。 RHEL 8.8 和 9.2 都成功通过了我们的测试。
    • 随着 RHEL 9.2 的发布,红帽终止了对 RHEL 9.1 的公开支持。这与 Red Hat 自 RHEL 8.3 以来一直使用的“奇/偶”支持周期一致。
  • 即将发生的变化
    • RHEL 9.3 计划于今年晚些时候推出。这将是 Red Hat 的短期支持版本,因此 InterSystems 不会执行次要操作系统认证或推荐将其用于生产部署。
  • 之前的更新
    • IRIS 2022.1.2 添加了对RHEL 9.0的支持。 9.
0
0 215
文章 姚 鑫 · 八月 17, 2023 2m read

第一章 IRIS 编程简介

简介

IRIS 是一个高性能多模型数据平台,具有内置的通用编程语言 ObjectScript,以及对 Python 的内置支持。

支持多进程并提供并发控制。每个进程都可以直接、高效地访问数据。

在 中,可以根据喜好编写类、例程或它们的组合。在所有情况下,存储的数据最终都包含在称为全局变量的结构中。 IRIS 编程具有以下特点:

  • 类和例程可以互换使用。
  • 类和例程可以互相调用。
  • 类提供面向对象的功能。
  • 数据库存储已集成到 ObjectScriptPython 中。
  • 类可以以简化编程的方式保存数据。如果使用持久类,数据可以同时作为对象、SQL 表和全局变量使用。
  • 可以直接从类或例程访问全局变量,这意味着可以灵活地按照想要的方式存储和访问数据。

可以选择适合需求的方法。

Classes

支持类。可以使用系统类,也可以定义自己的类。

在 中,类可以包含熟悉的类元素,例如属性、方法和参数(在其他类语言中称为常量)。它还可以包含通常不在类中定义的项目,包括触发器、查询和索引。

IRIS 类定义使用类定义语言 (CDL) 来指定类及其成员,例如属性、方法和参数。可以使用 或 在方法内部编写可执行代码。对于每个方法,使用 关键字指定将使用哪种语言编写该方法,如下例所示。

下面显示了一个类定义:

Class Sample.Employee Extends %Persistent
{

/// The employee's name.
Property Name As %String(MAXLEN = 50);

/// The employee's job title.
Property Title As %String(MAXLEN = 50);

/// The employee's current salary.
Property Salary As %Integer(MAXVAL = 100000, MINVAL = 0);

/// This method prints employee information using ObjectScript.
Method PrintEmployee() [ Language = objectscript] 
{
    Write !,"Name: ", ..Name, " Title: ", ..Title
}

}
0
0 389
文章 Michael Lei · 八月 17, 2023 1m read

受到@Evgeny Shvarov 的问题@Ashok Kumar Thangavel 的回复的启发
我已经创建了一个用于把Global下载成 XML 文件的基础

如何使用:
只需调用 http://<your_server>/csp/samples2/dc.Gdown.cls ?GBL=global_name之类的页面

gbl-name 不带首字母 ^(插入符号)
输出具有默认名称 <global_name>.XML 您可以选择。

已知限制:

  • 你必须将它安装在你的源服务器上
  • 它没有经过测试/跨命名空间工作
  • 没有部分下载
  • 错误处理只是基本或缺失

个人还有提升空间。
就是这样:

 ClassExtends%CSP.Page
0
0 327