文章 Michael Lei · 六月 26, 2022 阅读大约需 1 分钟 以程序化的方式检查审计设置 下面的代码允许用户查看其实例的审计设置。通过运行类方法 "test "来运行该代码。: #Code Snippet #ObjectScript #Caché 0 0 0 58
文章 Michael Lei · 六月 26, 2022 阅读大约需 3 分钟 从Web 应用端用代码实现OAuth2 和基础认证、鉴权和审计 在这篇文章中,我将解释如何通过使用CSP Web应用程序以及启用/禁用和认证/取消认证任何Web应用程序的代码来进行认证、授权和审计。 在线 Demo -- https://dappsecurity.demo.community.intersystems.com/csp/user/index.csp (SuperUser | SYS) 推荐大家看下这个视频: https://www.youtube.com/watch?v=qFRa3njqDcA 应用层 #OAuth2 #安全 #访问控制 #认证 #身份认证 #InterSystems IRIS #InterSystems IRIS for Health Open Exchange app 0 0 0 88
文章 姚 鑫 · 六月 25, 2022 阅读大约需 2 分钟 第十章 设置结构化日志记录(二) 第十章 设置结构化日志记录(二) 注:IRIS有,Cache无。 启用结构化日志记录 ^LOGDMN 例程允许管理结构化日志记录;还有一个基于类的 API,将在下一节中介绍。 要使用 ^LOGDMN 启用结构化日志记录: 打开终端并输入以下命令: set $namespace="%sys" do ^LOGDMN 这将启动一个带有以下提示的例程: #SQL #Caché 0 0 0 49
文章 姚 鑫 · 六月 24, 2022 阅读大约需 4 分钟 第九章 设置结构化日志记录(一) 第九章 设置结构化日志记录(一) IRIS 支持结构化日志记录。 创建多个日志,每个日志用于不同的目的。从以前的产品迁移过来的客户可以像过去一样利用这些日志,但现在还可以将所有日志信息导入一个单一的、中央的、机器可读的日志文件——结构化日志。然后可以将此文件与第三方分析工具一起使用。 本文概述了结构化日志中的信息,展示了日志示例,并描述了如何启用结构化日志记录。 结构化日志中可用的信息 当启用结构化日志记录时,系统会将相同的数据写入结构化日志,它也会写入其他日志(无论哪个)。例如,系统将相同的行写入messages.log 和结构化日志。 启用结构化日志记录后,结构化日志包含以下所有信息: #SQL #Caché 0 0 0 63
文章 姚 鑫 · 六月 23, 2022 阅读大约需 3 分钟 第八章 操作位和位串(四) 第八章 操作位和位串(四) 操作以整数形式实现的位串 设置位 要创建一个存储为整数的新位串,请对每个位求和 2 的幂: set bitint = (2**2) + (2**5) + (2**10) write bitint 1060 要将现有位串中的位设置为 1,请使用 $zboolean 函数(逻辑 OR)的选项7 (arg1 ! arg2): set bitint = $zboolean(bitint, 2**4, 7) write bitint 1076 要将现有位串中的位设置为 0,请使用 $zboolean 函数的选项 2 (arg1 & ~arg2): #SQL #Caché 0 0 0 66
文章 Lilian Huang · 六月 23, 2022 阅读大约需 2 分钟 InterSystems 许可证信息和查询支持Tips InterSystems许可证是指InterSystems #Caché #Ensemble #HealthShare #InterSystems IRIS #InterSystems IRIS BI (DeepSee) #InterSystems IRIS for Health 0 0 0 244
文章 姚 鑫 · 六月 22, 2022 阅读大约需 4 分钟 第七章 操作位和位串(三) 第七章 操作位和位串(三) 操作位串 要创建新的位串,请使用 $bit 函数将所需位设置为 1: kill bitstring set $bit(bitstring, 3) = 1 set $bit(bitstring, 6) = 1 set $bit(bitstring, 11) = 1 使用 $bit 将现有位串中的位设置为 1: set $bit(bitstring, 5) = 1 使用 $bit 将现有位串中的位设置为 0: set $bit(bitstring, 5) = 0 由于位串中的第一位是位 1,因此尝试设置位 0 会返回错误: #SQL #Caché 0 0 0 36
文章 姚 鑫 · 六月 21, 2022 阅读大约需 3 分钟 第六章 操作位和位串(二) 第六章 操作位和位串(二) 将位序列存储为整数 如果要将一系列布尔参数传递给方法,一种常见的方法是将它们作为编码为单个整数的位序列传递。 例如,Security.System.ExportAll() 方法用于从 IRIS 实例中导出安全设置。如果查看此方法的类引用,将看到它的定义如下: classmethod ExportAll(FileName As %String = "SecurityExport.xml", ByRef NumExported As %String, Flags As %Integer = -1) as %Status 第三个参数 Flags 是一个整数,其中每个位代表一种可以导出的安全记录。 #SQL #Caché 0 0 0 73
文章 Michael Lei · 六月 21, 2022 阅读大约需 3 分钟 生成和校验验证码 如果您使用InterSystems技术开发了自己的网络应用,现在想在客户端进行验证码验证,以确定用户真实性使其更加安全。有一些现代框架可以解决验证码的问题,然而它们中的大多数需要互联网接入来生成代码,有时实施起来很复杂。考虑到图像识别已经非常成熟,您可以参考本文为基本例子。这就是为什么现在倾向于看到更多的模式识别验证码而不是单纯的阅读验证码。(例如,点击所有有店面的图片)。如果你需要更复杂的东西,请继续开发,改进这个代码并分享它。 继续阅读以了解如何使用这个基本的例子: Demo.Captcha class 使用这个类,你可以在一个物理目录上创建验证码图像文件,以便在你的应用程序上显示。请注意,创建图像的目录必须是可用的,以便你的Web应用程序访问这些图像。要创建验证码图像,请调用以下方法,将完整的文件名作为一个参数: 创建 image 文件 #CSP #ZEN #前端 #Caché 0 0 0 61
文章 姚 鑫 · 六月 20, 2022 阅读大约需 4 分钟 第五章 操作位和位串 第五章 操作位和位串 有时可能希望在基于数据平台的应用程序中存储一系列相关的布尔值。可以创建许多布尔变量,也可以将它们存储在数组或列表中。或者可以使用称为“位串”的概念,它可以定义为位序列,首先呈现最低有效位。位串允许您以非常有效的方式存储此类数据,无论是在存储空间还是处理速度方面。 位串可以以两种方式之一存储,作为压缩字符串或整数。如果在没有上下文的情况下听到术语“位串”,则表示位序列存储为压缩字符串。本文向介绍了这两种类型的位串,然后介绍了一些可用于操作它们的技术。 将位序列存储为位串 存储位序列的最常见方式是在位串中,这是一种特殊的压缩字符串。除了节省存储空间外,还可以使用 ObjectScript 系统函数有效地操作位串。 这样的系统函数是 $factor,它将整数转换为位串。我们可以通过执行以下语句将整数 11744 转换为位串: set bitstring = $factor(11744) 要查看位串内容的表示,可以使用 zwrite 命令: #SQL #Caché 0 0 0 72
文章 Jingwei Wang · 六月 20, 2022 阅读大约需 8 分钟 IRIS/HealthConnect 高可用机制 Mirror 的配置 安装Arbiter 为了将自动故障转移扩展到尽可能广泛的故障情况,InterSystems建议你为每个镜像配置一个仲裁机。 要充当仲裁者,系统必须有一个正在运行的ISCAgent进程。由于ISCAgent是与InterSystems IRIS一起安装的,任何承载一个或多个InterSystems IRIS实例的系统都符合这一要求,可以被配置为仲裁者而无需进一步准备;但是,承载一个或多个故障转移或DR异步镜像成员的系统不应该被配置为该镜像的仲裁者。 没有托管InterSystems IRIS实例的系统可以通过安装Arbiter方式的作为仲裁者。请从InterSystems公司下载适合你的仲裁者系统平台的ISCAgent安装包,然后,安装ISCAgent。 注意:Arbiter的版本要和InterSystems IRIS安装版本保持一致。 #镜像 #高可用性 #Caché #HealthShare #InterSystems IRIS for Health 0 0 1 381
文章 姚 鑫 · 六月 19, 2022 阅读大约需 3 分钟 第四章 锁定和并发控制(四) 第四章 锁定和并发控制(四) 避免死锁 增量锁定具有潜在危险,因为它可能导致称为死锁的情况。当两个进程各自对已被另一个进程锁定的变量断言增量锁定时,就会出现这种情况。因为尝试的锁是增量的,所以现有的锁不会被释放。结果,每个进程在等待另一个进程释放现有锁的同时挂起。 举个例子: 进程 A 发出此命令:lock + ^MyGlobal(15) 进程 B 发出此命令:lock + ^MyOtherGlobal(15) 进程 A 发出此命令:lock + ^MyOtherGlobal(15) 此 LOCK 命令不返回;进程被阻塞,直到进程 B 释放这个锁。 #SQL #Caché 0 0 0 93
文章 姚 鑫 · 六月 17, 2022 阅读大约需 7 分钟 第三章 锁定和并发控制(三) 第三章 锁定和并发控制(三) 升级锁 使用升级锁来管理大量锁。当锁定数组的节点时,它们是相关的,特别是当将多个节点锁定在同一下标级别时。 当给定进程在同一数组中的给定下标级别创建了超过特定数量(默认为 1000)的升级锁时, 将删除所有单独的锁名称并用新锁替换它们。新锁位于父级,这意味着数组的整个分支被隐式锁定。示例(如下所示)演示了这一点。 应用程序应在合适的情况下尽快释放特定子节点的锁(与非升级锁完全相同)。当释放锁时, 会减少相应的锁计数。当的应用程序移除足够多的锁时,会移除父节点上的锁。第二小节显示了一个示例。 锁升级示例 假设有 1000 个^MyGlobal("sales","EU",salesdate) 形式的锁,其中 salesdate 表示日期。锁表可能如下所示: #SQL #Caché 0 0 0 57
文章 姚 鑫 · 六月 16, 2022 阅读大约需 4 分钟 第二章 锁定和并发控制(二) 第二章 锁定和并发控制(二) 关于零超时的说明 如上所述,如果您将 timeout 指定为 0, 会添加锁。但是,如果使用零超时锁定父节点,并且已经在子节点上锁定,则忽略零超时并使用内部 1 秒超时。 删除锁 要删除默认类型的锁,请使用 LOCK 命令,如下所示: LOCK -lockname 如果执行此命令的进程拥有具有给定名称的锁(默认类型),则此命令将删除该锁。或者,如果进程拥有多个锁(默认类型),此命令将删除其中一个。 或者删除另一种类型的锁: LOCK -lockname#locktype 其中 locktype 是一串锁类型代码。 LOCK 命令的其他基本变体 为了完整起见,本节讨论 LOCK 命令的其他基本变体:使用它来创建简单的锁并使用它来删除所有锁。这些变化在实践中并不常见。 #SQL #Caché 0 0 0 44
文章 姚 鑫 · 六月 15, 2022 阅读大约需 5 分钟 第一章 锁定和并发控制制(一) 第一章 锁定和并发控制(一) 任何多进程系统的一个重要特征是并发控制,即防止不同进程同时更改特定数据元素的能力,从而导致损坏。 提供了一个锁管理系统。本文提供了一个概述。 此外,%Persistent 类提供了一种控制对象并发访问的方法,即 %OpenId() 的并发参数和该类的其他方法。这些方法最终使用本文讨论的 ObjectScript LOCK 命令。所有持久对象都继承这些方法。同样,系统会自动对 INSERT、UPDATE 和 DELETE 操作执行锁定(除非指定 %NOLOCK 关键字)。 %Persistent 类还提供方法 %GetLock()、%ReleaseLock()、%LockId()、%UnlockId()、%LockExtent() 和 %UnlockExtent()。 #SQL #Caché 0 0 0 65
文章 姚 鑫 · 六月 14, 2022 阅读大约需 5 分钟 第九章 其他参考资料(二) 第九章 其他参考资料(二) 特殊变量 (SQL) 系统提供的变量。 $HOROLOG $JOB $NAMESPACE $TLEVEL $USERNAME $ZHOROLOG $ZJOB $ZPI $ZTIMESTAMP $ZTIMEZONE $ZVERSION SQL直接支持许多对象脚本特殊变量。这些变量包含系统提供的值。只要可以在SQL中指定文字值,就可以使用它们。 SQL特殊变量名不区分大小写。大多数可以使用缩写来指定。 #SQL #Caché 0 0 0 49
文章 Lilian Huang · 六月 14, 2022 阅读大约需 3 分钟 [首次使用InterSystems IRIS] 互操作性: Message消息 这篇文章是上一篇文章的延续https://cn.community.intersystems.com/post/首次使用intersystems-iris-互操作性-一个production是什么? #API #HL7 #InterSystems 业务解决方案和架构 #Caché #HealthShare #InterSystems IRIS #InterSystems IRIS for Health #学习门户 0 0 0 143
文章 姚 鑫 · 六月 13, 2022 阅读大约需 5 分钟 第八章 其他参考资料(一) 第八章 其他参考资料(一) 默认用户名和密码(SQL) IRIS® 数据平台提供了用于登录数据库和开始使用的默认用户名和密码。默认用户名为“_SYSTEM”(大写),密码为“sys”。 SQLCODE错误代码(SQL) 执行大多数 SQL操作都会发出SQLCODE值。发出的SQLCODE值为0、100和负整数值。 #SQL #Caché 0 0 0 99
文章 Frank Ma · 六月 13, 2022 阅读大约需 2 分钟 Python和ObjectsScript中消息响应时间的对比测试 这是一个在InterSystems IRIS中用python和objectscript建立的对比测试。 测试目的是比较在python和objectscript中从BP到BO来回发送一千条请求/消息的速度。 更多信息,请访问 https://github.com/LucasEnard/benchmark-python-objectscript。 重要提示 : 这里用的是python, graph objectscipt和objectscript从一个BP到一个BO来回发送1000条消息的时间,单位是秒。 字符串信息是由十个字符串变量组成。 对象信息由十个对象变量组成,每个对象都是它自己的int、float、str和List(str)。 #ObjectScript #Python #InterSystems IRIS 1 0 0 64
文章 Frank Ma · 六月 13, 2022 阅读大约需 6 分钟 使用IRIS IntegratedML(一体化机器学习)预测孕产妇风险的Web应用 孕产妇风险可以通过一些医学界众所周知的参数来测量。这样,为了帮助医学界和计算机系统,特别是人工智能,科学家Yasir Hussein Shakir发布了一个非常有用的数据集,用于训练检测/预测孕产妇风险的机器学习(ML)算法。这份出版物可以在最大和最知名的ML数据库Kaggle上找到,网址是 https://www.kaggle.com/code/yasserhessein/classification-maternal-health.... #AI #IntegratedML #InterSystems IRIS Open Exchange app 0 0 0 142
文章 Frank Ma · 六月 13, 2022 阅读大约需 10 分钟 利用IRIS IntegratedML(一体化机器学习)来预测肾病的Web应用 肾脏疾病可以从一些医学界熟知的参数中发现。这样,为了帮助医学界和计算机系统,特别是人工智能,科学家Akshay Singh发表了一个非常有用的数据集,用于训练肾脏疾病检测/预测方面的机器学习(ML)算法。这份出版物可以在最大和最知名的ML数据库Kaggle上找到,网址是https://www.kaggle.com/datasets/akshayksingh/kidney-disease-dataset。 关于数据集 该肾脏疾病数据集有以下元数据信息(来源:https://www.kaggle.com/datasets/akshayksingh/kidney-disease-dataset): #AI #IntegratedML #InterSystems IRIS Open Exchange app 1 0 0 123
文章 姚 鑫 · 五月 12, 2021 阅读大约需 4 分钟 第五章 管理全局变量(一) 第五章 管理全局变量(一) 管理门户提供管理全局变量的工具,系统类提供执行某些相同任务的方法。本章介绍如何使用这些工具。 一般建议 与ObjectScript命令SET、MERGE、KILL和其他命令一样,这里描述的工具提供了直接访问操作全局变量的权限。如果通过全局访问删除或修改,则会绕过所有对象和SQL完整性检查,并且没有撤消选项。因此,在执行这些任务时要非常小心,这一点很重要。(查看和导出不会影响数据库,并且是安全活动。) 使用本章中介绍的工具时,请确保以下事项: IRIS使用哪些全局变量。并不是所有这些都被视为“系统”全局变量-也就是说,即使没有选中“系统”复选框,它们中的一些也是可见的。其中一些全局变量存储代码,包括的代码。 确保知道应用程序使用哪些全局变量。 即使应用程序从不执行任何直接全局访问,应用程序也会使用全局变量。请记住,如果创建持久类,则它们的数据和任何索引都存储在全局变量中,全局变量的名称基于类名(默认情况下)。 #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 1 0 67
文章 姚 鑫 · 六月 12, 2022 阅读大约需 5 分钟 第七章 日期和时间构造 第七章 日期和时间构造 验证和转换 ODBC 日期、时间或时间戳。 大纲 {d 'yyyy-mm-dd'} {d nnnnnn} {t 'hh:mm:ss[.fff]'} {t nnnnn.nnn} {ts 'yyyy-mm-dd [hh:mm:ss.fff]'} {ts 'mm/dd/yyyy [hh:mm:ss.fff]'} {ts nnnnnn} 描述 这些构造采用 ODBC 日期、时间或时间戳格式的整数或字符串,并将其转换为相应的 IRIS 日期、时间或时间戳格式。他们执行数据输入以及值和范围检查。 #SQL #Caché 0 0 0 80
文章 姚 鑫 · 六月 11, 2022 阅读大约需 4 分钟 第六章 数据类型(五) 第六章 数据类型(五) 数据类型的整数代码 在查询元数据和其他上下文中,为列定义的数据类型可以作为整数代码返回。 CType(客户端数据类型)整数代码列在 %SQL.StatementColumn clientType 属性中。 ODBC 和 JDBC 使用 xDBC 数据类型代码 (SQLType)。 ODBC 数据类型代码由 %SQL.Statement.%Metadata.columns.GetAt() 方法返回,如上例所示。 SQL Shell 元数据还返回 ODBC 数据类型代码。 JDBC 代码与 ODBC 代码相同,除了时间和日期数据类型的表示。下面列出了这些 ODBC 和 JDBC 值: #SQL #Caché 0 0 0 48
文章 Michael Lei · 六月 11, 2022 阅读大约需 2 分钟 InterSystems 最佳实践系列文章--系统性能组件SystemPerformance (原 pButtons) API和UI示例 在检查我们的^pButtons(在IRIS中改名为^SystemPerformance)性能监控工具的文档时,一位客户告诉我。"我理解所有内容,但我希望它能更简单......更容易定义配置文件,管理它们等等"。 在这次会议之后,我认为尝试为其提供一些更简单的人机界面是一个不错的试验。 这方面的第一步是在现有的pButtons例程上包裹一个基于类的API。 我还能够添加一些更多的 "功能",比如显示当前正在运行的配置文件,它们剩余的运行时间,以前运行的进程等等。 下一步是在这个API的基础上添加一个REST API类。 有了这个工件(pButtons REST API),人们就可以在上面建立一个比较时髦的用户界面。 举个🌰: - #Angular #API #REST API #性能 #Caché #Ensemble #HealthShare #InterSystems IRIS #InterSystems IRIS for Health Open Exchange app 0 0 0 82
文章 姚 鑫 · 六月 10, 2022 阅读大约需 8 分钟 第五章 数据类型(四) 第五章 数据类型(四) Strings %Library.String 数据类型支持的最大字符串长度为 3,641,144 个字符。通常,极长的字符串应分配为 %Stream.GlobalCharacter 数据类型之一。 因为 IRIS 支持 xDBC 协议 50 和更高版本,所以没有强制执行 ODBC 或 JDBC 字符串长度限制。如果 IRIS 实例和 ODBC 驱动程序支持不同的协议,则使用两个协议中较低的一个。实际使用的协议记录在 ODBC 日志中。 请注意,默认情况下 IRIS 建立系统范围的 ODBC VARCHAR 最大长度为 4096;此 ODBC 最大长度是可配置的。 #SQL #Caché 0 0 0 99
文章 姚 鑫 · 六月 9, 2022 阅读大约需 6 分钟 第四章 数据类型(三) 第四章 数据类型(三) 日期、时间、PosixTime 和时间戳数据类型 可以定义日期、时间和时间戳数据类型,并通过标准 SQL 日期和时间函数相互转换日期和时间戳。例如,可以使用 CURRENT_DATE 或 CURRENT_TIMESTAMP 作为使用该数据类型定义的字段的输入,或者使用 DATEADD、DATEDIFF、DATENAME 或 DATEPART 来操作使用该数据类型存储的日期值。 数据类型类 %Library.Date、%Library.Time、%Library.PosixTime、%Library.TimeStamp 和 %MV.Date 对于 SqlCategory 的处理方式如下: #SQL #Caché 0 0 0 112
文章 Lucy Ma · 六月 9, 2022 阅读大约需 3 分钟 InterSystems 最佳实践系列之 - 在DeepSee中设计有效的层级 当使用DeepSee工具来设计层级的时候,一个子级必须有且仅有一个父级。当出现一个子级对应两个父级的情况时,数据结果就有可能会不可靠。另一种情况是当两个相似的级别存在,它们的主键必须要做相应的变更以确保唯一性。我们接下来将通过两个案例来解释这两种情况是如何发生的以及如何避免。 案例1 在多个州里都会有一个城市叫做Boston。在我的样本数据里,我已经记录的与Boston对应的州有MA和Boston.NY。我的维度定义如下: 城市和州在这里都是简单的字符串格式。当构建到我的Cube中时,我会需要两个州级别成员:“MA”和“NY”,以及两个城市级别成员:“Boston”和“Boston”。为什么我需要两个Boston的城市级别成员而不是一个呢?因为一个级别成员不能有两个父级。所以我们需要创建两个分别的子级成员来对应各自的父级。遗憾的是,我们现在处于“糟糕的层级”场景,因为我们只有一个键值来对应两个不同的级别成员。 #InterSystems IRIS BI (DeepSee) 0 0 0 158
文章 Michael Lei · 六月 9, 2022 阅读大约需 2 分钟 InterSystems 最佳实践系列之自定义业务服务 Business Services 业务服务Business Service/BS是能够支持我们从外部数据来源获取数据强大的组件,在在大多数情况下,内置的现成组件就已经可以完成这项工作,但有时候我们还是需要写编码来自定义业务服务。在这样做的时候,有一些最佳实践供大家参考。 #业务服务 #Ensemble 1 0 0 91
文章 Jingwei Wang · 九月 28, 2021 阅读大约需 5 分钟 IRIS 2021 技术文档 First Look 16 Java 网关(Gateway)和InterSystems 产品 本文档介绍了如何在 InterSystems IRIS®数据平台中使用 Java 网关(Gateway)与 Java 组件进行互操作。在本文中,您将首先创建一个示例 JAR 文件。然后,您将在 InterSystems IRIS 管理门户(Management Portal)中创建并启动 Java 网关(Gateway)。您将以编程方式导入创建的示例 JAR 文件。最后,您将在 ObjectScript 中创建并操作一些代理类(proxy class)和对象(object)。 为了让您体验 Java 网关(Gateway ),而又不陷入细节困境,我们保持了简单的探索。这些活动被设计成只使用默认设置和功能,这样您就可以熟悉功能的基本原理,而不必处理那些离题或过于复杂的细节。当您把 Java 网关(Gateway)引入您的生产系统时,您可能需要做一些不同的事情。请确保不要把这种对 Java 网关(Gateway )的探索与真实的情况相混淆!本文档末尾提供的参考资料将使您对在生产中使用 Java 网关(Gateway)的情况有一个很好的了解。 #Ensemble #InterSystems IRIS 0 2 0 117