清除过滤器
公告
Michael Lei · 一月 5
2024.3 版 InterSystems IRIS® 数据平台、InterSystems IRIS® for Health 和 HealthShare® Health Connect 现已正式发布 (GA)。
版本亮点
在此版本中,您可以期待一系列激动人心的更新,包括:
数据库和 WIJ 文件的扩展速度大大提高
能够通过 Visual Trace 重新发送消息
增强的规则管理器功能
向量搜索增强功能
等等。
请通过开发者社区分享您的反馈,与我们共同打造更好的产品。
文档
请访问以下链接了解所有亮点功能的详细信息:
InterSystems IRIS 2024.3 文档、版本说明和升级检查核对清单。
InterSystems IRIS for Health 2024.3 文档、版本说明和升级检查核对清单。
Health Connect 2024.3 文档、版本说明和升级检查核对清单。
此外,请查看此版本的升级信息。
抢先体验计划 (EAP)
目前提供多个 EAP。 请查看此页面并注册您感兴趣的计划。
如何获取软件?
像往常一样,持续交付 (CD) 版本包含适用于所有受支持平台的经典安装包,以及 Docker 容器格式的容器镜像。
经典安装包
安装包可从 WRC 的 InterSystems IRIS、InterSystems IRIS for Health 和 Health Connect持续交付版本页面获取。此外,还可以在评估服务网站获取套件。
可用性和软件包信息
此版本提供适用于所有受支持平台的经典安装包,以及 Docker 容器格式的容器镜像。有关完整列表,请参阅“支持的平台”文档。
安装包和预览版密钥可从 WRC 的预览版下载网站或通过评估服务网站获取。
此持续交付版本的版本号为:2024.3.0.217.0。
容器镜像可通过 InterSystems 容器注册表获取。 容器带有 2024.3 或 latest-cd 标签。
文章
Michael Lei · 一月 6
借助 InterSystems 行业标准认证考试,您和您的团队可以获得认证,以验证您的技能并证明您拥有 InterSystems 技术方面的专业知识。 查找适合您的角色的考试!
开发者:InterSystems IRIS 核心解决方案开发专家和 InterSystems IRIS SQL 专家
系统管理员:InterSystems IRIS 系统管理专家
系统集成商:InterSystems HL7 接口专家
CCR 技术实施人员:InterSystems CCR 技术实施专家
Unified Care Record 实施人员:HealthShare Unified Care Record 技术专家
Patient Index 实施人员:HealthShare Patient Index 技术专家
您知道吗?如果公司中有四或五名员工获得认证,该公司可以获得组织认证!
请发送电子邮件至 certification@intersystems.com 或访问 InterSystems 认证网站获取更多信息。
公告
Michael Lei · 十一月 3, 2024
各位社区成员,大家好!
我们很高兴推出一种全新的方式让您展示创造力和技能! 这次,我们邀请您参加我们首次发起的视频挑战:
📹 InterSystems 技术视频挑战 📹
请在 2024 年 10 月 21 日到 11 月 10 日提交与 InterSystems IRIS 产品或服务相关的任何主题的视频。
🎁 人人有礼 + 主要奖品!
🔍 挑战内容制作一段短视频(最长 15 分钟),演示 InterSystems 技术的独特运用。无论是创新解决方案、创意项目,还是酷炫的使用案例,都可以参加本次挑战!
📢 参赛方式:要参加挑战,您需要填写表单,并按照表单要求上传您的视频。 将您的视频上传到开发者社区 YouTube 后,我们将在这篇帖子的评论中发布链接,您可以在任何位置使用此链接。
参与资格:除 InterSystems 员工以外的任何开发者社区成员(欢迎承包商参加挑战。)创建帐户!
一般要求:
视频侧重点必须是 InterSystems 产品或服务,并且必须介绍技术性内容。
所有内容必须采用英语(包括代码、屏幕截图等)。
视频必须完全原创,不得翻译之前在任何社区中提交的比赛视频。
呈现的所有信息都必须准确可靠。
视频时长应在 15 分钟以内。
不同的作者可以就同一主题提交视频,但要使用不同的示例。
注意: 我们的专家小组将根据质量和相关性等标准对视频是否符合参赛资格做出最终决定。 他们的决定是最终决定,不得申诉。
比赛时间线
📝 10 月 21 日 - 11 月 10 日:在此期间制作视频并填写表单。开发者社区成员可为参加社区奖项评选的已发布视频投“赞”票。
📝 11 月 11 日 - 17 日:专家投票时间
📝 11 月 18 日:宣布优胜者
奖品
1. 每位参赛者都是获胜者!所有参与者都将获得我们特别准备的礼品:
🎁 耐克高尔夫 Dri-FIT Swoosh 穿孔帽
2. 专家奖项 – 视频将由 InterSystems 专家进行评审:
🥇 第 1 名:10.9 英寸 iPad,Wi‑Fi 版,64GB / 索尼 WH-1000XM5 无线耳机
🥈 第 2 名:Moleskine 15" 立式设备包 //乐高 NASA Artemis 太空发射系统
🥉 第 3 名:具有主动降噪功能的 AirPods 4 / 乐高霍格沃茨™城堡:大厅
作为替代方案,任何优胜者均可从低于自己奖品级别的奖品中选择一个奖品。
3. 开发者社区奖项 – 获得赞数最多的视频。优胜者将可以选择下列奖品之一:
🎁 具有主动降噪功能的 AirPods 4 / 乐高霍格沃兹™城堡:大厅
注意:作者在比赛的每个类别中只能获奖一次(最多可获得两个奖品:一个专家奖,一个社区奖)。 如果出现票数相同的情况,则以专家票数作为决胜标准。
🎯 额外奖励
下面列出了可以帮助您赢得奖品的额外奖励! 请欢迎:
奖励
提名人数
详细信息
主题奖励
3
从下方的建议主题列表中选择一个主题即可获得此奖励。
文章奖励
3
撰写一篇全新的说明性文章为您的视频提供支持,并在其中使用标签 #Video。
应用程序奖励
5
将您视频中的应用程序上传到 Open Exchange。
翻译奖励
2
将您的视频翻译为我们地区社区所使用的语言之一(西班牙语、葡萄牙语、日语、中文、法语),并使用相同格式上传视频;在描述中提及此视频为翻译版,并提供原始视频的 YouTube 链接。
YouTube Shorts 奖励
2
为您的视频制作 YouTube 短视频(纵向视频,最长 60 秒)。
LinkedIn 奖励
1
在您的 LinkedIn 上分享视频,提及您正在参加 InterSystems 技术视频挑战,并添加开发者社区 LinkedIn 页面标签。
建议的主题
下面列出了将为您的文章提供额外奖励的建议主题:
✔️ 使用 AI / GenAI / RAG✔️ 在实现互操作性时使用嵌入式 Python✔️ 使用外部语言(C#、Java、Python)✔️ 使用数据架构 / 数据湖 / 数据仓库 / 数据网格✔️ 使用 FHIR✔️ 使用 REST✔️ IKO 通用部署
---
准备闪耀光芒,并使用您的技术技能激励他人! 我们迫不及待欣赏您的作品。✨
备注 1:参加比赛,即表示您同意将您的视频上传到开发者社区 YouTube。
备注 2:奖品的送达因国家/地区而异,某些国家/地区可能无法送达。 要索取有限制的国家/地区列表,请联系 @Liubka Zelenskaia
公告
Claire Zheng · 十月 13, 2024
开发者社区的成员,大家好!
我们都喜欢编码,但我们应该时不时地放下代码去锻炼身体! InterSystems 步行挑战将帮助您恢复精力、增强体质。 历史悠久的 Salt Road 在几个世纪以前连接起欧洲,沿着这条传奇的贸易路线,踏上从吕贝克到吕讷堡的虚拟赛道。
赢取跑步机、智能手表和奖牌等精美礼品。
👟🚶🧑🦼系紧鞋带,放下工作,更好地编码! 🔋💻💪
📅日期:9 月 23 日 - 10 月 20 日(可能有变动)
想加入吗? 详细信息如下。
运作方式
下载应用或使用 Web 版本,输入任务代码 SupplyChain,便可按照您自己的节奏在任何地点免费开启您的赛程。 您可以作为步行者、跑者或轮椅使用者参赛。 只需在应用中选择参赛身份。如果您参加的有些晚,您可以上传您设备中的历史数据。在我们的排行榜上保持活跃状态,分享您的步数变动,让每位参赛者都受到鼓舞并进入挑战模式!
奖励和奖品
完成比赛的过程就是对自我的奖励,但我们还为参赛者准备了一些特殊奖品。 每位完成 Salt Road 的参赛者都会获得一枚奖牌。
此外,您还将参加竞赛。 排行榜的目标是以最快的速度通过步行、跑步或乘坐轮椅的方式走完 Salt Road。 我们将统计每个人的个人用时并进行奖励。
成绩位列前十名的参赛者可以赢得更多奖品:
第 1 名:APPLE Watch Series 10 智能手表(GPS + 蜂窝网络,46 毫米铝金属表壳,氟橡胶表带)
第 2 名 - 第 10 名:二合一 Sportstech Laufband sWalk Plus
第 11 名 - 第 30 名:精美水壶
我们欢迎 InterSystems 员工和承包商参加活动,但此类参赛者没有资格赢得主要奖品。
说明
要加入我们的挑战,只需在使用 Web 版本时点击“加入”按钮。 要使用应用,请在 Apple App Store 或 Google Play 商店中下载 My Virtual Mission 应用。 填写详细信息进行注册后,再次点击加入链接即可获取我们的任务。
为了将每一步都计入成绩,您需要将 My Virtual Mission 与您的健康相关应用同步。 您能够关联多种第三方健身跟踪器,包括 Apple Health、Google Fit、Under Armour、Garmin、FitBit、Strava 和 Adidas Running。 您可以通过 My Virtual Mission 应用管理您的关联:
打开 My Virtual Mission 应用
在主屏幕中,点击屏幕右下角的菜单
点击关联
选择所需的健身跟踪器。 关联健身跟踪器后,选择查看任务进入您的任务页面。 从右侧的下拉菜单中选择设置。 随后,您将能够更新对步行任务的发布偏好设置。
您也可以手动发布您走过的距离:点击任务页面左下角的“+”图标。 点击手动发布距离,并输入所有信息和照片作为证据(例如跑步机距离)。 不过,如果使用此方法,您的成绩需要一段时间才会出现在排行榜中。
保持健康,祝您好运!
公告
Michael Lei · 一月 24
大家好,欢迎访问 2024 年度开发者社区简报。
一般统计信息:
✓ 2024 年发布了 312 篇帖子:
– 242条 – 47份公告 – 22个问题 – 1次讨论
✓ 2024 年有 476 位成员加入开发者社区✓ 总共发布了 2,342 篇帖子✓ 总共有 17,544 位成员加入
最热门:
586
生成式大语言模型和检索增强生成
按Qiao Peng
407
向量搜索和 RAG(检索增强生成)模型
按Michael Lei
234
IRIS/Caché SQL优化经验分享 - 真实案例分享
按Hao Ma
196
InterSystems IRIS 入门:全面指南
按Michael Lei
195
用Java开发互操作产品 - PEX
按Qiao Peng
172
IRIS/Caché SQL优化经验分享
按Hao Ma
168
使用 IRIS 以及 langchain 构建 问答聊天机器人
按Louis Lu
167
通过SQL语句直接获取JSON格式数据
按Louis Lu
160
Caché/M 数据库系统 InterSystems IRIS 的 Windows 安装
按YuCheng Hu
136
InterSystems通过向量搜索扩展了InterSystems IRIS数据平台,支持下一代人工智能应用
按Claire Zheng
讨论最多
3
监控数据库增长 – 第 1 部分_数据收集
按Michael Lei
2
IRIS/Caché SQL优化经验分享 - SQL性能的统计(SQL Statement)
按Hao Ma
1
使用 SQL 文本搜索从非结构化数据中获取见解
按Veerarajan Karunanithi
1
使用 GitLab 持续交付 InterSystems 解决方案 - 索引目录
按Hao Ma
1
第三十章 使用派生密钥令牌进行加密和签名
按姚 鑫
1
IRIS 向量搜索
按Michael Lei
1
FHIR 实践
按光辉 赵
1
将Production中的设定参数移动到系统默认设置(System Default Settings)
按Michael Lei
1
批量终止包含某个Routine的进程
按liu bo
1
向量搜索和 RAG(检索增强生成)模型
按Michael Lei
点赞数最高
3
从TTL值发现网络中的中间人攻击
按Hao Ma
2
IRIS/Caché SQL优化经验分享 - 真实案例分享
按Hao Ma
2
FHIR 实践
按光辉 赵
2
用Java开发互操作产品 - PEX
按Qiao Peng
2
在 Linux 上配置 IRIS 自动启动功能
按jieliang liu
2
动态 SQL 最佳实践(或“如何避免 SQL 注入漏洞和意大利面条式代码”)
按Hao Ma
2
生成式大语言模型和检索增强生成
按Qiao Peng
2
FHIR Object Model 简介
按Louis Lu
1
IRIS/Caché SQL优化经验分享 - Collation(排序规则)
按Hao Ma
1
第一章 使用 SOAP 保护 Web 服务
按姚 鑫
最热门作者
3.1K
@Xuying.Zheng
2.6K
@姚.鑫
2.5K
@Yunfei.Lei
2.1K
@Hao.Ma
823
@Peng.Qiao
749
@Louis.Lu
368
@Jieliang.Liu
278
@Jingwei.Wang
269
@liu.bo
226
@Lilian.Huang
发布文章最多的作者
133
姚 鑫
38
Michael Lei
25
Hao Ma
14
Louis Lu
8
Claire Zheng
5
jieliang liu
4
Jingwei Wang
3
Nicky Zhu
3
Qiao Peng
3
Lilian Huang
2024 年纵览InterSystems开发者社区
公告
Claire Zheng · 六月 20
InterSystems 宣布 InterSystems IRIS、InterSystems IRIS for Health 和 HealthShare Health Connect 2025.1 正式发布
2025.1 版的 InterSystems IRIS® 数据平台、InterSystems IRIS® for HealthTM 和 HealthShare® Health Connect 现已正式发布 (GA)。 这是扩展维护 (EM) 版本。
版本亮点
在这个激动人心的版本中,用户可以期待一些新功能和增强,包括:
高级向量搜索功能
新的基于磁盘的近似最近邻 (ANN) 索引显著提高了向量搜索查询速度,在数百万个向量上产生亚秒级响应。 请访问以下练习,了解更多信息 - 使用 InterSystems SQL 对文本进行向量化和搜索。
增强的商业智能
IRIS BI 多维数据集构建和同步中的自动依赖项分析,确保复杂多维数据集依赖项中的一致性和完整性。
改进的 SQL 和数据管理
引入了标准 SQL 分页语法 (LIMIT... OFFSET..., OFFSET... FETCH...)。
新的 LOAD SQL 命令,可以简化 DDL 语句的批量导入。
增强的 ALTER TABLE 命令,可以在行布局和列布局之间无缝转换。
优化的数据库操作
日志记录大小更小,效率更高。
数据库压缩速度更快,尤其是对于具有大量大字符串内容的数据库。
将新数据库添加到镜像时的自动化程度更高。
用于 ECP 管理任务的新命令行实用工具。
更高的安全合规性
支持符合 FIPS 140-3 标准的加密库。
现代化的互操作性用户界面
选择参与经过改进的生产配置和 DTL 编辑器体验,其中包含源代码控制集成、VS Code 兼容性、增强的筛选功能、分屏视图等。请参阅此开发者社区文章,详细了解如何选择参与并提供反馈。
更多的医疗保健功能
高效的批量 FHIR 引入和调度,包括完整性检查和资源管理。
增强的 FHIR 批量访问和经过改进的 FHIR 搜索操作。
新的开发者体验功能
DTL 编辑器中支持嵌入式 Python,可以让精通 Python 的开发者更高效地利用 InterSystems 平台。 要了解详情,请观看以下视频 - 在 BPL 和 DTL 编辑器中使用嵌入式 Python。
通过 OpenTelemetry 提高可观测性
在 IRIS 中引入了跟踪功能,有助于详细观测 Web 请求和应用程序的性能。
请通过开发者社区分享您的反馈,以便我们可以共同打造更出色的产品。
文档
访问以下链接,可以详细了解所有着重介绍的功能:
InterSystems IRIS 2025.1 文档和版本说明。
InterSystems IRIS for Health 2025.1 文档和版本说明。
Health Connect 2025.1 文档和版本说明。
此外,请查看升级影响核对清单,轻松了解升级到此版本时需要注意的所有变更。
尤其是,请注意 InterSystems IRIS 2025.1 引入了新的日志文件格式版本,该格式与早期版本不兼容,因而给混合版本的镜像设置带来了一定的限制。 请参阅相应的文档了解更多详细信息。
抢先体验计划 (EAP)
目前提供多个 EAP。 请查看此页面并注册您感兴趣的 EAP。
下载软件
一如既往,扩展维护 (EM) 版本提供了适用于所有受支持平台的经典安装包,以及 Docker 容器格式的容器镜像。
经典安装包
安装包可以从 WRC 的 InterSystems IRIS 页面(对于 InterSystems IRIS 和 InterSystems IRIS for Health)和 WRC 的 HealthShare 页面(对于 Health Connect)获取。 您也可以在评估服务网站中找到工具包。
可用性和软件包信息
此版本提供了适用于所有受支持平台的经典安装包,以及 Docker 容器格式的容器镜像。有关完整列表,请参阅“支持的平台”文档。
此扩展维护版本的内部版本号为 2025.1.0.223.0。
容器镜像可以从 InterSystems 容器注册表中获取。 容器被标记为 2025.1 和 latest-em。
公告
Jeff Liu · 三月 3
首先,祝开发者社区的各位成员新年快乐! 我们希望今年为大家带来更多好东西,今天我想介绍 VS Code的最新版 Intersystems Language Server 扩展程序。 大多数 Language Server 改进都可以通过 ObjectScript 扩展 UI 体验到,因此您可能不知道 2024 年我们发布了 Intellisense 和鼠标悬停等方面的许多改进。 请快速浏览 Language Server 更新日志 看看您错过了什么。 最近发布的2.7.0 版本带来了对 Windows ARM 平台的支持,因此,如果您使用 Surface Pro 11 这类设备(我正在用这台设备愉快地写这篇帖子),那么您现在可以在您的设备上获得出色的 ObjectScript 开发体验。 赶快试用一下,并在下方评论区中分享您的使用心得。
公告
Claire Zheng · 七月 29
InterSystems IRIS 2025.2 引入了 IRISSECURITY 数据库,用于存储安全数据。 与之前用于存储安全数据的数据库 IRISSYS 不同,IRISSECURITY 支持加密,可以保护静态敏感数据。 在今后的版本中,IRISSECURITY 将可实现镜像。
此版本还引入了可以执行常规安全管理任务的 %SecurityAdministrator 角色。
本文中介绍的更改将影响持续交付 (CD) 和扩展维护 (EM) 版本通道。 也就是说,从版本 2025.2(CD,于 2025 年 7 月 23 日发布)和 2026.1 (EM) 开始,InterSystems IRIS 将包含 IRISSECURITY 数据库,并且在升级时,所有安全数据会自动从 IRISSYS 迁移到 IRISSECURITY。
虽然 InterSystems IRIS 2025.2 预计于 2025 年 7 月 23 日发布,但我们暂缓了 InterSystems IRIS for Health 和 HealthShare Health Connect 2025.2 的公开发布,原因是我们正在着手完成针对已知镜像问题的修复计划,该问题会影响 OAuth 配置数据。
升级须知
IRISSECURITY 对用户与安全数据的交互方式做出了多处可能导致功能中断的更改:
用户无法再直接访问安全global,而必须使用各种安全类提供的 API。
OAuth2 Global无法再映射到其他数据库。
用户无法再随意查询安全表,即使在 SQL 安全已禁用的情况下也是如此。
系统数据库现在使用的预定义资源无法更改。 在 Unix 上,如果为之前版本的系统数据库创建并指定了新资源,在升级时,该新资源将被预定义资源替代(但如果有任何角色引用了非默认资源,则必须手动将其更改为使用默认资源,以保持数据库访问权限)。 在 Windows 上,必须将资源更改回默认资源。 如果您尝试在 Windows 上升级,而数据库具有非默认资源,升级将停止(实例不会修改),并会显示错误消息“Database must have a resource label of…”
以下各部分将详细介绍这些更改,以及在您依赖原始行为的情况下应采取的替代措施,但总体而言,在您进行升级之前,应当验证并测试您的应用程序和宏:
使用提供的安全 API 管理安全功能(而非直接访问global)。
拥有使用这些 API 所必需的权限(%DB_IRISSYS:R 和 Admin_Secure:U)。
Global 访问
之前,当安全global存储在 IRISSYS 数据库中时,用户可以通过以下权限访问安全数据:
%DB_IRISSYS:R:直接读取和通过安全 API 读取安全global。
%DB_IRISSYS:RW:读取和写入安全global。
%DB_IRISSYS:RW 和 Admin_Secure:U:通过安全 API 管理安全功能。
在 InterSystems IRIS 2025.2 中:
用户无法再直接访问安全global。
%DB_IRISSYS:R 和 %Admin_Secure:U 这两个权限是访问安全数据(通过提供的安全 API)以及通过各种安全类管理安全功能所需的最低权限。
对于常规安全管理,您可以使用新的 %SecurityAdministrator 角色。
已移除对安全数据的只读访问权限(之前可以通过 %DB_IRISSYS:R 实现)。
Global 存储位置
在 InterSystems IRIS 2025.2 中,以下安全global已从 IRISSYS 迁移到 IRISSECURITY 中的 ^SECURITY:
^SYS("SECURITY")
^OAuth2.*
^PKI.*
^SYS.TokenAuthD
下表列出了已迁移的最关键的global及其安全类、原存储位置和新存储位置:
安全类
原存储位置 (IRISSYS)
新存储位置 (IRISSECURITY)
不适用
^SYS("Security","Version")
^SECURITY("Version")
Security.Applications
^SYS("Security","ApplicationsD")
^SECURITY("ApplicationsD")
Security.DocDBs
^SYS("Security","DocDBsD")
^SECURITY("DocDBsD")
Security.Events
^SYS("Security","EventsD")
^SECURITY("EventsD")
Security.LDAPConfigs
^SYS("Security","LDAPConfigsD")
^SECURITY("LDAPConfigsD")
Security.KMIPServers
^SYS("Security","KMIPServerD")
^SECURITY("KMIPServerD")
Security.Resources
^SYS("Security","ResourcesD")
^SECURITY("ResourcesD")
Security.Roles
^SYS("Security","RolesD")
^SECURITY("RolesD")
Security.Services
^SYS("Security","ServicesD")
^SECURITY("ServicesD")
Security.SSLConfigs
^SYS("Security","SSLConfigsD")
^SECURITY("SSLConfigsD")
Security.System
^SYS("Security","SystemD")
^SECURITY("SystemD")
Security.Users
^SYS("Security","UsersD")
^SECURITY("UsersD")
%SYS.PhoneProviders
^SYS("Security","PhoneProvidersD")
^SECURITY("PhoneProvidersD ")
%SYS.X509Credentials
^SYS("Security","X509CredentialsD")
^SECURITY("X509CredentialsD ")
%SYS.OpenAIM.IdentityServices
^SYS("Security","OpenAIMIdentityServersD")
^SECURITY("OpenAIMIdentityServersD")
OAuth2.AccessToken
^OAuth2. AccessTokenD
^SECURITY("OAuth2.AccessToken ")
OAuth2.Client
^OAuth2.ClientD
^SECURITY("OAuth2.Client")
OAuth2.ServerDefinition
^OAuth2.ServerDefinitionD
^SECURITY("OAuth2.ServerDefinitionD")
OAuth2.Client.MetaData
^OAuth2.Client.MetaDataD
^SECURITY("OAuth2.Client.MetaDataD")
OAuth2.Server.AccessToken
^OAuth2.Server.AccessTokenD
^SECURITY("OAuth2.Server.AccessTokenD")
OAuth2.Server.Client
^OAuth2.Server.ClientD
^SECURITY("OAuth2.Server.ClientD")
OAuth2.Server.Configuration
^OAuth2.Server.ConfigurationD
^SECURITY("OAuth2.Server.ConfigurationD")
OAuth2.Server.JWTid
^OAuth2.Server.JWTidD
^SECURITY("OAuth2.Server.JWTidD")
OAuth2.Server.Metadata
^OAuth2.Server.MetadataD
^SECURITY("OAuth2.Server.MetadataD")
PKI.CAClient
^PKI.CAClientD
^SECURITY("PKI.CAClient")
PKI.CAServer
^PKI.CAServerD
^SECURITY("PKI.CAServer")
PKI.Certificate
^PKI.CertificateD
^SECURITY("PKI.Certificate")
%SYS.TokenAuth
^SYS.TokenAuthD
^SECURITY("TokenAuthD")
OAuth2 Global 映射
之前,可以将 OAuth2 Global映射到其他数据库,从而可以镜像 OAuth2 配置。
在 InterSystems IRIS 2025.2 中,无法再映射 OAuth2 global,且不能镜像 IRISSECURITY。 如果您过去依赖此行为进行镜像,可以使用以下任何替代方法:
手动对主节点和故障转移节点进行更改。
从主节点导出设置,然后将其导入到故障转移节点(需要 % ALL 权限)。
导出 OAuth2 配置数据:
set items = $name(^|"^^:ds:IRISSECURITY"|SECURITY("OAuth2"))_".gbl"
set filename = "/home/oauth2data.gbl"
do $SYSTEM.OBJ.Export(items,filename)
导入 OAuth2 配置数据:
do $SYSTEM.OBJ.Import(filename)
SQL 安全
之前,SQL 安全由 CPF 参数 DBMSSecurity 控制。 当 DBMSSecurity 禁用时,拥有 SQL 权限的用户可以随意查询数据库中的所有表。
在 InterSystems IRIS 2025.2 中:
DBMSSecurity CPF 参数已被替换为系统范围的 SQL 安全属性。 可以通过多种方式对此进行设置:
管理门户:System Administration > Security > System Security > System-wide Security Parameters > Enable SQL security(系统管理 > 安全 > 系统安全 > 系统范围的安全参数 > 启用 SQL 安全)
SetOption: ##class(%SYSTEM.SQL.Util).SetOption("SQLSecurity", "1")
Security.System.Modify: ##Class(Security.System).Modify(,.properties),其中,properties 为 properties("SQLSecurity")=1
安全表(security table)现只能通过 Detail 和 List API 进行查询,即使在 SQL 安全处于禁用状态的情况下,也需要同时具有 %DB_IRISSYS:R 和 %Admin_Secure:U 权限才能进行查询。
例如,要获取角色列表,无法再直接查询 Security.Roles 表, 而应使用 Security.Roles_List() 查询:
SELECT Name, Description FROM Security.Roles_List()
加密 IRISSECURITY
要加密 IRISSECURITY,请按以下步骤操作:
创建新的加密密钥。 转到 System Administration > Encryption > Create New Encryption Key File(系统管理 > 加密 > 创建新的加密密钥文件),并指定以下设置:
Key File(密钥文件)– 加密密钥的名称。
Administrator Name(管理员名称)– 管理员的名称。
Password(密码)– 密钥文件的密码。
激活加密密钥。 转到 System Administration > Encryption > Database Encryption(系统管理 > 加密 > 数据库加密),并选择 Activate Key(激活密钥),指定第 1 步中的 Key File(密钥文件)、Administrator Name(管理员名称)和 Password(密码)。
转到 System Administration > Encryption > Database Encryption(系统管理 > 加密 > 数据库加密),并选择 Configure Startup Settings(配置启动设置)。
从 Key Activation at Startup(启动时的密钥激活)下拉菜单中选择一种密钥激活方法。 InterSystems 强烈建议选择 Interactive(交互式)密钥激活。
在 Encrypt IRISSECURITY Database(加密 IRISSECURITY 数据库)下拉列表中,选择 Yes(是)。
重新启动系统,以加密 IRISSECURITY。
百分比类(那些类名以%开头的类,可以在任何命名空间访问)访问规则
在之前版本的 InterSystems IRIS 中,管理 Web 应用程序对附加百分比类的访问权限的过程涉及到对安全global进行写入操作。 在 InterSystems IRIS 2025.2 中,可以通过管理门户或 ^SECURITY 例程完成此过程。
管理门户(Management Portal)
通过管理门户创建百分比类访问规则:
转到 System Administration > Security > Web Applications(系统管理 > 安全 > Web 应用程序)。
选择您的 Web 应用程序。
在 Percent Class Access(百分比类访问)选项卡中设置以下选项:
Type(类型):控制该规则是仅适用于应用程序对指定百分比类的访问 (AllowClass),还是适用于包含指定前缀的所有类 (AllowPrefix)。
Class name(类名称):允许应用程序访问的百分比类或前缀。
Allow access(允许访问):是否允许应用程序访问指定的百分比类或软件包。
Add this same access to ALL applications(为所有应用程序添加相同的访问权限):是否为所有应用程序应用此规则。
^SECURITY
通过 ^SECURITY 例程创建类访问规则:
在 %SYS 命名空间中,运行 ^SECURITY 例程:
DO ^SECURITY
选择选项 5, 1, 8, 和 1,以输入类访问规则提示。
按照提示指定以下内容:
Application?(应用程序?)– 应用程序名称。
Allow type?(允许类型?)– 该规则是适用于应用程序访问特定类 (AllowClass) 还是访问包含指定前缀的所有类 (AllowPrefix)。
Class or package name?(类或软件包名称?)– 允许应用程序访问的类或前缀。
Allow access?(允许访问?)– 是否允许应用程序访问指定类或软件包。
公告
Claire Zheng · 七月 28
Hi 开发者们,
我们很高兴地宣布,将举办一场全新的 InterSystems 在线编程竞赛,本次竞赛旨在开发实用工具,让各位同行开发者的日常工作更加轻松便捷:
🏆 InterSystems 2025 开发者竞赛:Tool(工具) 🏆
时间: 2025年7月14日-8月3日(美国东部时间)
奖金池: $12,000
竞赛主题
开发任何能够提升开发者使用IRIS体验的应用程序,助力开发者更高效地开发,编写出更优质的代码,并便于测试、部署、支持或监控基于InterSystems IRIS的解决方案。
一般要求:
应用程序或库必须功能完备。它不应是已有库的简单导入或直接接口(C++除外,为IRIS创建接口确实需要大量工作)。同时,它也不应是现有应用程序或库的复制粘贴。
接受的应用程序包括:全新开发或已在Open Exchange上发布但有显著改进的应用。我们的团队将在批准参赛前对所有应用程序进行审核。
应用程序应能在IRIS Community Edition或IRIS for Health Community Edition上运行。这两个版本均可从Evaluation site 下载主机版(Mac、Windows),或从InterSystems Container Registry 或社区容器中拉取容器版使用:intersystemsdc/iris-community:latest 或 intersystemsdc/irishealth-community:latest。
应用程序应为开源,并发布在GitHub或GitLab上。
应用程序的README文件应为英文,包含安装步骤,以及应用程序的工作原理视频演示或描述。
每位开发者最多可提交3个作品。
注意:我们的专家将根据复杂性和实用性标准,对应用程序是否批准参赛拥有最终决定权。他们的决定是最终且不可上诉的。
奖品
1. 专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出。
🥇 第一名 - 5,000美元
🥈 第二名 - 2,500美元
🥉 第三名 - 1,000美元
🏅 第四名 - 500美元
🏅 第五名 - 300美元
🌟 第六至十名 - 各100美元
2. 社区提名奖(Community Nomination)- 获得总投票数最多的应用。
🥇 第一名 - 1,000美元
🥈 第二名 - 600美元
🥉 第三名 - 300美元
🏅 第四名 - 200美元
🏅 第五名 - 100美元
❗ 若多名参与者获得相同票数,则均视为获奖者,奖金由获奖者平分。❗ 现金奖励仅发放给能验证身份的获奖者。如有疑问,组织者将联系并要求提供额外信息。
谁可以参加?
任何开发人员社区成员,InterSystems 员工除外。 创建一个帐户!
👥开发人员可以组队创建协作应用程序。一个团队允许 2 到 5 名开发人员。
不要忘记在应用程序的自述文件中突出显示您的团队成员——DC 用户配置文件。
重要截止日期:
🛠 应用开发和注册阶段:
2025 年 7 月 14 日(美国东部时间 00:00):比赛开始。
2025 年 7 月 27 日(美国东部时间 23:59):提交截止日期。
✅ 投票时间:
2025 年 7 月 28 日(美国东部时间 00:00):投票开始。
2025 年 8 月 3 日(美国东部时间 23:59):投票结束。
注意:开发者可在整个注册和投票期间改进应用程序。
实用资源:
✓ 示例应用程序:
webterminal - an emulation for IRIS terminal as a web application
git-source-control - git tool to manage changes for shared dev environments and IRIS UI dev editors by @Timothy Leavitt
iris-rad-studio - RAD for UI
cmPurgeBackup - backup tool
errors-global-analytics - errors visualization
objectscript-openapi-definition - open API generator
Test Coverage Tool - test coverage helper
iris-bi-utils - a toolset for IRIS BI
and many more.
✓ 我们建议从以下模板开始:
iris-dev-template
Interoperability-python
rest-api-contest-template
native-api-contest-template
iris-fhir-template
iris-fullstack-template
iris-interoperability-template
iris-analytics-template
✓ 对于 IRIS 初学者:
Build a Server-Side Application with InterSystems IRIS
Learning Path for beginners
✓ 对于 ObjectScript Package Manager (IPM) 初学者:
How to Build, Test and Publish IPM Package with REST Application for InterSystems IRIS
Package First Development Approach with InterSystems IRIS and IPM
✓ 如何提交您的应用程序参加比赛:
How to publish an application on Open Exchange
How to submit an application for the contest
需要帮助?
加入 InterSystems 的Discord server上的竞赛频道或在本文的评论中与我们交谈。
我们迫不及待地想看到您的项目!祝你好运👍
By participating in this contest, you agree to the competition terms laid out here. Please read them carefully before proceeding.
公告
Claire Zheng · 十月 10, 2024
各位社区成员,大家好
Global Masters 已开启!使用 InterSystems SSO 登录使用 >> [此链接] << 访问平台,并使用您的 InterSystems SSO 登录。请注意,在最近的测试中,我们发现一些用户在尝试通过这种方式登录时会遇到错误。 我们目前正在与供应商共同调查问题原因。 如果您遇到此类错误,请通过私信联系我,我将向您发送手动邀请!测试版免责声明
请注意,此次发布的版本仍是测试版,我们正紧锣密鼓地在后台开展工作,以改进程序的方方面面。 如果您遇到访问、个人资料方面的问题或发现任何错误,请随时向我发送私信。
问题
xiao wang · 十二月 4, 2024
使用dbeaver 连接数据库, 弹出[InterSystems IRIS JDBC] Communication link failure: License Violation错误. 可能的原因包括:
1. 用户名密码错误
2. 授权失效、过期或已被占满
公告
Michael Lei · 一月 3
InterSystems IRIS® 数据平台、InterSystems IRIS® for Health 和 HealthShare® Health Connect 2025.1 的首个开发者预览版已发布到 WRC 开发者预览网站。容器可在我们的容器注册表中找到,并已添加 latest-preview 标签。
这些开发者预览版包含用于迁移到 IBM Open XL C/C++ for AIX 17.x 编译器的功能,从而在旧版编译器接近支持终止时确保与未来的 AIX 版本兼容。 此迁移侧重于 aixopenssl30 目标,支持 AIX 7.2 和 7.3 上的 SSL3。
可以在以下链接中找到初始文档:
InterSystems IRIS 数据平台 2025.1 | 文档首页
HealthShare Health Connect 2025.1 | 文档首页
可用性和软件包信息
此版本提供适用于所有受支持平台的经典安装包。有关完整列表,请参阅“支持的平台”文档。
安装包和预览版密钥可从 WRC 的预览版下载网站或通过评估服务网站(勾选“Show Preview Software”(显示预览软件)框)获取。
公告
Michael Lei · 一月 9
2024 年 12 月 4 日,系统警报和监视 (SAM) 已从 InterSystems 下载网站、容器注册表和文档网站移除。
InterSystems 去年宣布停止进一步开发 SAM,并同时将其标记为已弃用。InterSystems 将继续按照与超出最低支持版本窗口的产品版本相同的方式为使用此技术的现有客户提供支持。
Intersystems 发现,大多数对 SAM 提供的可观察性类型感兴趣的客户已选择将 InterSystems IRIS 指标 API 和结构化日志记录连接到其组织现有的可观察性平台,以便更全面地了解其运行平台。
如果您对 SAM 当前的使用方式或今后的使用计划有任何疑问,请联系您的客户团队或 dbpprodmgrs@intersystems.com。
文章
Michael Lei · 九月 26, 2024
大家都搭建了测试环境。 有些人很幸运,可以在完全独立的环境中运行生产。 -- 佚名.在这一系列文章中,我想向大家介绍并探讨使用 InterSystems 技术和 GitLab 进行软件开发可以采用的几种方式。 我将介绍以下主题:Git 101Git 流程(开发流程)GitLab 安装GitLab 工作流GitLab CI/CD包含容器的 CI/CD第一部分将介绍现代软件开发的基础 – Git 版本控制系统和各种 Git 流程。Git 101虽然我们将主要探讨软件开发的概况以及 GitLab 如何帮助我们实现这一目标,但 Git,或者说 Git 设计中的几个基础的高级概念对于更好地理解后面的概念非常重要。也就是说,Git 是基于这些概念的版本控制系统(还有更多概念,但这几个概念最为重要):非线性开发意味着,虽然我们的软件是从版本 1 到版本 2、再到版本 3 相继发布的,但实际上从版本 1 到版本 2 的升级是并行完成的 – 多名开发者会同时开发许多功能/错误修复。分布式开发意味着开发者独立于一个中央服务器或其他开发者,可以轻松地在自己的环境中进行开发。合并 – 基于前面提到的两个概念,我们会发现很多不同的版本同时存在,我们需要将它们统一成一个完整的状态。我的意思不是说 Git 发明了这些概念。 Git 并没有发明这些概念, 而是使这些概念变得简单、流行,并加入了多个相关创新概念,也就是说,架构即代码/容器化改变了软件开发。核心 git 术语仓库是存储数据以及关于数据的元信息的项目。“从物理层面来讲”,仓库是磁盘上的目录。仓库用于存储文件和目录。仓库还会存储每个文件的完整变更历史。仓库可以:存储在您自己的计算机本地远程存储在远程服务器上但从 git 的角度来看,本地仓库与远程仓库之间没有特殊的区别。提交是仓库的固定状态。 很显然,如果每次提交都存储仓库的完整状态,我们的仓库很快就会变得非常大。 因此,提交会存储差异,也就是当前提交与其父提交之间的差异。不同的提交可以具有不同数量的父提交:0 个 – 仓库中的第一个提交没有父提交。1 个 – 一切如常 - 我们的提交改变了仓库中的某些内容,就像在父提交期间一样2 个 – 当我们有两个不同的仓库状态时,我们可以将它们合并成一个新状态。 该状态和该提交就会有 2 个父提交。>2 个 – 当我们将 2 个以上的不同仓库状态合并为一个新状态时,就会有 2 个以上的父提交。 这一概念与我们的讨论并没有特别大的关系,但它确实存在。现在,对于父提交,每个与之不同的提交都被称为子提交。 每个父提交可以有任意数量的子提交。分支是对提交的引用(或指针),如下图所示:该图像显示的仓库具有两个提交(灰色圆圈),第二个圆圈是 master 分支的头部。 在我们添加更多提交后,仓库开始变成下图所示的状态:这是最简单的情况。 我们的开发者一次负责处理一个更改。 但通常会有很多开发者同时负责处理不同的功能,我们需要使用提交树显示仓库中的变化。提交树我们从相同的起始状态开始。 仓库具有两个提交:但现在,两名开发者在同时工作,为了避免相互干扰,他们在单独的分支中工作:一段时间后,他们需要合并所做的更改,为此,他们创建了合并请求(也叫拉取请求), 顾名思义,该请求可将两个不同的仓库状态(本例中,我们要将 develop 分支合并到 master 分支中)合并为一个新状态。 接受相应审查并获得批准后,仓库状态如下图所示:开发继续进行:Git 101 - 总结主要概念:Git 是一个非线性的分布式版本控制系统。仓库用于存储数据以及关于数据的元信息。提交是仓库的固定状态。分支是对提交的引用。合并请求(也叫拉取请求)是将两个不同的仓库状态合并为一个新状态的请求。如果您想了解更多关于 Git 的信息,可以阅读相关书籍。Git 流程现在,读者已熟悉基本的 Git 术语和概念,我们来探讨一下如何使用 Git 管理软件生命周期的开发部分。很多实践(称为流程)介绍了使用 Git 的开发流程,但我们只会探讨其中两个:GitHub 流程GitLab 流程GitHub 流程GitHub 流程非常简单。 具体如下:从仓库创建一个分支。将更改提交到新分支从您的分支发送一个拉取请求,其中包含您提议的更改,以发起讨论。根据需要在您的分支上提交更多更改。 您的拉取请求将自动更新。在分支准备好合并后,立即合并拉取请求。我们需要遵守几条规则:master 分支始终可部署(并且可正常运行!)不直接在 master 分支中进行开发在功能分支中进行开发master 分支 == 生产* 环境**需要尽可能频繁地部署到生产环境* 不要与“Ensemble 生产”混淆,这里的“生产”是指正式。** 环境是配置好的代码运行位置,可以是服务器、虚拟机,甚至可以是容器。如下图所示:有关 GitHub 流程的更多信息,请参阅此处。 我们还提供了图解指南。GitHub 流程非常适合小型项目,如果您刚开始使用 Git 流程,可以尝试一下。 不过,GitHub 也会使用 GitHub 流程,因此也可以在大型项目中使用 GitHub 流程。GitLab 流程如果您还没有准备好立即部署到生产环境,GitLab 流程提供 GitHub 流程 + 环境。 具体做法是:在功能分支中进行开发(与上例相同),合并到 master 分支中(与上例相同),但这里有一个不同之处: master 分支仅等同于测试环境。 除此之外,还有链接到可能存在的各种其他环境的“环境分支”。通常存在三个环境(可以根据需要创建更多环境):测试环境 == master 分支预生产环境 == preprod 分支生产环境 == prod 分支进入其中一个环境分支的代码应立即移至相应的环境中,此流程可通过以下方式完成:自动(我们将在第 2 部分和第 3 部分探讨)半自动(与自动方式相同,唯一的区别是应按下按钮授权部署)手动完整的流程是:在功能分支中开发功能。对功能分支进行审查并将其合并到 master 分支中。一段时间(合并了多个功能)后,将 master 分支合并到 preprod 分支中一段时间(用户测试等)后,将 preprod 分支合并到 prod 分支中在我们进行合并和测试时,多个新功能已开发完毕并合并到 master 分支中,因此转到 3。具体如下图所示:有关 GitLab 流程的更多信息,请参阅此处。结论Git 是一个非线性的分布式版本控制系统。Git 流程可用作软件开发周期的准则,有多种 Git 流程可供选择。链接Git 书籍GitHub 流程GitLab 流程Driessen 流程(更全面的流程,用于比较)本文的代码讨论问题您使用 Git 流程吗? 使用哪一种?您为普通项目使用多少个环境?后续内容在接下来的部分中,我们将:安装 GitLab。探讨一些建议的调整。讨论 GitLab 工作流(不要与 GitLab 流程混淆)。敬请关注。
文章
Michael Lei · 九月 27, 2024
在这一系列文章中,我想向大家介绍并探讨使用 InterSystems 技术和 GitLab 进行软件开发可以采用的几种方式。 我将介绍以下主题:
Git 101
Git 流程(开发流程)
GitLab 安装
GitLab 工作流
持续交付
GitLab 安装和配置
GitLab CI/CD
在第一篇文章中,我们介绍了 Git 基础知识、深度理解 Git 概念对现代软件开发至关重要的原因,以及如何使用 Git 开发软件。
在第二篇文章中,我们介绍了 GitLab 工作流 – 一个完整的软件生命周期流程,并介绍了持续交付。
在第三篇文章中,我们介绍了 GitLab 安装和配置以及将环境连接到 GitLab
在这篇文章中,我们将介绍编写 CD 配置。
计划
环境
首先,我们需要多个环境以及与之对应的分支:
环境
分支
交付
有权提交的角色
有权合并的角色
测试
master
自动
开发者、所有者
开发者、所有者
预生产
preprod
自动
无
所有者
生产
prod
半自动(按下按钮进行交付)
无
所有者
开发周期
作为示例,我们将使用 GitLab 流程开发一个新功能,并使用 GitLab CD 进行交付。
在功能分支中开发功能。
对功能分支进行审查并将其合并到 master 分支中。
一段时间(合并了多个功能)后,将 master 分支合并到 preprod 分支中
一段时间(用户测试等)后,将 preprod 分支合并到 prod 分支中
具体如下图所示(我用草图标出了我们需要为 CD 开发的部分):
开发和测试
开发者将新功能的代码提交到单独的功能分支中
功能稳定后,开发者将功能分支合并到 master 分支中
来自 master 分支的代码被交付到测试环境,在其中进行加载和测试
交付到预生产环境
开发者创建从 master 分支到 preprod 分支的合并请求
仓库所有者在一段时间后批准合并请求
来自 preprod 分支的代码被交付到预生产环境
交付到生产环境
开发者创建从 preprod 分支到 prod 分支的合并请求
仓库所有者在一段时间后批准合并请求
仓库所有者按下“部署”按钮
来自 prod 分支的代码被交付到生产环境
也可以用示意图形式表示此流程:
应用程序
应用程序由两部分组成:
在 InterSystems 平台上开发的 REST API
客户端 JavaScript web 应用程序
阶段
通过上面的计划,我们可以确定需要在持续交付配置中定义的阶段:
加载 – 将服务器端代码导入 InterSystems IRIS
测试 – 测试客户端和服务器代码
封装 – 构建客户端代码
部署 – 使用 Web 服务器“发布”客户端代码
以下是它在 gitlab-ci.yml 配置文件中的样式:
stages:
- load
- test
- package
- deploy
脚本
加载
下面我们来定义脚本。 脚本文档。 我们先来定义用于加载服务器端代码的脚本 load server:
load server:
environment:
name: test
url: http://test.hostname.com
only:
- master
tags:
- test
stage: load
script: csession IRIS "##class(isc.git.GitLab).load()"
脚本会执行哪些操作?
load server 是脚本名称
接下来,我们来描述此脚本运行的环境
only: master – 告知 GitLab 此脚本仅应在向 master 分支进行提交时运行
tags: test 指定此脚本仅应在具有 test 标签的运行程序上运行
stage 指定脚本的阶段
script 定义要执行的代码 在本例中,我们从 isc.git.GitLab 类调用类方法 load
重要说明
对于 InterSystems IRIS,请将 csession 替换为 iris session。
对于 Windows,请使用:irisdb -s ../mgr -U TEST "##class(isc.git.GitLab).load()
现在,我们来编写相应的 isc.git.GitLab 类。 此类中的所有入口点如下所示:
ClassMethod method()
{
try {
// code
halt
} catch ex {
write !,$System.Status.GetErrorText(ex.AsStatus()),!
do $system.Process.Terminate(, 1)
}
}
请注意,可以通过两种方式结束此方法:
停止当前进程 – 在 GitLab 中注册为成功完成
调用 $system.Process.Terminate – 异常终止进程,GitLab 将此情况注册为错误
因此,加载代码如下:
/// Do a full load
/// do ##class(isc.git.GitLab).load()
ClassMethod load()
{
try {
set dir = ..getDir()
do ..log("Importing dir " _ dir)
do $system.OBJ.ImportDir(dir, ..getExtWildcard(), "c", .errors, 1)
throw:$get(errors,0)'=0 ##class(%Exception.General).%New("Load error")
halt
} catch ex {
write !,$System.Status.GetErrorText(ex.AsStatus()),!
do $system.Process.Terminate(, 1)
}
}
调用了两个实用方法:
getExtWildcard – 获取相关文件扩展名列表
getDir – 获取仓库目录
如何获取目录?
执行脚本时,GitLab 会先指定很多环境变量。 其中一个环境变量是 CI_PROJECT_DIR – 克隆仓库以及运行作业位置的完整路径。 我们可以通过 getDir 方法轻松获取:
ClassMethod getDir() [ CodeMode = expression ]
{
##class(%File).NormalizeDirectory($system.Util.GetEnviron("CI_PROJECT_DIR"))
}
测试
以下是测试脚本:
load test:
environment:
name: test
url: http://test.hostname.com
only:
- master
tags:
- test
stage: test
script: csession IRIS "##class(isc.git.GitLab).test()"
artifacts:
paths:
- tests.html
有哪些更改? 当然是名称和脚本代码,但还添加了工件。 工件是作业成功完成后附加到作业的文件和目录列表。 本例中,测试完成后,我们可以生成重定向到测试结果的 HTML 页面,并使其可以通过 GitLab 访问。
请注意,加载阶段有很多复制粘贴的内容 – 环境是相同的,脚本部分(例如环境)可以单独标记并附加到脚本。 我们来定义测试环境:
.env_test: &env_test
environment:
name: test
url: http://test.hostname.com
only:
- master
tags:
- test
现在,我们的脚本如下:
load test:
<<: *env_test
script: csession IRIS "##class(isc.git.GitLab).test()"
artifacts:
paths:
- tests.html
接下来,我们使用 UnitTest 框架执行测试。
/// do ##class(isc.git.GitLab).test()
ClassMethod test()
{
try {
set tests = ##class(isc.git.Settings).getSetting("tests")
if (tests'="") {
set dir = ..getDir()
set ^UnitTestRoot = dir
$$$TOE(sc, ##class(%UnitTest.Manager).RunTest(tests, "/nodelete"))
$$$TOE(sc, ..writeTestHTML())
throw:'..isLastTestOk() ##class(%Exception.General).%New("Tests error")
}
halt
} catch ex {
do ..logException(ex)
do $system.Process.Terminate(, 1)
}
}
本例中,测试设置是相对于存储单元测试的仓库根目录的路径。 如果此处为空,则跳过测试。 writeTestHTML 方法用于输出重定向到测试结果的 html:
ClassMethod writeTestHTML()
{
set text = ##class(%Dictionary.XDataDefinition).IDKEYOpen($classname(), "html").Data.Read()
set text = $replace(text, "!!!", ..getURL())
set file = ##class(%Stream.FileCharacter).%New()
set name = ..getDir() _ "tests.html"
do file.LinkToFile(name)
do file.Write(text)
quit file.%Save()
}
ClassMethod getURL()
{
set url = ##class(isc.git.Settings).getSetting("url")
set url = url _ $system.CSP.GetDefaultApp("%SYS")
set url = url_"/%25UnitTest.Portal.Indices.cls?Index="_ $g(^UnitTest.Result, 1) _ "&$NAMESPACE=" _ $zconvert($namespace,"O","URL")
quit url
}
ClassMethod isLastTestOk() As %Boolean
{
set in = ##class(%UnitTest.Result.TestInstance).%OpenId(^UnitTest.Result)
for i=1:1:in.TestSuites.Count() {
#dim suite As %UnitTest.Result.TestSuite
set suite = in.TestSuites.GetAt(i)
return:suite.Status=0 $$$NO
}
quit $$$YES
}
XData html
{
<html lang="en-US">
<head>
<meta charset="UTF-8"/>
<meta http-equiv="refresh" content="0; url=!!!"/>
<script type="text/javascript">
window.location.href = "!!!"
</script>
</head>
<body>
If you are not redirected automatically, follow this <a href='!!!'>link to tests</a>.
</body>
</html>
}
封装
我们的客户端是一个简单的 HTML 页面:
<html>
<head>
<script type="text/javascript">
function initializePage() {
var xhr = new XMLHttpRequest();
var url = "${CI_ENVIRONMENT_URL}:57772/MyApp/version";
xhr.open("GET", url, true);
xhr.send();
xhr.onloadend = function (data) {
document.getElementById("version").innerHTML = "Version: " + this.response;
};
var xhr = new XMLHttpRequest();
var url = "${CI_ENVIRONMENT_URL}:57772/MyApp/author";
xhr.open("GET", url, true);
xhr.send();
xhr.onloadend = function (data) {
document.getElementById("author").innerHTML = "Author: " + this.response;
};
}
</script>
</head>
<body onload="initializePage()">
<div id = "version"></div>
<div id = "author"></div>
</body>
</html>
要进行构建,需要将 ${CI_ENVIRONMENT_URL} 替换为其值。 当然,实际应用程序可能需要 npm,但此处仅为了举例说明。 脚本如下:
package client:
<<: *env_test
stage: package
script: envsubst < client/index.html > index.html
artifacts:
paths:
- index.html
部署
最后,我们将 index.html 部署到 Web 服务器根目录,以部署客户端。
deploy client:
<<: *env_test
stage: deploy
script: cp -f index.html /var/www/html/index.html
就是这些!
多个环境
如果您需要在多个环境中执行相同(相似)的脚本,应该如何操作? 脚本部分也可以是标签,因此下面给出了在测试和预生产环境中加载代码的示例配置:
stages:
- load
- test
.env_test: &env_test
environment:
name: test
url: http://test.hostname.com
only:
- master
tags:
- test
.env_preprod: &env_preprod
environment:
name: preprod
url: http://preprod.hostname.com
only:
- preprod
tags:
- preprod
.script_load: &script_load
stage: load
script: csession IRIS "##class(isc.git.GitLab).loadDiff()"
load test:
<<: *env_test
<<: *script_load
load preprod:
<<: *env_preprod
<<: *script_load
通过这种方式,我们便无需复制粘贴代码。
有关完整的 CD 配置,请参阅此处。 该配置遵循在测试、预生产和生产环境之间移动代码的原始计划。
结论
可以将持续交付配置为自动执行任何所需的开发工作流。
链接
挂接仓库(和简单配置)
测试仓库
脚本文档
可用环境变量
后续内容
在下一篇文章中,我们将创建利用 InterSystems IRIS Docker 容器的 CD 配置。