文章 姚 鑫 · 十月 18, 2022 阅读大约需 3 分钟 第二十章 CSP Session 管理 - 状态管理 第二十章 CSP Session 管理 - 状态管理 状态管理 因为 HTTP 是无状态协议。为 Web 编写的应用程序必须使用特殊技术来管理应用程序上下文或状态。 CSP 提供了许多用于状态管理的机制。这些中的每一个都可能适用于特定情况。 请求之间的跟踪数据 Web 应用程序中状态管理的基本问题是跟踪连续 HTTP 请求之间的信息。有许多可用的技术,包括: 使用隐藏的表单字段或 URL 参数在单个页面上存储数据 将数据存储在客户端的 cookie 中 将数据存储在服务器上的对象中的 %CSP.Session中 在 Caché 数据库中存储数据 在页面中存储数据 要将状态信息存储在页面中,必须放置它以便来自该页面的后续请求包含该信息。 #CSP #Caché 0 0 0 53
文章 王喆 👀 · 十月 18, 2022 阅读大约需 4 分钟 COS的基本语法 ObjectScript是一种面向对象的编程语言,它是InterSystems公司的Caché和Ensemble数据库的核心语言之一。ObjectScript语言的语法类似于MUMPS语言,它支持面向对象编程、过程式编程、函数式编程等多种编程范式。ObjectScript语言主要用于开发Caché和Ensemble数据库应用程序,它可以访问数据库中的数据、调用数据库中的存储过程、触发器和事件,还可以与其他编程语言进行交互。 #Caché #Ensemble #InterSystems IRIS 8 2 0 244
文章 姚 鑫 · 十月 17, 2022 阅读大约需 3 分钟 第十九章 CSP Session 管理 - %CSP.Session 对象 第十九章 CSP Session 管理 - %CSP.Session 对象 对象中的 %CSP.Session 包含有关当前Session的信息以及以编程方式控制会话各个方面的方法。 User Session Data — Data Property 可以使用其 Data 属性将 %CSP.Session 中的应用程序特定信息存储在对象中。数据是一种多维数组属性,可让关联多维数组中的特定信息。该数组的内容会在会话的整个生命周期内自动维护。 可以像使用任何其他 ObjectScript 多维数组一样在对象 Data 属性中使用 %CSP.Session。 例如,如果在 OnPage 方法中执行以下代码: #CSP #Caché 0 0 0 50
文章 姚 鑫 · 十月 16, 2022 阅读大约需 4 分钟 第十八章 CSP Session 管理 - 与 CSP.Session 的Sessions 第十八章 CSP Session 管理 - 与 CSP.Session 的Sessions `` 是一种无状态协议;每个请求都不知道以前的请求。虽然这适用于为用户提供简单静态内容的网站,但它使得开发交互式动态 Web 应用程序变得困难。为了解决这个问题,CSP 提供了所谓的Session 管理。 与 CSP.Session 的Sessions Session 话表示在特定时间段内从特定客户端到特定应用程序的一系列请求。 CSP 自动提供会话跟踪;无需执行任何特殊操作即可启用它。 CSP 应用程序可以通过对象中的 %CSP.Session 查询和修改其会话的各个方面。 CSP 服务器通过 ObjectScript %session 变量使该对象可用。 #CSP #Caché 1 0 0 78
文章 姚 鑫 · 十月 15, 2022 阅读大约需 2 分钟 第十七章 CSP 中的 HTTP 请求 - %CSP.Response 对象和 OnPreHTTP 方法 第十七章 CSP 中的 HTTP 请求 - %CSP.Response 对象和 OnPreHTTP 方法 %CSP.Response 对象和 OnPreHTTP 方法 可以使用对象中的 %CSP.Response 控制将哪些响应标头发送回 HTTP 客户端。 CSP 服务器自动创建此类的一个实例,并将对它的引用放在变量 %response 中。 由于 %response 对象控制 HTTP 标头,因此通常在类中的 %CSP.Page 的 OnPreHTTP 方法中设置其属性。例如,要重定向传入的 HTTP 请求,请定义以下 OnPreHTTP 方法: #CSP #Caché 1 0 0 51
文章 姚 鑫 · 十月 14, 2022 阅读大约需 3 分钟 第十六章 CSP 中的 HTTP 请求 - %CSP.Request 对象 第十六章 CSP 中的 HTTP 请求 - %CSP.Request 对象 %CSP.Request 对象 当 CSP 服务器响应 HTTP 请求时,它将有关传入请求的信息打包到对象中的 %CSP.Request 实例中。可以使用变量 %request 来引用此对象。 URL 属性 要查找传入 HTTP 请求的 URL(不包括查询字符串),对象中使用 %CSP.Request 的 URL 属性: Write "URL: ", %request.URL 数据属性和 URL 参数 URL 可能包含参数列表(也称为 URL 查询)对象中的 %CSP.Request通过其 Data 属性使这些可用。 例如,假设传入的 URL 包含: #CSP #Caché 1 0 0 75
文章 姚 鑫 · 十月 13, 2022 阅读大约需 2 分钟 第十五章 CSP 中的 HTTP 请求 - 处理 CSP 错误 第十五章 CSP 中的 HTTP 请求 - 处理 CSP 错误 处理 CSP 错误 %CSP.Error是默认的 CSP 错误页面。将其用作创建的任何错误页面的超类。可以使用 %CSP.Error中提供的功能从错误中提取信息。 在授予许可证之前处理 CSP 错误 如果已经有一个现有会话并且用户尝试转到一个未找到的页面,CSP 将显示标准错误页面,因为该会话已经有一个许可证。 如果 CSP 应用程序还没有许可证,并且发生以下任何错误,则 CSP 默认显示标准 Web HTTP/1.1 404 Page Not Found 错误消息。可以通过在错误页面(通常是 %CSP.Error的子类)上为应用程序设置以下参数来更改在授予许可之前遇到错误时显示的页面。 LICENSEERRORPAGE 如果生成以下错误,CSP 会查看 LICENSEERRORPAGE 参数的值: #CSP #Caché 1 0 0 109
文章 姚 鑫 · 十月 12, 2022 阅读大约需 3 分钟 第十四章 CSP 中的 HTTP 请求 - CSP.Page 类 第十四章 CSP 中的 HTTP 请求 - CSP.Page 类 在 CSP 服务器上,所有 HTTP 请求都通过调用由类中的 %CSP.Page 定义的方法来处理。类中的 %CSP.Page 从不直接处理请求本身;它只是定义了处理 HTTP 请求所需的接口。实际的事件处理的 %CSP.Page 的子类完成(手动创建或作为处理 CSP 源文件的结果)。 %CSP.Page 的子类永远不会被实例化;也就是说,不会在对象中创建 %CSP.Page。 %CSP.Page 定义的方法都是类方法,不需要对象即可调用。正如我们将看到的,这些方法所需的任何状态信息都由 CSP 服务器管理的其他对象(例如%CSP.Request 和对象中的 %CSP.Session)提供。 #CSP #Caché 2 0 0 74
文章 姚 鑫 · 十月 11, 2022 阅读大约需 3 分钟 第十三章 CSP 中的 HTTP 请求 - CSP 服务器 URL 和类名称解析 第十三章 CSP 中的 HTTP 请求 - CSP 服务器事件流 当 CSP 服务器收到来自 CSP 网关的请求时,它会确定该请求是针对静态页面还是针对 CSP 类的。如果是静态页面,它会立即将页面发回。如果是针对 CSP 类,它会执行以下操作: 确定此请求属于哪个会话。如果没有,它会启动一个新会话。 确保在正确的 Caché 命名空间中处理请求。 确保对象中正确的 %CSP.Session可用,并根据 HTTP 请求中包含的信息在对象中创建 %CSP.Request 的实例。如果需要任何解密,它也会这样做。 构造 %CSP.Response 对象以允许应用程序修改响应标头。 确定应由哪个类处理请求并调用其 Page 方法(该方法又调用 OnPage 回调方法)。 CSP 服务器 URL 和类名称解析 #CSP #Caché 0 0 0 65
文章 lizw lizw · 九月 28, 2022 阅读大约需 12 分钟 关于%Dictionary.CompiledClass类在实际业务中的一些应用 简单分享下在医院实际业务过程中%Dictionary.CompiledClass的一些应用。一,Query查询出来的数据直接存表。 我们经常会遇到一些突如其来的检查,如:飞行检查,审计检查等等,往往一下子要查询几年的各种数据,每种数据涉及字段还非常多,数据之间还要求对上,查询耗时长,数据对比难度大,此时,我们需要把查询出来的数据直接存到临时表,数据核对和修改直接在临时表中完成,核对好的数据直接在sqldbx或者水滴等查询工具中整表导出,效率会高一些。 具体实现:按照数据要求,把表建好,Query输出字段和表字段顺序一致,按日期每天调用Query查询和插入,记录异常数据,后续单独处理。 优点:效率明显提高,数据核对和修改、导出很方便,避免了数据量大,多次查询耗时长问题。 缺点:数据量大会占用存储,记得删。// W ##CLASS(lizw.CloseCycleData).insertDayByDay("2022-01-01","2022-06-30")ClassMethod insertDayByDay(sd, ed){ k ^tmplzw("insertFromQyeryTestpara",$j) #Caché 23 1 0 322
文章 聆严 周 · 九月 27, 2022 阅读大约需 6 分钟 Cache / IRIS 操作数据的3种基本方式 背景 Cache起源于没有SQL的1970时代,当时各种高级计算机语言才刚刚诞生,其中M语言较为独特,它的诞生就是为了在没有操作系统的机器上,进行数据存储。别忘了,Unix在1971年才发布。M语言别具一格地采用了Global多维数组,统一了复杂的内存操作和文件读写,使之成为了1970年代数据库的事实标准,特别是在医疗行业。而后Intersystems在1978年接过M语言的旗帜,在M语言上添加了SQL兼容层和ObjectScript层,前者顺应了时代的潮流,后者不仅为M语言提供了强大的OOP和各种便捷的语法糖,还让数据能以对象形式进行访问,让数据和代码更加紧密。 本文将简述多维数组、SQL、对象这3种数据操作方式,提供实例代码片段,并在运行效率、开发效率、管理效率、实用性方面讨论它们的优缺点。 为方便讨论,以学校与学生为例。对每种操作方法,都列举3种典型的用例,分别为,访问某特定ID的学生(即数据库ID索引)、访问某特定studentID的学生(即遍历唯一索引)、和访问某学校的所有人(即遍历非唯一索引)。 现假设学生表/对象定义如下: #ObjectScript #SQL #Caché #InterSystems IRIS 16 3 1 719
文章 姚 鑫 · 十月 10, 2022 阅读大约需 3 分钟 第十二章 CSP 中的 HTTP 请求 - CSP 运行时环境 第十二章 CSP 中的 HTTP 请求 - CSP 运行时环境 CSP 的主要任务是提供动态内容以响应传入的 HTTP(超文本传输协议)请求。本节介绍 CSP 如何处理 HTTP 请求的基础知识。 HTTP 是一种简单的协议,其中客户端向服务器发出请求。 HTTP 是一种无状态协议;客户端和服务器之间的连接只持续为服务请求所需的时间。每个 HTTP 请求都包含一个请求标头,该标头指定请求类型(例如 GET 或 POST)、一个 URL 和一个版本号。请求还可能包含附加信息。 CSP 自动确定它应该处理哪些 HTTP 请求,将它们分派到运行在 Caché 服务器上的适当类,并将请求信息打包成易于使用的对象(例如对象中的 %CSP.Request)。 #CSP #Caché 1 0 0 73
文章 Nicky Zhu · 十月 10, 2022 阅读大约需 4 分钟 IRIS镜像状态监控 在生产环境中IRIS通常以故障转移集群的形态被部署,而集群中各故障转移成员的镜像状态将决定该集群在故障发生时是否能够顺利切换保障业务不中断。因此,成员状态通常也是运维团队需要巡检或监控的目标。 尽管IRIS内部API提供了丰富的集群配置、成员状态监控等一系列接口,但除Portal上的镜像监视器外,并没有特定的接口便于从外部系统访问(如进行企业级监控集成时),也没有整合好的监控接口可用与获取镜像的健康状态。但在IRIS上开发一个REST接口暴露镜像状态数据并不困难,如下所示: #Code Snippet #REST API #开发运维 #镜像 #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health #文档 2 0 0 173
文章 Liu Tangh · 十月 9, 2022 阅读大约需 3 分钟 在Cache系统中使用负载均衡服务的探讨 Cache软件自带数据服务和应用服务。在实际使用中会将Cache数据服务和应用服务分别安装在不同的服务器上面,作为数据库服务器和应用服务器。数据库服务器和应用服务器通过ECP(企业缓存协议)进行数据交换。在应用服务器部署上web服务,让数据交换和应用处理分开,实现瘦数据和胖应用的系统模式。 #系统管理 #Caché 9 3 1 150
文章 姚 鑫 · 十月 9, 2022 阅读大约需 3 分钟 第十一章 CSP 架构 - Web Application Settings 第十一章 CSP 架构 - Web Application Settings Special Case: DeepSee 对于使用 DeepSee 的 Web 应用程序,它需要访问 %DeepSee 包中的所有类。要使特定应用程序能够使用 DeepSee,请在 %SYS 命名空间中使用以下命令: Do EnableDeepSee^%SYS.cspServer("/csp/webapp/") 其中 web-app-name 是带有斜杠的 Web 应用程序名称。前面的命令等价于以下命令: #CSS #Caché 0 0 0 74
文章 姚 鑫 · 十月 8, 2022 阅读大约需 2 分钟 第十章 CSP 架构 - Category 第十章 CSP 架构 - Category Category: AllowPrefix 如果应用程序依赖于调用以同一组字符开头的多个类或包,请使用AllowPrefix选项。 重要提示:如果应用程序依赖于调用上面列出的以外的任何类,则使用它可能是不安全的。建议确定是否需要调用此类,并为部署执行风险评估,以便了解使类可用的含义。 要使给定的Web应用程序能够调用以相同字符集开头的类或程序包,请在%sys命名空间中使用以下命令: Set ^SYS("Security", "CSP", "AllowPrefix", "web-app-name", "prefix") = value 其中 #CSP #Caché 1 0 0 78
文章 姚 鑫 · 九月 25, 2022 阅读大约需 78 分钟 IRIS与Caché的23种设计模式 IRIS的23种设计模式 第一章 Caché 设计模式 简单工厂模式 定义 简单工厂模式属于创建型模式,又可称为静态工厂模式,这是由一个工厂对象决定创建出哪一种产品类的实例 使用场景 工厂类负责创建的对象比较少 客户只需知道传入工厂类的参数,而无须关心创建对象的逻辑 优点 使用户根据参数获得对一个的类实例,避免了直接实例化类型,降低了耦合性 能把客户类和具体子类的实现解耦,客户类不再需要知道有哪些子类以及应当实例化哪个子类:客户类往往有多个,如果不使用简单工厂,那么所有的客户类都要知道所有子类的细节。而且一旦子类发生改变,所有的客户类都要进行修改 缺点 可实例化的类型在编译期间已经被确定。 如果增加新类型,则需要修改工厂,这违背了开放封闭原则 子类多过不适合使用 示例 用Caché 实现一个计算器控制台程序,要求输入两个数和运算符号。 #Caché #InterSystems IRIS #InterSystems IRIS for Health 17 2 1 303
文章 姚 鑫 · 十月 7, 2022 阅读大约需 4 分钟 第九章 CSP 架构 - CSP 应用程序设置 第九章 CSP 架构 - CSP 应用程序设置 CSP 应用程序设置 当 CSP 服务器接收到传入的 HTTP 请求时,它使用本地 CSP 应用程序设置来确定如何处理请求。本节介绍 如何使用 CSP 应用程序设置处理 CSP 应用程序请求。 启用对 %CSP 页面的应用程序访问 以下规则管理对页面和类的访问: 默认情况下,允许用户应用程序访问以下页面: - 允许 /csp/sys/ 应用程序及其所有子应用程序的页面 - 允许使用 isc/studio/templates/ 和 /isc/studio/usertemplates/ 应用程序的页面 #CSP #Caché 1 0 0 76
文章 bai hongtao · 十月 7, 2022 阅读大约需 4 分钟 第三方HA软件结合MIRROR使用方法探讨 在Cache 2018之前的版本中,数据库的高可用是通过第三方HA软件保障的,Cache数据库在2018以后及IRIS支持MIRROR技术,通过MIRROR可以保障数据库的高可用及数据的冗余,那么在新版本中,第三方HA软件与MIRROR是否可以同时使用以实现更高的数据库可用性?使用起来有哪些需要注意的?本文重点介绍探讨上述两个问题。 #故障转移 #数据库 #现场测试 #镜像 #高可用性 #Caché #InterSystems IRIS #其他 12 0 0 354
文章 姚 鑫 · 十月 6, 2022 阅读大约需 4 分钟 第八章 CSP 架构 - CSP 网关配置 第八章 CSP 架构 - CSP 网关配置 CSP 网关配置 CSP 网关是安装在 Web 服务器上并由其加载的 DLL 或共享库。 CSP 网关检测对扩展名为 .csp 或 .cls 的文件的任何请求,并将它们发送到定义的 Caché 服务器进行处理。 CSP 网关管理器 可以使用 CSP 网关管理器(CSP Web 网关管理页面)或直接编辑其配置文件 csp.ini 来配置 CSP 网关。 CSP 网关管理器是一个小型 Web 应用程序,可以在浏览器中使用它。您可以通过导航到系统管理 > 配置 > CSP 网关管理来访问 CSP 网关管理器。默认情况下,它会访问专用 Web 服务器的 CSP 网关管理器。 #CSP #Caché 2 0 0 59
问题 Liang Jianhui · 九月 30, 2022 时间格式转换 访问了一个API,得到的返回结果里面有个时间字段,现在返回的格式是这样的 “2022-09-30T07:24:57.899Z”, 怎么样能转换成 YYYY/MM/DD hh:MM:ss的格式 #Caché #HealthShare 0 1 0 140
文章 姚 鑫 · 十月 5, 2022 阅读大约需 3 分钟 第七章 CSP 架构 - URL 的 Web 服务器配置 第七章 CSP 架构 - URL 的 Web 服务器配置 URL 的 Web 服务器配置 提供了一个默认的 /csp 虚拟目录来运行 CSP 应用程序。如果正在运行多个 Caché 实例,它还提供了一个默认虚拟目录 /cacheinstance/csp 以供使用。如果正在运行多个 Caché 实例并使用虚拟目录 /csp访问 CSP 应用程序,而之前没有 /cacheinstance,它将访问最后安装的 Caché 版本。如果计划允许使用以 http://localhost/csp 或 http//localhost/cacheinstance/csp 开头的应用程序路径调用所有 CSP 应用程序,则无需在 Web 服务器中进行任何更改配置。 #CSP #Caché 2 0 0 92
文章 姚 鑫 · 十月 4, 2022 阅读大约需 3 分钟 第六章 CSP 架构 - 静态文件 第六章 CSP 架构 - 静态文件 静态文件 数据库服务器为所有 CSP 提供服务。 数据库服务器还可以通过 CSP 网关为 Web 应用程序提供任何类型的静态文件。在标准 Web 应用程序中,Web 服务器通常提供静态内容。要在 Caché 上运行 Zen 应用程序,必须配置 Web 服务器以允许服务器通过 CSP 网关提供所有静态文件。 注意:要运行基于 Zen 的应用程序,请启用“服务文件”选项并配置 Web 服务器以允许 Caché 服务器提供静态文件。然后 Zen 框架将能够提供依赖图像和 JavaScript 帮助文档。 #Caché 1 0 0 80
文章 姚 鑫 · 十月 3, 2022 阅读大约需 2 分钟 第五章 CSP 架构 - 组件,信息流 第五章 CSP 架构 - 组件,信息流 CSP 组件:Web 服务器、CSP 网关、CSP 服务器 CSP 使用三个软件组件:Web 服务器、CSP 网关和 CSP 服务器(在 Caché 服务器上运行): CSP 组件 Web服务器和CSP服务器可以由一台或多台计算机实现。在开发过程中,所有三个组件(Web 服务器、CSP 网关和 CSP 服务器)可能都位于一台 PC 上。在大规模部署中,可能有多个 Web 服务器和 CSP 服务器采用两层或三层配置。 #CSP #Caché 1 0 0 99
文章 姚 鑫 · 十月 2, 2022 阅读大约需 2 分钟 第四章 Caché 服务器页面简介 - 通过 html 创建 csp 页面 第四章 Caché 服务器页面简介 - 通过 html 创建 csp 页面 创建基于 HTML 标记的 CSP 页面 要使用 HTML 文件创建 Hello.World 页面,请执行以下操作: #CSP #Caché 1 0 0 119
文章 姚 鑫 · 十月 1, 2022 阅读大约需 2 分钟 第三章 Caché 服务器页面简介 - 通过 cls 创建 csp 页面 第三章 Caché 服务器页面简介 - 通过 cls 创建 csp 页面 创建第一个 CSP 页面 本节介绍如何以两种不同的方式创建 Hello, World CSP 页面: 创建基于类的 CSP 页面 通过创建 %CSP.Page 的子类并覆盖其 OnPage 方法来创建 CSP 页面。通过此方法写入主设备的任何输出都会自动发送到 Web 浏览器并显示为网页。 #CSP #Caché 1 0 0 84
文章 姚 鑫 · 九月 30, 2022 阅读大约需 2 分钟 第二章 Caché 服务器页面简介 - 你应该知道 第二章 Caché 服务器页面简介 - 你应该知道 你应该知道什么 要高效使用 CSP,应该熟悉以下内容: Caché objects and ObjectScript HTML JavaScript SQL CSP Samples Caché 附带一组示例CSP 页面。要查看这些: #CSP #Caché 2 0 0 107
文章 姚 鑫 · 九月 29, 2022 阅读大约需 3 分钟 第一章 Caché 服务器页面简介 - 什么是CSP 第一章 Caché 服务器页面简介 - 什么是CSP Caché Server Pages (CSP) 既是用于构建交互式 CSP 应用程序的架构又是工具集。 CSP 技术允许构建和部署高性能、高度可扩展的 Web 应用程序。 CSP 允许动态生成网页,通常使用来自 Caché 数据库的数据。 “动态Dynamically”意味着每次从最近更改的数据源请求同一页面时,它可能会提供不同的内容。 CSP 用途广泛。它可以 #CSP #Caché 2 0 0 236
文章 姚 鑫 · 九月 27, 2022 阅读大约需 2 分钟 第四十五章 配置第三方软件以与 InterSystems 产品结合使用 第四十五章 配置第三方软件以与 InterSystems 产品结合使用 产品通常在与非 工具一起运行的环境中运行,我们的产品与此类工具之间的交互可能会产生有害影响。 关于最佳、可靠部署配置的指导假定我们的产品可以在不受第三方工具干扰的情况下进行部署。例如, 发现用于安全、系统监控或病毒扫描的软件可能会影响我们产品的安装、性能和功能。对于直接与属于 产品的一部分或被 产品使用的文件进行交互的工具(例如病毒扫描程序)尤其如此。 了解客户面临的业务、合规性和其他要求会影响有关在给定环境中运行哪些软件以及如何配置此类软件的决策。一般来说, 建议我们产品的服务器端安装通过物理安全和隔离来保护。这种保护应该减少对其他工具的需求,或者至少减少它们运行的频率。 病毒扫描仪观察: 为了交付经过病毒检查的软件, 产品在经过消毒的环境中交付给我们的客户,并通过提供校验和进行验证。 性能影响。 [对策] 出于扫描目的,排除以下文件和目录: #Caché 3 0 0 77
文章 姚 鑫 · 四月 8, 2021 阅读大约需 8 分钟 第二十章 用户、角色和权限 第二十章 用户、角色和权限 InterSystems IRIS®具有系统级安全性,以及一组与sql相关的额外安全性特性。 在数据库级保护之外,InterSystems SQL安全性提供了额外级别的安全功能。 SQL和系统级安全性之间的一些关键区别是: - SQL保护比系统级保护更细粒度。可以为表、视图和存储过程定义特权。 - SQL权限既可以授予用户,也可以授予角色。 系统级权限只分配给角色。 - 持有SQL特权会隐式授予执行SQL操作所需的任何相关系统特权。 (相反,系统级特权并不意味着表级特权。) InterSystems SQL在InterSystems IRIS数据平台上对ODBC、JDBC、Dynamic SQL和SQL Shell接口进行权限检查。 嵌入式SQL语句不执行特权检查; 假定使用嵌入式SQL的应用程序在使用嵌入式SQL语句之前会检查特权。 SQL权限和系统权限 要通过特定于SQL的机制操作表或其他SQL实体,用户必须具有适当的SQL权限。 系统级权限不足。 用户可以直接被授予SQL权限,也可以属于具有SQL权限的角色。 #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 1 1 0 308