#ObjectScript

0 关注者 · 109 帖子

InterSystems ObjectScript 是一种脚本语言,可使用 InterSystems 数据平台的任何数据模型(对象、关系、键值、文档、全局变量/Global)处理数据,并在 InterSystems 数据平台上为服务器端应用程序开发业务逻辑。

文档

新增
文章 Jeff Liu · 三月 17 1m read

InterSystems 常见问题

如果您尝试从顶级节点删除在子脚本级别映射的全局变量,您将收到一个<SLMSPAN>错误,并且它不会被删除。这是因为用于子脚本级别映射全局变量的kill命令不能跨映射使用。

// Suppose subscript-mapped globals exist in different databases, as shown below:
^TEST(A*~K*) -> database A
^TEST(L*~Z*) -> database B

// Trying to kill from the top level will result in a <SLMSPAN> error.
NAMESPACE>Kill ^TEST
<SLMSPAN> <- This error is output.

要只删除当前命名空间(数据库)中的全局,请使用以下命令:

NAMESPACE>Kill ^["^^."]TEST

在子脚本级别映射的全局变量必须移动到数据库并直接删除。

要切换到数据库,请使用以下命令:

zn "^^c:\intersystems\iris\mgr\user"
or
set $namespace="^^c:\intersystems\iris\mgr\user"

使用 $System.OBJ.

0
0 3
新增
文章 Kelly Huang · 三月 17 10m read

在上一篇文章中,我们介绍了IrisOASTestGen——一个基于OpenAPI 2.0规范为InterSystems IRIS生成REST API测试代码的工具。该文章展示了如何使用OpenAPI Generator附带的默认模板来搭建测试用例。本文将聚焦于接下来的自然步骤**:自定义生成的测试代码**。通过使用Mustache模板扩展代码生成逻辑,我们可以表达更丰富的语义、实现CRUD感知测试,并创建更有意义的测试套件。本文的示例将修改IrisOASTestGen,为createPerson操作生成测试,包括遍历所有预期响应。这将展示如何使用OpenAPI规范中的自定义字段来驱动Mustache模板内的条件渲染。


OpenAPI扩展以支持CRUD操作

为了使代码生成支持CRUD操作,OpenAPI规范可以在vendorExtensions中包含自定义字段。这些自定义字段作为标志,Mustache模板可以检测到它们。

0
0 4
文章 Jeff Liu · 三月 10 4m read

本文将讨论 Microsoft Visual Studio Code IDE中包含的所有调试工具

内容包括

  • 断点
  • 观察窗口
  • 调用堆栈

让我们从了解调试要求开始!

前提条件

有两个插件(扩展)可用于调试 ObjectScript:

第一个是 InterSystems ObjectScript 扩展包的一部分 。第二个是 Serenji,它是一个独立的插件,提供编辑器、文件管理器和调试功能。这两个插件都可以从插件商店安装。要激活关键功能,Serenji 需要许可证。在本文中,我们将使用 InterSystems ObjectScript 扩展包来降低学习难度。在掌握基础知识后,您可以考虑购买 Serenji 的付费许可证。

0
1 11
文章 Nicky Zhu · 三月 5 2m read

Embeddedpy-bridge:嵌入式 Python 工具包

概述

嵌入式 Python改变了 InterSystems IRIS 的游戏规则,可直接在数据库中访问庞大的 Python 生态系统。但是,在 ObjectScript 和 Python 之间架起桥梁有时会让人感觉像是在两个不同的世界之间转换。

为了实现这种无缝过渡,请使用embeddedpy-bridge

该软件包是一个以开发人员为中心的实用工具包,旨在为嵌入式 Python 提供高级 ObjectScript 封装、熟悉的语法和强大的错误处理功能。它允许开发人员使用他们已经熟悉的本地 IRIS 模式与 Python 数据结构交互。

挑战

虽然 %SYS.Python 库功能强大,但开发人员经常面临一些障碍:

  1. 处理代理:使用原始代理浏览 Python 列表和字典对于 ObjectScript 来说并不 "原生"。
  2. 迭代:标准 ObjectScript While 循环无法与 Python 迭代器进行本地 "对话"。
  3. 命名空间管理:确保 Python 实用程序在整个系统中可用。

解决方案:embeddedpy-bridge

我的目标是创建一个 "桥梁",让 Python 感觉像是 ObjectScript 中的一等公民。

主要功能

  • py 前缀约定%ZPython.
0
0 67
文章 Jeff Liu · 三月 5 3m read

你好

数据迁移通常听起来像是一个简单的 "将数据从 A 转移到 B 的任务",直到你真正去做。实际上,这是一个融合了规划、验证、测试和技术精度的复杂过程。

我曾在多个项目中负责将数据迁移到在 IRIS(TrakCare)上运行的 HIS 中,在这些项目中,我认识到成功来自于纪律和自动化的结合。

以下是我想强调的几个要点。

1.从定义好的数据格式开始。

在打开第一个文件之前,确保每个人,尤其是数据提供者,都清楚地了解您所期望的确切数据格式。尽早定义模板可以避免不必要的来回奔波和返工。

虽然 Excel 或 CSV 格式很常见,但我个人认为使用制表符分隔的文本文件(.txt)上传数据是最好的。它既轻便又一致,还能避免文本字段内的逗号问题。

PatID   DOB Gender  AdmDate
10001   2000-01-02  M   2025-10-01
10002   1998-01-05  F   2025-10-05
10005   1980-08-23  M   2025-10-15

确保文件中提供的日期格式正确且在整个文件中保持不变,因为所有这些文件通常都是从 Excel 文件转换而来,而 Basic excel 用户可能会在提供错误的日期格式时犯错。错误的日期格式在转换为 horolog 时会让您恼火。

0
1 11
文章 Nicky Zhu · 二月 13 8m read

我有一个新项目,要将 REST 响应中的信息存储到 IRIS 数据库中。我需要同步来自至少二十几个不同 REST 端点的信息,这意味着需要创建将近这么多的 ObjectScript 类来存储来自这些端点的结果。

我能否使用 ChatGPT 来创建这些类?答案是 "可以",这非常好,因为这是我第一次尝试使用生成式人工智能来做一些有用的事情。生成长颈鹿喝汤的图片有点老....。

我是这么做的:

  • 使用 "curl "查询端点,获取一些 JSON REST 调用输出示例。
  • 访问 ChatGPT(InterSystems 为员工提供全公司范围的许可证)
  • 与 ChatGPT 进行以下对话。

我在 "Message ChatGPT "提示符中输入了以下请求:

我:Generate an ObjectScript class that will hold data from the following JSON(生成一个 ObjectScript 类,用于保存以下 JSON 中的数据):

在输入 JSON 之前,我点击了 "Return",因此 ChatGPT 给我的提示如下:

ChatGPT:

0
0 56
文章 Jeff Liu · 二月 3 2m read

在使用InterSystems 互操作性(Iris/Health Connect/Ensemble时,配置数据通常分散在许多生产项目中:服务、流程、操作、适配器及其设置。

常见的操作或安全需求是回答以下问题:

  • 哪些接口引用了文件系统路径?
  • 目录、网络共享或绝对路径配置在哪里?
  • 我能否在所有产品中快速审核或记录这些信息?

下面的 ObjectScript 工具正是通过将选定的配置设置导出到 CSV 文件来解决这个问题的。

该脚本

  1. 循环浏览所有现有命名空间
  2. 查询所有命名空间中的所有互操作性配置项(Ens_Config.Item)
  3. 遍历每个项目的设置
  4. 提取文件系统/URL 路径(包含 :/\ 的值)
  5. 将结果写入CSV 文件,按类别分组
  6. 生成便于审计的输出,可在 Excel 中打开或与操作/安全团队共享

典型用例

当您需要时,应使用此实用程序:

  • 🔍审计整个产品的文件系统使用情况
  • 🛡审查安全风险(本地路径、网络共享、数据库连接)
  • 📄记录迁移、升级或灾难恢复规划的配置
  • 🔄比较环境(开发环境vs测试环境vs 生产环境)
  • 🧹清理遗留或未使用的路径

这对使用许多接口和适配器的多个产品的大型实例尤其有用。

0
0 43
文章 Jeff Liu · 二月 2 3m read

您可能知道这种情况:
前段时间,你发现了一个非常特殊的 $ZU 函数,可以解决一种非常特殊的问题。某种神秘的公式。它变得很流行,被许多开发人员在您的代码和所有安装中使用。

几个版本和更新之后,ISC 通知你,你的神秘 $ZU 已经过时,不再支持。建议您用新的 $something() 替换它。

那么,如何找到并记录这段神秘代码的用法呢?
它可能位于类、MAC、INT 或 INC 代码中。
它也可能分布在多个命名空间中。
在过去,Studio 还不够完善:它不适用、速度慢、不准确。

我在不同的安装中不止一次遇到过这种情况。
当时还没有源代码控制功能,即使最终引入了源代码控制功能,也很少有人使用。

由于 ObjectScript 是应对这一挑战的唯一可能选择,我编写了自己的实用程序
我的解决方案经过了多年的发展,一旦计划迁移到 IRIS,我就会再次检查它的实用性。
由于它是用纯 ObjectScript 编写的,因此在 IRIS 中无需修改任何字符即可运行。
如您所知,在 ObjectScript 中搜索特定文本的问题一直没有改变。

0
0 96
公告 Claire Zheng · 二月 2

大家好!

我们诚挚邀请您参与塑造下一代 ObjectScript 开发工具。我们正致力于打造一款专为 IRIS 开发者设计的、由人工智能驱动的 ObjectScript 编程助手。它并非仅是套用通用 AI 来适配 ObjectScript,而是从零起步、量身构筑的系统,能够深谙 ObjectScript 的行话精髓、IRIS API、互操作生产环境(interoperability productions),以及开发者在真实场景中的工作流。

为了确保我们打造出真正有用的产品,我们需要您的意见。

👉 ObjectScript Coder Agent 开发者调查👈

0
0 49
文章 Nicky Zhu · 一月 29 2m read

我曾多次遇到一种模式,即我需要使用临时文件/文件夹,并在稍后的某个时候将其清理掉。

在这种情况下,自然是遵循"Robust Error Handling and Cleanup in ObjectScript "中的模式,使用 try/catch/pseudo-finally 或注册对象来管理析构函数中的清理工作。%Stream.File*也有一个 "RemoveOnClose "属性,您可以对其进行设置,但要小心使用,因为您可能会不小心删除一个重要文件,而且这个标志会在调用%Save()时被重置,因此您需要在重置后将其设回 1。

不过,有一个棘手的情况——假设你需要临时文件在外部堆栈级别中继续存在。例如:

0
0 25
文章 Jeff Liu · 一月 26 6m read

InterSystems IRIS 提供广泛的可配置安全选项,但许多开发人员主要使用角色和资源来保护整个表或例程。今天,我们将深入探讨。我们也可以分别确保单个列和行的安全,但这两种机制的操作方式截然不同。让我们从列开始。

列安全

为便于测试和演示,我们将保持表结构简洁明了。我们在 USER 名称空间中有一个名为 "Person "的表,其中包含 ID 列、出生日期列 (DOB)、名和姓。

0
0 108
文章 Nicky Zhu · 十二月 26, 2025 9m read

大家好!
在本文中,我们将在 InterSystems IRIS 的背景下探讨动态 SQL(Dynamic SQL嵌入式 SQL(Embedded SQL ) 的概念,提供实际示例, 研究 它们的区别 ,以帮助您了解如何在应用程序中利用它们。

InterSystems SQL 提供全套标准关系功能,包括定义表模式、执行查询、定义和执行存储过程。您可以通过管理门户交互式地执行 InterSystems SQL,也可以使用 SQL shell 界面以编程方式执行 InterSystems SQL。嵌入式 SQL 使您可以在 ObjectScript 代码中嵌入 SQL 语句,而动态 SQL 使您可以在运行时从 ObjectScript 执行动态 SQL 语句。 静态 SQL 查询提供可预测的性能,而动态和嵌入式 SQL 则分别提供灵活性和集成性。

0
0 59
文章 Lilian Huang · 十二月 8, 2025 10m read

什么是 XML?

XML(可扩展标记语言)是一种灵活的、基于文本的、独立于平台的格式,用于以结构合理 、人机可读的方式存储和传输数据 。XML 允许用户定义自定义标签来描述数据的含义和组织结构。例如:<book><title>The Hitchhiker's Guide</title></book>.

XML 文档具有自描述性,其结构是一棵分层的元素树。每个文档都有一个封装所有其他内容的根元素。元素可以包含文本、子元素和属性(提供补充信息的名-值对)。这些文档通常用 .xml 文件存储

这种结构的完整性可以通过以下方式实现:

  • DTD(文档类型定义):提供基本的验证规则。
  • XSD(XML 模式定义):提供高级规则,包括数据类型和约束。

转换 XML 文档

这部分内容介绍如下:

  1. 解析一般 XML 并将其转换为 HL7 标准。
  2. 解析 CCDA(综合临床文档架构)文档(XML)并将其转换为 HL7 格式。

在这些实施过程中,两种格式都会首先转换为 InterSystems IRIS SDA(标准化数据架构)格式。这被认为是一种标准、高效、不易出错的方法,因为它有效地利用了平台的 预置类。数据采用 SDA 格式后,可无缝转换为任何目标标准,如 HL7 v2FHIRCCDA

0
0 139
文章 Nicky Zhu · 十月 28, 2025 2m read

InterSystems 常见问题解答标题

^%GCMP 实用工具可用于比较两个全局变量的内容。

例如,要比较 USER 和 SAMPLES 命名空间中的 ^test 和 ^test,过程将与下面类似:
*以下示例在这两个命名空间中创建了 700 个相同的全局变量,并更改了其中一个的内容,使其成为检测目标。

USER>kill ^test
USER>for i=1:1:100 { for j=1:1:7 { set ^test(i,j)="Test"_i } }

USER>zn "samples" // change namespace to SAMPLES SAMPLES>kill ^test SAMPLES>for i=1:1:100 { for j=1:1:7 { set ^test(i,j)="Test"_i } }

SAMPLES>set ^test(50,5,1)=1 // Change one of the globals created in the SAMPLES namespace. SAMPLES>do ^%GCMP Compare global ^test // Global to compare.

0
0 63