开始 - 请拉到页面底部查看该系列文章第一部分 .
3. 使用globals时结构的变体
一个结构,比如说一个有序排列的“树”,有各种特殊的情况。让我们来看看那些对使用globals有实际价值的情况。
开始 - 请拉到页面底部查看该系列文章第一部分 .
3. 使用globals时结构的变体
一个结构,比如说一个有序排列的“树”,有各种特殊的情况。让我们来看看那些对使用globals有实际价值的情况。
InterSystems DeepSee的目的是使你能够将BI嵌入到你的应用程序中,这样你的用户就可以对他们的数据提出和回答复杂的问题。你的应用程序可以包括仪表盘,它包含图形部件。这些部件用来显示数据,由透视表和KPIs(关键绩效指标)驱动。对于一个透视表,用户可以显示一个列表,用其显示源值。
透视表、KPIs和列表是查询,在运行时执行。
数据透视表可以对运行时的输入作出反应,如用户的过滤器选择。在内部,它使用一个MDX(MultiDimensional eXpressions)查询,与DeepSee cube进行通信。一个cube由一个事实表和其索引组成。一个事实表由一组事实(行)组成,每个事实对应于一个基本记录。例如,这些事实可以代表病人或部门。DeepSee还生成了一组维度表(level tables)。所有的表都是动态维护的,根据你的配置和实现,DeepSee检测你的事务表的变化,并传播到事实表。当用户在分析器中创建透视表时,DeepSee会自动生成一个MDX查询。
KPI也可以对运行时的用户输入做出反应。在内部,它使用MDX查询(与DeepSee立方体)或SQL查询(与任何表)。在这两种情况下,你都可以手动创建查询,或从其他地方复制它。
列表显示来自用户选择的透视表行的源记录的选定值。在内部,一个列表是一个SQL查询。你可以指定要使用的字段,让DeepSee生成实际的查询。
亲爱的社区开发者们,
我很高兴地向大家介绍一位我们的新版主@黄念刚。

让我们以热烈的掌声欢迎 @黄念刚!
@黄念刚目前任职于东华医为(Mediway),担任技术支持中心开发工程师一职。
以下是@黄念刚的自我简介:
再次欢迎我们的新版主@黄念刚👏🏼👏🏼👏🏼👏🏼👏🏼
期待你在DC成长为一名优秀版主!
如果使用的是嵌入式 Python 并且需要与 IRIS 交互,可以使用 Python shell 中的 iris 模块,或者使用 Python 编写的 IRIS 类中的方法。要遵循本节中的示例,可以使用 ObjectScript 命令 do ##class(%SYS.Python).Shell() 从终端会话启动 Python shell。
当启动终端会话时,将被放置在 IRIS 的 USER 命名空间中,将看到提示 USER>。但是,如果从 GitHub 加载了示例类,则需要在 SAMPLES 命名空间中才能访问它们。
在终端中,更改为 SAMPLES 命名空间,然后启动 Python shell,如下所示:
USER>set $namespace = "SAMPLES"
SAMPLES>do ##class(%SYS.Python).Shell()
Python 3.9.5 (default, Jul 19 2021, 17:50:44) [MSC v.1927 64 bit (AMD64)] on win32
Type quit() or Ctrl-D to exit this shell.嵌入式 Python 允许将 Python 与 IRIS 数据平台的本地编程语言 ObjectScript 一起使用。当使用嵌入式 Python 在 IRIS 类中编写方法时,Python 源代码与编译后的 ObjectScript 代码一起编译为在服务器上运行的目标代码。与使用网关或 Python的 Native SDK 相比,这允许更紧密的集成。还可以导入 Python 包,无论它们是自定义的还是公开的,并在ObjectScript 代码中使用它们。 Python 对象是 ObjectScript 中的一等公民,反之亦然。
ObjectScript 的 Python 库 - 此方案假设 ObjectScript 开发人员,并且希望利用 Python 开发人员社区可用的众多 Python 库的强大功能。Python 调用 IRIS API — 此方案假定您是一名 Python 开发人员,对 IRIS 不熟悉,并且想知道如何访问 API。ObjectScript 和 Python — 这个场景假设在一个由 ObjectScript 和 Python 开发人员组成的混合团队中,并且想知道如何一起使用这两种语言。将需要 2021.2 或更高版本的正在运行的 IRIS 实例,以及取决于操作系统的一些先决条件。
许多类使用 %Status 数据类型类来表示状态信息,并且它们的方法返回表示成功或错误的 %Status 值(状态)。如果状态表示一个错误(或多个错误),则状态值还包括有关错误的信息。
还可以返回自己的状态值。
本文讨论状态值以及如何使用它们。
如上所述,许多 类中的方法返回一个状态以指示成功或错误。例如,%Library.Persistent中的%Save()` 方法返回一个状态。对于任何此类方法,请务必获取返回值。然后检查状态,然后适当地继续。基本工具如下:
要检查状态是表示成功还是错误,请使用以下任一方法:
$$$ISOK 和 $$$ISERR 宏,在包含文件 %occStatus.inc 中定义。此包含文件在所有对象类中自动可用。$SYSTEM.Status.IsOK() 和 $SYSTEM.Status.IsError() 方法,它们在终端(不能使用宏)中特别方便。要显示错误详细信息,请使用 $SYSTEM.OBJ.DisplayError() 或 $SYSTEM.Status.DisplayError()。这些方法彼此等效。他们将输出写入当前设备。
要获取包含错误详细信息的字符串,请使用 $SYSTEM.Status.GetErrorText()。
/// d ##class(PHA.TEST.除了推荐的 REST 应用程序支持之外,产品还支持两种类型的传统 Web 应用程序:CSP 和 Zen。在配置使用 CSP 和 Zen 的自定义登录页面时,遵循推荐的协议很重要。这些协议提供了更高的安全性,并最大限度地减少了升级到新产品或版本时的不兼容性。
创建自定义 CSP 登录页面:
%CSP.Login 页面的子类。Draw 方法,以便页面看起来像想要的那样。其中包括修改登录页面外观的方法和修改安全令牌页面外观的方法(如果使用双因素身份验证):DrawCSS3STYLE、DrawHEAD、DrawSTYLE、DrawTitleDrawSTHEAD、DrawSTTitle请注意,DrawTitle 和 DrawSTTitle 方法调用 DrawTitleSection 方法。
重要提示:创建自定义登录页面时,必须使用 %CSP.Login 的子类。在 CSP 应用程序中创建登录页面的其他方法可能会导致各种问题。
如果编写了不使用 %CSP.Login 子类的自定义登录页面,并且应用了来自任何用于升级或保护实例的更改,那么登录页面可能会失败而没有错误消息。
本片文章主要介绍两种Production debug的方式,
我现在在使用object script。如果把代码从 objectscript转成 Java 我需要做些什么?
你好。
我想访问一个远程SQL Server数据库中的存储过程。我对Object Script很陌生。
该存储过程有3个参数:2个日期时间参数和1个整数。
哪种方法最好呢?我想知道我是否可以在object script中使用链接存储过程的功能或一些SQL语句。
这个存储过程返回一组行,我想读取、转换并保存在一个持久化类中。
先谢谢了。
Hi,
I want to access a Stored Procedure in a remote SQL Server Database. I am quite new to Object script.
The stored procedure has 3 parameters: 2 datetime parameters and 1 integer.
Which is the best way to do that? I'm wondering if I can use the link stored procedure feature inside object script or some SQL statement in Object Script.
This SP returns a set of rows which I want to read, transform and save in a persistent class.
亲爱的女士们和先生们,在上个月,我改进了我的工具Caché监视器......但首先:名字
选择Caché Monitor这个名字是为了反映该工具与Caché数据库的紧密结合。我想,在可预见的未来,Intersystems Caché这个既定名称很可能会被InterSystems IRIS数据平台完全取代。因此,重塑品牌的步骤成为必要。为了在未来不那么紧密地与一个产品名称联系在一起,我们选择了一个更加中立的新名字: SQL Data Lens
不管叫什么名字,实现与Intersystems产品最紧密的整合仍然是我们的目标。持续的发展也反映在版本号的延续上。上一个版本是Caché Monitor 2.96,下一个版本是SQL Data Lens 3.0。
但这不仅仅是重新命名,而且还集成了许多新的功能,例如
第二十一章 使用工作队列管理器(四)
分离和附加工作队列
通常,初始化一组工作程序,将工作项排队,然后等待工作程序完成工作项。但是,可能会遇到工作人员作业完成工作项所需的时间比预期更长的情况,或者无法将单个进程专门用于等待。因此,工作队列管理器使能够将工作队列与进程分离,然后将工作队列附加到同一进程或不同的进程。
例如,假设队列引用了初始化的工作队列。还假设向工作队列中添加了几个工作项。在调用 Wait() 或 WaitForComplete() 来确定正在处理的工作的状态之前,可以使用以下方法:
Detach()
method Detach(ByRef token As %String, timeout As %Integer=86400) as Status 从初始化工作队列时创建的对象引用中分离工作队列对象。 Detach() 方法使任何正在进行的工作能够继续并保留工作队列的当前状态。
token 参数表示一个安全令牌,可以使用它随后将工作队列附加到另一个进程。 timeout 参数是可选的,它指示系统保留分离的工作队列对象的时间量(以秒为单位)。超时期限过后,系统会删除与工作队列关联的所有工作人员作业和信息。超时的默认值为 1 天。
调用 Detach() 方法后,对分离对象引用的大多数调用都会返回错误。
如题:
.png)
一个类别是一个独立的worker jobs池。当初始化一组worker jobs时,可以指定提供worker的类别。如果集合中的任何worker jobs在执行work项时请求额外的worker jobs,则新的worker jobs来自同一类别。
例如,假设系统提供的 SQL 类别分配了最多 8 个worker。然后,假设与BusinessIntelligence相关的流程创建了一个类别,并将最多四个worker分配给该类别。如果 SQL 池中的所有worker在给定时间都参与了工作,则 BusinessIntelligence 类别中的worker可能仍然可以立即处理工作项。
系统包括两个不能删除的类别:SQL 和 Default。 SQL 类别适用于系统执行的任何 SQL 处理,包括查询的并行处理。当在未指定类别的情况下初始化一组worker jobs时,默认类别提worker jobs。
每个类别都具有影响该类别中每个工作队列的行为的属性。这些属性是:
当创建此类别中的工作队列且未指定worker job 计数时,这将成为工作队列中worker job 的数量。此属性的默认值是核心数。
在此类别的job服务请求池中保留的活动worker job的最大数量。
可以通过执行以下步骤来使用工作队列管理器:
ObjectScript 代码划分为工作单元,这些工作单元是满足特定要求的类方法或子例程。%SYSTEM.WorkMgr 类的一个实例。为此,请调用 %SYSTEM.WorkMgr 类的 %New() 方法。该方法返回一个工作队列。可以指定要使用的并行worker jobs的数量,也可以使用默认值,这取决于机器和操作系统。此外,如果已创建类别,则可以指定应从中获取job的类别。
创建工作队列时,工作队列管理器会创建以下工件:
Queue() 或 QueueCallback() 方法。作为参数,传递类方法(或子例程)的名称和任何相应的参数。对添加到队列的项目立即开始处理。
如果队列中的项目多于队列可用的worker jobs,则job会竞争清空队列。例如,如果有 100 个项目和四个job,则每个job从队列的头部移除一个项目,处理它,然后返回到队列的头部以移除并处理另一个项目。这种模式一直持续到队列为空。
大家好!
一周前,在西雅图举办的InterSystems 2022年全球峰会刚刚结束,但对于那些错过会议现场的人,或者由于种种原因无法亲自参加会议的人(或者只是希望重新回忆并再次聆听会议的人)来说,线上主题演讲刚刚开始!
话不多说,请查收全球峰会上来自社区的问候:
欢迎通过YouTube播放列表观看2022年全球峰会三天所有主题演讲:
工作队列管理器是的一项功能,使能够通过以编程方式将工作分配给多个并发进程来提高性能。在引入工作队列管理器之前,可能已经使用 JOB 命令在应用程序中启动多个进程并使用自定义代码管理这些进程(以及任何导致的故障)。工作队列管理器提供了一个高效且直接的 API,使能够卸载流程管理。
代码在多个地方内部使用工作队列管理器。可以将它用于自己的需求,如以下部分中的高级描述。
计算机硬件开发的最新创新趋向于高性能、多处理器或多核架构。与此同时,内存和网络设备的速度也只是慢慢地提高了。 开发了工作队列管理器以响应这些趋势并根据以下原则:
尽管整个数据平台旨在尽可能高效地利用系统中的硬件资源,但该平台的工作队列管理器功能专门设计用于利用现代硬件配置中可用的额外 CPU 资源。工作队列管理器有两个关键用途:
高可用性(HA)指的是使系统或应用程序在很高比例的时间内保持运行,最大限度地减少计划内和计划外的停机时间。
维持系统高可用性的主要机制被称为故障转移。在这种方法下,一个故障的主系统被一个备份系统所取代;也就是说,生产系统故障转移到备份系统上。许多HA配置还提供了灾难恢复(DR)的机制,即在HA机制无法保持系统的可用性时,也能及时恢复系统的可用性。
本文简要讨论了可用于基于InterSystems IRIS的应用程序的HA策略机制,提供了HA解决方案的功能比较,并讨论了使用分布式缓存的故障转移策略。
在操作系统层面上提供的一个常见的HA解决方案是故障转移集群,其中主要的生产系统由一个(通常是相同的)备用系统补充,共享存储和一个跟随活动成员的集群IP地址。在生产系统发生故障的情况下,备用系统承担生产工作量,接管以前在故障主系统上运行的程序和服务。备用机必须能够处理正常的生产工作负载,只要恢复故障主机所需的时间就可以了。也可以选择让备用机成为主机,一旦主机恢复,故障主机将成为备用机。
InterSystems IRIS的设计可以轻松地与所支持的平台的故障转移集群技术相结合(如InterSystems支持的平台中所述)。
Hi 亲爱的开发者们,你是否精通多门语言并希望与世界各地的非英语用户分享你的知识?
我们为你提供了闪光的机会! 🤩
进程使用许多不同的资源来实现其目标。其中包括部分或全部 CPU 周期、内存、外部存储、网络带宽等。这篇文章是关于内存使用的。具体来说,它处理为数据存储分配的内存,例如:
当第一次为它们分配值时,它们被分配了内存空间。在局部数组的情况下,局部变量名称加上所有下标的值的组合引用单个变量值。
除了包含极长字符串的变量外,变量会占用与 $STORAGE 相关的空间。包含极长字符串的变量以不同方式存储,并且不占用 $STORAGE 中的空间。
每当实例化一个对象时,都会分配空间来保存对象的当前内容以及它所引用的对象。删除最后一个对象引用时返回该空间。
I/O 缓冲区将与该进程正在使用的设备相关联的 I/O 缓冲区存储在进程空间中。
进程从用于上述实体的初始内存池开始。当应用程序创建它们时,它们会消耗池中的内存;当应用程序删除它们时,它们的内存将返回到池中。例如,当一个例程开始执行时,总是会创建消耗一些内存的局部变量;当例程返回并且这些变量超出范围时,这些变量使用的内存将被返回并可供重用。
当应用程序需要内存,并且进程在其内存池中没有足够大(连续)的可用内存区域来满足需求时,该进程会从底层操作系统请求额外的内存块以添加到其池中。稍后,如果该内存块完全未使用,它将返回给操作系统。
XML 消息文件是消息字典的导出。这也是希望导入的任何消息的必需格式。
只要有可能,XML 消息文件应该使用 UTF-8 编码。但是,在某些情况下,开发人员或翻译人员可能会使用本地平台编码,例如 shift-jis,以便于编辑 XML 消息文件。无论 XML 文件使用何种编码,应用程序的语言环境都必须支持它,并且它必须能够表达该语言的消息。
XML 消息文件可能包含一种语言和多个域的消息。
元素是 XML 消息文件的顶级容器,每个文件只有一个 元素。
元素有一个必需的属性,Language。 Language 属性的值是一个全小写的 RFC1766 代码,用于标识文件的语言。它由一个或多个部分组成:主要语言标签(例如 en 或 ja)可选地后跟连字符 (-) 和次要语言标签(en-gb 或 ja-jp)。
在以下示例中,此语言为“en”(英语)。
<?xml version="1.0" encoding="utf-8" ?Hi 社区,
在这篇文章中,我将解释如何通过使用嵌入式python访问管理门户系统的仪表盘信息和表数据。.png)
本文概述了字符串本地化,并描述了如何导出、导入和管理消息字典。
当本地化应用程序的文本时,会创建一种语言的文本字符串清单,然后当应用程序区域设置不同时,建立约定以另一种语言替换这些消息的翻译版本。
支持以下本地化字符串的过程:
REST 应用程序或商业智能模型中)。这种机制各不相同,但最常见的机制是 $$$Text 宏。代替硬编码的文字字符串,开发人员包含 $$$Text 宏的实例,为宏参数提供如下值:
write "Hello world"
替换为
write $$$TEXT("Hello world","sampledomain","en-us")
$$$Text 宏的每个唯一实例生成条目。消息字典是全局的,因此可以在管理门户中轻松查看(例如)。有一些类方法可以帮助完成常见任务。
结果是一个或多个 XML 消息文件,其中包含原始语言的文本字符串。
发布工程师将这些文件发送给翻译人员,请求翻译版本。
翻译人员使用他们喜欢的任何 XML 创作工具来处理 XML 消息文件。
各位领导、老师大家好。非常荣幸有机会参加这次由中国数字医学杂志社组织的陕西省医院数字化转型研讨会。
IT这个行业很有意思,就是大家都很喜欢造词。这几年有一个词特别火,叫做数智化底座,很多厂商都先后推出了自己的数智化底座解决方案。结合最近对整个行业的一些观察,今天借这个机会,跟各位领导和老师探讨一下,医疗行业的数字化有什么特点,到底什么样的底座或者平台比较符合我们医疗行业,以及我们在建设数智化底座的时候需要考虑哪些问题。结合我们最近的一些观察和思考,有不当之处,欢迎各位老师批评、指正。
首先一点就是我们做任何工作,首先要解决“为什么”的问题?第一个核心思路,我想数字化转型是为智慧医院服务的,归根结底,还是要通过数字化的手段,来实现医院的高质量发展。针对这一目标,国家卫健委制定了智慧医院发展的三大目标,就是智慧医疗、智慧管理和智慧服务,我想说白了,无非就是让医院、医护人员以及我们的患者过的更好,提高我们治疗和护理水平、降本增效,同时能够让我们的患者得到更好的服务。所有的数字化建设,不管是平台还是应用,都应该围绕这一核心目标。
.png)
第二个核心思路,我们认为软件要为人服务所谓的数字化转型,就是用软件来开展一切可以开展的业务,而软件是为人服务的,目的是提高我们的工作效率、认知水平和实现我们仅仅靠人力做不了的事情。
大家好!欢迎参加InterSystems第21届开发者大赛!
🏆 InterSystems 2022 Full Stack开发者大赛 🏆
时间: 2022年6月27日-7月17日(美东时间)
奖金:$10,000
%XML.XPATH.Document中CreateFromFile方法,
如:
可根据此思想进行多任务启动查询汇总数据。
job机制开启后台进程。loop循环减少进程的数量等于开启进程的数量,判断多进程任务是否完成。创建表并插入1000W条数据,统计Moeny字段总金额
创建demo代码如下。
Class Demo.SemaphoreDemo Extends %RegisteredObject
{
/// Do ##class(Demo.SemaphoreDemo).Sample(5)
ClassMethod Sample(pJobCount = 3)
{
k ^yx("Amt"),^yxAmt
/* 1.启动信号 */
s mSem = ##class(Demo.Sem).%New()
If ('($isobject(mSem)))
{
q "启动失败"
}
/* 2. 初始化信号量为0 */
d mSem.Init(0)
s t1 = $zh
/* 3. 按指定数量,启动后台任务 */
for i = 1 : 1 : pJobCount
{
j .Cache数据库使用M语言如何调用第三方视图呢,有没有对应使用文档呢?
Main、Producer 和 Consumer 这三个类中的每一个都有自己的 Run 方法,最好在各自的终端窗口中运行它们。每次运行时,它都会显示它为日志生成的消息。一旦用户通过提供它正在等待的输入来响应 Main 类,Main 的 Run 方法将终止删除信号量。然后,用户可以通过键入命令查看所有进程的合并日志文件的显示
Do ##class(Semaphore.Util).ShowLog()
注意:以下所有示例都假定所有类都已在“USER”命名空间中编译。
最简单的例子演示了信号量的创建和销毁。它使用 Semaphore.Main 类。请执行下列操作:
Do ##class(Semaphore.Main).Run()
Enter 键。该方法显示信号量的初始化值,将其删除,然后退出。Do ##class(Semaphore.Util).ShowLog()
按照上述步骤在终端窗口中显示的消息示例如下
消息示例如下
DHC-APP>Do ##class(Semaphore.Main).