搜索​​​​

清除过滤器
文章
Nicky Zhu · 九月 7, 2021

IRIS 2021 技术文档 First Look 12--技术概要:.NET Object Persistence with XEP

本文档介绍了 XEP API,它在 InterSystems IRIS®数据平台上极其快速的 .NET 对象存储和检索支持。它向您提供了一个关于 .NET 对象持久化的 XEP 方法的进阶概述,并引导您通过一个简单的场景来演示 API 的主要功能。 这些活动被设计成只使用默认设置和功能,这样您就可以熟悉 XEP 的基本原理,而不必处理超出本概述范围的细节。有关 XEP 的完整文档,请参见 Persisting .NET Objects with InterSystems XEP (《使用 InterSystems XEP 持久化 .NET 对象》)。 要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。 快速的对象存储和检索 面向对象编程是 .NET 框架的核心,因此 .NET 应用程序将数据建模为对象是很自然的。然而,当应用程序需要将数据存储在数据库中时,这可能会导致问题。如果您使用 ADO.NET 来存储和检索对象,您就面临着将对象数据转换为一组关系表、然后再将查询结果集转换为对象的问题。这个问题的通常解决方案是使用对象-关系映射(ORM)框架,如实体框架(Entity Framework) 来自动化这个过程。InterSystems IRIS 确实提供了实体框架(Entity Framework)接口,InterSystems 推荐它用于大型、复杂的对象层次结构。另一方面,对于执行实时数据采集等任务的应用程序,主要问题是速度而不是数据复杂性。虽然实体框架(Entity Framework)绝对不慢(如果适当优化的话),但对于需要极快地存储和检索简单或中等复杂数据的任务来说,XEP 是一个更好的选择。在大多数情况下,它比实体框架(Entity Framework)或 ADO.NET 快得多。 XEP 是如何工作的? XEP 是一个轻量级的 .NET API,它将 .NET 对象数据作为持久化事件(persistent event)来投射。持久化事件(persistent event)是 InterSystems IRIS 类的一个实例(通常是 %Persistent 的子类),包含 .NET 对象中数据字段的副本。与任何此类实例一样,可以通过对象访问、SQL 查询或直接 global 访问来检索它。 在创建和存储持久化事件(persistent event)之前,XEP 必须分析相应的 .NET 类,并将模式(schema)导入数据库。模式(schema)定义了用于存储 .NET 对象的持久化事件类的结构。如果持久化事件类不存在相应的 ObjectScript 模式,则导入模式(schema)将自动为其创建相应的 ObjectScript 模式。来自分析的信息可能是 XEP 导入简单模式所需要的全部信息。对于更复杂的结构,您可以提供额外的信息,允许 XEP 生成索引并覆盖导入字段的默认规则。 在为类创建模式(schema)之后,您可以使用各种 XEP 方法来存储、更新或删除事件、运行 SQL 查询,并通过查询结果集进行迭代。 试一试!XEP 的实际操作 现在是您自己尝试 XEP 的时候了。这个 XepSimple 演示是一个非常小的程序,但它提供了大多数关键 XEP 功能的示例,并概述了如何使用 XEP API。(想试试 InterSystems IRIS .NET 开发和互操作性功能的在线视频演示吗?请看.NET QuickStart(.NET 快速入门)!) 用前须知 要使用该程序,您需要一个安装了 .NET 框架和 Visual Studio 的 Windows 系统,以及一个运行中的 InterSystems IRIS 实例来连接。您对 InterSystems IRIS 的选择包括多种类型的已授权的和免费的评估实例;实例不需要由您正在工作的系统托管(尽管它们必须相互具有网络访问权限)。关于如何部署每种类型的实例的信息(如果您还没有可使用的实例),请参见 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的 Deploying InterSystems IRIS(部署 InterSystems IRIS)。使用同一文档中的 InterSystems IRIS Connection Information(InterSystems IRIS 连接信息)和 .Net IDE 中的信息将 Visual Studio 连接到您的 InterSystems IRIS 实例。 配置 Visual Studio 项目 首先,打开 Visual Studio 并创建一个新的控制台(console)应用程序项目,选择 Visual C# 和 Console App (.NET Framework)(控制台应用程序(.NET 框架)) 选项。对于 Name(名称) 字段,输入 netxep。(想试试 InterSystems IRIS .NET 开发和互操作性功能的在线视频演示?请看.NET QuickStart(.NET 快速入门)!) 添加程序集引用 XEP API 被打包到 InterSystems.Data.XEP.dll 库中,该库必须安装在您的本地系统上。您可以通过克隆 repo https://github.com/intersystems/quickstarts-dotnet/tree/master/XEP 或从该 repo 下载文件来获取它。如果 InterSystems IRIS 安装在您的本地系统或您可以访问的另一个系统上,则该程序集已经安装在子目录 install-dir\dotnet\bin\v4.5 中,其中 install-dir 是实例的安装目录。 要将 InterSystems.Data.XEP.dll 的程序集引用添加到项目: 从 Visual Studio 主菜单中,选择 Project(项目) > Add Reference(添加引用)... 在出现的窗口中,点击 Browse(浏览).... 浏览到 InterSystems.Data.XEP.dll 文件的位置。 选择文件并点击 Add(添加)。 点击 OK(确定)。 在 Visual Studio Solution Explorer 中,InterSystems.Data.XEP.dll 程序集现在应该列在 References(引用)下。 添加示例类 在创建程序源文件之前,您将添加一个类,主程序会访问该类以生成用于存储的示例对象。在 Visual Studio 中,使用 Project(项目) > Add Class(添加类) 添加一个 C# 类文件到 netxep 项目。删除类文件的默认内容,并将以下代码复制并粘贴到文件中。 using System; namespace xep.samples { public class SingleStringSample { public string name; public SingleStringSample() { } internal SingleStringSample(string str) { name = str;} public static SingleStringSample[] generateSampleData(int objectCount) { SingleStringSample[] data = new SingleStringSample[objectCount]; for (int i = 0; i < objectCount; i++) { data[i] = new SingleStringSample("single string test"); } return data; } } } 因为这个类非常简单,所以 XEP 不需要任何注释就可以从中生成有效的模式。对于真实应用程序中更复杂的类,您可以使用各种选项来优化导入。 创建 XEP 演示程序 现在您可以创建 XEPSimple 演示程序了。在 Visual Studio 中,找到您在创建项目时创建的默认 program.cs 文件。删除该文件的默认内容,并粘贴下面的代码,用connection information for your InterSystems IRIS instance(您的 InterSystems IRIS 实例的连接信息)替换主机、端口、irisnamespace、用户名和密码变量的值。您可以指定所示的 USERnamespace,也可以选择在实例上创建的另一个命名空间。 using System; using InterSystems.XEP; using xep.samples; namespace XepSimpleNamespace { public class XepSimple { public static void Main(string[] args) { // Generate 12 SingleStringSample objects for use as test data SingleStringSample[] sampleArray = SingleStringSample.generateSampleData(12); // EventPersister EventPersister xepPersister = PersisterFactory.CreatePersister(); String host = "127.0.0.1"; // InterSystems IRIS host int port = 51774; // InterSystems IRIS Superserver port String irisnamespace = "USER"; // InterSystems IRIS namespace String username = "_system"; // Credentials for InterSystems IRIS String password = "SYS"; //Credentials for InterSystems IRIS xepPersister.Connect(host,port,irisnamespace,username,password); // connect to localhost xepPersister.DeleteExtent("xep.samples.SingleStringSample"); // remove old test data xepPersister.ImportSchema("xep.samples.SingleStringSample"); // import flat schema // Event Event xepEvent = xepPersister.GetEvent("xep.samples.SingleStringSample"); long[] itemIdList = xepEvent.Store(sampleArray); int itemCount = 0; for (int i = 0; i < itemIdList.Length; i++) { if (itemIdList[i] > 0) itemCount++; } Console.WriteLine("Stored " + itemCount + " of " + sampleArray.Length + " events"); // EventQuery EventQuery<SingleStringSample> xepQuery = null; String sqlQuery = "SELECT * FROM xep_samples.SingleStringSample WHERE %ID BETWEEN ? AND ?"; xepQuery = xepEvent.CreateQuery<SingleStringSample>(sqlQuery); xepQuery.AddParameter(3); // assign value 3 to first SQL parameter xepQuery.AddParameter(12); // assign value 12 to second SQL parameter xepQuery.Execute(); // get resultset for IDs between 3 and 12 xepQuery.Close(); xepEvent.Close(); xepPersister.Close(); } // end main() } // end class xepSimple } 演示程序分为三个部分,每个部分演示了 XEP 三个主要类——EventPersister、 Event 和 EventQuery 中的一个。运行时,XepSimple 演示程序执行以下任务: 首先,通过调用示例数据类(sample data class) xep.samples.SingleStringSample 这一方法生成一些示例对象。 EventPersister 是 XEP 的主要入口点(main entry point),并提供到数据库的连接。 它创建一个名为 xepPersister 的实例,该实例在数据库中建立到 User 命名空间的 TCP/IP 连接,并删除任何现有的示例数据。然后调用 ImportSchema() 来分析示例类并将模式发送到数据库,从而创建相应的 ObjectScript 模式来保存持久化 SingleStringSample 对象。 Event 封装了(encapsulate) .NET 对象和相应的数据库对象之间的接口。 一旦生成了模式(schema),xepPersister 就可以为示例类创建一个名为 xepEvent 的 Event 对象。Store() 方法将 .NET 对象数组存储为持久化事件。 EventQuery 用于准备和执行 SQL 查询的有限子集。 名为 xepQuery 的 EventQuery<SingleStringSample> 对象是通过将查询字符串传递给 xepEvent 对象的 CreateQuery() 方法创建的。 该字符串定义了一个接受两个参数(? 字符)的 SQL 查询。 参数值是通过调用 AddParameter() 定义的,调用 Execute() 来获取查询结果集。 当处理完成后,它通过调用 XEP 对象的 close() 方法进行清理。 运行 XEPSimple 程序 现在您可以构建和运行 XEPSimple 演示程序了。按 Ctrl + F5 运行程序,以便当程序结束时命令提示符保持打开状态。 下一步 XepSimple 演示的目的是让您体验 XEP,而又不陷入细节困境,它不是用于实际生产代码的模型——它甚至没有进行异常检查。最重要的简化是在示例数据中。您从一个不需要注释或其他机制来帮助模式(schema)生成和优化的类中持久化了一些很小的 .NET 对象。虽然在实际应用程序中通常需要注释和其他选项,但这些选项非常简单易用。API 也同样简单易用。 有关所有 XEP 功能的全面描述,请参见 Persisting .NET Objects with InterSystems XEP(《使用 InterSystems XEP 持久化 .NET 对象》)。 了解有关 .NET 支持的更多信息 InterSystems IRIS 提供了 .NET API,通过 SQL 表、对象和多维存储轻松访问数据库。有关每种类型的访问的详细信息,请参见以下书籍: Using the Native API for .NET(《使用 Native API for .NET》),了解从 .NET 应用程序访问 InterSystems IRIS globals。 Using ADO.NET Managed Provider Classes(《使用 ADO.NET Managed Provider Classes》),了解SQL 表访问。允许您的 .NET 项目使用完全兼容的通用 ADO.NET Managed Provider 版本访问 InterSystems IRIS 数据库。 Using the InterSystems ODBC Driver(《使用 InterSystems ODBC Driver》),了解 SQL 表访问。InterSystems ODBC 驱动程序允许 InterSystems IRIS 建立到外部应用程序的 ODBC 连接,并通过 SQL 提供对外部数据源的访问。 Persisting .NET Objects with InterSystems XEP(《使用 InterSystems XEP 持久化 .NET 对象》),了解对象访问。XEP 对事务处理应用程序进行了优化,这类程序使用复杂度从简单到中等的对象层次结构,且要求极高的对象数据持久化和检索速度。 Using the Entity Framework Provider(《使用 Entity Framework Provider》),了解对象-关系映射。提供有关使用实体框架(Entity Framework)技术访问 InterSystems IRIS 数据库的信息。 这是我们的Firstlook 文档? 对
问题
Michael Lei · 三月 1, 2022

如何重置 Web Gateway 用户名和密码

Hi Community, C:\InterSystems\IRISHealth\CSP\bin.csp.cni 有用户名, 但密码被加密了,如何解密或者重置? 谢谢! 1. Open <IRIS>\CSP\bin\CSP.ini 2. Edit Username/Password in [LOCAL] section. 3. Using Management Portal or ^SECURITY routine set the same user as (2) if they do not match. 4. Restart InterSystems IRIS.
文章
Tete Zhang · 二月 20, 2023

OpenAPI-Suite(从 OpenAPI 3.0 生成 ObjectScript 代码的工具集):介绍 InterSystems 开发人员工具大赛 2023 获奖者

开发者您好! 这里向介绍@Lorenzo Scalese的OpenAPI-Suite (一个用于从OpenAPI 3.0生成 ObjectScript 代码的工具集)。这个工具集在 2023 年 InterSystems 开发工具大赛的21 个参赛作品中获得专家提名第三名。 目前 IRIS 最高支持OpenAPI 2.0 ,但是这个工具支持 OpenAPI 3.0 ! 提供的功能如下。 在服务器端创建类(与 OpenAPI 2.0相同,首先创建使用 API First理念创建的 REST 调度类所需的类。) 创建客户端 HTTP 类 创建客户端Production(业务服务、业务流程、业务操作、Ens.Request、Ens.Response) 一个 Web 界面,允许您指定要从此工具生成哪些功能 从 OpenAPI 1.x、2.x 到 3.0 版的转换工具 关于各个功能的详细介绍,请参考@Lorenzo Scales撰写的文章《 OpenAPI Suite - Part 1 》和《 OpenAPI Suite - Part 2 》。 在本文中,我尝试了 1 个功能。其中,以下的应对方案非常好。 根据OpenAPI 3.0新增的Components对象的内容自动生成类的定义(在指定包下创建一个模型包,在那里创建可以实例化的类) 在POST或PUT的情况下,为了较为轻松地使用实施类(impl.cls)处理HTTP请求中传递的信息,我将Body中接收到的JSON数据设为了1中生成的类的实例, 目前,虽然需要进行一些手动更改,但是仅使用按原样创建的实例在 impl.cls 中叫 %Save() 方法也可以保存成功。 ) IRIS 提供了一种根据 OpenAPI 2.0 规范创建 REST 调度类的方法,但实际使用中它只创建要使用的类和根URL。 仅作为参考,这里是使用 IRIS 支持的 OpenAPI 2.0 创建的内容。 (以下示例使用了根据 OpenAPI2.0 规范创建的 JSON 示例。) 在下面的示例中,/crud 是根 URL,类是在 crud 包下创建的。​​​​​​ 生成的类如下(左:impl.cls,右:spec.cls) 由于调度类(disp.cls)是一个不需要改动的类,所以这里展示了studio的这部分代码。 接下来介绍一下@Lorenzo Scalese的OpenAPI-Suite的成果。 使用它的过程非常简单。 从管理门户或Studio导入IPM (InterSystems Package Manager,以前称为 ZPM)客户端工具后,您只需运行以下命令,工具就可以使用了。 客户端工具导入可以导入到任意命名空间中。 从管理门户导入时,使用以下菜单: 管理门户 -> 系统资源管理器 -> 类 -> 选择要导入的命名空间 -> 单击导入按钮 转到您希望 REST 调度类存在的命名空间,并使用 ZPM 命令安装工具。 zpm "install openapi-suite" 安装过程中的画面显示 USER>zpm “安装 openapi-suite” [USER|sslclient] 重新加载开始 (/usr/irissys/mgr/.modules/USER/sslclient/1.0.4/)[用户|sslclient] 重新加载成功[sslclient] 模块对象已刷新。[USER|sslclient] 验证开始[USER|sslclient] 验证成功[USER|sslclient] 编译开始[用户|sslclient] 编译成功[USER|sslclient] 激活开始[USER|sslclient] 配置开始[用户|sslclient] 配置成功[USER|sslclient] 激活成功[USER|yaml-utils] 重新加载开始 (/usr/irissys/mgr/.modules/USER/yaml-utils/0.1.2/)[USER|yaml-utils] 重新加载成功[yaml-utils] 模块对象已刷新。[USER|yaml-utils] 验证开始[USER|yaml-utils] 验证成功[USER|yaml-utils] 编译开始[USER|yaml-utils] 编译成功[USER|yaml-utils] 激活开始[USER|yaml-utils] 配置开始[USER|yaml-utils] 配置成功[USER|yaml-utils] 激活成功[USER|swagger-validator-cli] 重新加载开始 (/usr/irissys/mgr/.modules/USER/swagger-validator-cli/0.0.1/)[USER|swagger-validator-cli] 重新加载成功[swagger-validator-cli] 模块对象已刷新。[USER | swagger-validator-cli] 验证开始[USER|swagger-validator-cli] 验证成功[USER|swagger-validator-cli] 编译开始[USER|swagger-validator-cli] 编译成功[USER|swagger-validator-cli] 激活 START[USER|swagger-validator-cli] 配置开始[USER|swagger-validator-cli] 配置成功[USER|swagger-validator-cli] 激活成功[USER|swagger-converter-cli] 重新加载开始 (/usr/irissys/mgr/.modules/USER/swagger-converter-cli/0.0.2/)[USER|swagger-converter-cli] 重新加载成功[swagger-converter-cli] 模块对象已刷新。[USER | swagger-converter-cli] 验证开始[USER|swagger-converter-cli] 验证成功[USER|swagger-converter-cli] 编译开始[USER|swagger-converter-cli] 编译成功[USER|swagger-converter-cli] 激活开始[USER|swagger-converter-cli] 配置开始[USER|swagger-converter-cli] 配置成功[USER|swagger-converter-cli] 激活成功[USER|objectscript-openapi-definition] 重新加载开始 (/usr/irissys/mgr/.modules/USER/objectscript-openapi-definition/1.3.1/)[USER|objectscript-openapi-definition] 重新加载成功[objectscript-openapi-definition] 模块对象已刷新。[USER|objectscript-openapi-definition] 验证开始[USER|objectscript-openapi-definition] 验证成功[USER|objectscript-openapi-definition] 编译开始[USER|objectscript-openapi-definition] 编译成功[USER|objectscript-openapi-definition] 激活开始[USER|objectscript-openapi-definition] 配置开始[USER|objectscript-openapi-definition] 配置成功[USER|objectscript-openapi-definition] 激活成功[USER|io-redirect] 重新加载开始 (/usr/irissys/mgr/.modules/USER/io-redirect/1.0.2/)[USER|io-redirect] 重新加载成功[io-redirect] 模块对象已刷新。[USER|io-redirect] 验证开始[USER|io-redirect] 验证成功[USER|io-redirect] 编译开始[USER|io-redirect] 编译成功[USER|io-redirect] 激活开始[USER|io-redirect] 配置开始[USER|io-redirect] 配置成功[USER|io-redirect] 激活成功[USER|openapi-common-lib] 重新加载开始 (/usr/irissys/mgr/.modules/USER/openapi-common-lib/1.0.0/)[用户|openapi-common-lib] 重新加载成功[openapi-common-lib] 模块对象已刷新。[USER|openapi-common-lib] 验证开始[USER|openapi-common-lib] 验证成功[USER|openapi-common-lib] 编译开始[USER|openapi-common-lib] 编译成功[USER|openapi-common-lib] 激活开始[USER|openapi-common-lib] 配置开始[USER|openapi-common-lib] 配置成功[USER|openapi-common-lib] 激活成功[USER|openapi-server-gen] 重新加载开始 (/usr/irissys/mgr/.modules/USER/openapi-server-gen/1.0.0/)[USER|openapi-server-gen] 重新加载成功[openapi-server-gen] 模块对象已刷新。[USER|openapi-server-gen] 验证开始[USER|openapi-server-gen] 验证成功[USER|openapi-server-gen] 开始编译[USER|openapi-server-gen] 编译成功[USER|openapi-server-gen] 激活开始[USER|openapi-server-gen] 配置开始[USER|openapi-server-gen] 配置成功[USER|openapi-server-gen] 激活成功[USER|openapi-client-gen] 重新加载开始 (/usr/irissys/mgr/.modules/USER/openapi-client-gen/2.1.0/)[USER|openapi-client-gen] 重新加载成功[openapi-client-gen] 模块对象已刷新。[USER|openapi-client-gen] 验证开始[USER|openapi-client-gen] 验证成功[USER|openapi-client-gen] 编译开始[USER|openapi-client-gen] 编译成功[USER|openapi-client-gen] 激活开始[USER|openapi-client-gen] 配置开始[USER|openapi-client-gen] 配置成功[USER|openapi-client-gen] 激活成功[USER|openapi-suite] 重新加载开始 (/usr/irissys/mgr/.modules/USER/openapi-suite/1.0.0/)[用户|openapi-suite] 重新加载成功[openapi-suite] 模块对象已刷新。[USER | openapi-suite] 验证开始[USER|openapi-suite] 验证成功[USER|openapi-suite] 编译开始[USER|openapi-suite] 编译成功[USER | openapi-suite] 激活开始[USER|openapi-suite] 配置开始[USER|openapi-suite] 配置成功[USER|openapi-suite] 激活成功用户> 安装后,您可以通过以下 URL 访问该工具的相关信息。 http://localhost:端口号/openapisuite/ui/index.csp 示例)http://localhost:52773/openapisuite/ui/index.csp 在初始阶段,屏幕右下方的“Install On Server”按钮无法按下。似乎可以通过将值设置为以下全局变量来按下按钮。 (请在你安装工具的命名空间中用ZPM命令设置) Set ^openapisuite .config( "web" , "enable-install-onserver" ) = 1 准备工作完成后,进行以下设置。 对于“Application package name”,选择类定义的包名称(示例中的 PetStore);对于“What do you want to generate?”问题,选择“REST Server”;对于“NameSpace”,选择要注册 REST 调度类的命名空间;对于“Web 应用程序名称”,指定已定义的根 URL(Web 应用程序路径)(示例中的 /pet1)。 之后,只需指定根据OpenAPI规范创建的JSON文件即可。示例中默认指定https://petstore3.swagger.io/api/v3/openapi.json ,我们可以直接使用这个文件路径。 最后,单击 Install On Server 按钮。 日志如下图所示,确认正常结束后点击关闭按钮。 通过该工具,将创建一个 Web 应用程序路径:/pet1。 从管理门户 -> 系统管理 -> 安全 -> 应用程序 -> Web 应用程序检查 /pet1 是否存在。 定义完成! 现在,让我们检查是否已经创建了记载输入路径对应的方法的disp(调度类)和实施代码的impl类。 类定义已经在 PetStore 包下创建完成! 与IRIS提供的OpenAPI 2.0的类不同的是,这里包含了model包和requests包。 在这个工具中,OpenAPI 3.0的Components对象中指定的信息被创建为可以生成实例的类定义。 (它继承了 %RegisteredObject 类) Components对象Pet的信息可以在下方展开查看。 Components:Pet的规格 "Pet":{ "required":[ "name", "photoUrls" ], "type":"object", "properties":{ "id":{ "type":"integer", "format":"int64", "example":10 }, "name":{ "type":"string", "example":"doggie" }, "category":{ "$ref":"#/components/schemas/Category" }, "photoUrls":{ "type":"array", "xml":{ "wrapped":true }, "items":{ "type":"string", "xml":{ "name":"photoUrl" } } }, "tags":{ "type":"array", "xml":{ "wrapped":true }, "items":{ "$ref":"#/components/schemas/Tag" } }, "status":{ "type":"string", "description":"pet status in the store", "enum":[ "available", "pending", "sold" ] } }, "xml":{ "name":"pet" } }, 根据此信息创建的类如下: 它在可以实例化的类中。 如果将super class从 %RegisteredObject 更改为 %Persistent 并编译,则可以将其用作可以在数据库中持久化储存的类。 此外,POST 请求将发送以下格式的 JSON 对象。 { "id": 0, "category": { "id": 0, "name": "Dog" }, "name": "Hachi", "photoUrls": [ "https://x.gd/1pbYK" ], "tags": [ { "id": 0, "name": "Middle" } ], "status": "available" } 能够将此 JSON 直接作为 Pet、Tag 和 Category 类下的实例会很好,因此又追加继承了 %JSON.Adaptor 。 另外,如果我要修改 Pet、Tag 和 Category,最好将super class的配置从 %RegisteredObject 更改为 %Persistent 和 %JSON.Adaptor 的多重继承。 在此之后,需要将接收到的Body信息更新到数据库中。 Request包下的类描述了这个过程的概要。以下示例显示了在向 /pet 发出 POST 请求时运行的类 (PetStore.requests.addPet.cls) 的内容。 如果你注意LoadFromRequest()方法,你会发现它在把可以处理HTTP请求的%request传递给参数request(在IRIS的REST调度类内部处理时,HTTP请求存储在%CSP.Request的一个实例中)。 request.Content 上面的执行可以得到Body中指定的JSON对象。 Do ..PetNewObject (). %JSONImport (request.Content) 这个类中虽然调用了以上方法,但由于该类中实际上并没有PetNewObject()方法,所以做了如下修改(生成一个Pet实例,将其设置为属性Pet,然后将接收到的JSON分配给实例处理)。 set ..Pet = ##class (PetStore.model.Pet). %New () do ..Pet . %JSONImport (request.Content) 这样就完成了接收到 HTTP 请求时的处理。剩下的就是impl.cls的实现了。 在初始状态下,以下方法没有任何描述。 ClassMethod addPet(messageRequest As PetStore.requests.addPet) As %Status { ; Implement your service here. ; Return {} $$$ThrowStatus ( $$$ERROR ( $$$NotImplemented )) } 参数 messageRequest 指定了 PetStore.requests.addPet 类的一个实例,该实例在之前的流程中得到确认(根据 HTTP 请求中收到的 JSON 对象创建的实例在该实例的 Pet 属性中设置。) 改写如下,编译,大功告成! ClassMethod addPet(messageRequest As PetStore.requests.addPet) As %Status { ;Implement your service here. ; Return {} //$$$ThrowStatus($$$ERROR($$$NotImplemented)) set status= $$$OK set status=messageRequest.Pet. %Save () return status } 让我们来测试 POST 请求。 Pet、Category、和Tag都注册并添加数据成功了! 这个用例还是需要一些手动修改,但当我发现类定义是通过 OpenAPI 3.0 Components 对象自动生成的,让我觉得很便利! 大家也请试用一下。
问题
Yufeng Li · 四月 19, 2021

Nginx 怎么配置成IRIS web服务器

现在有windows上的 编译好的nginx 可以做为iris 的web 服务器吗? ngx_http_csp_module_sa.c , cspapi.h 这两个文件在哪下载? 请从Nginx官网:nginx.org 下载,InterSystems不提供nginx 下载。 文中提到的文件可以在InterSystems IRIS 安装目录的 \dev\csp\nginx 文件夹下找到。
公告
Claire Zheng · 九月 5, 2022

欢迎中文社区新版主@张特特

亲爱的社区开发者们, 我很高兴地向大家介绍一位我们的新版主 @Tete.Zhang (张特特)! @Tete.Zhang (张特特) 目前任职于InterSystems中国,在WRC部门任职资深技术支持专家一职。 以下是@Tete.Zhang (张特特)的自我介绍: 在2015年夏天实习结束后,我于2016年正式作为技术支持工程师加入InterSystems,从那时起,我在InterSystems全球支持中心北美分部工作了六年,2022年,我调职至北京,服务于InterSystems中国,希望能为成长中的中国市场出一份力。 很高兴可以在社区与大家相遇,希望能与大家一起努力,创造更精彩的社区! 再次欢迎我们的新版主 @Tete.Zhang (张特特)👏🏼👏🏼👏🏼👏🏼👏🏼 期待你在DC成长为一名优秀版主!
问题
e Neo · 七月 31, 2023

VSCode 中InterSystems Server Manager 插件配置https方式连接提示Server Could not be accessed by ‘“_system”

vscode通过插件:intersystems Server Manager 连接测试开发环境,配置连接后无法使用 配置参数: "intersystems.servers": { "local": { "webServer": { "scheme": "http", "host": "127.0.0.1", "port": 52773 }, "test": { "webServer": { "scheme": "https", "host": "xxx.xxx.xxx.xxx", "port": 2443 }, "description": "test", "username": "_system" } 错误信息: Server Could not be accessed by ‘“_system” 看起来是_system用户没有通过vscode接入平台的权限,如果换成SuperUser之类的客户是否可以接入?
公告
Claire Zheng · 九月 3, 2024

InterSystems开发者社区中文版:中文社区最佳贡献奖公布(2024年8月)

Hi 开发者们, 2024年8月,我们继续💡“中文社区最佳贡献奖”💡活动,截至目前,社区共有成员1900余人,8月新增成员30人。 🎉🎉🎉🎉获奖名单公布🎊🎊🎊🎊 在综合考虑了发帖量、评论等社区贡献后,我们宣布8月“中文社区最佳贡献奖”获得者为: 👍现有成员 @HoneyMoose 👍现有成员 @Xiang.Zhang 🍀恭喜两位,我们将寄出奖品:《AI医疗革命》。 为感谢大家的积极参与,鼓励更多社区成员积极贡献到社区建设中,我们将为以下社区新成员送上奖励: 🆕新增成员 @PGUO 🆕新增成员 @于涵.邱 🍀恭喜以上获奖成员,我们将寄出奖品:InterSystems开发者社区定制礼品一份🍀 🏆领奖须知🏆 请以上获奖成员及时通过站内信与 @Yunfei.Lei 沟通奖品领取事宜(截至2024年9月20日)。 🍀如果您对此次活动有任何疑问,欢迎跟帖提问!🍀
公告
Claire Zheng · 八月 7, 2024

InterSystems开发者社区中文版:中文社区最佳贡献奖公布(2024年7月)

Hi 开发者们, 2024年7月,我们开启了💡“中文社区最佳贡献奖”💡活动,截至目前,社区共有成员1900余人,7月新增成员46人。 🎉🎉🎉🎉获奖名单公布🎊🎊🎊🎊 在综合考虑了发帖量、评论等社区贡献后,我们宣布7月“中文社区最佳贡献奖”获得者为: 🆕新增成员 @y.g 👍现有会员 @姚.鑫 恭喜两位,我们将寄出奖品:《AI医疗革命》。 为感谢大家的积极参与,鼓励更多社区成员积极贡献到社区建设中,我们还将为以下成员送上奖励: 🆕新增成员 @zhangchao @biubiu.biubiu 👍现有成员 @deng.hang @liu.bo 🍀恭喜以上获奖成员,我们将寄出奖品:InterSystems开发者社区定制礼品一份🍀 🏆领奖须知🏆 请以上获奖成员及时通过站内信与 @Xuying.Zheng 沟通奖品领取事宜(截至2024年9月20 日)。 ⏭接下来 我们的活动还在继续,将于9月初公布8月获奖名单! 🍀如果您对此次活动有任何疑问,欢迎跟帖提问!🍀
公告
Claire Zheng · 十一月 23, 2023

InterSystems开发者社区中文版第二届技术征文大赛获奖名单公布!

大家好! 终于到了宣布获奖名单的时间! 🏆InterSystems开发者社区中文版第二届技术征文大赛🏆(←点击链接进入参赛页面,浏览所有参赛文章)已经结束,此次大赛收到了来自8名参赛者的12篇参赛文章,最终进入评选的文章为10篇,感谢大家的积极参与! 以下是获奖名单! 专家提名奖:活动期间发布文章且成功参赛后,由InterSystems专家评选得出 🥇第一名,姚 鑫,作品:浅谈一下个人基于IRIS后端业务开发框架的理解 🥈第二名,王喆 👀, 作品:IRIS自动安装集群--manifest(安装清单) 🥉第三名,Yuxiang Niu,作品:关于Cache中查看关键锁的几种方式 🏆第四名,liu bo,作品:通过自定义数据类型实现参数统一验证优化重构代码 开发者社区奖:活动期间发布文章且成功参赛后,由社区成员点赞评选得出 🥇第一名,Yongfeng Hou ,作品:IRISHealth在DBServer和ECPApp之间启用SSL/TLS安全双向认证加密通信 🥈第二名,Meng Cao ,作品:使用支持SSL的ODBC连接IRIS数据库 🥉第三名,water huang,作品:进程表 🏆第四名,haoyinhang Hao ,作品:通过XSL自动生成消息模型 恭喜获奖者! 感谢大家的积极参与! 奖品领取 请获奖者点击【获奖者信息提交】提交信息,以便我们及时与您联系奖品寄送事宜。 提醒:填写前请准备好自己的社区主页链接(点击头像右上角进入个人主页,复制浏览器链接即可,如:https://cn.community.intersystems.com/user/claire-zheng)
公告
Claire Zheng · 十一月 18, 2021

召唤创新者们!快来参加2021年欧洲医疗编程马拉松吧!

亲爱的社区开发者们,大家好! 我们欢迎您来参加 2021年欧洲医疗编程马拉松 ,这一赛事时间为2021年11月19日-21日,免费参赛,线上赛道(On-line Track)的申请截止日期延长至11月15日。 我们将有一个InterSystems的挑战:“用FHIR创新”。InterSystems赛道的奖金设置如下: 🥇第一名: 1500 EUR🥈第二名: 1000 EUR🥉第三名: 500 EUR我们为所有参加InterSystems挑战的人准备了奖品!参考下图,了解我们的挑战细节:)你愿意参加吗?请在下面的投票中告诉我们! InterSystems挑战赛: 用FHIR创新 无论是IoMT的实现、更容易的患者参与,还是用于分析解决方案的临床数据的可用性,FHIR(医疗数据交换的标准)都可以推动创新。利用FHIR提供的合成数据来改善对患者及其治疗的了解,或者仅仅是在FHIR服务的帮助下,使您的解决方案在实践中立即可用,以收集和提供数据。 为您的解决方案使用一个或多个InterSystems FHIR服务,例如云中的FHIR存储库或HealthShare消息转换服务,并有资格获得InterSystems奖。InterSystems将为参与者提供免费访问服务以及在线和现场技术援助和指导。 在这次编程马拉松中,每个团队将由3位成员组成。如果你没有队伍,组织者会在比赛前安排好队伍。在这里上了解更多关于编程马拉松的信息。 期待与您相聚!如果你计划参加,请在下面告诉我们!
文章
Nicky Zhu · 十月 18, 2021

IRIS 2021 技术文档 First Look 27--基于角色的访问控制

目录 技术概要: 基于角色的访问控制 1 基于角色的访问控制:为什么它很重要? 1 基于角色的访问控制:如何在 InterSystems IRIS 中工作 1 简要概念概述 1 示例用例 2 基于角色的访问控制:探索它 3 用前须知 3 发现管理门户(Management Portal)页面访问所需的资源 3 创建和分配您自己的管理者角色 4 创建用户并分配新角色 5 尝试管理门户(Management Portal)中的角色 6 了解有关基于角色的访问控制的更多信息 7 技术概要:基于角色的访问控制 本文档向您介绍基于角色的访问控制,解释它在 InterSystems IRIS®数据平台中的工作原理,并帮助您亲自探索。 要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。 基于角色的访问控制:为什么它很重要? 当您首次开始使用一个新的数据库平台时,有件事情可能很快就会变得清晰起来:您可能不希望企业中的所有用户都查看和更改系统上的所有内容。 InterSystems IRIS 和所有的数据库平台一样,允许您精细指定 InterSystems IRIS 的每个用户可以执行的操作。我们用来控制用户授权(authorization)执行操作的机制被称为基于角色的访问控制(role-based access control)。 如果您已经熟悉了基于角色的访问控制,InterSystems IRIS 方案很可能与您以前使用过的一些方案相似。您会在下一节找到有关我们如何处理它的更多细节。 如果您是基于角色的访问控制的新手,这意味着比旧的访问控制方法节省时间,因为旧的访问控制方法没有提供执行系统操作的权限分组。 如果没有基于角色的访问控制,为每个用户逐个分配使用 InterSystems IRIS 的各个方面的权限可能需要数小时甚至数天。然后,如果有新员工需要访问,您将不得不重复这个过程。 基于角色的访问控制允许您在初始配置 InterSystems IRIS 时将权限分组到角色中。然后,您可以为每个系统用户分配一个或多个现成的角色。您还可以使用或修改一组预定义的角色<span id="2_Role-Based_Access_Control:_How_It_Work" class="anchor"></span>。 此外,通过基于角色的访问控制,如果用户需要使用一组新的权限,则可以将该组权限分组为一个角色,并将该角色分配给用户。而且您可以随时改变角色内的权限列表。 基于角色的访问控制: 如何在 InterSystems IRIS 中工作 InterSystems IRIS 为基于角色的访问控制提供了一个完整的解决方案,我们将在本节中对此进行描述。InterSystems IRIS 支持的每一种认证机制,包括 LDAP、Kerberos 和 OS-based,都可以使用本地 InterSystems 基于角色的访问控制。如果您愿意,您可以使用 LDAP 而不是 InterSystems IRIS 进行角色分配。 简要概念概述 把 InterSystems IRIS 中的信息和功能视为您要保护的资产 ,就像您为属于您的资产投保一样。 基于角色的访问控制:如何在 InterSystems IRIS 内部工作 在 InterSystems IRIS 中被视为资产的项目包括: 数据库,将数据和代码作为对象存储。 服务,控制用户连接到 InterSystems IRIS 的能力。 某些管理权限。 InterSystems IRIS 应用程序,包括管理门户(Management Portal)中的各个页面,它是 InterSystems IRIS 的系统管理用户界面。 在 InterSystems IRIS 中,每项资产(asset)都由一个资源**(resource)来表示,一个资源(resource)可以表示多个资产(asset)。 资源(resource)充当它所代表的资产(asset)的看门人:根据资源类型,它与 "读取"、"写入"(包括读取),和在某些情况下的 "使用"(执行)权限(permission) 配对。例如,数据库只存在两种类型的权限:读取,允许查看数据和执行例程;写入,允许修改数据。 资源与权限的配对被称为权限(privilege),权限按角色(role)分组。 最后,角色(role)被分配给 InterSystems IRIS 中的用户(user) 。每个用户(user)在首次使用 InterSystems IRIS 进行认证时,都会有一个或多个角色(role)分配给他们。可以在会话期间向用户添加或删除角色(role)。 基于角色(role)的访问控制的具体授权方式取决于您所选择的认证机制。在线文档中完全涵盖了授权的这方面内容。 提示:对于内部测试和暂存系统,您可能不希望设置基于密码的认证或基于角色(role)的不同级别的访问控制。如果您使用 "最低(minimal)" 安全性来安装您的实例,这个选项是可用的,默认情况下,它给拥有实例的管理门户(Management Portal) URL 的任何人提供完全管理权限。 示例用例 如上所述,管理门户(Management Portal)中的各个页面是 InterSystems IRIS 中您可以保护的资产(asset)。管理门户( Management Portal)允许用户(user)查看和执行 InterSystems IRIS 基本方面的操作,如 globals、命名空间,甚至资源(resource)和角色(role)本身。 下面的屏幕截图显示了当实例的管理员使用安装时创建的 _SYSTEM 帐户登录时,管理门户(Management Portal)的外观和行为。 _SYSTEM 用户可以访问 System Administration(系统管理) > Security(安全)> Users(用户) ,让他们可以查看和修改任何用户(user)及其角色(role)。 您可能想限制某些管理门户(Management Portal)用户的角色(role)分配,使他们不能查看或修改用户(user)帐户或任何其他对安全至关重要的信息。在下一节,我们将告诉您如何做到这一点。 基于角色的访问控制: 探索它 下面的示例向您展示了如何设置两种类型的"管理者"角色,以便在管理门户(Management Portal)中使用。第一个角色将能够访问允许修改用户和角色定义等安全相关项的页面。第二个角色将没有这个访问权限。 然后您会看到拥有这些角色的用户如何与管理门户(Management Portal)交互。 重要提示: 为了让您体验 InterSystems IRIS,而又不陷入细节的困境,我们保持了简单的探索。例如,我们让您尽可能多地使用默认设置。 但是,当您把 InterSystems IRIS 引入您的生产系统时,您需要做很多不同的事情,特别是(但不限于)安全方面。 所以请确保不要把这种对 InterSystems IRIS 的探索与真实的情况相混淆!本文档末尾提供的参考资料将使您对在生产中使用 InterSystems IRIS 的情况有一个很好的了解。 用前须知 要使用该程序,您需要一个正在运行的 InterSystems IRIS 实例。您的选择包括多种类型的已授权的和免费的评估实例;该实例不需要由您正在工作的系统托管(尽管它们必须相互具有网络访问权限)。关于如何部署每种类型的实例的信息(如果您还没有可使用的实例),请参见 InterSystems IRIS Basics: Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的 Deploying InterSystems IRIS(部署 InterSystems IRIS)。使用同一文档中的 InterSystems IRIS Connection Information(InterSystems IRIS 连接信息)和 .Net IDE 中的信息将 Visual Studio 连接到您的 InterSystems IRIS 实例。 发现管理门户(Management Portal)页面访问所需的资源 对管理门户(Management Portal)中的每个页面的访问都受到至少一种资源的保护。您可以通过以下方式发现所需的资源: 使用 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中URL described for your instance(为您的实例描述的 URL),在浏览器中打开您的实例的管理门户(Management Portal)。 通过点击相应菜单项中的每一个单词,导航至 System Administration(系统管理) > Security(安全)。 基于角色的访问控制:探索它 提示: 在管理门户(Management Portal)中,带有子页面的菜单项在其名称旁边包含 >>。页面没有这样的标记。 在 Users(用户) 菜单项中,点击"用户(Users)"一词右侧的任何位置。这个操作显示查看 Users(用户)页面所需的资源,即 %Admin_Secure。(Security(安全) 和 Encryption(加密) 子菜单中的所有页面都需要 %Admin_Secure 资源上的使用权限("U")。) 导航至 System Administration(系统管理) > Configuration(配置) > System Configuration(系统配置)。 点击"内存和启动(Memory and Startup)"右侧的任何位置。您会看到,查看该页面所需的资源是 %Admin_Manage。 创建和分配您自己的管理者角色 对于管理门户(Management Portal)的 System Administration(系统管理)菜单内的页面,您需要具有 %Admin_Secure 和 %Admin_Manage 资源权限的角色。 鉴于这种结构,您可能希望创建两个反映管理级别的角色,一个是可以访问除安全相关页面以外的所有页面,另一个是可以执行所有操作,包括安全相关的操作。您可以使用预定义的 %Managerrole 作为模板。 使用 _SYSTEM 帐户登录管理门户(Management Portal)。 导航至 System Administration(系统管理) > Security(安全) > Roles(角色) ,并点击 Go。您将看到安装了 InterSystems IRIS 的角色列表,包括 %Manager 角色。 点击 %Manager 链接。 General(常规) 标签显示具有此角色的用户可用的权限(与权限配对的资源)。 在权限中,您会看到 %Admin_Secure 和 %Admin_Manage 上的使用权限。 您也会看到许多其他的权限。这是因为您需要访问许多不同的资源,才能够查看和修改 InterSystems IRIS 设置。既然我们知道只有一种关键资源 %Admin_Secure,在 System Administration(系统管理)的安全相关页面的访问方面,对该资源的访问将是我们两个自定义角色之间的唯一区别。 点击 Cancel(取消) (在 Edit %Manager 下面),返回到主 Roles(角色)页面。 创建 "标准管理者"角色 在 Roles(角色)页面上,点击 Create New Role(创建新角色)。将出现一个角色定义页面。 基于角色的访问控制:探索它 在 Name(名称) 字段中,输入"Standard_Mgr"。 在 Copy from(复制自) 下拉菜单中,选择 %Manager。这将复制所有信息,包括权限,从预定义 %Manager 角色到新角色。 将描述更改为您所选择的描述,例如:"Role for System Administration without security access(不具有安全访问权限的系统管理角色)"。 点击 Save(保存)。将出现一条 Role saved(保存角色) 信息,您将在 General(常规)标签中看到新角色的权限列表。 在 %Admin_Secure 行中,点击 Delete(删除)。这就从角色中删除了权限。 再次点击 Save(保存) 来保存更改。 创建"安全管理员"角色 在 Roles(角色)页面上,点击 Create New Role(创建新角色)。将出现一个角色定义页面。 在 Name(名称) 字段中,输入"Security_Mgr"。 在 Copy from(复制自)下拉菜单中,选择 %Manager。这将复制所有信息,包括权限,从预定义 %Manager 角色到新角色。 将描述更改为您所选择的描述,例如:"Role for System Administration with securityaccess(具有安全访问权限的系统管理角色)" 点击 Save(保存)。将出现一条 Role saved 信息,您将在 General(常规)标签中看到新角色的权限列表。 创建用户并分配新角色 要查看角色的运行情况,需要创建两个用户,每个用户对应一个新角色。 使用 _SYSTEM 帐户登录管理门户(Management Portal)。 导航至 System Administration(系统管理) > Security(安全) > Users(用户),并点击 Go。您将看到安装了 InterSystems IRIS 的用户定义列表。 创建"标准管理员"用户 在主 Users(用户) 页面上,点击 Create New User(创建新用户)。将出现一个用户定义页面。 在 Name(名称) 字段中,输入"Std_Mgr"。(用户的名称不能与角色的名称一致)。 在 Password(密码) 和 Password (confirm)(确认密码) 字段中,输入您选择的密码。 点击 Save(保存)。将出现一条 User saved 信息。 点击 Roles(角色)标签。滚动左侧的 Available 列表,并高亮显示 Standard_Mgr(标准管理员)。 点击右箭头 ,将该角色添加到 Selected(已选)列表中。然后点击"Assign(分配)"。 7. 点击 Cancel(取消) 以返回到主 Users(用户)页面。 创建"安全管理员"用户 在主 Users(用户) 页面上,点击 Create New User(创建新用户)。将出现一个用户定义页面。 在 Name(名称) 字段中,输入"Sec_Mgr"。 在 Password(密码) 和 Password (confirm)(确认密码) 字段中,输入您选择的密码。 基于角色的访问控制:探索它 点击 Save(保存)。将出现一条 User saved 信息。 点击 Roles(角色)标签。滚动左侧的 Available 列表,并高亮显示 Security_Mgr(安全管理员)。 点击右箭头,将该角色添加到 Selected(已选)列表中。然后点击 Assign(分配)。 点击 Cancel(取消) 以返回到主 Users(用户)页面。 尝试管理门户(Management Portal)中的角色 以 Std_Mgr 用户(标准管理员用户)登录管理门户(Management Portal)。您将看到,与安全有关的菜单选项是灰色的,正如预期的那样。Interoperability(互操作性)菜单选项也是灰色的,因为从其中复制两个自定义角色的预定义 %Manager 没有访问这些页面所需的权限。 退出,然后以 Sec_Mgr 用户(安全管理员用户)重新登录。 正如您所看到的,这个用户具有对 System Administration(系统管理) > Security(安全)和 System Administration(系统管理) > Encryption(加密) 子菜单中的页面的完全访问权限。 了解有关基于角色的访问控制的更多信息 要了解有关基于角色的访问控制和 InterSystems IRIS 安全模型的更多信息,请参见: About InterSystems Security(《有关 InterSystems 安全》)中的 "Authorization:Controlling User Access(授权:控制用户访问)"一节 InterSystems IRIS Programming Orientation Guide(《InterSystems IRIS 编程指南》)中的 "InterSystems IRIS Security(InterSystems IRIS 安全)"和 "Namespaces and Databases(命名空间和数据库)"部分 --- 为应用程序开发人员提供有关基于角色的访问控制的信息。 Security Tutorial(《安全教程 》)中的 "Authorization(授权)"部分 --- 创建用户、角色和权限的逐步说明。
文章
Claire Zheng · 一月 13, 2023

【GS22 视频】医疗IT行业趋势观察与解读

InterSystems 2022年全球峰会上,InterSystems HealthShare 产品管理总监 Jonathan Teich 及其团队解读了医疗与医疗IT行业的趋势,并分享了HealthShare的最新产品策略与路线图,演示了一些易用且具有前瞻性的功能和用例。
文章
姚 鑫 · 九月 25, 2022

第四十三章 使用多个 IRIS 实例(三)

# 第四十三章 使用多个 IRIS 实例(三) # `Windows` 上的 `iris` 命令 在 `Windows` 上,必须从 `install-dir\bin` 目录运行 `iris` 命令(或在命令中包含完整路径)。 - `iris all` 列出所有已安装实例的摘要信息,每行一个实例,如下所述。 注意:如果需要完整的信息,例如用于解析或报告目的,请使用 `iris list`。 ```java C:\InterSystems\IRISHealth\bin>iris all Instance Version ID Port Directory ------------- ---------- ---- --------- up irishealth 2022.1.0.114.0 51773 c:\intersystems\irishealth ``` - `iris allw` 为每个实例列出与 `iris all` 相同的信息,而不包含长字段值。可能会产生超过 `80` 个字符的行。 ```java C:\InterSystems\IRISHealth\bin>iris allw Instance Name Version ID Port Directory ------------------------------- ---------------------------- ----- -------------------------------- up irishealth 2022.1.0.114.0 51773 c:\intersystems\irishealth ``` - `iris console instname [arguments]` 在操作系统命令窗口而不是终端窗口中打开 `Terminal` 。 ![image](25F7E075095D47C4A19C24D2764F52E1) - `iris force instname` 强制关闭实例。 - `iris help` 显示有关 `iris` 命令的最新信息。 ```java C:\InterSystems\IRISHealth\bin>iris help usage: iris start [] to start instance , optionally using the specified .cpf file. An optional /EmergencyId=Username,Password can be used to start InterSystems IRIS in emergency mode. When the EmergencyId argument is supplied, the system starts up in emergency mode in which only the baseline databases are mounted and access to InterSystems IRIS is governed by InterSystems IRIS login using that username and password. Emergency mode is supplied to give access in the event that privileged users are not available or their password is forgotten. Emergency startup is only available from an administrator account. When InterSystems IRIS is started in emergency mode, the IRIS control service is not used. This means that if you log out of Windows, all the InterSystems IRIS processes will immediately exit. or: iris startnostu to start instance without running ^STU. or: iris stop to shut down instance . or: iris stopnoshut to shut down instance without running user shutdown routines. or: iris stopstart to shut down and restart instance . Note: An optional /nofailover argument can be specified for stop, stopnoshut, or stopstart to not trigger a mirror failover. or: iris force to force down instance . or: iris [ run OR console OR terminal ] to run InterSystems IRIS in programmer mode with [ no-device OR console OR terminal ] for $Principal. or: iris [ run OR console OR terminal ] to run InterSystems IRIS routine in application mode with [ no-device OR console OR terminal ] for $Principal. or: iris [ run OR console OR terminal ] to run InterSystems IRIS routine in in application mode with [ no-device OR console OR terminal ] for $Principal. or: iris runw [] to run InterSystems IRIS routine in application mode with no input/output device for $Principal using the optional namespace. When run from a batch script, iris will wait for the InterSystems IRIS process to terminate before returning. The exit code from the InterSystems IRIS process will be returned by iris. Note: An optional /Title="Title string" can specify the console or terminal title bar text. or: iris iristraystart to start IRISTray for instance . or: iris iristraystop to stop IRISTray for instance . or: iris licmanagerstop to stop licmanager running in instance . or: iris all [> outputfile] to list all installed instances. or: iris allw [> outputfile] to list (wide format) all installed instances. or: iris list [] [> outputfile] to list information about all installed instances or the specified instance. or: iris qlist [] [> outputfile] to display a quick list of information about all installed instances or the specified instance, in a format suitable for parsing in command scripts. The record for an instance contains fields separated by "^" (carats): Field 1: instance name Field 2: instance directory Field 3: version identifier Field 4: current status for the instance Field 5: configuration file name last used Field 6: SuperServer port number Field 7: WebServer port number Field 8: JDBC Gateway port number Field 9: Instance status (e.g., ok, warn, alert) Field 10: Product name of the instance Field 11: Mirror Member Type (e.g., Failover, Disaster Recovery) Field 12: Mirror Status (e.g., Primary, Backup, Connected) or: iris serverlist [> outputfile] to list information about all defined servers. Note: When [> outputfile] is present, output is redirected to the file instead of being displayed on the terminal. or: iris telnetstop to stop the InterSystems IRIS TELNET daemon. or: iris telnettrace to toggle the TELNET trace state. or: iris iristrmdstop to stop the InterSystems IRIS terminal daemon. Note: iris often displays error information in a message box. You can suppress the message box containing error information by adding "quietly" (without the quotation marks) as the final argument to the iris command. or: iris help [display] to show this help. If display is specified the help is displayed in a browser window. ``` - `iris list [arguments]` 显示有关已安装 `IRIS` 实例的信息,如下所述。 ```java C:\InterSystems\IRISHealth\bin>iris list irishealth Instance 'irishealth' (Custom installation) directory: 'C:\InterSystems\IRISHealth' versionid: '2022.1.0.114.0' conf file: 'c:\intersystems\irishealth\iris.cpf' (SuperServer port = 51773, WebServer port = 52773) status : 'running, since Mon Sep 12 08:08:58 2022' Product : InterSystems IRISHealth ``` `instname` — 可以选择指定 `IRIS` 实例名称以仅显示有关该实例的信息。例如,`iris list MyIRIS` 仅显示有关 `MyIRIS` 实例的信息。 - `iris qlist [参数]` 与 `iris list` 类似,但有附加信息。每个实例的输出(如下所述)在一行中给出,字段由插入符号 (`^`) 分隔。 `instname` — 可以选择指定 `IRIS` 实例名称以仅显示有关该实例的信息。例如,`iris qlist MyIRIS` 仅显示有关 `MyIRIS` 实例的信息。 ```java C:\InterSystems\IRISHealth\bin>iris qlist irishealth irishealth^C:\InterSystems\IRISHealth^2022.1.0.114.0^running, since Mon Sep 12 08:08:58 2022^c:\intersystems\irishealth\iris.cpf^51773^52773^^^IRISHealth^^ ``` - `iris run instname [arguments]` 在没有 `$Principal` 的输入/输出设备的程序员模式下运行 IRIS。 - `iris runw instname 例程 [参数]` 在应用程序模式下运行命名的 `IRIS` 例程,没有 `$Principal` 的输入/输出设备。从批处理脚本运行时,该命令会等待 `IRIS` 进程终止,然后再从进程返回退出代码。 `namespace` — 在指定的命名空间中运行例程。 注意:如果使用指定了启动命名空间的用户帐户启动 `IRIS`,则命名空间参数无效(请参阅用户帐户属性)。 - `iris start instname [参数]` 启动实例。 注意:系统可能会提示以“紧急模式”启动。 完整的 `CPF` 路径 — 默认情况下, `IRIS` 从位于 `<install-dir>/mgr` 目录中的 `iris.cpf` 文件中读取某些设置。可以提供另一个 `.cpf` 文件的完整路径以供使用。 - `iris startnostu instname` 启动指定的实例而不运行`^STU`。 - `iris stop instname [参数]` 关闭实例。 `/nofailover` — 指定此可选参数以防止触发镜像故障转移。 - `iris stopnoshut instname [参数]` 使用 `INTNOSHUT^SHUTDOWN` 关闭命名实例。 **注意:只有实例所有者和 `irisusr` 可以在不登录终端的情况下运行 `INTNOSHUT^SHUTDOWN`。** `/nofailover` — 指定此可选参数以防止触发镜像故障转移。 - `iris stopstart instname [参数]` 关闭实例后启动它。 `/nofailover` — 指定此可选参数以防止触发镜像故障转移。 - `iris terminal instname [参数]` 打开实例的 `Terminal` 。 `routine` — 在终端中以应用程序模式为 `$Principal` 运行命名的 `IRIS` 例程。 `"[label[+offset]]^routine"` — 指定要在用户模式下运行的 `ObjectScript` 程序的名称。除了指定的格式之外,还可以传递由字符串和`/`或数字文字组成的参数列表,以及省略的 (`void`) 参数,如下所示: - `"routine[([parameter-list])]"` - `"[label]^routine[([parameter-list])]"` - `"##CLASS(package.class).method[([parameter-list])]"` 其中,例如,参数列表以“`string literal`”的形式指定,`-+-000123.45600E+07`,省略的参数作为 `$Data(parameter)=0` 传递给目标。 注意:空格和 `shell` 元字符必须以依赖于操作系统的形式引用。 命名空间 — 与例程一起使用,在指定的命名空间中运行例程。 注意:如果您用指定了启动命名空间的用户帐户启动 `IRIS`,则命名空间无效(请参阅用户帐户属性)。 ## iris list, qlist, and all #### `iris all` 列出有关一个或多个 `IRIS` 实例的以下信息: - 实例状态,如下 - ``(状态不可用,登录已禁用) - `dn`(关闭或已崩溃) - `up` (running) - `st` (starting or stopping) - 实例名称 - `IRIS` 版本 - 超级服务器端口号 - 安装目录 #### `iris list` 列出有关一个或多个 `IRIS` 实例的以下信息: - 实例名称(和安装类型) - 安装目录 - `IRIS` 版本 - `IRIS` 参数 (`.cpf`) 文件的路径名 - 超级服务器和网络服务器端口号 - 实例状态,如下 - `running` - `down` - `starting or stopping` - 不完整的启动或停止,登录被禁用 - 实例的系统健康状态,如果正在运行(不包括在 `Windows` 中) - 镜像成员类型和状态(如果是镜像成员) #### iris qlist 为一个或多个 `IRIS` 实例在单行上输出以下信息,以插入符号 (`^`) 分隔: 1. 实例名称(和安装类型) 2. 安装目录 3. `IRIS`版本 4. 实例状态 5. 当前配置参数文件的路径名,相对于安装目录。 `Windows` 系统改为显示完整路径。 6. 超级服务器端口号 7. 网络服务器端口号 8. `JDBC` 网关端口号 9. 实例的系统健康状态,如果正在运行(在 `Windows` 上总是空白) 10. 产品名称 11. 镜像成员类型(如果是镜像成员) 12. 镜像状态(如果是镜像成员) 13. 数据目录(如果适用)
文章
Jeff Liu · 四月 1, 2024

加快临床试验,扩大全球市场推广

此视频帮助大家了解InterSystems如何帮助CRO来加快临床数据采集和更快地推广市场。 演讲嘉宾: Jim Coutcher, Senior Director/Principal, Global Head of Enriched Studies, Real World Solutions, IQVIAQi Li, Physician Executive, InterSystemsMatt Stannard, life Sciences Advisor, InterSystems 欢迎大家来我们的 Bilibili主页观看更多视频!
公告
Claire Zheng · 八月 28, 2023

2023 SUTA培训报名启动啦!

SUTA培训是InterSystems专为SUTA有效期客户提供的原厂产品技术服务,具体包括产品的基础管理、编程管理、高级管理和开发培训等。2023 SUTA培训报名现已启动,汇聚技术专家,与新老客户一起探讨提升InterSystems数据平台基础管理运维的技能和知识: 新客户:系统学习管理运维工作的整体架构和基础概念 老客户:更加深入和全面地加强对管理运维工作的理解和提升 常见运维问题解析:助力您轻松应对日常工作中的问题和挑战 现场互动答疑:体验InterSystems技术专家的一对一诊断指导 点击此处,了解培训详情,报名参会(扫描下图中的二维码报名)。请关注InterSystems微信公众号,及时获取开播信息。 快来报名吧!