清除过滤器
文章
Qiao Peng · 五月 15, 2022
在软件开发和业务集成中,规则无处不在:会员折扣的计算规则、根据消息类型和内容将其路由到不同目标系统的路由规则。还有一个规则发挥重要作用的地方- 辅助决策规则,例如临床知识库和医疗质量指标规则。
规则经常需要随业务调整和知识积累进行调整,而规则的调整是业务和行业专家定的。如果规则是以代码硬编码的,这些调整需要程序员改动,一来不直观、需要业务专家与程序员大量的沟通成本,二来硬编码改动会对应用伤筋动骨,甚至带来风险,三来没法控制新规则生效的时间 – 总不能让程序员在新规则生效的那一刻去编译和部署吧。
InterSystems规则引擎可以帮助我们解决这些问题,于构建、执行和记录消息路由规则和普通的业务规则,带给应用和集成方案充分的灵活性和可用性。甚至业务专家和临床信息学家都可以通过低代码的、图形化的规则编辑器修改规则和指定规则生效和失效时间。
InterSystems规则引擎是InterSystems IRIS数据平台和Health Connect与Ensemble集成平台的组件。创建的规则可以被单独调用,也可以被业务流程调用。
本篇介绍规则的如何使用InterSystems规则编辑器创建规则和规则引擎执行规则的逻辑。
1. 规则基本概念
在设计规则前,先了解一下规则的基本概念。
1.1 上下文
上下文是用于规则定义的数据模型。用于临床决策支持的上下文通常需要患者信息、诊断、体征与观察、过敏、医嘱等信息来制定规则。例如糖化血红蛋白(观察)超过10%,要提示紧急警告。因为上下文提供了建立规则判据的主要*数据,所以它非常关键。
医疗行业的数据格式非常复杂,有HL7 V2这种分隔符分隔的字符串、有HL7 CDA这样的XML字符串/字符流、有新的基于JSON的FHIR、还有SQL二维表的记录。这些数据格式都可能会被用做建立规则的上下文模型。
*注:除了上下文中的数据,还可以使用规则临时变量的数据作为判据。
1.2 规则类型
规则可以用于很多场景,InterSystems规则引擎支持多种规则类型,包括:
用于消息路由的规则
根据上下文(请求消息)信息类型和内容,决定消息路由的目标
InterSystems提供多种开箱即用的消息路由规则类,分别对应HL7 V2消息、行业虚拟文档消息(DICOM、X12等)、XML虚拟文档消息和普通对象消息
普通的业务判断规则
根据上下文内容,决定返回结果
上下文可以是普通对象、HL7消息、医疗行业虚拟文档、XML文档、JSON等
管理警告规则
根据系统警告信息路由警告给不同的用户
我们会介绍路由规则和普通业务规则。
无论创建哪种规则,InterSystems技术平台都以类定义保存规则逻辑,也就是创建规则类,从而方便的导入/导出。
1.3 规则辅助类
规则辅助类约束规则定义并决定规则可以使用哪些操作,例如路由规则可以使用“发送”操作,而普通业务规则可以使用“返回”操作。
系统提供的每个规则类型都有对应的规则辅助类,例如虚拟文档路由规则的规则辅助类是:EnsLib.MsgRouter.VDocRuleAssist。
在选定创建的规则类型后,规则编辑器会自动选择对应的规则辅助类,除非特殊场景,无需自己选择。通常规则辅助类不需要修改,我们将会在高级规则特性介绍文章中介绍用户自定义辅助规则类。
1.4 规则集、规则、条件、行为
规则定义由四层构成:
规则集:一个规则定义中可以定义一到多个规则集,同时只有一个规则集生效。当有多个规则集时,通常它们代表不同的版本,通过规则集不同的生效起止日期进行分别。这样,可以事先生成好新的规则集、并定义好生效时间,规则引擎会在生效时间开始后自动启用新的规则集。
规则:一个规则集中,可以有一到多个规则,这些规则同时生效。例如在HL7 V2路由规则定义中,每个规则可以处理不同类型的V2消息。规则按其在规则集中的顺序执行,只要规则没有返回(return)行为,后面的规则会继续执行。
规则条件:在一个规则中,可以处理多个规则条件,用when和otherwise定义。规则条件定义需要满足的条件和满足条件时的行为(action)。同一级别条件下,when可以有多个,但otherwise最多有一个,代表所有when都不满足的条件。不同条件间相当于if...elseif关系,因此一个条件满足时,后面的条件不会再进行判断。
行为:在规则条件下,可以执行一个或多个行为(action)。其中返回行为(return)是特殊行为,执行到这个行为会直接返回,进而中断后续的规则、条件和行为的执行。
2.使用规则编辑器
InterSystems规则引擎提供图形化的规则编辑器,通过管理门户>Interoperability>构建>业务规则 访问它。
第一步要确定我们要建立什么类型规则:是消息路由规则,还是普通业务规则,亦或是管理警告规则?
同时,规则是对象类,因此需要指定它的类包名(包)和类名(名称)。
2.1 消息路由规则的创建与编辑
本章介绍消息路由规则的创建与编辑,如果您是在找普通业务规则的创建方式,请跳到下一章。
消息路由流程本身是一种简单的业务流程,消息路由规则的上下文就是对应的业务流程对象,因此消息路由规则的上下文类型是固定的。
InterSystems提供4种开箱即用的消息路由规则,分别是:
路由规则类型
说明
上下文类
普通消息路由规则
用于用户自定义的对象类型消息的路由规则
EnsLib.MsgRouter.RoutingEngine
HL7 消息路由规则
用于HL7 V2消息的路由规则
EnsLib.HL7.MsgRouter.RoutingEngine
虚拟文档消息路由规则
用于XML、EDIFACT等虚拟文档类型消息的路由规则
EnsLib.MsgRouter.VDocRoutingEngine
基于消息段的虚拟文档消息路由规则
用于XML、EDIFACT等虚拟文档类型消息的路由规则,基于消息段,而非完整消息
EnsLib.EDI.MsgRouter.SegmentedRoutingEngine
2.1.1 HL7 v2消息路由规则的创建和部署
HL7 v2消息是使用分割符分隔的字符串,在InterSystems数据平台上使用内建的虚拟文档来操作,因此可以将HL7 v2消息的段(Segment)和属性(Field)作为对象和属性方式操作,非常简单。同时,InterSystems数据平台提供开箱即用的路由production模版,直接基于模版编辑即可。
2.1.1.1 创建HL7 v2路由规则的方法
方法1: 使用HL7 v2 production模版向导创建
在production创建向导中,选择production类型为HL7消息发送。这时同时创建用户HL7 v2路由的production和对应路由规则类。这种方法最简单,如果目标就是建立一个路由HL7 v2的产品,推荐使用这个模版向导。
向导会自动应用模版,创建如下的HL7 v2路由产品,它带处理输入HL7文件的BS和输出HL7文件的BO、一个路由规则BP:MsgRouter和一个异常警告BP:Ens.Alert。
选择MsgRouter,在右侧的业务规则名称中可以看到,向导自动创建了名为HIP.Prod.HL7Router.RoutingRule的路由规则。点击后面的放大镜图标,即可对该规则进行编辑。
方法2: 直接使用规则向导创建规则
在规则创建向导中,选择规则类型为:HL7 Message Routing Rule。
2.1.1.2 编辑规则
使用HL7 v2 production模版向导创建的规则定义已经包含了一个规则集(ruleSet),其中有一个规则(rule),而该规则下只有一个条件(when)。使用规则向导创建的v2路由规则是完全空白的规则定义,只有一个规则集。
我们以HL7 v2 production模版向导创建的规则定义为例介绍规则的编辑。
在规则编辑器页面,右侧是规则辅助,由规则辅助类提供支持,列出可以执行的操作。选中ruleset、rule、条件(when/otherwise)和行为,都会显示不同的可以执行的操作和相应的解释。
规则集(ruleSet)是一系列的规则的组合。
规则集可以设置生效时间范围:effectiveBegin和effectiveEnd。如果未定义生效时间范围,规则定义编译后即刻生效。当定义多个ruleSet时,应该定义每个ruleSet的生效时间范围;如果有生效时间范围的重叠,会使用第一个生效的规则集。
规则集有名称 name,建议设置为有意义的规则集说明。
规则(rule)是一系列条件的组合。
选中ruleSet,点击+号就可以添加规则。
规则可以设置:
名称(name): 应该设置为有意义的字符串,例如” ADT文件消息处理”。
是否禁用(disabled):默认是启用的(false)。
约束(constraint):设置本规则的消息约束。双击constraint即可编辑。对于HL7 v2消息,可以对下列信息进行约束:
源(source):对消息来源进行约束,本例中源被默认为HL7FileService,就是HL7文件源。如果这个路由规则需要处理多个HL7消息源,例如文件和TCP,可以把源约束删除掉。
Schema类别(Schema Category):对HL7 v2消息的Schema版本进行约束。如果路由规则只处理特定版本的消息,可以进行选择,例如2.5.1。
文档名称(Document Name):因为HL7 v2被作为虚拟文档对象进行处理,因此每种类型的v2消息都是一种虚拟文档。如果要对处理的v2消息类型进行约束,可以多选v2消息类型,例如ADT_A01和ADT_A03。
注意,这些约束项都是可选的。任何不符合约束的消息,都不会被路由,并且会被记录在规则日志(rule log)中。
规则条件(when/otherwise)设定条件(condition)。
选中rule,点击+号,即可增加条件when或otherwise。增加后,双击condition即可编辑。可以用在条件的判据数据就是上下文中的属性(数据),在表达式编辑窗口的文本输入栏会有属性提示,打首字母就会提示,也可以打任意字符并删除,从而显示所有上下文可用属性。
HL7消息是一种虚拟文档*,因此有Document特殊变量用于访问其虚拟文档内的数据。如果在上一步的规则约束中选择了虚拟文档的类型,如ADT_A01,那么引擎还会在Document.{ 后提供所有对应HL7 v2虚拟文档的段和属性提示,如下图。
*注:关于虚拟文档,我将在下一篇文章中介绍。
在表达式编辑窗口中,点击op打开操作符向导,选择操作符,例如判等、大于、包含等。点击fx打开函数向导,选择函数,例如ConvertDateTime函数可以将HL7的时间格式(YYYYMMDDhhmmss)转为ODBC格式(YYYY-MM-DD hh:mm:ss)。也可以直接写表达式,而不使用这些操作符和函数向导。用户可以扩展自定义函数,见第二部分的规则函数扩展章节。
行为(action)定义了满足条件时的行为。
例如满足条件,将消息做模型转换后发送给外部HL7接口。在右侧的规则辅助窗口列出可以执行的行为。注意在同一个规则条件下,可以有多个行为,例如向多个目标发送不同的消息。
对于路由规则,通常的行为时发送(send)。发送前,选中转换(transform)可以选择发送前要执行的数据转换;
发送目标(target)会列出production中的所有业务操作和业务流程,可以多选。
注意1:规则(rule)也是一种行为,即满足条件时,可以执行子规则。
注意2:返回(return)行为会中断当前规则条件下的后续行为。
<<未完待续>>
文章
Jingwei Wang · 九月 16, 2022
连接前准备:
C++ 开发环境
InterSystems ODBC 驱动 (ODBC 驱动会随InterSystems IRIS安装包自动安装在服务器中)
Connection String
步骤:
Connection String:其中#include 用来导入需要使用的libraries,"Driver=InterSystems IRIS ODBC35;Host=localhost;Port=1972;Database=USER;UID=SQLAdmin;PWD=deployment-password;\0";是connection string。
#ifdef WIN32
#include <windows.h>
#endif
#include <sqlext.h>
#ifdef UNICODE
#include <sqlucode.h>
#endif
#include <stdio.h>
int main()
{
RETCODE rc; /* Return code for ODBC functions */
HENV henv = NULL; /* Environment handle */
HDBC hdbc = NULL; /* Connection handle */
unsigned char szOutConn[600];
SQLSMALLINT *cbOutConn = 0;
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0);
SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
char connect_cmd[255] = "Driver=InterSystems IRIS ODBC35;Host=localhost;Port=1972;Database=USER;UID=SQLAdmin;PWD=deployment-password;\0";
rc = SQLDriverConnect(hdbc, NULL, (SQLCHAR*) connect_cmd, SQL_NTS, szOutConn, 600, cbOutConn, SQL_DRIVER_COMPLETE);
if (rc == SQL_SUCCESS)
{
printf("Successfully connected!!\n");
}
else
{
printf("Failed to connect to IRIS\n");
exit(1);
}
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc); /* Free connection handle */
SQLFreeHandle(SQL_HANDLE_ENV, henv); /* Free environment handle */
return 0;
}
文章
Claire Zheng · 十一月 7, 2022
作为开发者社区的一员,多年来我亲眼目睹了访问和共享数据的障碍是如何阻碍创新的。在与医疗科技领域的初创公司和大企业合作时,我看到了封闭的数据是如何阻碍了我们的合作,那种我们都意识到的对提供高质量医疗服务至关重要的合作。 随着我对FHIR®(快速医疗互操作性资源)标准的了解,我开始相信这是医疗创新的前进之路。我希望全世界的开发人员——包括我们全球InterSystems开发社区的1.1万余名开发人员——都能够充满激情地来了解如何使用FHIR推动数据驱动的医疗解决方案,来了解这种以前所未有的方式促进生态系统利益相关者之间合作的技术。 Sage Growth Partners的一项调查发现,医疗行业有一半的高管表示,数据集成和互操作性是实现其战略数据分析目标的最大障碍。只有20%的人对自己的数据充满信心。 他们渴望改变。其中约80%的高管表示,在整个组织内创建和共享高质量数据是他们的首要任务。一个全球性的运动正在呼吁更多的协作医疗,然而数据的缺陷阻碍了这一进程。 集成FHIR,就可以改变游戏规则。
协作医疗意味着协同IT
将医疗行业的利益相关者聚集在一起、交换信息和知识,毫无疑问将改善患者的结果。但是当你观察成功的协作医疗的背后,你会发现什么呢?
协同IT。这意味着实现健康信息的互操作性,无论是测试结果、报告患者监测数据、索赔信息还是电子健康记录(EHR)。随着医疗健康数据比以往任何时候都更加庞大和分散,从多个系统访问数据,以及从一个应用程序实时访问数据,能够使利益相关者更好地关注细节,并快速构建定制的医疗护理计划。
FHIR是医疗互操作性的未来
简单介绍一下背景知识:FHIR是一个全球互操作性标准,描述了机构间如何共享大约150种医疗健康“资源(Resource)”——例如药物、医疗设备数据、付款人信息以及跨EHR和其他系统托管的其他数据。
从去年开始,医疗计划必须允许成员通过使用安全FHIR Release 4 (R4) API的应用程序访问其医疗数据。这迎来了来自世界各地的开发人员的爆发式创新,开发人员能够构建FHIR应用程序、工具和技术,利用这一标准来促进协作医疗。
这惠及患者。现在,只需轻轻一划手指,患者就能轻松获取个人医疗健康信息,使用基于FHIR的应用程序编程接口(API)从移动设备上获取医疗健康数据。
用FHIR改变医疗
作为InterSystems开发者关系主管,我很自豪我们正在构建核心医疗IT的协作工具,帮助开发人员充分利用FHIR。InterSystems IRIS for Health(医疗版)、InterSystems HealthShare®和InterSystems IRIS云服务都利用FHIR来支持互操作性。 HL7 达芬奇项目(Da Vinci)是一项倡议,通过该倡议,医疗IT专家和行业领袖通过利用HL7 FHIR,在基于价值的医疗中改善跨社区数据共享。该项目侧重于在质量改进、覆盖率/减轻负担、成员访问、流程改进和临床数据交换方面取得成果。
看看正在进行和已经上市的产品,很明显,FHIR集成将改变医疗健康行业。当医疗服务提供者、支付方和医疗护理行业的其他人能够利用庞大的健康数据来改善患者的结果时,每个人都是赢家。
作者介绍
本文作者 Dean Andrews (社区ID: @Dean.Andrews2971 )是InterSystems数据平台开发者关系主管。他的团队管理着InterSystems开发者社区、黑客马拉松项目和创业加速器项目。Dean专注于为开发人员、创业公司和客户提供工具和信息,使他们能够在InterSystems技术上进行创新。Dean还是非营利组织HealthTech Build的顾问委员会成员,他是出版自己的专著,并且经常在行业活动中发表演讲。
原文链接可以点击此处查看:How Collaborative IT Can Unlock Collaborative Care
公告
Claire Zheng · 五月 31, 2023
Hi 开发者们!一年一度的 InterSystems IRIS 开发者大奖赛已启动!
我们非常高兴地邀请大家参加此次编程大赛——使用 InterSystems IRIS 数据平台构建开源解决方案!
🏆 InterSystems 2023 年度编程大奖赛🏆
时间: 2023年6月12日-7月9日(美国东部时间)
奖金池: 26,000 美元
主题
InterSystems Grand Prix 是我们的年度编程大赛,旨在寻找使用 InterSystems IRIS 的最佳应用程序。我们欢迎您提交任何主题的申请!
欢迎展示任何类型的 InterSystems IRIS API 或数据模型,提交以 InterSystems IRIS 为后端(API 或数据库)的任何应用程序。
欢迎您对去年在 InterSystems 竞赛系列中展示的应用程序进行改进,并将它们提交给大奖赛。
欢迎您提交 100% 全新的应用参与竞赛。
一般要求:
有效应用程序:100%全新的Open Exchange Apps或已有的应用程序(但有显著提升)。所有参赛者/团队提交的应用程序只有经过我们团队的审核之后才会被批准参赛。
该应用可以在 IRIS Community Edition or IRIS for Health Community Edition or IRIS Advanced Analytics Community Edition上运行。
该应用需开源并在GitHub上发布。
该应用的README文件应为英文,包含安装步骤,并包含视频demo或/和应用程序如何运行的描述。
每位开发者最多可提交 3 个申请。
竞赛大奖:
1. 专家提名奖(Experts Nomination)- 获奖者由InterSystems专家团选出:
🥇第一名 - 7,000 美元
🥈第二名 - 5,000 美元
🥉第三名 - 3,000 美元
🏅第四名 - 2,000 美元
🏅第 五 名 - 1,000 美元
🌟第 六~十 名 - 200美元
🌟第 十一~二十 名 - 100美元
2. 社区提名奖(Community Nomination)- 获得总投票数最多的应用:
🥇第一名 - 3,000 美元
🥈第二名 - 2,000 美元
🥉第三名 - 1,000美元
✨ 所有获奖者都将获得Global Masters徽章!
注:如果同时多位参赛者获得同样的票数,均被视为优胜者,将平分奖金
关键参赛节点:
🛠 应用开发&提交阶段:
2023 年 6 月 12 日(美国东部时间 00:00):竞赛启动。
2023 年 7 月 2 日(美国东部时间 23:59):提交截止。
✅ 投票时间:
2023 年 7 月 3 日(美国东部时间 00:00):投票开始。
2023 年 7 月 9 日(美国东部时间 23:59):投票结束。
注意:在整个参赛期间(开发与投票期间),开发者可持续编辑、提升其应用。
谁可以参加?
任何开发者社区的成员均可参加,InterSystems内部员工除外(InterSystems contractor员工可以参加)。还没有账号?现在来建一个!
👥 开发者可以组团 创建一个协作应用程序,组团限定人数为2-5人。
请注意,要在您的README文件中标注您的团队成员——社区用户profile
资源助力:
✓ InterSystems IRIS(初学者):
使用 InterSystems IRIS 构建服务器端应用程序
新手学习路径
✓ ObjectScript 包管理器 (ZPM) 初学者:
如何使用 InterSystems IRIS 的 REST 应用程序构建、测试和发布 ZPM 包
使用 InterSystems IRIS 和 ZPM 的封装优先开发方法
✓ 如何将您的APP提交给大赛:
如何在InterSystems Open Exchange上发布应用程序
如何把参赛APP提交给大赛
✓ IRIS 应用程序示例:
intersystems-iris-dev-template
iris-embedded-python-template
interoperability-embedded-python
isc-cloud-sql-python-demo
rest-api-template
integratedml-demo-template
iris-fhir-template
iris-fullstack-template
iris-interoperability-template
iris-analytics-template
需要帮助?
加入InterSystems' Discord server频道,或跟帖评论提出您的问题!
期待您的精彩提交!祝好运 👍
参加本次比赛,即表示您同意此处列出的比赛条款。请在继续之前仔细阅读它们。 往期国内作品展示一Intersystems IRIS平台队列监控组件 汇总了一下近年来InterSystems中文社区的成员们往期参赛作品——
iris_log_analytics @银行 郝
message_key_query @王喆
Student score query @yang shijie
IRIS-Database-and-Machine-Learning-Based-Approaches-for-Prediction-of-Spontaneous-Intracerebral-Hemo @Fatian Wu
AlertDashboard @John Pan
HealthInfoQueryLayer @Botai Zhang
Dictionary comparison scheme of cache database @Weiwei Yang
Create a unified hospital data extraction scheme based on IRIS for Health @Deming Xu
RESTFUL_API_For_Hotel_OverBooking_System @jingqi LIu
Intersystems IRIS platform queue trend monitoring component @yubo mao
文章
Hao Ma · 十一月 2, 2021
本文档解释了如何使用 Native API 从 Node.js 应用程序访问 InterSystems IRIS® globals。Native API 还允许您运行 ObjectScript 方法、函数和例程。在本文中,您将首先连接到 InterSystems IRIS。然后您将在 InterSystems IRIS 中设置和检索一个 global 节点的值,并在另一个 global 节点上进行迭代。您还将调用 InterSystems IRIS 类方法。所有这些活动都将在 Node.js 应用程序中执行。为了让您体验 Native API,而又不陷入细节的困境,本次探索特意设计得很简单。这些活动被设计成只使用默认设置和功能,这样您就可以熟悉功能的基本原理,而不必处理那些离题或过于复杂的细节。当您把 IRIS Native 引入您的生产系统时,您可能需要做一些不同的事情。本文档末尾提供的参考资料将使您对在生产中使 Native API 的情况有一个很好的了解。要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。
1 InterSystems IRIS 存储结构简介 InterSystems IRIS 提供了一种易于使用的方法来将数据存储在持久化多维数组中。global 是存储在物理 InterSystems IRIS 数据库中的命名多维数组。在应用程序中,globals 到物理数据库的映射基于当前命名空间,命名空间提供一个或多个物理数据库的逻辑统一视图。例如,要使用一个名为^Settings 的 global 将值 "Red"与键 "Color"关联起来,请使用 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础: 连接一个 IDE》)中的为您的实例描述的程序打开 InterSystems 终端(InterSystems Terminal),并输入以下代码:set ^Settings("Color")="Red"
您可以利用 globals 的多维特性来定义一个更复杂的结构:
set ^Settings("Auto1","Properties","Color") = "Red" set ^Settings("Auto1","Properties","Model") = "SUV" set ^Settings("Auto2","Owner") = "Mo"set ^Settings("Auto2","Properties","Color") = "Green"
有关 globals 的更多信息,请参见 Using Globals(《使用 globals》)。
2 探索 Native API for Node.js 此时,您已准备好试验 Native API 了。这个简短的演示将向您演示如何在一个简单的 Node.js 应用程序中使用 Native API。想试试 InterSystems Native API for Node.js 的在线视频演示吗?请查看 Node.js QuickStart(Node.js 快速入门)! 探索 Native API for Node.js
2.1 用前须知要使用该程序,您需要一个安装了您最喜欢的 Node.js IDE 的系统来运行,并需要一个运行中的 InterSystems IRIS 实例来连接。您对 InterSystems IRIS 的选择包括多种类型的已授权的和免费的评估实例;该实例不需要由您正在工作的系统托管(尽管它们必须相互具有网络访问权限)。有关如何部署每种类型的实例的信息(如果您还没有可使用的实例),请参见 InterSystems IRIS Basics: Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的 Deploying InterSystems IRIS(部署 InterSystems IRIS)。使用同一文档中的 InterSystems IRIS Connection Information(InterSystems IRIS 连接信息)和 Node.js IDE 中的信息,将 IDE 连接到您的 InterSystems IRIS 实例。
2.2 设置您的项目接下来,您需要使用 npm 来设置您的项目,npm 是和 Node.js 一起发布的 JavaScript 包管理器。作为这个过程的一部分,您将安装 Native API 模块 intersystems-iris-native。使用这个程序:1. 在命令提示符下,为演示创建一个名为 IRISNative 的新文件夹,并切换到该目录。 例如:
mkdir IRISNative cd IRISNative
2. 使用 npm 包管理器初始化新项目:
npm init
3. 按照提示,创建 package.json 文件。4. 要安装 IRIS Native API 模块:• 如果您的 InterSystems IRIS 实例安装在您正在工作的系统上,请输入命令
npm install --save <install-dir>\dev\nodejs\intersystems-iris-native
其中 <install-dir> 是安装 InterSystems IRIS 的目录, 例如 C:\InterSystems\myIRIS。• 如果您的实例没有安装在您正在工作的系统上,请按照以下步骤操作:a. 下载或克隆以下 repo 到您的 IDE 中:https://github.com/intersystems/quickstarts-nodejsb. 如果您已经下载了 repo,请解压。c. 切换到您刚刚克隆或下载的 repo 的 Solutions 目录,例如:
cd quickstarts-nodejs/Solutions
d. 要安装 IRIS Native API 模块,请输入:
npm install --save intersystems-iris-native
2.3 Native API 应用程序 现在您已经创建了项目,接下来您将创建一个小的应用程序,演示 Native API 的一些功能。1. 在您的 IDE 中,在 IRISNative 目录中创建一个新的源文件,将该文件保存为 IRISNative.js。 探索 Native API for Node.js
2. 将以下代码粘贴到 IRISNative.js 中, 将 InterSystems IRIS 实例的连接信息 替换为 connectionInfo 中的值。您可以指定所示的 USER 命名空间,也可以选择在实例上创建的另一个命名空间:
const irisnative = require('intersystems-iris-native')// Modify connection info based on environment let connectionInfo = {host: '127.0.0.1',port: 1972, ns: 'USER',user: '_SYSTEM', pwd: 'SYS'};// create database connectionconst connection = irisnative.createConnection(connectionInfo);//create IRIS instanceconst dbnative = connection.createIris();console.log('[1] Setting and getting a global');// setting and getting a global// ObjectScript equivalent: set ^testglobal("1") = 8888 dbnative.set(8888, 'testglobal', '1');// ObjectScript equivalent: set globalValue = $get(^testglobal("1")) let globalValue = dbnative.get('testglobal','1');console.log('The value of testglobal is ' + globalValue); console.log();console.log('[2] Iterating over a global');// modify global to iterate over dbnative.set(7777, 'testglobal', '1');dbnative.set(8888, 'testglobal', '2');dbnative.set(9999, 'testglobal', '3');let subscriptIter = dbnative.iterator('testglobal'); console.log('walk forwards');for ([key,value] of subscriptIter) { console.log('subscript='+ key +', value=' + value);};console.log();console.log('Iterate backwards a different way');let revIter = dbnative.iterator('testglobal').reversed(); let node = revIter.next();while (!node.done) {console.log('subscript='+ node.value[0] +', value='+ node.value[1]); node = revIter.next();}console.log();console.log('[3] Calling a class method');// calling a class method// ObjectScript equivalent: set returnValue = ##class(%Library.Utility).Date(5) let returnValue = dbnative.classMethodValue("%Library.Utility", "Date", 5); console.log(returnValue);// close connection connection.close();
示例代码分为三个部分:1. 第一部分展示了如何设置一个 global 的值以及稍后如何检索它。这部分里面执行的命令等同于 ObjectScript 的 SET 和 GET 命令。2. 第二部分展示了如何迭代 global 的子节点,类似于 $ORDER ObjectScript 函数。3. 第三部分展示了如何使用 Native API 从您的 Node.js 应用程序调用 ObjectScript 类方法。
注意: ObjectScript中的 Globals 以插入符号(^)开头。在使用 Native API 的 Node.js 应用程序中,这不是必需的。 了解有关 IRIS Native 的更多信息
2.4 运行练习现在您已经准备好运行演示应用程序了。如果示例执行成功,您应该会看到带有示例代码结果的打印输出:[1] Setting and getting a global The value of testglobal is 8888[2] Iterating over a global walk forwardssubscript=1, value=7777 subscript=2, value=8888 subscript=3, value=9999Iterate backwards a different way subscript=3, value=9999 subscript=2, value=8888 subscript=1, value=7777
[3] Calling a class method Apr 11, 2019
2.5 确认管理门户(Management Portal)中的变更接下来,使用以下程序在管理门户(Management Portal)中确认您的结果:1. 使用 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中为您的实例描述的 URL,在浏览器中打开您的实例的管理门户(Management Portal)。2. 如果您不在代码指定的命名空间中,请切换到该命名空间。3. 导航到 Globals 页面(System Explorer(系统资源管理器) > Globals)。您应该会看到示例代码中创建的 testglobal global。点击 View(查看)来查看其内容。 您应该会看到 global 的两个节点:^testglobal(1) = 8888 和^testglobal(2) = 9999。
3 了解有关 IRIS Native 的更多信息有关 IRIS Native、globals 和 InterSystems IRIS 的更多信息,请参见:• Using the Native API for Node.js(《使用 Native API for Node.js》)• Using Globals(《使用 Globals》)
公告
Michael Lei · 二月 8, 2023
InterSystems 宣布其首个开发人员预览版,作为2023.1 版开发人员预览计划的一部分。 2023.1 中添加了许多更新和增强功能,还有全新的功能,例如对列存储Columnar Storage 的生产就绪支持、使用Bulk FHIR 的能力以及对MacOS 13 Ventura的支持。当前的开发人员预览版可能不提供其中一些功能或改进。
未来的预览版本预计每两周更新一次,我们将在功能准备就绪时添加它们。请通过开发者社区分享您的反馈,以便我们共同打造更好的产品。
可以在下面的这些链接中找到初始文档。它们将在接下来的几周内更新,直到正式宣布发布(一般可用性 - GA):
InterSystems IRIS
InterSystems IRIS医疗版
HealthShare HealthConnect
此外,查看此链接以获取与此版本相关的升级信息。
与往常一样,扩展维护 (EM) 版本附带适用于所有受支持平台的经典安装包,以及 Docker 容器格式的容器映像。有关完整列表,请参阅支持的平台文档。
安装包和预览密钥可从 WRC 的预览下载站点或通过评估服务网站获得(使用标记“显示预览软件”以访问 2023.1)。
InterSystems IRIS 和 IRIS for Health 的企业版和社区版的容器镜像以及所有相应的组件都可以从新的InterSystems Container Registry Web 界面获得。有关 docker 命令的更多信息,请参阅这篇文章: 宣布 InterSystems Container Registry Web 用户界面。
此开发人员预览版的内部版本号为2023.1.0.185.0 。
有关可用图像的完整列表,请参阅ICR 文档。或者,所有容器镜像的 tarball 版本都可以通过 WRC 的预览下载站点获得。
文章
姚 鑫 · 一月 20, 2023
# 第五十一章 使用 ^SystemPerformance 监视性能 - Apple macOS 平台的 InterSystems IRIS 性能数据报告
- `%SS` - 使用 `ALL^%SS` 命令在运行过程中采集了四个样本。
- `Configuration *` - 来自服务器的 `IRIS` 实例名称和主机名、完整的 `IRIS` 版本字符串、许可客户名称和许可订单号。
- `cpf file *` - 当前活动配置文件的副本。
- `irisstat -c` - 使用命令 `irisstat cache -p-1 -c-1 -e1 -m8 -n2 -N127` 在运行过程中以均匀的间隔采集四个样本。以下是对每个参数的简要说明:
- `-p-1`: 对进程表进行采样以包括进程和全局状态信息。
- `-c-1`: 对共享内存的计数器部分进行采样以显示日志、锁、磁盘和资源使用统计信息。
- `-e1: SYSLOG` 错误表。
- `-m8`: 文件表,其中包括所有 `IRIS.DAT` 文件及其属性。
- `-n2`: 网络结构表,包括本地到远程数据库的映射。
- `-N127`: 客户端和服务器连接的 `ECP` 统计信息。
- `irisstat -D` - 使用命令 `irisstat cache --f1 -D10,100` 在运行过程中以均匀的间隔采集八个样本。以下是对每个参数的简要说明:
- `-fl`: 基本标志。
- `-D10,100`: 在 `10` 秒的总采样周期内,每 `100` 毫秒对块碰撞进行采样。
- `ipcs *` - 进程间通信配置信息,包括共享内存、信号量和消息队列; `ipcs -a` 命令的输出。
- `license *` - 使用 `Decode^%LICENSE` 和 `counts^%LICENSE` 的 `IRIS` 许可使用信息。
- `macOS Info *` - 操作系统版本和硬件信息。 `sw_vers`、`uname` `-a、mount` 和 `netstat` 命令的输出。
- `mgstat` - 使用 `^mgstat` 实用程序在运行过程中获取 `IRIS` 特定数据。请参阅 `Monitoring Guide` 的 `Monitoring Performance Using ^mgstat` 部分。
- `Profile *` - 有关创建此日志的 `^SystemPerformance` 配置文件的信息。
- `ps:` - 使用命令 `ps -eflv` 在运行过程中以均匀的间隔采集四个样本。
- `sar -d` - 磁盘(块)设备吞吐量和延迟统计信息。
- `sar -g` - 页面输出率。
- `sar -n DEV` - 网络设备吞吐量。
- `sar -n EDEV` - 网络设备错误率。
- `sar -p` - 页入和页错误率。
- `sar -u` - CPU 使用统计。
- `sysctl -a *` - 内核和系统参数设置。
- `vm_stat *` - 内存页面信息。
文章
Michael Lei · 九月 26, 2024
在这一系列文章中,我想向大家介绍并探讨使用 InterSystems 技术和 GitLab 进行软件开发可以采用的几种方式。 我将介绍以下主题:Git 101Git 流程(开发流程)GitLab 安装GitLab 工作流持续交付GitLab 安装和配置GitLab CI/CD在上一篇文章中,我们介绍了 Git 基础知识、深度理解 Git 概念对现代软件开发至关重要的原因,以及如何使用 Git 开发软件。 我们的侧重点仍是软件开发的实现部分,但本部分会介绍:GitLab 工作流 - 从想法到用户反馈的完整软件生命周期流程持续交付 – 软件工程方式,团队通过这种方式在短周期内制作软件,从而确保软件可以随时实现可靠发布。 它的目的是更快速、更频繁地构建、测试和发布软件。GitLab 工作流GitLab 工作流是软件开发流程整个生命周期中可能采取的操作的逻辑序列。GitLab 工作流会考虑我们在上一篇文章中探讨的 GitLab 流程。 具体如下:想法:每个新提议都始于一个想法。问题:探讨想法最有效的方法是为它创建问题。 您的团队和协作者可以在问题跟踪器中帮助您完善和改进问题。计划:在讨论达成一致意见后,就可以开始编码了。 但首先,我们需要将问题指定至里程碑和问题看板,以此确定工作流的优先级并进行组织。编码:现在,一切安排就绪后,我们就可以编写代码了。提交:对草稿满意后,我们便可将代码提交到具有版本控制的功能分支。 上一篇文章详细介绍了 GitLab 流程。测试:使用 GitLab CI 运行我们的脚本,以构建并测试应用程序。审查:在脚本能够正常运行且测试和构建成功后,我们便可以让代码接受审查并获得批准。暂存:现在应该将代码部署到暂存环境,以检查一切是否按预期进行,或者我们是否仍需要进行调整。生产:如果一切顺利,便可将代码部署到生产环境!反馈:现在可以回顾之前的流程,并检查有哪些阶段的工作需要改进。再次说明,流程本身不是新的(或者 GitLab 独有的),并且可以通过其他工具来实现。我们来讨论一下其中的几个阶段以及这些阶段涉及的内容。 还提供文档。问题和计划GitLab 工作流的开始阶段以问题为中心,问题是指一个功能、一个错误或其他在语义上独立的工作。问题有多个目的,例如:管理:问题具有截止日期、指定人员、用时和估计等, 可以帮助跟踪问题解决情况。行政管理:问题是里程碑的一部分,我们可以通过看板跟踪软件从一个版本过渡到另一个版本的进展。开发:问题具有与之相关的讨论和提交。在计划阶段,我们可以按问题的优先级、里程碑、看板将问题分组,并获得问题的概览。开发在前一部分进行了讨论,只需按照您希望使用的任何 git 流程执行操作即可。 我们开发了新功能并将其合并到 master 分支后,接下来应怎样操作?持续交付持续交付是一种软件工程方式,团队通过这种方式在短周期内制作软件,从而确保软件可以随时实现可靠发布。 它的目的是更快速、更频繁地构建、测试和发布软件。 这种方式允许对生产中的应用程序进行更多增量更新,从而帮助缩减交付更改的成本、缩短时间,以及降低风险。 简单且可重复的部署过程对于持续交付非常重要。GitLab 中的持续交付在 GitLab 中,持续交付配置按仓库以 YAML 配置文件形式定义。持续交付配置是一系列连续的阶段。每个阶段都有一个或多个并行执行的脚本。脚本定义了一个操作以及执行该操作需要满足的条件:要执行的操作(运行 OS 命令、运行容器)?何时运行脚本:触发脚本的条件(特定分支)?之前的阶段失败时是否运行?手动运行还是自动运行?脚本在什么环境中运行?执行脚本后保存哪些工件(这些工件会从环境上传到 GitLab,以便轻松访问)?环境是配置好的服务器或容器,可用于运行脚本。运行程序用于在特定环境中执行脚本。 运行程序连接到 GitLab,并根据需要执行脚本。运行程序可以部署在服务器上、容器上,甚至部署在本地机器上。持续交付是如何实现的?新提交推送到仓库中。GitLab 检查持续交付配置。持续交付配置包含适用于所有情况的全部脚本,因此要过滤出应针对这一特定提交运行的一组脚本(例如提交到 master 分支仅会触发与 master 分支相关的操作)。 这组脚本称为管道。管道是在目标环境中执行的,执行结果会保存并显示在 GitLab 中。例如,下面是提交到 master 分支后执行的一个管道:管道包含四个阶段,各阶段连续执行加载阶段会将代码加载到服务器中测试阶段会运行单元测试封装阶段包含两个并行运行的脚本:构建客户端导出服务器代码(主要用于提供信息)部署阶段会将构建的客户端移动到 Web 服务器目录中。我们可以看到,每个脚本都成功运行,如果其中一个脚本运行失败,则默认不会运行后面的脚本(但我们可以更改此行为):如果我们打开脚本,可以查看日志并确定脚本运行失败的原因:
Running with gitlab-runner 10.4.0 (857480b6)
on test runner (ab34a8c5)
Using Shell executor...
Running on gitlab-test...
Fetching changes...
Removing diff.xml
Removing full.xml
Removing index.html
Removing tests.html
HEAD is now at a5bf3e8 Merge branch '4-versiya-1-0' into 'master'
From http://gitlab.eduard.win/test/testProject
* [new branch] 5-versiya-1-1 -> origin/5-versiya-1-1
a5bf3e8..442a4db master -> origin/master
d28295a..42a10aa preprod -> origin/preprod
3ac4b21..7edf7f4 prod -> origin/prod
Checking out 442a4db1 as master...
Skipping Git submodules setup
$ csession ensemble "##class(isc.git.GitLab).loadDiff()"
[2018-03-06 13:58:19.188] Importing dir /home/gitlab-runner/builds/ab34a8c5/0/test/testProject/
[2018-03-06 13:58:19.188] Loading diff between a5bf3e8596d842c5cc3da7819409ed81e62c31e3 and 442a4db170aa58f2129e5889a4bb79261aa0cad0
[2018-03-06 13:58:19.192] Variable modified
var=$lb("MyApp/Info.cls")
Load started on 03/06/2018 13:58:19
Loading file /home/gitlab-runner/builds/ab34a8c5/0/test/testProject/MyApp/Info.cls as udl
Load finished successfully.
[2018-03-06 13:58:19.241] Variable items
var="MyApp.Info.cls"
var("MyApp.Info.cls")=""
Compilation started on 03/06/2018 13:58:19 with qualifiers 'cuk /checkuptodate=expandedonly'
Compiling class MyApp.Info
Compiling routine MyApp.Info.1
ERROR: MyApp.Info.cls(version+2) #1003: Expected space : '}' : Offset:14 [zversion+1^MyApp.Info.1]
TEXT: quit, "1.0" }
Detected 1 errors during compilation in 0.010s.
[2018-03-06 13:58:19.252] ERROR #5475: Error compiling routine: MyApp.Info.1. Errors: ERROR: MyApp.Info.cls(version+2) #1003: Expected space : '}' : Offset:14 [zversion+1^MyApp.Info.1]
> ERROR #5030: An error occurred while compiling class 'MyApp.Info'
ERROR: Job failed: exit status 1
编译错误导致脚本失败。
结论
GitLab 支持软件开发的所有主要阶段。持续交付可以帮助您自动执行软件构建、测试和部署任务。
链接
第 1 部分:GitGitLab 工作流简介GitLab CI/CD 文档GitLab 流程本文的代码
后续内容
在下一篇文章中,我们将:
安装 GitLab。将它连接到多个安装了 InterSystems 产品的环境。编写持续交付配置。
我们来探讨一下持续交付的运作方式。
首先,我们需要多个环境以及与之对应的分支。 代码进入此分支,并交付到目标环境:
环境分支交付有权提交的角色有权合并的角色测试master自动开发者、所有者开发者、所有者preprod预生产自动无所有者prod生产半自动(按下按钮进行交付)无所有者
作为示例,我们将使用 GitLab 流程开发一个新功能,并使用 GitLab CD 进行交付。
在功能分支中开发功能。对功能分支进行审查并将其合并到 master 分支中。一段时间(合并了多个功能)后,将 master 分支合并到 preprod 分支中一段时间(用户测试等)后,将 preprod 分支合并到 prod 分支中
具体如下图所示:
开发和测试开发者将新功能的代码提交到单独的功能分支中功能稳定后,开发者将功能分支合并到 master 分支中来自 master 分支的代码被交付到测试环境,在其中进行加载和测试交付到预生产环境开发者创建从 master 分支到 preprod 分支的合并请求仓库所有者在一段时间后批准合并请求来自 preprod 分支的代码被交付到预生产环境交付到生产环境开发者创建从 preprod 分支到 prod 分支的合并请求仓库所有者在一段时间后批准合并请求仓库所有者按下“部署”按钮来自 prod 分支的代码被交付到生产环境
也可以用示意图形式表示此流程:
文章
Michael Lei · 九月 26, 2024
在这一系列文章中,我想向大家介绍并探讨使用 InterSystems 技术和 GitLab 进行软件开发可以采用的几种方式。 我将介绍以下主题:Git 101Git 流程(开发流程)GitLab 安装GitLab 工作流持续交付GitLab 安装和配置GitLab CI/CD在第一篇文章中,我们介绍了 Git 基础知识、深度理解 Git 概念对现代软件开发至关重要的原因,以及如何使用 Git 开发软件。在第二篇文章中,我们介绍了 GitLab 工作流 – 一个完整的软件生命周期流程,并介绍了持续交付。在这篇文章中,我们将探讨:GitLab 安装和配置将环境连接到 GitLabGitLab 安装我们将在本地安装 GitLab。 可以通过多种方式安装 GitLab – 通过源代码、软件包安装,以及在容器中安装。 我不会在这里详细介绍所有步骤,请参阅相关指南。 但仍需要注意几点:前提条件:单独的服务器 – 由于 GitLab 属于 Web 应用程序,并且需要占用大量资源,最好在单独的服务器上运行Linux(可选,但强烈建议采用)域 – 运行页面和保护整个安装时需要配置首先,您可能需要发送包含通知的电子邮件。接下来,建议安装 Pages。 正如我们在上一篇文章中所讨论的 – 可以将脚本中的工件上传到 GitLab。 用户可以下载这些工件,但能够直接在浏览器中打开工件将非常有用,为此我们需要使用页面。需要使用页面的原因:显示一些生成的 wiki 或项目的静态页面显示 html 工件可对页面执行的其他操作由于 html 页面会在加载时重定向,可以使用 html 页面将用户重定向到我们需要的位置。 例如,下列代码生成的 html 页面会将用户重定向到上次执行的单元测试(生成 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 = "tests.html"
do file.LinkToFile(name)
do file.Write(text)
quit file.%Save()
}
ClassMethod getURL()
{
set url = "http://host:57772"
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
}
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>
}
我使用页面时遇到了错误(浏览工件时出现 502 错误) - 解决方法。
将环境连接到 GitLab
要运行 CD 脚本,需要使用环境,即配置好的用于运行应用程序的服务器。 假设有一个安装了 InterSystems 产品(例如 InterSystems IRIS,但也可以使用 Caché 和 Ensemble)的 Linux 服务器,可以通过以下步骤将环境连接到 GitLab:
安装 GitLab 运行程序在 GitLab 中注册运行程序允许运行程序调用 InterSystems IRIS
有关安装 GitLab 运行程序的重要说明 - 安装 GitLab 运行程序后请勿克隆服务器。否则,结果将不可预测,并且大多数情况下的结果都不尽如人意。
在 GitLab 中注册运行程序
运行初始程序后:
sudo gitlab-runner register
您会看到多个提示,大部分步骤都非常简单,但有几步比较复杂:
请输入用于此运行程序的 gitlab-ci 令牌
有多个令牌可用:
一个令牌用于整个系统(在管理设置中提供)一个令牌用于每个项目(在项目设置中提供)
由于您连接运行程序是为特定项目运行 CD,需要指定此项目的令牌。
请输入此运行程序的 gitlab-ci 标签(以逗号分隔):
在 CD 配置中,您可以筛选针对具体标签运行的脚本。 因此,在最简单的情况下,请指定一个将作为环境名称的标签。
请输入执行器:ssh、docker+machine、docker-ssh+machine、kubernetes、docker、parallels、virtualbox、docker-ssh、shell:docker
如果您使用的是没有 docker 的普通服务器,请选择 shell。我们将在后续部分讨论 docker。
允许运行程序调用 InterSystems IRIS
将运行程序连接到 GitLab 后,我们需要允许运行程序与 InterSystems IRIS 交互,为此:
gitlab-runner 用户应能够调用会话。 为此,请将该用户添加到 cacheusr 组:
usermod -a -G cacheusr gitlab-runner在 InterSystems IRIS 中创建 gitlab-runner 用户,并为其指定相应角色以执行 CD 任务(写入到数据库等)允许进行操作系统级身份验证
对于 2 和 3,可以采用其他方式,例如传递用户名/密码,但我认为操作系统身份验证是更好的选择。
结论
在本部分中:
我们安装了 GitLab将环境连接到 GitLab
链接
安装说明Pages运行程序第 1 部分:Git第 2 部分:GitLab 工作流
后续内容
在下一部分中,我们将编写持续交付配置。
公告
Claire Zheng · 八月 25
在医疗 AI 快速发展的今天,数据孤岛、标准不统一、部署效率低等问题日益凸显,如何打破壁垒、实现 AI 能力的高效整合与落地成为行业关键课题。
8月29日14:00,我们邀请InterSystems高级销售工程师 @Lin.Zhu (祝麟) 举办题为“以医疗 AI 枢纽构建智能协同生态”的线上研讨会,聚焦 “医疗 AI 枢纽” 建设,以 InterSystems IRIS 为核心,深度解析医疗 AI 面临的核心挑战 —— 从开放数据可用性、研究可及性到部署基础设施瓶颈,结合国际电信联盟(ITU)AI 就绪框架,剖析行业痛点。
👉点击报名
您将在此次分享中了解到:
针对 AI 组件注册中心架构的系统介绍:依托多模型数据存储( relational+object+K/V+doc+vector )、FHIR 等行业标准协议,实现院内信息能力的一体化整合,通过能力支撑AI应用。
门诊助手实战案例分享:直观展示如何通过 AI 组件注册中心实现执行规划 Agent、上下文感知 Agent 等工具的协同,降低资源整合成本、提升 AI 能力投放效率。
展望医疗 AI 演进趋势:探讨从对话机器人到网络化应用的转型路径,以及 Agent、工具与流程编织的未来方向。
无论您是医疗信息化从业者、AI 技术开发者还是行业决策者,都能在本次研讨会中获取医疗 AI 落地的实战经验、技术架构设计思路与前沿趋势洞察,助力推动医疗 AI 生态的协同创新。我们期待与您的进一步互动。
1. 留言互动
在会议进行过程中,如果您有任何疑问,或者希望与我们进一步讨论,可以在屏幕上方点击“提问”按钮,提交您的问题,我们会在分享结束后整理问题,并通过邮件向您回复。
2. 有奖调研
参会期间,点击屏幕右上角“有奖调研”完成问卷,将有机会获得定制小礼品。
快来加入我们吧٩(๑>◡<๑)۶ 👉点击报名
文章
Claire Zheng · 八月 29
8月29日14:00,我们邀请了InterSystems高级销售工程师 @Lin.Zhu (祝麟)分享了“以医疗 AI 枢纽构建智能协同生态”话题,聚焦 “医疗 AI 枢纽” 建设,以 InterSystems IRIS 为核心,深度解析医疗 AI 面临的核心挑战 —— 从开放数据可用性、研究可及性到部署基础设施瓶颈,结合国际电信联盟(ITU)AI 就绪框架,剖析行业痛点。
关于该主题详情,欢迎查看这篇帖子。
直播回放现已准备就绪,欢迎👉点击查看!(如您未注册过,需要注册后观看)
您将在此次分享中了解到:
针对 AI 组件注册中心架构的系统介绍:依托多模型数据存储( relational+object+K/V+doc+vector )、FHIR 等行业标准协议,实现院内信息能力的一体化整合,通过能力支撑AI应用。
门诊助手实战案例分享:直观展示如何通过 AI 组件注册中心实现执行规划 Agent、上下文感知 Agent 等工具的协同,降低资源整合成本、提升 AI 能力投放效率。
展望医疗 AI 演进趋势:探讨从对话机器人到网络化应用的转型路径,以及 Agent、工具与流程编织的未来方向。
无论您是医疗信息化从业者、AI 技术开发者还是行业决策者,都能在本次研讨会中获取医疗 AI 落地的实战经验、技术架构设计思路与前沿趋势洞察,助力推动医疗 AI 生态的协同创新。我们期待与您的进一步互动。
1. 留言互动
在会议进行过程中,如果您有任何疑问,或者希望与我们进一步讨论,可以在屏幕上方点击“提问”按钮,提交您的问题,我们会在分享结束后整理问题,并通过邮件向您回复。
2. 有奖调研
参会期间,点击屏幕右上角“有奖调研”完成问卷,将有机会获得定制小礼品。
快来加入我们吧٩(๑>◡<๑)۶ 👉点击查看
文章
Louis Lu · 九月 22, 2021
技术概要(First Look)有助于您了解在InterSystems IRIS ®数据平台中如何使用SQL:标准的SQL功能、特有功能以及如何快速上手使用。
要体验技术概要(First Look)的所有内容 ,您可以在InterSystems IRIS的免费评估实例上执行相关操作 ,请参阅InterSystems First Looks(《InterSystems 技术概要》)。
1. InterSystems SQL: 特性和性能
InterSystems IRIS 提供高性能、功能完善的 SQL。在 InterSystems IRIS 中使用SQL,包括在单个CPU内核上运行查询,到使用数十个内核的CPU上并行执行查询,已至在InterSystems IRIS服务器集群上运行分布式查询。
在InterSystems IRIS中,可以使用 SQL 的范围包括:
联接(Joins)
灵活、高性能索引
聚合函数和分组
以SQL或InterSystems ObjectScript (以下简称“ObjectScript” )编写的存储过程
JDBC和ODBC连接
自动并行查询
透明分布式查询
InterSystems SQL提供了强大的工具来实现最佳的SQL查询性能。其中一个工具是使用压缩位图索引:使用紧凑、高度有效的结构和向量化的CPU指令, InterSystems SQL可以只用单个内核即可执行每秒数十亿行的聚合操作以及检查逻辑判断条件。本指南的后续内容将提供位图索引的示例。
想要快速尝试InterSystems IRIS的SQL功能吗?查看SQL QuickStart!
2. 演示:SQL Shell
可以通过各种应用程序接口、交互式客户端和标准协议在InterSystems IRIS中执行SQL ,包括:
用于交互式SQL语句执行的InterSystems IRIS SQL Shell
ODBC和JDBC客户端、交互式应用(例如, SQuirreL SQL或WinSQL )或通过将InterSystems IRIS驱动程序嵌入使用的应用程序
InterSystems IRIS管理门户中的System Explorer,为执行SQL提供了交互式的Web界面
在ObjectScript类中执行嵌入式SQL或动态SQL
如果在阅读本指南后,想了解这些主题的更多有关信息,请参阅下面的“了解有关InterSystems SQL的更多信息”。
此示例向您展示如何使用SQL Shell交互式执行SQL语句,或执行文件中的SQL语句。
2.1 用前须知
要使用该程序,需要一个正在运行的InterSystems IRIS实例。可以选择多种类型的已授权的免费评估实例;该实例不必存储在正在运行的系统(尽管它们可以互相进行网络访问)。如何部署每个类型的实例(如果您还没有要使用的实例)的有关信息,请参阅 InterSystems IRIS Basics: Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的Deploying InterSystems IRIS(部署 InterSystems IRIS)。
还需要从GitHub存储库https://github.com/intersystems/FirstLook- SQLBasics获取本指南的实用程序文件。应该克隆存储库来下载以下文件:
stock_table_demo_one.sql ,其中包含用于创建和加载小型( 20行)存量数据的表格的SQL语句
stock_table_demo_two.csv ,其中包含一百万行存量表数据
Loader.xml ,包含实用程序方法的类文件,用于将数据从stock_table_demo_two.csv加载到InterSystems IRIS表中
注意: stock_table_demo_two.csv 非常大 ,要下载它之前需要安装Git Large File Storage。
必须通过该实例访问FirstLook-SQLBasics源。下载文件的程序取决于所使用的实例类型,如下所示:
如果使用的是ICM部署的实例:
1.使用具有-machine 和-interactive 选项的 icm ssh 命令在储存该实例的节点上打开默认shell ,例如:
icm ssh -machine MYIRIS-AM-TEST-0004 -interactive
2. 在Linux命令行上,使用以下命令之一将存储库克隆到该实例的数据存储卷(data storage volume)。 例如,对于部署在Azure上的配置,数据卷的默认装入点为 /dev/sdd ,因此应使用如下命令:
$ git clone https://github.com/intersystems/FirstLook-SQLBasics /dev/sdd/FirstLook-SQLBasics
或者使用命令:
$ wget -qO- https://github.com/intersystems/FirstLook-SQLBasics/archive/master.tar.gz | tar xvz -C /dev/sdd
这些文件现在可以通过容器文件系统的/irissys/data/FirstLook-SQLBasics 目录被InterSystems IRIS获取。
如果您使用的是通过其他方式部署的容器化实例(授权的版本或社区版本):
1. 在主机上打开Linux命令行。(如果您在云节点上使用社区版本 ,请使用SSH连接到节点,如部署和浏览InterSystems IRIS中所述。)
2. 在Linux命令行上,使用git clone或wget命令,如上所述,将存储库克隆到加载为容器中的数据卷的存储位置。
对于社区版实例,可以克隆到该实例的%SYS 目录(社区版实例指定的配置数据存储的位置)。在Linux文件系统上,此目录为/opt/ISC/dur。该文件可以在容器文件系统的/ISC/dur/FirstLook-SQLBasics目录下被InterSystems IRIS获取。
对于授权的容器化实例,选择加载为容器中的数据卷的存储位置(包括durable%SYS 目录,如果使用的话)。例如,如果您的docker run命令包括选项 -v /home/user1:/external,然后将存储库克隆到/home/user1 ,这些文件在容器文件系统上的/external/FirstLook-SQLBasics目录中可被Inter- Systems IRIS获取。
如果您使用的是InterSystems Learning Labs实例:
1. 在集成的IDE中打开命令行终端。
2. 将目录更改为/home/project/shared ,并使用 git clone命令克隆存储库:
$ git clone https://github.com/intersystems/FirstLook-SQLBasics
该文件夹添加到“Shared”下左侧的Explorer面板,且该目录可在InterSystems IRIS 选择路径的 /home/project/shared下被获取。
如果您使用的是已安装的实例:
如果实例的主机是安装有GitHub Desktop和GitHub Large File Storage 的Windows系统:
a. 在主机的web浏览器中转到 https://github.com/intersystems/FirstLook-SQLBasics。
b. 选择Clone or download ,然后选择 Open in Desktop。
这些文件可在GitHub目录中被InterSystems IRIS 获取,例如 C:\ Users\ User1\ Documents\ GitHub\ FirstLook-SQLBasics。
如果主机是Linux系统,只需使用Linux命令行上的git clone命令或wget命令将存储库克隆到您选择的位置即可。
2.2 使用SQL脚本文件创建和填充表
为达到演示目的,我们使用一个SQL脚本文件,stock_table_demo_one.sql,来创建并加载包含几行示例数据的表。
创建和加载表格:
打开InterSystems 终端terminal。将看到如下交互式提示:
USER>
此提示表示您目前在 USER 命名空间(namespace)中,默认情况下该空间为空,可供客户自由使用。从该提示开始,可以执行ObjectScript。
通过输入如下命令立刻打开SQL Shell
DO $SYSTEM.SQL.Shell()
这将输出以下内容:
SQL Command Line Shell
The command prefix is currently set to: <<nothing>>. Enter q to quit, ? for help.
[SQL]USER>>
将当前SQL数据库方言设置为IRIS:
SET DIALECT=IRIS
要运行stock_table_demo_one.sql中的语句,请输入命令
RUN <Path>stock_table_demo_one.sql
其中Path是放置文件的位置(请参阅前面的用前须知)。系统会提示您为日志文件指定名称,日志文件包含文件中的语句及其输出结果、如何处理错误以及语句分隔符。接受所有默认值。
语句创建一个表格并插入20行。文件的前几行是:
CREATE TABLE FirstLook.StockTableDemoOne (ClientID INTEGER, BrokerID INTEGER, Symbol VARCHAR(10), TransactionType VARCHAR(4), TransactionDate TIMESTAMP,Quantity INTEGER, Price DECIMAL(15,2), CommmissionRate DECIMAL(15,2))
GO
INSERT INTO FirstLook.StockTableDemoOne (ClientID, BrokerID, Symbol, TransactionType, TransactionDate, Quantity, Price, CommmissionRate) VALUES (29834783, 3103, 'RTYU', 'SELL', '2016-01-03', 342, 5.05, 3.25)
GO
当脚本运行时,在处理每个SQL语句后将看到输出结果:
1. INSERT INTO FirstLook.StockTableDemoOne (ClientID, BrokerID, Symbol,
2. TransactionType, TransactionDate, Quantity,
3. Price, CommissionRate)
4. VALUES (92609349, 3103, 'HWVT', 'BUY', '2017-10-25', 1500, 451.09, 3.25)
1 Row Affectedu
处理完所有语句后, SQL Shell会列出编译的语句数量以及报告的错误和警告,并报告已用时间:
Statements
.................compiled: 21
.....with errors reported: 0
...with warnings reported: 0
Elapsed time: .125181 seconds
2.3 在SQL Shell中直接运行查询
有了已填充的表后,可以对它运行查询。可以使用单行或多行模式来执行此操作,但后者可能更方便。
若要进入多行模式,请根据提示按Enter键。将看到处于多行模式的确认信息。
输入以下SQL语法,逐行输入。关键字GO 指示shell执行查询并退出多行模式:
SELECT BrokerID, TO_CHAR((Quantity * Price),'9,999,999.99') as SubTotal, TransactionDate FROM FirstLook.StockTableDemoOne
WHERE TransactionType='SELL' ORDER BY SubTotal DESC
GO
您输入的语句将与SQL Shell呼应,后附查询结果。
BrokerID
SubTotal
TransactionDate
5001
302780.00
2017-11-06 09:51:24.735
5002
92350.00
2018-01-15 22:21:17.638
3103
57645.00
2017-09-24 19:36:43.079
3103
45015.00
2016-10-31 19:21:08.913
5001
23180.50
2017-07-31 23:05:49.83
5001
13113.60
2015-11-13 22:13:49.457
5001
12636.00
2015-10-13 05:50:23.209
3103
1727.10
2016-01-03 13:59:01.098
1009
1693.50
2016-01-15 18:18:15.346
在查询结果后,您将看到准备和执行语句所需时间的信息:
9 Rows(s) Affected
statement prepare time(s)/globals/cmds/disk: 0.0625s/47683/263292/0ms execute time(s)/globals/cmds/disk: 0.0006s/64/2903/0ms
cached query class: %sqlcq.USER.cls47
准备步骤包括从一条SQL语句的语法到生成可执行代码。此代码被缓存,以供重复使用,因此一条语句通常仅完全准备一次。后续准备只需要使用语句文本的hash来定位已经缓存的代码。
执行步骤包括执行针对查询生成的代码并返回其结果。在每个步骤的列表中都包含以下指标:
每个步骤所花费的时间。
Globals计数,即为准备或执行SQL语句而引用InterSystems IRIS存储的数量。如需进一步了解全局有关信息,请参阅Orientation Guide for Server-Side Programming(《服务器端编程入门指南》)中的“Introduction to Globals (Globals简介)”一章。
为准备或执行SQL语句而执行的ObjectScript命令的数目。
显示结果的结尾是缓存的查询类(cached query class),这是首次准备语句时生成的缓存代码的ObjectScript类。
3. 也可以使用聚合函数和 GROUP BY。请注意,可以对聚合函数的别名排序:
SELECT BrokerID, TO_CHAR(SUM(Quantity * Price), '9,999,999.99') as SubTotal FROM FirstLook.StockTableDemoOne
GROUP BY BrokerID ORDER BY SubTotal DESC
GO
BrokerID
SubTotal
3103
868,993.60
1009
808,453.50
5001
593,242.82
5002
187,560.00
4 Rows(s) Affected
statement prepare time(s)/globals/cmds/disk: 0.1665s/45832/237712/77ms
execute time(s)/globals/cmds/disk: 0.0025s/122/2434/2ms
cached query class: %sqlcq.USER.cls9
3. 演示:使用位图索引提高查询性能
如果您正在使用大型数据集,寻找改善查询性能的方法,位图索引是您可以使用的几种方法之一。
如果一个表有一个或多个字段,字段的可能值集合较小,则创建位图索引特别适合。
有关位图索引运行的详细信息,请参阅InterSystems SQL Optimization Guide(《InterSystems SQL优化指南》)的 Bitmap Indices(位图索引)章节。
在本演示中,您将看到在股票交易数据的百万行数据表格中创建目标位图索引引发的变化。您将使用几个简单的 ObjectScript 命令;很容易地从SQL Shell内无缝访问 ObjectScript 类库。
要运行演示:
按照“使用SQL脚本文件创建和填充表格”(Creating and Populating a Table With a SQL Script File)所述,在终端中启动SQL Shell。
创建表:
CREATE TABLE FirstLook.StockTableDemoTwo (ClientID INTEGER, BrokerID INTEGER,
Symbol VARCHAR(10), TransactionType VARCHAR(4),
TransactionDate TIMESTAMP, Quantity INTEGER,
Price DECIMAL(15,2), CommissionRate DECIMAL(15,2))
0 Rows Affected
statement prepare time(s)/globals/cmds/disk: 0.0063s/1811/22260/0ms
execute time(s)/globals/cmds/disk: 0.2138s/76495/655985/76ms
cached query class: %sqlcq.USER.cls1
导入Loader类( Loader.xml文件)。OBJ前缀表示 SQL Shell 按照 ObjectScript 处理以下命令; “c”标志指示InterSystems IRIS编译代码, “k”标志确保源代码存储在活动命名空间(active namespace)中。
OBJ DO $ system.OBJ.Load ("< Path > Loader.xml", "ck")
其中Path是放置文件的位置(请参阅用前须知)。将输出如下结果:
Load started on 04/19/2018 15:17:53
Loading file C:\Users\user\repos\FirstLook-SQLBasics\Loader.xml as xml Imported class: FirstLook.Loader
Compiling class FirstLook.Loader Compiling routine FirstLook.Loader.1 Load finished successfully.
要将stock_table_demo_two.csv中的数据加载到表中,请在终端中运行以下命令:
OBJ WRITE ##class(FirstLook.Loader).LoadStockTableCSV("<Path>stock_table_demo_two.csv")
其中Path是放置文件的位置。此命令的输出结果1000000仅表示已加载100万行。
运行以下查询:
SELECT DISTINCT BrokerID FROM FirstLook.StockTableDemoTwo
输出结果显示,可能的经纪人ID的数量非常小,因此该字段是位图索引的好选择。
BrokerID
115
107
101
114
119
104
109
108
20 Rows(s) Affected
statement prepare time(s)/globals/cmds/disk: 0.0645s/43430/197693/9ms
execute time(s)/globals/cmds/disk: 1.2569s/2000039/9001314/0ms
cached query class: %sqlcq.USER.cls10
6. 要在添加位图索引之前查看涉及BrokerID字段的COUNT查询的性能,请运行以下查询:
SELECT BrokerID, COUNT(*) As Transactions FROM FirstLook.StockTableDemoTwo GROUP BY BrokerId ORDER BY Transactions DESC
BrokerId
Transactions
103
50386
118
50304
107
50247
112
50207
101
50174
109
50088
115
50088
104
50048
111
50031
105
50008
113
49996
119
49942
114
49919
116
49894
110
49888
108
49882
102
49843
120
49768
106
49742
117
49545
20 Rows(s) Affected
观察查询返回结果后显示的查询性能统计信息:所用总时间(包括准备和执行时间)约为0.65秒。
statement prepare time(s)/globals/cmds/disk: 0.0695s/45048/225490/13ms
execute time(s)/globals/cmds/disk: 0.5878s/1000250/11002218/0ms
cached query class: %sqlcq.USER.cls7
7. 在BrokerID上添加位图索引:
CREATE BITMAP INDEX BrokerIDIdx ON TABLE FirstLook.StockTableDemoTwo (BrokerID)
0 Rows Affected
statement prepare time(s)/globals/cmds/disk: 0.0056s/1723/15958/0ms
execute time(s)/globals/cmds/disk: 0.9805s/2071557/18505697/1ms
cached query class: %sqlcq.USER.cls11
8. 运行与上述相同的SELECT查询。请注意性能提升:在下面的示例中,查询总共花费了大约0.35秒,减少了近50%。
SELECT BrokerID, COUNT(*) As Transactions FROM FirstLook.StockTableDemoTwo GROUP BY BrokerId ORDER BY Transactions DESC
...
statement prepare time(s)/globals/cmds/disk: 0.0573s/45585/231374/0m
execute time(s)/globals/cmds/disk: 0.2926s/622/15004397/0ms
cached query class: %sqlcq.USER.cls1
4. 了解有关InterSystems SQL的更多信息
要了解有关SQL和InterSystems IRIS的更多信息,请参阅:
4.1 介绍材料
Using InterSystems SQL(使用InterSystems SQL)
InterSystems SQL Reference(InterSystems SQL参考书目)
InterSystems SQL Overview(InterSystems SQL概述)
4.2 SQL开发
SQL –Things You Should Know (SQL-您应该知道的事情)
Developing with InterSystems Objects and SQL(使用InterSystems Objects和SQL开发)
4.3 查询优化
First Look: Optimizing SQL Performance with InterSystems IRIS(技术概要:使用InterSystems IRIS优化SQL性能)
InterSystems SQL Optimization Guide(InterSystems SQL优化指南)
Academy – Optimizing SQL Performance(学院派–优化SQL性能)
Optimizing SQL Queries(优化SQL查询)
4.4 分片和可扩展性
First Look: Scaling for Data Volume with Sharding(技术概要:带分片的数据卷扩展)
Scalability Guide(可扩展性指南)
4.5 SQL Search
SQL Search First Look: SQL Search with InterSystems IRIS(技术概要:使用InterSystems IRIS进行)
Using InterSystems SQL Search(使用InterSystems SQL Search)
Creating iFind Indices for Searching Text Fields(创建用于搜索文本字段的iFind索引)
4.6 JDBC
First Look: JDBC and InterSystems IRIS(技术概要:JDBC和InterSystems IRIS)
Using Java JDBC with InterSystems IRIS (documentation)(使用InterSystems IRIS进行Java JDBC <文档>)
Java Overview(Java概述)
Using JDBC with InterSystems IRIS (online learning)(在InterSystems IRIS中使用JDBC <在线学习>)
公告
Claire Zheng · 三月 1, 2021
亲爱的社区开发者们:
本周进入 InterSystems 编程大奖赛 的投票时间! 来为你心目中基于InterSystems IRIS而构建的最佳方案投票吧!
🔥 点击投票 投票入口 🔥
如何投票?有哪些最新信息值得了解一下?
所有社区开发者都可以为自己提交的项目投票——投票将根据用户的Global Master级别自动计入专家提名奖(Experts Nomination)和社区提名奖(Community Nomination)。
所有InterSystems员工都可以为专家提名奖(Experts Nomination)或社区提名奖(Community Nomination)投票。
根据目前的投票引擎和算法,您可以选择三个项目进行投票,选出您心目中的一、二、三名。
以下是社区排行榜说明:
社区(Community)提名投票计分方式:
提名
得分
第一名
3
第二名
2
第三名
1
专家(Experts)提名投票计分会有更复杂的数学计算,不同级别的专家有更多的“点数”权力:
专家(Experts)提名投票计分方式:
级别
提名
第一名
第二名
第三名
VIP级:总经理,版主,产品经理
9
6
3
Global Masters中的专家(Expert)级
6
4
2
Global Masters中的专业(Specialist)级
3
2
1
专家(Experts)提名投票也将为按“3-2-1”为社区排行榜贡献出分数。
投票
1. 登录 Open Exchange – 使用开发者社区的账号即可登录。
2. 在开发者社区进行的任何有效贡献后——回答或提问,写一篇文章,对任何帖子发表评论,您就会看到可用的投票按钮。
如果您改变了主意,可以取消并投票给其他您看中的应用——从3月1日-3月7日,您有七天的时间充分选择!
提醒:在投票期间,参赛者可以继续修复bug,提升应用,所以投票者不要错过最新发布的版本哦~
➡️ 请查收最新的 InterSystems在线竞赛投票规则. 还剩三天,北京时间3月8日中午12点截止,请大家抓紧投票! 我会为我欣赏的项目投票! 介绍的很详细,非常感谢!
公告
Claire Zheng · 五月 12, 2021
亲爱的社区开发者们,大家好!
InterSystems开发者竞赛:FHIR加速器 已于5月10日开启! 我们邀请所有FHIR开发者们在AWS上使用InterSystems IRIS FHIR加速器服务 (FHIRaaS)上开发或测试您的应用。
现在,我们为您提供绝佳机会,您可以在AWS上免费访问FHIRaaS! 那么,掌握FHIRaaS的第一步,是使用URL的特殊code在ISC Dev FHIR Portal 门户注册,链接如下:👉🏼 https://portal.trial.isccloud.io/account/signup
点击上面的链接,遵循相应步骤,即可掌控InterSystems FHIRaaS!
关于此次竞赛的任何疑问,请随时跟帖提问,或在 discord-contests channel 中提问。
再次欢迎大家加入此次竞赛,成为InterSystems FHIRaaS 大师! ✌🏼
Happy coding! :) 原帖更新:
您可以在AWS上免费访问FHIRaaS! 那么,掌握FHIRaaS的第一步,是使用URL的特殊code在ISC Dev FHIR Portal 门户注册,链接如下:👉🏼 https://portal.trial.isccloud.io/account/signup
不要错过哦!
文章
Jeff Liu · 六月 30, 2021
嗨,开发者们!
在这篇文章中,我们想告诉你如何充分利用开发者社区,从InterSystems的技术专家那里学到尽可能多的东西!
请注意这些步骤,以成为我们社区的高级用户!
关注你感兴趣的社区成员
如果你喜欢他们发布的内容,你可以关注社区的任何成员。只需点击任何成员右侧边栏上的 "关注 "按钮,当该成员在社区上发表文章(文章/问题/公告等)时,你将收到电子邮件通知。
此外,在主页的顶部菜单中,你可以点击 "成员",搜索特定的人或有更多意见的成员,或更多的喜欢......并开始关注他们。
关注你感兴趣的标签
用于描述社区上的帖子的所有标签都可以在DC主页上的 "标签 "部分找到:
在DC标签树中, 您可以找到您感兴趣的主题并关注相关的 标签。只需选择一个标签并点击其旁边的 "关注 "按钮即可。当您关注任何标签时,您会收到一封包含所有使用该标签的帖子的电子邮件。
我们建议从以下标签开始: 最佳实践 | 技巧和窍门 | 初学者 | 教程
关注你所感兴趣的帖子
关注一个帖子,你将收到(通过电子邮件)该帖子的所有更新,如新的评论,或如果发表了第二部分,或任何其他与你关注的帖子有关的活动。
要关注一个帖子,你只需要点击每个帖子下面的铃铛图标。
-> 我如何知道我在关注哪些会员、标签和帖子?
要知道你所关注的会员、标签和帖子,你只需要进入你的账户,在右上角
然后进入左栏的 "订阅"。
在这个页面的底部,你可以在三个标签中看到并定制你的订阅--每个标签都显示你所关注的成员、标签和帖子。例如,下面的截图显示,用户正在关注一些标签和DC成员。
注意: 如果你想关注不同语言的会员或标签,你需要将你的订阅设置切换到你感兴趣的语言。
添加帖子到你的书
把你喜欢的帖子加入书签,这样你以后就可以快速而方便地访问该帖子。
如果你喜欢一个帖子(文章、问题或公告)并想把它保存起来,你可以把它添加到你的书签中。这样,你就可以快速和容易地访问该帖子,并在你想要时阅读它。
要将一个帖子添加到你的书签,你只需要点击每个帖子下面的星星图标。
要查看您的所有书签,请进入您的账户,然后在左栏中进入 "书签"。
所以,开发者们!
请使用我们所有的DC功能,这些功能可以帮助你成为InterSystems技术的专家!
而且非常欢迎你在下面的评论中提交关于如何在开发者社区学习InterSystems技术的其他方法和建议。