搜索​​​​

清除过滤器
文章
Michael Lei · 七月 7

InterSystems 常见问题系列 如何在启动时执行特定动作

InterSystems 常见问题FAQ 如果您想在InterSystems 产品启动时执行一个操作系统可执行文件,命令或者程序,可以在SYSTEM^%ZSTART routine里面写明流程 ( %ZSTART routine在 %SYS 命名空间里面创建). 在 SYSTEM^%ZSTART 里面写代码之前, 请确保他可以在任何情况下能正常工作 如果 ^%ZSTART routine 写的不对,或者没有响应或者发生错误,InterSystems 产品可能会无法启动。 更多信息,请参考一下文档。 About writing %ZSTART and %ZSTOP routines [IRIS]About writing %ZSTART and %ZSTOP routines
文章
Michael Lei · 七月 7

InterSystems 常见问题系列 如何检查数据大小

InterSystems 常见问题系列FAQ InterSystems 产品里数据 (表、对象、实例数据) 是存在global 变量里的。每个global 的数据大小可以从管理门户中中点击属性查看Management Portal > System > Configuration > Local Database > Globals page, 然后在global 属性页点击计算大小Calculate Size 按钮。你可以在终端上调用^%GSIZE 来在命名空间里显示数据大小,方法如下. USER>do ^%GSIZE Directory name: c:\intersystems\ensemble\mgr\user\ =>All Globals? No => Yes^DeepSee.ActiveTasks contains no dataInclude it anyway? No => YInclude any other similar globals without asking again? Yes =>^DeepSee.ActiveTasks contains no dataInclude it anyway? No => YesInclude any other similar globals without asking again? Yes => Yes^DeepSee.FeatureStats contains no data -- included^DeepSee.Session contains no data -- included^oddBIND contains no data -- included^oddMETA contains no data -- included^oddStudioDocument contains no data -- included^oddStudioMenu contains no data -- included^rINCSAVE contains no data -- included91 items selected from91 available globalsShow details?? No => YesDevice:Right margin: 80 =>directory: c:\intersystems\ensemble\mgr\user\ Page: 1 GLOBAL SIZE 26 Jun 2017 6:56 PM Global Blocks Bytes Used Packing Contig. -------- -------- --------------- ------- ------- CacheMsg 1 3,812 47 % 0 DeepSee.ActiveTasks 1 24 0 % 0 DeepSee.AgentLog 1 6,008 74 % 0 DeepSee.Agents 1 688 8 % 0 DeepSee.BucketList 1 76 1 % 0 DeepSee.Cache.Axis 25 142,616 70 % 14 DeepSee.Cache.Listing 15 87,728 72 % 11 DeepSee.Cache.Results 31 183,200 72 % 17 DeepSee.Cubes 3 17,936 73 % 0 to continue or '^' to STOP:
文章
Michael Lei · 七月 7

InterSystems 常见问题系列,如何避免ODBC查询超时

InterSystems 常见问题系列FAQ 如果要让超时功能失效, 在DSN设置查询超时为disabled: Windows Control Panel > Administrative Tools > Data Sources (ODBC) > System DSN configuration 如果勾选了Disable query timeout , 超时就会失效. 如果想在应用侧修改,你可以在ODBC API 层设置:在连接数据源之前,调用ODBC SQLSetStmtAttr功能设置SQL_ATTR_QUERY_TIMEOUT 属性
文章
Michael Lei · 七月 25

InterSystems 常见问题FAQ系列--如何在编译类routines时包含映射修饰符

InterSystems 常见问题FAQ 要编译包含映射修饰符的类rountine,请指定编译器修饰符“/mapped=1”或“/mapped”。例如,执行以下操作: [示例 1] 获取类列表并编译 do $System.OBJ.GetClassList(.list,"/mapped") // build your classes starting from .list do $System.OBJ.Compile(.list) [示例 2] 编译所有类 do $system.OBJ.CompileAll("/mapped")
文章
Louis Lu · 八月 6

InterSystems ObjectScript中一些有用的自动生成的方法

在使用 InterSystems ObjectScript 进行编程时,当你定义了属性property、查询query或者索引index,系统会在编译的过程中自动创建与之相关的一些方法,这篇文章对这些方法做了些总结: 属性Properties 1. 假设你定义了一个属性 Property, 下面的方法会被自动创建 ClassMethod PropertyGetStored(id) 对于数据类型属性,这个函数将返回其逻辑值,对于对象属性,返回id。这是一个对类global数据的封装,也是获取单例属性值(singular property value)最快的方法。此方法仅适用于已持久化存储的属性。 这里是一段采用多种方法读取数据的对比代码,用于测试各种访问数据方式的时间差异,其结果是: Iterations: 10000 Object access: .130111 GetStored access: .014388 SQL access: .020268 Global access: .007717 Object access takes 904.30% of GetStored time Object access takes 641.95% of SQL time Object access takes 1686.03% of Global time GetStored access takes 70.99% of SQL time GetStored access takes 186.45% of Global time SQL access takes 262.64% of Global time 其中: Object access 是打开一个对象,并读取其属性值 SQL access 使用嵌入式SQL GetStored 使用本文所述自动生成的方法 Global 使用直接读取保存属性值的global 2. Method PropertyGet() 这个函数是属性的getter,可被重新定义。 3. Method PropertySet(val) As %Status 这个函数是属性的setter, 可被重新定义。 对象属性 Object properties 1. 如果是一个对象属性,有关ID以及OID的方法会被创建 Method PropertySetObjectId(id) 这个方法通过对象的Id设置属性值,也就是不需要首先打开一个对象,再设置该对象的属性值。 例如下面定义了两个类 Class Person Extents %Persistent { Property EmployedAt As Company; } Class Company Extends %Persistent { } 通常来说你要将Company赋值给Person是这样写的: set person = ##class(Person).%New() set companyId = 123 set company = ##class(Company).%OpenId(companyId) set person.EmployedAt = company 但是如果你使用PropertySetObjectId方法,就可以这样写: set person = ##class(Person).%New() set companyId = 123 do person.EmployedAtSetObjectId(companyId) 可以看到,这样写的不同点就是,你不需要打开Company这个对象,就可以直接赋值。 2. Method PropertyGetObjectId() 这个方法返回属性值的Id 3. Method PropertySetObject(oid) 这个方法通过OID设置属性值 4. Method PropertyGetObject() 这个方法返回属性值的OID 数据类型属性Datatype properties 1. 对于数据类型属性会生成多个在不同格式间转换的函数: ClassMethod PropertyDisplayToLogical(val) ClassMethod PropertyLogicalToDisplay(val) ClassMethod PropertyOdbcToLogical(val) ClassMethod PropertyLogicalToOdbc(val) ClassMethod PropertyXSDToLogical(val) ClassMethod PropertyLogicalToXSD(val) ClassMethod PropertyIsValid(val) As %Status 检查val是否为有效的属性值 2. ClassMethod PropertyNormalize(val) 返回标准化的逻辑值 注意: 定义的关系(Relationship)也是属性,可以使用 get/set 方法 输入值 val 总是指逻辑值,格式转换方法除外 索引Indexes 1. 对于命名为"Index"的索引,下面函数会被自动创建 ClassMethod IndexExists(val) As %Boolean 该函数判断val的索引是否存在。 唯一索引Unique Indexes 1. 对于唯一索引,下面函数会被自动创建 ClassMethod IndexExists(val, Output id) As %Boolean 判断val的索引是否存在,并且通过第二个参数返回该对象的id。 2. ClassMethod IndexDelete(val, concurrency = -1) As %Status 通过val,删除索引 3. ClassMethod IndexOpen(val, concurrency, sc As %Status) 通过val返回该对象。 注意: 索引可基于多个属性创建,如何使基于多个属性创建的索引,那么函数的输入参数则是多个,比如这样的索引定义: Index MyIndex On (Prop1, Prop2); 那么IndexExists函数则会是下面这样的: ClassMethod IndexExists(val1, val2) As %Boolean 其中val1对应于Prop1的值, val2对应于Prop2的值,其他的函数遵循同样的逻辑。 Caché 生成的 IDKEY索引,是基于ID字段创建的索引。它同样可被重写,以及包含多个属性。例如,检查该类是否有某属性定义: Write ##class(%Dictionary.PropertyDefinition).IDKEYExists(class, property) 所有索引函数检查的都是逻辑值 文档参见这里 查询Queries 1. 对于查询queries(它可以是一个简单的SQL查询,或者用户自定义的类的查询),命名为"Query"Func的方法会被自动创建: ClassMethod QueryFunc(Arg1, Arg2) As %SQL.StatementResult 它会返回一个 %SQL.StatementResult,可被用于便利查询。比如对于在Samples命名空间下的Sample.Person类,定义了一个ByName的查询,它接受一个输入参数,它可以直接通过下面方法在代码中调用: Set ResultSet=##class(Sample.Person).ByNameFunc("A") While ResultSet.%Next() { Write ResultSet.Name,! } 另外,这里是一个在GitHub上的示例,用于演示上面的方法使用。

#InterSystems Reports (Logi)

4 帖子0 关注者
公告
Claire Zheng · 十月 13

加入 InterSystems 步行挑战!

开发者社区的成员,大家好! 我们都喜欢编码,但我们应该时不时地放下代码去锻炼身体! 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 应用 在主屏幕中,点击屏幕右下角的菜单 点击关联 选择所需的健身跟踪器。 关联健身跟踪器后,选择查看任务进入您的任务页面。 从右侧的下拉菜单中选择设置。 随后,您将能够更新对步行任务的发布偏好设置。 您也可以手动发布您走过的距离:点击任务页面左下角的“+”图标。 点击手动发布距离,并输入所有信息和照片作为证据(例如跑步机距离)。 不过,如果使用此方法,您的成绩需要一段时间才会出现在排行榜中。 保持健康,祝您好运!

#InterSystems API管理器(IAM)

14 帖子0 关注者
文章
Claire Zheng · 四月 21, 2021

InterSystems Caché系统运维培训:InterSystems Caché架构、备份与恢复

近日,InterSystems极客俱乐部举办了线上直播“InterSystems Caché系统运维培训”,这是系列视频之一。InterSystems中国资深售前顾问吕正之讲解了“InterSystems Caché架构、备份与恢复”。
文章
Claire Zheng · 四月 3, 2023

InterSystems 技术征文大赛(InterSystems IRIS教程)获奖名单出炉!

亲爱的社区开发者们: 感谢第四届 InterSystems 技术征文大赛(InterSystems IRIS 教程)的优秀参与者们,我们有很棒的新文章供您阅读和欣赏! 🌟 24 篇精彩文章🌟 是时候宣布此次竞赛优胜者啦! 让我们认识一下获奖者和他们的文章: ⭐️ 专家奖——由 InterSystems 专家选出的获奖者: 🥇 第一名: InterSystems Embedded Python in glance 作者: @Muhammad Waseem 🥈 第二名: InterSystems Embedded Python with Pandas - 第 1 部分,作者:@Rizmaan Marikar 🥉第三名: SQLAlchemy - 将 Python 和 SQL 与 IRIS 数据库结合使用的最简单方法 作者:@Heloisa Paiva ⭐️开发者社区奖—— 由社区成员选出的获奖者,获得最多赞的文章: 🏆 设置 VS Code 以使用 InterSystems 技术 作者:@Maria Gladkova 此外! ⭐️我们想根据贡献的数量奖励更多的作者: @Robert Cemper:4 篇文章! @Heloisa Paiva: 3 篇文章! @Iryna Mykhailova: 3 篇文章! 这些作者将获得适用于 iPad 的 Magic Keyboard Folio 或 Bose Soundlink Micro 蓝牙扬声器! 让我们祝贺所有参加 英文社区 #4第四届技术征文大赛的英雄们: @Robert Cemper @Heloisa Paiva @Muhammad Waseem @王喆 @Iryna Mykhailova @Maria Gladkova @Yone Moreno @Akio Hashimoto @Julian Matthews @Daniel Aguilar @water huang @Oliver Wilms @Rizmaan Marikar @姚 鑫 @Zhong Li @Jude Mukkadayil @Roger Merchberger 谢谢你们!您为我们的开发社区做出了卓越的贡献! 我们将联系参赛者以寄送礼品。 再次感谢所有中国选手的热情参与!@姚 鑫@王喆@water huang
公告
Claire Zheng · 八月 19, 2021

InterSystems开发者竞赛:InterSystems IRIS Analytics

亲爱的社区开发者们,大家好! 欢迎积极参与新一轮InterSystems开发者竞赛! 🏆 InterSystems开发者竞赛:InterSystems IRIS Analytics 🏆 竞赛时间:2021年8月23日-9月12日 奖金总额: $8,750 登录页面即可参赛: https://contest.intersystems.com 奖项设置 1. 专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出: 🥇 第一名 - $4,000 🥈 第二名 - $2,000 🥉 第三名 - $1,000 2. 社区提名奖(Community Nomination)- 获得总投票数最多的应用: 🥇 第一名 - $1,000 🥈 第二名 - $500 🥉 第三名 - $250 如果同时多位参赛者获得同样的票数,均被视为优胜者,将平分奖金 谁可以参加? 任何开发者社区的成员均可参加,InterSystems内部员工除外(InterSystems contractor员工可以参加)。还没有账号?现在来建一个! 👥 开发者可以组团 创建一个协作应用程序,组团限定人数为2-5人。 请注意,要在您的README文件中标注您的团队成员——社区用户profile 参赛时间安排 🛠 8月23日 - 9月5日: 应用开发、提交阶段 ✅ 9月 6日 - 12日: 投票阶段 注意:在整个参赛期间(开发与投票期间,即8月23日-9月12日),开发者可持续编辑、提升其应用 主题 💡 应用InterSystems IRIS开发分析解决方案(Analytics Solution) 💡 使用一个或多个InterSystems IRIS分析功能,如: Adaptive Analytics 自适应分析(AtScale) InterSystems Reports (Logi) InterSystems BI (DeepSee) InterSystems NLP (iKnow) 创造一个简单的、引人注目的、清晰的可视化产品和/或故事。 以下是参赛须知: 有效应用程序:100%全新的Open Exchange Apps或已有的应用程序(但有显著提升)。所有参赛者/团队提交的应用程序只有经过我们团队的审核之后才会被批准参赛。 该应用应该在 IRIS Community Edition or IRIS for Health Community Edition or IRIS Advanced Analytics Community Edition 上工作。 该应用需开源并在GitHub上发布。 该应用的README文件应为英文,包含安装步骤,并包含视频demo或/和应用程序如何运行的描述。 资源助力 1. 示例应用程序和说明: 1.1. Adaptive Analytics(自适应分析): Adaptive Analytics in Action (视频) 1.2 InterSystems报告: A look at InterSystems Reports (视频) InterSystems Reports Resource guide Running InterSystems Reports in containers IRIS reports server demo (OEX) 1.3 IRIS BI 案例: IRIS Analytics Template Samples BI Covid19 analytics Analyze This Game of Throne Analytics Pivot Subscriptions Error Globals Analytics Creating InterSystems IRIS BI Solutions Using Docker & VSCode (视频) The Freedom of Visualization Choice: InterSystems BI (视频) InterSystems BI(DeepSee) Overview (线上课程) InterSystems BI(DeepSee) Analyzer Basics (线上课程) 1.4 InterSystems NLP (iKnow): iKnow Source Code Samples Aviation Set Analysis iKnow First Look (线上课程) 2. Sample数据: Hole Foods database for IRIS BI (与SamplesBI包一起安装) Adventure Works, zip Synthea 3. 将数据导入IRIS的工具: CSVGEN and CSVGENUI S3 External Table 4. IRIS初学者 Build a Server-Side Application with InterSystems IRIS Learning Path for beginners 5. 如何将您的APP提交给大赛 如何在InterSystems Open Exchange上发布应用程序 如何把参赛APP提交给大赛 参赛评比 投票规则即将发布,敬请期待! So! 期待您的精彩提交!加入我们的编程马拉松,赢取大奖 ❗️ 点击此处,查看 官方竞赛条款解读❗️
文章
Claire Zheng · 一月 21, 2021

InterSystems IRIS History Monitor仪表盘界面展示

大家好! 我想跟大家分享一个个人项目,该项目始于工作中的一个简单需求:“能否知道我们使用了多少个Caché许可证?” 在阅读社区的其他文章时,我发现了一篇David Loveluck写的非常棒的文章:APM——使用Caché History Monitor。 我根据David的这篇文章,开始使用Caché History Monitor并显示所有这些信息。 在面临“选择哪种很酷的技术”这个问题时,我决定使用简单而强大的CSP,这样我的客户可以认识到Caché不仅仅是MUMPS/终端。 在创建了页面以显示许可、数据库增长和CSP会话的历史记录后,我决定为System Dashboard和进程页面创建一个新设计。 我的Caché实例运行得良好。 但是,如果使用IRIS呢?根据Evgeny Shvarov的文章:在InterSystems IRIS开发存储库中使用Docker,我实现了docker技术,并把代码放到了GitHub上,现在大家只需几个步骤就可以进行尝试。 如何运行? 如要使用这里的repo进行编码,请执行以下操作: 1. 通过Clone/git命令将repo 更新到任意本地目录中: $ git clone https://github.com/diashenrique/iris-history-monitor.git 2. 打开这个目录下的终端,并运行: $ docker-compose build 3. 在项目中运行IRIS容器: $ docker-compose up -d 如何测试 打开浏览器,并转到链接:http://localhost:52773/csp/irismonitor/dashboard.csp 使用用户名_SYSTEM可以运行仪表盘dashboard和其他功能。 系统仪表盘 系统仪表盘(System Dashboard)可展示: ·许可 ·系统时间 ·应用程序错误 ·缓存过程 ·CSP会话 ·Lock Table ·日志空间 ·日志状态 ·ECP AppServer ·ECP DataServer ·编写守护进程 ·缓存效率 ·严重警告 折线图小工具每5秒绘制一个点: 系统菜单 系统进程 进程过滤器 通过使用不同的过滤器可以实现你所需的结果。也可以使用“Multiple Sort(多重排序)”,按Shift +单击列标题,甚至可以将数据网格导出到Excel! History Monitor(历史记录监控器) CSP会话和许可的History Monitor可显示三个部分的信息: ·每5分钟 ·每天 ·每小时 “Database Growth”部分只显示当日信息。历史记录页面共享以下功能: Date Range Picker(日期选择插件) 默认值为“过去7天” Chart / Data Table(图表/ 数据表) 在每个部分的右上角有两个按钮(Chart / Data Table [图表/ 数据表]) Data Table(数据表)显示创建图表所用的信息,同样可以以Excel格式下载。 Excel中显示CSP中定义的相同格式、内容和组。 缩放 所有图表都有Zoom(缩放)选项,以可视化方式显示更多详细信息。 平均值和最大值 对于“每小时”和“每天”部分,图表显示的是平均值和最大值。 平均值 最大值 希望这篇文章对您有用! 注:本文为译文,点击此处阅读原文,原文由Henrique Gonçalves Dias撰写。
公告
Claire Zheng · 一月 7, 2021

如何在 InterSystems Global Masters倡导中心获得积分

大家好!InterSystems Global Masters 倡导中心与开发者社区紧密联系并不是秘密。 为开发者社区做出任何贡献都会带来 Global Masters 积分。 所以, 我们准备了一份关于如何在 Global Masters 以最佳方式获得积分的简短指南。 如何在 GLOBAL MASTERS 获得积分 在开发者社区上发布英文帖子 100 第一次在社区评论 回答一个问题 / 发表一个评论(英文) 300 30 第 1 个被标记为“已接受”的回答 1000 之后的每一个“已接收”回答 150 第5/10/25/50个“已接收”回答 4000/8000/20000/40000 翻译一篇文章 50 在 DC 上问第1/5/10/25/50个问题 500/2000 /5000 /15000/30000 在 DC 上发布第1/5/10/25/50个帖子 1500/7500/15000/40000/75000 在 Open Exchange 发布一个应用程序 800 对每一个ZPM应用积分奖励 400 在Open Exchange发布第1/5/10/25个应用程序 1000/10000/25000/75000 帖子浏览量达到750+/2000+/5000+/15000+ 600/2500/7000/20000 在开发者社区阅读一篇帖子 10 看一个视频 20 通过社交媒体分享一次(帖子/视频) 40 发布的第1/2/3/4/5 篇带“最佳实践”标签的文章 1000/3000/7000/10000/15000 在Open Exchange上您的应用第50/100/250/500/1000次下载 2500/5000/7500/12500/25000 对 InterSystems / InterSystems 产品作一次评述 2 000-3 000 邀请成员加入开发者社区 600 为您的OEX应用创建一个video 3000 *仅计算在 Global Masters 倡导中心注册后发布的帖子。 完成挑战,获得徽章并升级:Insider > Advocate > Specialist > Expert > VIP。 您的级别越高,可获得的奖励越有趣! 欢迎点击查看更多有关 Global Masters 的其他信息: 如何加入 InterSystems Global Masters Global Masters 徽章说明 Global Masters 级别说明 Global Masters 计划的变更 如果您尚未加入 InterSystems Global Masters 倡导中心,现在就开始行动吧! 欢迎在本帖评论中提出您的问题。 欢迎大家多参与Global Master,多积分,多贡献,提高等级,赢取礼品! @Young Zheng @An Xingqi @jinhui hu @wenyang zhang @guoguo wang @shikai ren @chaolong huang @yabin duan @鹏飞 楚 @智辉 李 @SHAN HU @Wendy Wu @Hao Wang @Z C @Zhaoying Li @Neal Wu @liu yaquan @qu qu @wang wei @guo meiya@yajing xu @yue li @权权 苏 @xiaohu xiong @yadong zhao @Yi Han @Wen Zhou @jie zhang @张 恒 @guo wenheng @Jing Li @迪 文
文章
Nicky Zhu · 一月 8, 2021

InterSystems 最佳实践之 Ensemble 孤立消息

在本文中,我们将讨论孤立消息。 ## 什么是孤立消息 每个消息正文都与一个保存元数据的消息标头相关联。 标头保存源配置名称、目标配置名称、创建时间、处理时间、关联的消息正文引用、会话信息、消息正文类名、消息状态等信息。 当有消息正文记录没有相应的标头记录时,这些消息正文称为孤立消息正文。 我们将讨论可能导致孤立消息正文产生的原因。 ### 仅清除标头 在清除任务设置中,**BodiesToo** 设置用于指定是否将消息正文与消息标头一起清除。 如果**关闭**此设置,清除任务将只删除消息标头,而保留消息正文。 这些消息正文将成为孤立记录,因为所引用的标头已被删除。 如果清除消息标头但保留消息正文,则管理门户将无法清除孤立消息正文。 在这种情况下,必须以编程方式清除消息正文。 ![](/sites/default/files/inline/images/purgetask_1.jpg)   请参阅有关清除任务的文档 [http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=EGMG\_purge#EGMG\_purge_basic](http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=EGMG_purge#EGMG_purge_basic) ### 复杂的消息正文类(对象值属性) 当 Ensemble 清除某条消息正文时,不一定删除该消息正文的对象值属性。 具体来说,只有当其他对象是序列对象或子对象(由关系定义)时,才会删除这些对象。 对于其他对象,必须通过在消息正文类中定义删除触发器或实现 **%OnDelete()** 方法来适当地处理删除。 OnDelete 实现的示例代码 Class Sample.Address Extends %Persistent{ /// The street address. Property Street As %String(MAXLEN = 80); /// The city name. Property City As %String(MAXLEN = 80); /// The 2-letter state abbreviation. Property State As %String(MAXLEN = 2); /// The 5-digit U.S. Zone Improvement Plan (ZIP) code. Property Zip As %String(MAXLEN = 5); } Class Sample.Person Extends %Persistent{ /// Person's name. Property Name As %String [ Required ]; /// Person's Social Security number. This is validated using pattern match. Property SSN As %String(PATTERN = "3N1""-""2N1""-""4N") [ Required ]; /// Person's Date of Birth. Property DOB As %Date; /// Person's home address. Property Home As Address; /// Person's office address. Property Office As Address; ///Callback for object deletion ClassMethod %OnDelete(oid As %ObjectIdentity) As %Status [ Private ]{ // Delete the property object references. Set tSC = $$$OK, tThis = ##class(Sample.Person).%Open(oid) If $ISOBJECT(tThis.Home) Set tSC = ##class(Sample.Address).%DeleteId(tThis.Home.%Id()) If $ISOBJECT(tThis.Office) Set tSC = ##class(Sample.Address).%DeleteId(tThis.Office.%Id()) Quit tSC } ///Callback/Trigger for SQL delete Trigger OnDelete [ Event = DELETE ]{ // Delete the property object references. {%%ID} holds the id of the record being deleted. Set tID={%%ID} Set tThis = ##class(Sample.Person).%OpenId(tID) If $ISOBJECT(tThis.Home) Do ##class(Sample.Address).%DeleteId(tThis.Home.%Id()) If $ISOBJECT(tThis.Office) Do ##class(Sample.Address).%DeleteId(tThis.Office.%Id()) Quit } } ### 已创建但从未发送到其他主机的消息对象 当一条消息被发送/转发到其他主机时,Ensemble 会创建一个新的消息标头,并关联相应的消息正文。 如果在业务服务/流程中创建的消息正文/对象实例已保存到磁盘/数据库,但从未在生产过程中发送到其他主机,它将没有关联的标头,并保留为孤立消息正文。 最佳实践是不创建消息正文,除非它将被转发,或者不对该对象实例调用 %Save()(在将消息放入目标配置队列之前,SendRequestSync/SendRequestAsync API 将保存该对象实例)。 这样,除非将消息正文对象发送到其他主机,否则它将不会持久化。 此问题的最常见原因是开发人员: 克隆了消息正文,且从未转发克隆的消息正文 在上下文变量 (BPL) 中创建了消息正文对象,且从未转发。 ## 孤立消息的影响 孤立消息不会被清除任务清除。 这些消息将占用磁盘空间,并且随着它们数量的增长,磁盘使用量也会成比例增加。 不仅消息正文数据使用磁盘空间,每条孤立消息正文记录的任何索引/搜索表条目也都占用磁盘空间。 ## 识别孤立消息 可以通过查询消息标头和正文来确定孤立消息是否存在。 每个消息标头都引用相应的消息正文。 消息正文对象 Id 引用存储在标头的 MessageBodyId 属性中,消息正文类名存储在标头的 MessageBodyClassName 属性中。 在 HL7 消息表中查找孤立消息的示例查询: SELECT HL7.Id  FROM EnsLib_HL7.Message HL7    LEFT JOIN Ens.MessageHeader hdr    ON HL7.Id=hdr.MessageBodyId    WHERE hdr.MessageBodyId IS NULL 上面的查询将返回所有没有相应标头的 HL7 消息。 可以将该查询修改为查询任何其他消息类型,只需替换消息正文表名即可。 ## 清除孤立消息 管理门户无法提供清除孤立消息正文的方法。 在这种情况下,必须以编程方式清除消息正文。 在 **ENSDEMO** 数据库中,类 **Demo.Util.CleanupSet** 提供了一个如何执行此操作的示例。 该例程也执行深度清除,同时处理对象属性引用。 还可以参考另一个例程来清除孤立消息,但该例程不执行深度清除,只对删除消息正文有帮助。 我在下面附上可下载源码的 github 链接: 最佳做法是始终: 1. 避免编程错误(如前面所讨论)以防止出现孤立消息 2. 只有需要正文并且知道只能以编程方式清除这些消息正文时,才将清除任务设置成关闭 BodiesToo 设置。 3. 实施关系或针对持久对象属性实现 OnDelete。 我希望本文对您构建生产环境有所帮助。 如果您有任何问题或疑虑,请联系我们。 谢谢。
公告
Nicky Zhu · 一月 8, 2021

InterSystems 系统警报和监视 (SAM) 预览版本已发布

现在,InterSystems **系统警报和监视**(简称 InterSystems _SAM_)第 1 版 (v1.0) 发布了预览版本。    InterSystems SAM v1.0 为基于 InterSystems IRIS 的产品提供现代化的监视解决方案。 其可对集群进行高级别查看,并且能够以单节点方式可视化深入探视指标,同时提供警报通知。 该第 1 个版本提供对一百多个 InterSystems IRIS 内核指标的可视化,并且用户可以根据自己的喜好扩展默认提供的 Grafana 模板。 V1.0 旨在成为简单直观的基准。 请进行尝试并向我们发送反馈,帮助我们使其变得更棒! 从版本 2019.4 开始,SAM 可以显示来自基于 InterSystems 的实例中的信息 SAM 仅以容器格式提供。 您将需要 SAM 管理器容器,以及一小组额外的开源_组件_(Prometheus 和 Grafana),它们由组合文件自动添加。 可从以下位置获取 SAM 组件和 SAM 管理器社区版 * [WRC 预览页面](https://wrc.intersystems.com/wrc/coDistPreview.csp):分别为“SAM 组件”和“SAM 管理器” * 如果您要在 docker-compose 运行之前下载,可通过外部源[SAM 组件 Github repo](https://github.com/intersystems-community/sam) & [Docker Hub 上的 SAM 管理器](https://hub.docker.com/_/intersystems-system-alerting-and-monitoring)(后一个链接可能在几个小时内不可用,但容器是可获取的)   如果您正在旅行,或偏爱通过语音收听有关什么是 SAM 方面的提问与回答,我们为您准备了以下播客: 可在[此处](https://docs.intersystems.com/sam/csp/docbook/Doc.View.cls?KEY=ASAM)找到 SAM 文档