文章 姚 鑫 · 七月 20, 2022 4m read

第二章 使用 /api/mgmnt/ 服务

本章介绍如何使用 /api/mgmnt 服务来创建、更新和删除 REST 服务。

/api/mgmnt 服务还提供了可用于发现和记录 服务的选项,如本书后面所述。

使用 /api/mgmnt 服务创建 REST 服务

创建 REST 服务的推荐方法是为 服务创建 OpenAPI 2.0(也称为 )描述,并使用它来生成 服务类。如果您正在实现由第三方定义的 服务,他们可能会提供此 描述。有关 描述格式的详细信息,请参阅 规范。以下主题描述了如何使用 服务来执行此操作。

使用 /api/mgmnt 服务生成类

第一步,生成 服务类,如下所示:

  1. JSON 格式创建或获取 REST 服务的 描述。
  2. 获取 测试工具,例如 (https://www.getpostman.com/)。
  3. 在测试工具中,创建如下 请求消息:
  • 对于 操作,选择或指定 POST
  • 对于 ,请指定以下形式的 :

其中 是服务器的名称,52773 是运行 的 服务器端口, 是要在其中创建 服务的名称空间, 是要在其中创建类的包的名称.

  • 对于请求正文,以 格式粘贴
0
0 150
文章 Lilian Huang · 七月 20, 2022 4m read

本文将讨论 FHIR 中的问卷和问卷反馈(Questionnaire and Questionnaire Response), 从创建表单到上传到服务器以及如何填写它们。

tl;dr :

  • 通过使用该工具链接“ this online tool” ,您可以轻松的开始构建您自己的表单,或者使用现有模版。
  • 通过使用InterSystems 本地FHIR 服务器链接“ this InterSystems local FHIR server” ,您可以轻松的存储您的FHIR资源和问卷。
  • 通过使用此应用程序“this app” ,您可以像医生一样操作,对您的 FHIR 服务器上的每位患者进行问卷调查和回复。

需要注意的是,该应用程序不使用 Content-Type 'application/json+fhir' 进行通信,而只是使用 Content-Type 'application/json' ,所以它不会像我们的本地 InterSystems FHIR 服务器那样工作。

这就是为什么我创建了这个 GitHub 存储库“this GitHub repo,其中包含应用程序的修改版本,使用 Content-Type 'application/json+fhir',拥有本地 FHIR 服务器和指向问卷生成器工具的链接以及一些解释。

0
0 200
文章 姚 鑫 · 七月 19, 2022 8m read

第一章 创建 REST 服务简介

本文介绍 IRIS® 中的 RESTREST 服务。

REST 简介

命名自,具有以下属性:

  • REST 是一种架构风格,而不是一种格式。尽管 REST 经常使用 HTTP 来传输消息并使用 来传递数据,但也可以将数据作为 或纯文本传递。 利用现有的 标准,例如 、、 和 。
  • 是面向资源的。通常,资源由 标识并使用基于 HTTP 方法的操作,例如 、、 和 。
  • 通常有少量开销。虽然它可以使用 来描述数据,但它更常用的是 ,它是一种轻量级的数据包装器。 JSON 使用标签标识数据,但标签没有在正式的模式定义中指定,也没有明确的数据类型。

REST 服务简介

在 及更高版本中定义 接口有两种方法:

  • 规范优先定义——首先创建一个 规范,然后使用 管理工具生成 REST 接口的代码。
  • 手动编码 接口。

使用规范优先的定义, 服务正式由以下组件组成:

  • 规范类( 的子类)。此类包含 服务的 规范。 支持可以在规范中使用的几个扩展属性。
  • 调度类( 的子类)。该类负责接收请求并调用实现类中合适的方法。
  • 一个实现类( 的子类)。此类定义实现 调用的方法。

管理工具生成实现类的存根版本,然后可以扩展它以包含必要的应用程序逻辑。 (逻辑当然可以调用此类之外的代码。)

类提供了可以调用的方法,以便设置 HTTP

0
0 148
问题 Michael Lei · 五月 5, 2021

大家好,

我想知道是否有可能获取自身的值来运行查询。

我想创建一些查询以在%Persistent类中找到一个值,但是每个查询都使用不同的值。

Class Kurro.MyClass Extends %Persistent
{

/// Key of process
Property KeyProcess As %String(MAXLEN = "");

/// Specialist
Property CodeSpecialist As %String;

/// Provider
Property CodeProvider As %String;

/// Center
Property CodeCenter As %String;

/// Date
Property Date As %TimeStamp;

/// IdList
Property IdList As %String;

/// IdProcess
Property IdProcess As %String;

/// Duration
Property Duration As %String;

Query GetInfo(pObject AS Kurro.MyClass) As %SQLQuery(CONTAINID = 1, ROWSPEC = "IdList:%String,IdProcess:%String,Duration:%String")
{
    SELECT IdList, IdProcess, Duration
    FROM Kurro.MyClass
    WHERE KeyProcess = :pObject.KeyProcess
    AND CodeSpecialist = :pObject.CodeSpecialist
    AND CodeProvider = :pObject.CodeProvider
    AND CodeCenter = :pObject.CodeCenter
    AND Date = :pObject.Date
}

}
1
0 677
问题 Michael Lei · 五月 10, 2021

我想安装Windows版本的管理门户引擎来创建Cache InterSystems数据库
我想为Cache InterSystems创建一个样本数据库,并想通过Cache Entity Framework Provider访问它。但是,我无法找到一个特定的管理门户引擎来创建数据库。

你能指导一下如何在Windows中安装管理门户吗?

I want to install Management Portal Engine for Windows to create Cache InterSystems DB

I want to create a Sample Database for Cache InterSystems and want to access it via Cache Entity Framework Provider. But, I cannot find a particular engine of Management Portal to create a database. 

Can you guide how to install Management Portal in Windows?

2
0 253
问题 Michael Lei · 五月 10, 2021

大家好,

我需要根据用户请求删除Ensemble接口。我想为此编写一个程序,执行的时候将通过代码删除接口组件。
能否提供以下操作的代码示例?

  • 从规则类中删除单个规则
  • 从Ensemble删除一个类
  • 从生产环境中删除主机(服务/操作/流程)。

感谢帮助。
谢谢,

普鲁索他曼

Ensemble Delete Individual Rules and Ensemble classes programmatically
Hi Team,

I have a requirement to delete the Ensemble interfaces , as per User request. I would like to write a routine for that and once I execute, it should remove the interface components through code.
Could you please provide code samples for the following actions ?

1
0 236
问题 Michael Lei · 五月 18, 2021

大家好,

我目前正在开发TCP入站服务,以读取从使用EnsLib.TCP.CountedOutboundAdapter的TCP操作发送的一些XML。

1)我尝试过EnsLib.TCP.Inbound适配器,但是会出现此错误:

错误<Ens> ErrException:<METHOD不存在> zinitConfig + 7 ^ Ens.Host.1 *%New,EnsLib.TCP.InboundAdapter-登录为'-'
数字 - @'
设置..Adapter = $ classmethod(..#ADAPTER,“%New”)'

因此,适配器无法开始侦听传入的连接。

2)当我改用EnsLib.TCP.CountedXMLInboundAdapter或EnsLib.TCP.CountedInboundAdapter时,适配器开始侦听给定的端口,但OnProcessinput()方法未在pInput流中接收任何数据。流始终为空,并在事件日志中引发此错误。

错误<Ens> ErrTCPReadBlockSize:超时时间为(5)的TCP Read(32000)失败,错误如下:(1144):l version =“ 1.0” encoding =“ UTF-8”?

1
0 255
问题 Michael Lei · 五月 18, 2021

我可以从AIX命令行提示符运行以下命令,而不会出现任何问题

-bash-2.05b$ echo t
t
-bash-2.05b$ echo œ
œ

当我从内部Cache调用时,我遇到了问题。

USER>D $ZF(-1,"echo t")
t

USER>D $ZF(-1,"echo œ")

D $ZF(-1,"echo œ")
^
<TRANSLATE>

我正在使用Cache 2017.2。有人可以帮忙吗?

谢谢你。

1
0 230
问题 Michael Lei · 六月 16, 2021

在Ensemble中使用SQL进行批量插入
你好,社区。

我试图在一个表中插入多个值。下面是简单的SQL语句。

插入到表X中

values ('Name', 'Address', 'Phone')

我怎样才能在一条语句中进行多次插入(行)?

数值不在另一个表中,所以我不能使用选择进入。

谢谢。

吉米-克里斯蒂安

Hello Community,

I am trying to insert multiple values in a table. Below is the simple sql statement.

Insert Into TableX

values ('Name', 'Address', 'Phone')

How can i do multiple inserts(rows) in one single statement?

Values are not in another table, so i cannot use Select into.

Thanks,

Jimmy Christian.

1
0 250
问题 Michael Lei · 四月 29, 2022

我想知道是否有更好的方法来使用动态SQL对数据集进行分页,而不是我下面使用的方法。问题是,当潜在的数据池变大时,这段代码就会变慢,以至于无法使用。在分析下面的每一行代码时,似乎速度变慢与最初的rset.%Next()迭代有关。 有没有什么不需要子查询/%VID的可用方法,比如简单的LIMIT/OFFSET?

我的代码类似于:

s sql=##class(%SQL.Statement).%New()

s query="SELECT *,%VID FROM (SELECT prop FROM table WHERE prop=x) WHERE %VID BETWEEN 1 AND 100"             

s sc=sql.%Prepare(query)

s rset=sql.%Execute()

while rset.%Next() {.....

1
1 591
问题 Michael Lei · 五月 8, 2022

大家好!

我正在创建一个脚本,从Ensemble Production中删除一个项目(Component),我知道有手动的方法,但由于有几个Component,我想用一个脚本来更快。

我试着用%Delete()并在Ens.Config.Item上做选择,但这最终在生产中产生了几个错误。有谁知道我怎样才能简单地做到这一点?

答案参见:https://community.intersystems.com/post/delete-item-production

1
0 175
问题 Michael Lei · 四月 27, 2022

Hi, 请问如何更改表(有数据)上的主键?谢谢!

答:

如果数据已经存在,那么这是一项必须重视的任务,特别是如果存在继承或父/子关系,因为这将导致你的数据存储方案的改变。

最简单的方法是通过一个中间(临时)表来实现。

创建一个具有相同结构的新类,但有一个新的主键。
使用SQL(不是合并命令)将数据从旧的类中移到它里面。
删除旧类中的数据/索引,然后改变其中的主键。
使用合并命令,将数据从新类移到旧类中。
删除带有数据的新类。
重建索引(如果有的话)。

几个有用的链接:
        MERGE

        持久性对象和InterSystems IRIS SQL

        持久性对象的介绍

如果仍然有问题,最好向WRC寻求帮助。

1
0 420
文章 Michael Lei · 七月 18, 2022 8m read

Hi 大家好! 我是 Sergei Sarkisian,在InterSystems 做Angular 前端7年。Angular是非常流行的框架,我们的开发人员、客户和合作伙伴经常选择它来开发他们的应用程序。

我会写一系列的文章,涵盖Angular的不同方面:概念、方法、最佳实践、高级主题等等。这个系列的文章将针对那些已经熟悉Angular的人,不会涉及基本概念。由于我正在构建文章的路线图,我想从突出最近的Angular版本中的一些重要功能开始。

严格类型化表单

这可能是近几年来Angular最受欢迎的功能。有了Angular 14,开发者现在可以在Angular Reactive Forms中使用TypeScript的所有严格类型检查功能。

表单控制Formcontrol 类现在是通用的,并接受它所持有的值的类型。

/* Before Angular 14 */
const untypedControl = new FormControl(true);
untypedControl.setValue(100); // value is set, no errors

// Now
const strictlyTypedControl = new FormControl<boolean>(true);
strictlyTypedControl.setValue(100); // you will receive the type checking error message here

// Also in Angular 14
const strictlyTypedControl = new FormControl(true);
strictlyTypedControl.setValue(100); // you will receive the type checking error message here
0
0 819
文章 姚 鑫 · 七月 18, 2022 6m read

第九章 使用嵌入式 Python (六)

异常处理

IRIS 异常处理程序可以处理 Python 异常并将它们无缝传递给 ObjectScript。在前面的 库示例的基础上,如果尝试使用不存在的文件调用 ,并在 中捕获异常,会看到以下内容:

USER>try { do canvas.drawImage("C:\Sample\bad.png", 150, 600) } catch { write "Error: ", $zerror, ! }
Error: <THROW> *%Exception.PythonException <THROW> 230 ^^0^DO canvas.drawImage("W:\Sample\isc.png", 150, 600) 
<class 'OSError'>: Cannot open resource "W:\Sample\isc.png" -

这里 : Cannot open resource "W:\Sample\isc.png"是从 传回的异常。

字节和字符串

Python 对“字节”数据类型的对象和字符串(表示字符串的 字节序列)进行了明确区分,它们是简单的 位字节序列。在

0
0 124
文章 姚 鑫 · 七月 17, 2022 4m read

第八章 使用嵌入式 Python (五)

通过引用传递参数

ObjectScript 编写的方法中的参数可以通过值或引用传递。在下面的方法中,签名中第二个和第三个参数前面的 ByRef 关键字表示它们打算通过引用传递。

ClassMethod SandwichSwitch(bread As %String, ByRef filling1 As %String, ByRef filling2 As %String)
{
    set bread = "whole wheat"
    set filling1 = "almond butter"
    set filling2 = "cherry preserves"
}

从 调用方法时,在参数前放置一个句点以通过引用传递它,如下所示:

USER>set arg1 = "white bread"
 
USER>set arg2 = "peanut butter"
 
USER>set arg3 = "grape jelly"
 
USER>do ##class(User.EmbeddedPython).SandwichSwitch(arg1, .arg2, .arg3)
 
USER>write arg1
white bread
USER>write arg2
almond butter
USER>write arg3
cherry preserves
0
0 136
文章 姚 鑫 · 七月 16, 2022 4m read

第七章 使用嵌入式 Python (四)

弥合 ObjectScript 和嵌入式 Python 之间的差距

由于 ObjectScriptPython 语言之间的差异,将需要了解一些有助于弥合语言之间差距的信息。

ObjectScript 方面, 类允许从 ObjectScript 使用 。

在 方面, 模块允许使用 Python 中的 。在 中,键入 以获取其方法和函数的列表。

使用 Python 内置函数

包在 解释器启动时自动加载,它包含语言的所有内置标识符,例如基对象类和所有内置数据类型类、异常类、函数和常量。

可以将此包导入 ObjectScript 以访问所有这些标识符,如下所示:

set builtins = ##class(%SYS.Python).Import("builtins")

函数实际上是内置模块的一个方法,因此现在可以在 中使用此函数:

USER>do builtins.print("hello world!")
hello world!

然后可以使用 命令检查内置对象,因为它是一个 对象,所以它使用内置包的 方法来获取该对象的字符串表示形式。例如:

出于同样的原因,可以使用 方法创建 列表。

0
0 159
文章 姚 鑫 · 七月 15, 2022 5m read

第六章 使用嵌入式 Python (三)

从 ObjectScript 调用嵌入式 Python 代码

使用 Python 库

嵌入式 Python 让可以轻松访问数以千计的有用库。通常称为“包”,它们需要从 Python 包索引 (PyPI) 安装到 /mgr/python 目录中,然后才能使用。

例如, 是一个用于生成 和图形的开源库。以下命令使用软件包安装程序 irispip 在 系统上安装 :

在基于 的系统上,使用:

$ pip3 install --target /InterSystems/IRIS/mgr/python reportlab

安装包后,可以使用 %SYS.Python 类的 方法在 代码中使用它。

给定一个文件位置,以下 方法 创建一个示例 PDF 文件并将其保存到该位置。

Class Demo.PDF
{

ClassMethod CreateSamplePDF(fileloc As %String) As %Status
{
    set canvaslib = ##class(%SYS.Python).Import("reportlab.pdfgen.canvas")
    set canvas = canvaslib.Canvas(fileloc)
    do canvas.drawImage("C:\Sample\isc.png", 150, 600)
    do canvas.drawImage("C:\Sample\python.png", 150, 200)
    do canvas.setFont("Helvetica-Bold", 24)
    do canvas.drawString(25, 450, "InterSystems IRIS & Python. Perfect Together.")
    do canvas.save()
}

}
0
0 245
文章 Jingwei Wang · 七月 14, 2022 13m read

创建表

可以通过以下方式定义表:

  1. 通过DDL定义表
    • 使用任意数据库管理工具执行DDL(使用ODBC,JDBC连接)

    MyApp.Person表可以使用DDL CREATE TABLE语句来定义,指定SQL schema.table名称。成功执行这个SQL语句会生成一个相应的持久化类,包名MyApp,类名Person。当使用DDL命令定义一个表时,你不需要指定USEEXTENTSET或创建一个位图范围索引。InterSystems SQL会自动应用这些设置,并将它们包含在预测的持久化类中。默认情况下,CREATE TABLE在相应的类定义中指定了Final类的关键字,表示它不能有子类。

    CREATE TABLE MyApp.Person (
      Name VARCHAR(50) NOT NULL,
      SSN VARCHAR(15) DEFAULT 'Unknown',
      DateOfBirth DATE,
      Sex VARCHAR(1)
    )
    • 使用Objectscript执行DDL
      • 在ObjectScript中使用 Embedded SQL.
        ClassMethod CreateTable() As %String
        {
         &sql(CREATE TABLE Sample.Employee (
           EMPNUM              INT NOT NULL,
           NAMELAST            CHAR (30) NOT NULL,
           NAMEFIRST           CHAR (30) NOT NULL,
           STARTDATE           TIMESTAMP,
           SALARY              MONEY,
           ACCRUEDVACATION     INT,
           ACCRUEDSICKLEAVE    INT,
           CONSTRAINT EMPLOYEEPK PRIMARY KEY (EMPNUM)))
         IF SQLCODE=0{ WRITE "Table created" RETURN "Success"}
         ELSEIF SQLCODE=-201 { WRITE "Table already exists"  RETURN SQLCODE}
         ELSE { WRITE "Serious SQL Error, returing SQLCODE " RETURN SQLCODE_" "_%msg}
        }
0
0 568
文章 Jingwei Wang · 七月 14, 2022 6m read

本文概述了InterSystems SQL的特点,特别是那些没有被SQL标准所涵盖或与InterSystems IRIS 数据平台的统一数据架构有关的特点。假定你已有SQL的知识,本文不是SQL概念或语法的介绍。

在InterSystems SQL中,数据是在表内呈现的。每个表都被定义为包含若干列。一个表可以包含零个或多个数据值的行。以下术语大致上是等同的。

数据 关系型数据库术语 InterSystems SQL术语 InterSystems IRIS术语
database          schema schema package
database table table persistent class
field column column property
record row row  

schema

SQL schema提供了一种将相关表、视图、存储过程和缓存查询分组的方法。模式的使用有助于防止在表一级的命名冲突,因为一个表、视图或存储过程的名称必须只在其schema内是唯一的。一个应用程序可以在多个schema中指定表。

SQL schema对应于IRIS中持久化的类包。

0
0 682
文章 Jingwei Wang · 七月 14, 2022 6m read


InterSystems SQL为存储在IRIS数据库中的数据提供不折不扣的、标准的关系型访问。

InterSystems SQL具有以下优点。

高性能和可扩展性 - InterSystems SQL的性能和可扩展性优于其他关系型数据库产品。

与IRIS对象技术的集成 - InterSystems SQL与IRIS对象技术紧密集成。你可以混合使用关系型和对象型的数据访问,而不牺牲任何一种方法的性能。

低维护 - 与其他关系型数据库不同,IRIS应用程序不需要在部署的应用程序中重建索引和压缩表。

支持标准SQL查询 - InterSystems SQL支持SQL-92标准语法和命令。

你可以将InterSystems SQL用于许多目的,包括。

基于对象和Web应用程序 - 你可以在InterSystems Object和Caché Server Page应用程序中使用SQL查询,以执行强大的数据库操作,如查询和搜索。

在线事务处理 - InterSystems SQL为插入和更新操作以及通常在事务处理应用程序中发现的查询类型提供出色的性能。

BI和数据仓库 - IRIS多维数据库引擎和位图索引技术的结合使其成为数据仓库式应用的绝佳选择。

点对点查询和报告 - 你可以使用InterSystems SQL包含的全功能ODBC和JDBC驱动来连接到流行的报告和查询工具。

0
0 368
文章 姚 鑫 · 七月 14, 2022 3m read

第五章 使用嵌入式 Python (二)

在 Python 脚本文件 (.py) 中

还可以使用 irispython 命令执行 Python 脚本。

考虑 Windows 系统上的文件 ,其中包含以下代码:

# print the members of the Fibonacci series that are less than 10
print('Fibonacci series:')
a, b = 0, 1
while a < 10:
    print(a, end=' ')
    a, b = b, a + b

# import the iris module and show the classes in this namespace
import iris
print('\nInterSystems IRIS classes in this namespace:')
status = iris.cls('%SYSTEM.OBJ').ShowClasses()
print(status)

可以从命令行运行 ,如下所示:

C:\InterSystems\IRIS\bin>set IRISUSERNAME = <username>

C:\InterSystems\IRIS\bin>set IRISPASSWORD = <password>

C:\InterSystems\IRIS\bin>set IRISNAMESPACE = USER

C:\InterSystems\IRIS\bin>irispython \python\test.py
Fibonacci series:
0 1 1 2 3 5 8
InterSystems IRIS classes in this namespace:
User.Company
User.Person
1
0
0 163
文章 Claire Zheng · 七月 14, 2022 4m read

多院区信息化建设离不开医院的管理模式,这是在建设信息系统前我们必须要搞清楚的事。比如医院财务是不是独立、分院之间住院患者流转是转科还是转院、检验检查是不是可以跨院区预约,是否有统一的职能部门管理业务流程等等。类似这样一些问题在建设前要认真梳理,做好多院区信息建设的顶层布局。

0
0 531
文章 Claire Zheng · 七月 14, 2022 10m read

2022年7月1日,由国家卫生健康委医院管理研究所指导、《中国数字医学》杂志社有限公司主办、《中国数字医学》杂志社陕西通联站协办、东华医为科技有限公司与InterSystems中国支持的“医院数字化转型研讨会”在西安召开。以下为中南大学湘雅医院网络信息中心主任冯嵩在此次论坛上的分享。

0
0 337
文章 姚 鑫 · 七月 13, 2022 3m read

第四章 使用嵌入式 Python (一)

嵌入式 Python 允许使用 Python 作为编程 IRIS 应用程序的本机选项。

预备知识

使用嵌入式 所需的 版本取决于运行的平台。

在 Microsoft Windows 上, 安装工具包安装正确版本的 Python(当前为 ),仅用于嵌入式 。如果在开发机器上并希望将 用于一般用途,建议从 下载并安装相同的版本。

许多基于 UNIX 的操作系统都安装了 。如果需要安装,请使用包管理器为操作系统推荐的版本,例如:

  • macOS:使用 Homebrew 安装 Python 3.9
  • :
  • :

如果收到“无法加载 ”的错误,这意味着没有安装 Python,或者系统上安装了意外版本的 。使用上述方法之一安装或重新安装。

在基于 的系统上,可能希望使用 命令安装 包。如果尚未安装 ,请使用系统的包管理器安装包 。

要防止在运行 时出现 错误,请启用 。在管理门户中,,选择 ,然后选中启用服务框。

运行嵌入式 Python

本节详细介绍了运行 的几种方法:

从Python Shell

可以从终端会话或命令行启动 。

从终端启动 Python Shell

通过调用 类的 方法,从 终端会话启动 。这将以交互模式启动 解释器。终端会话中的用户和命名空间被传递给 。

通过键入命令 退出 。

0
0 314
文章 Jeff Liu · 二月 5, 2021 5m read

VSCode 是目前很流行的一款免费开发工具,IRIS也支持使用其进行连接和开发,相比Studio 只能在windows 环境使用,Vscode 可以跨平台使用。

我们传统的工具Studio 是连接代码服务器的形式,不能便捷的使用目前流行的有本地代码的版本控制工具(如git),但VSCode可以存在本地代码,并且能方便的使用各类存在本地代码的版本控制工具。

以下的内容会帮助大家来配置使用VSCode连接IRIS 进行开发。

4
3 1619