在Caché基础课程中,同学们同时学习了Caché开发和ObjectScript语法。为了帮助大家完成练习,我们提供了ObjectScript快速参考(俗称 "小抄")。
它不是所有ObjectScript的参考资料! 它是学生在课程中使用的ObjectScript命令和函数的列表,以及对象、集合等的常用语法。它还包含一些有用的宏。
我们正在为开发者社区提供一个pdf版本。
在Caché基础课程中,同学们同时学习了Caché开发和ObjectScript语法。为了帮助大家完成练习,我们提供了ObjectScript快速参考(俗称 "小抄")。
它不是所有ObjectScript的参考资料! 它是学生在课程中使用的ObjectScript命令和函数的列表,以及对象、集合等的常用语法。它还包含一些有用的宏。
我们正在为开发者社区提供一个pdf版本。
在测试你的代码时,你经常会遇到需要检查对象的实际内容。无论是使用 ZWRITE 还是 $system.OBJ.Dump(),
你会得到一个简单的属性图片,"--- 属性值---"
而 "--- swizzled references ---" 更容易让人混淆
用“--- calculated references ---" 你只是被留在了后面。
ObjectScriptt至少有三种处理错误的方法(状态代码status codes、异常 exceptions, SQLCODE等)。大多数系统代码使用状态码,但由于一些原因,异常更容易处理。在处理遗留代码时,你要花一些时间在不同的技术之间进行转换。我经常使用这些片段作为参考。希望它们对其他人也是有用的。
///Status from SQLCODE:set st $$$ERRORClass Extends
此方法返回源代码文件名列表。可选的 cat 和 type 约束源代码文件的类型。
GET http://server:port/api/atelier/v1/namespace/docnames
GET http://server:port/api/atelier/v1/namespace/docnames/cat/type
其中
cat 指定类别代码:CLS = class; RTN = routine; ; 。默认为 。SQL 过滤器。以下是返回的内容,源代码文件描述符数组:
此方法返回自数据库具有指定哈希值以来已修改的源代码文件列表。它以 JSON 数组的形式传递数据库键和哈希列表。
医疗行业的互操作性在改善病人护理、降低医疗服务提供者的成本以及为提供者提供更准确的情况方面发挥着重要作用。然而,由于有这么多不同的系统,数据的格式也有很多不同的方式。有许多标准被创造出来以试图解决这个问题,包括HL7v2、HL7v3和CDA,但每一种都有其缺点。
FHIR,即快速医疗互操作性资源,是一种新的医疗数据格式,旨在解决这些问题。它是由国际卫生级七组织(HL7)开发的,该组织还开发了HL7v2、HL7v3和CDA。
今天我们将探讨如何在VS代码中借助IntelliSense和自动完成功能,通过使用FHIR Schema 创建和验证FHIR资源。
第 1 步 :从FHIR 官方网站 https://www.hl7.org/fhir/下载 JSON schema file 文件用来做资源校验
.png)
第 2 步: 创建文件夹(在这个例子中,我使用病人文件夹和病人资源),并将提取的fhir.schema.json文件复制到同一文件夹,然后从VS Code中打开文件夹
第 3 步: 通过修改setting.json文件,设置VS代码以识别FHIR模式。
按CTRL+SHIFT+P并输入工作区设置JSON文件
第 4 步: 在同一文件夹中创建一个新文件patient.fhir.json。
此方法返回命名数据库的 METADATA.zip 文件的二进制内容。 Atelier 使用此文件来存储索引信息,以便为将来的会话保留此信息。
GET http://server:port/api/atelier/v1/%25SYS/metadata/database
注意:因为 是 URL 特殊字符,所以要指定文字 %,必须在其后跟 (百分号字符的十六进制代码)。因此,必须使用 来指定文字 。
HTTP 200 如果正常。HTTP 404。HTTP 500 如果发生意外错误(详细信息将在状态错误数组中)。此方法返回在服务器上定义或为服务器上指定命名空间定义的 应用程序列表。
其中:
指定命名空间的名称。如果未指定命名空间,则此方法返回所有命名空间的 应用程序。
注意:因为 是 特殊字符,所以要指定文字 %,必须在其后跟 (百分号字符的十六进制代码)。因此,必须使用 来指定文字 。
可以传递 参数 以返回包含更详细描述应用程序的对象的数组。
以下返回的内容是一个列出已定义
源代码文件 REST 接口支持以下方法:
GetServer:返回有关服务器的信息。HeadServer:返回服务器的 HttpHeader。GetJobs:返回正在运行的列表。GetMetaData:返回命名数据库的 文件的内容。GetCSPApps:返回 应用程序列表。此方法返回有关服务器的信息,包括服务器上可用的 源代码文件 版本和名称空间。
{
"status": {
"errors": [],
"summary": ""
},
"console": [],
"result": {
"content": {
"version": "IRIS for Windows (x86-64) 2018.1.1 (Build 515U) Mon Feb 5 2018 08:24:13 EST",
"id": "98E1697E-13F9-4D6A-8B73-827873D1D61C",
"api": 2,
"features": [
...
],
"namespaces": [
"%SYS",
"USER"
]
}
}
}
Compile 方法编译传入 JSON 数组中名称指定的源代码文件。例如,要编译 xyz.mac,请发布以下内容:
http://localhost:52773/api/atelier/v1/INVENTORY/action/compile
使用以下 消息:
["xyz.mac"]
该方法返回:
{
"status": {
"errors": [],
"summary": ""
},
"console": [
"",
"Compilation started on 08/14/2016 15:25:20 with qualifiers 'cuk'",
"xyz.int is up to date. Compile of this item skipped.",
"Compilation finished successfully in 0.008s."
],
"result": {
"content": []
}
}
对于一些源代码文件,例如类, 在返回的内容中返回存储信息。
DeleteDoc 方法删除 中指定的文件。 方法与
要获取有关命名空间中源代码文件的信息:
GetDocNames 方法获取文件的名称。GetDoc 方法获取一个文件的内容,也可以用GetDocs 方法获取多个文件的内容。GetModifiedDocNames 方法仅获取内容发生变化的源代码文件的名称或使用带有 标头的 GetDoc 方法。方法返回映射到命名空间的所有数据库中的所有源代码文件的名称。
{
"status": {
"errors": [],
"summary": ""
},
"console": [],
"result": {
"content": [
{
"name": "%Api.DocDB.cls",
"cat": "CLS",
"ts": "2016-08-03 20:01:42.000",
"upd": true,
"db": "IRISLIB",
"gen": false
},
...
{
"name": "EnsProfile.mac",
"cat": "RTN",
"ts": "2003-09-19 13:53:31.000",
"upd": true,
"db": "INVENTORYR",
"gen": false
},
...
{
"name": "xyz.mac",
"cat": "RTN",
"ts": "2016-08-11 15:05:02.167",
"upd": false,
"db": "INVENTORYR",
"gen": false
}
]
}
}
本章提供了一个简短的教程,通过一系列示例演示如何使用源代码文件 REST API。它包含以下部分:
API 基础Atelier 用于访问 IRIS 源代码文件的 API 使用 架构风格。 的名字来源于“Representational State Transfer”。与许多 一样 源代码文件 使用 、、、 和 方法,并将 用于传入和传出消息体。
要调用 方法,需要了解以下内容:
HTTP 方法——它是以下之一:GET、POST、、 或 。Content-Type application/json,指定入站负载以 JSON 格式提供。必须为所有 POST 和 方法指定此标头。PutDoc 调用检查源代码文件自上次访问以来是否被修改。推荐一篇文章,南方医院HIS系统的更换与建设探索!
此 REST API 提供对源代码文件的访问。我们开发此 API 是为了允许 Atelier(我们基于 的 )访问 服务器上的 代码文件。可以使用 执行访问 代码文件所需的操作。这些行动包括:
IRIS 实例上可用的命名空间IRIS 类或例程这些操作提供了访问 IRIS 源代码文件的机制。为了创建 开发环境,应该了解此 API 并全面了解 源代码文件如何在 中使用。
这是一个特殊用途的 。如果正在创建开发环境或处理类似的应用程序,例如类浏览器,可能会发现此 很有用。但是,它不是用于访问 IRIS 对象的通用 。
本文档描述了 源代码文件 的版本 和 。 的未来版本可能支持此 的更高版本,提供额外的调用,但将始终能够调用早期版本。版本 的 在 中包含 ,版本 的 包含 。可以通过调用 方法找出 提供的此 的版本。
下面介绍 的主要功能以及提供这些功能的方法:
获取有关服务器环境的信息:
GetServer 方法提供有关服务器的重要信息,包括服务器上的命名空间。GetNamespace可以定义 REST 服务以处理不同格式的数据,例如 JSON、XML、文本或 。 调用可以通过在 请求中指定 元素来指定它期望发送的数据的形式,并且可以通过在 请求中指定 元素来请求返回数据格式。
在 示例中, 方法检查 REST 调用是否使用以下内容请求 数据:
If $Get(%request.CgiEnvs("HTTP_ACCEPT"))="application/json"
服务返回的任何字符串值都可以本地化,以便服务器以不同语言存储多个版本的字符串。然后,当服务接收到包含 HTTP 标头的 请求时,服务会使用相应版本的字符串进行响应。
本地化 服务:
$$$Text 宏的实例,为宏参数提供如下值:本附录描述了如何通过继承 %CSP.REST 类来手动创建 REST 服务;此过程创建了一个手动编码的 REST 服务,它不能与所有 管理工具一起使用。
要手动定义 服务,请执行以下操作:
REST 服务类 — %CSP.REST 的子类。在子类中:
URL 映射,该映射指定为 REST URL 和 HTTP 方法执行的 方法。Web 会话下执行还是与其他 调用共享一个会话。如果想将实现代码与调度代码分开,可以在单独的类中定义实现 REST 服务的方法,并从 URL 映射中调用这些方法。
要定义 应用程序及其安全性,请转至 应用程序页面(单击System Administration > Security > Applications > Web Applications)。
定义 应用程序时,将 设置为 REST 服务类的名称。
此外,将应用程序的名称指定为 调用的 的第一部分。示例名称为 或 ,但可以指定 中允许的任何文本。
可以在一个命名空间中定义多个 服务类。每个拥有自己入口点的 服务类都必须拥有自己的
本附录列出了 API 管理工具在生成 REST 服务类时使用的 OpenAPI 2.0 规范的属性。此处未列出的属性将被忽略。有几个扩展属性;它们的名称以 x-ISC 开头。
basePath
consumes
host
(请注意, 管理工具在生成代码时不使用 对象的任何属性)
(for details, see “Parameter Object”)
(for details, see “Path Item Object”)
info (for details, see “Info Object”)
swagger (must be "2.0")
有关这些属性的详细信息,请参阅 https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#swagger-object。
title
x-ISC_RequiredResource
此参考列出了 /api/mgmnt/ 服务中的端点,所有这些端点都适用于较新的 REST 服务。下表总结了端点并指出它们是否也适用于手动编码的 REST 服务。
| Endpoint | Summary | Applies to NEWER REST Services? | Applies to Manually-Coded REST Services? |
|---|---|---|---|
| DELETE /api/mgmnt/v2/:ns/:app | 删除 REST 服务 |
YES | no |
| GET /api/mgmnt/ | 列出此服务器上启用 REST 的 Web 应用程序 |
YES | YES |
| GET /api/mgmnt/v1/:ns/restapps | 列出命名空间中启用 REST 的 应用程序 |
YES | YES |
| GET /api/mgmnt/v1/:ns/spec/:app | 返回 REST 服务的 规范 |
no | YES |
本章讨论如何发现实例上可用的 REST 服务以及如何为 REST 服务生成文档。
/api/mgmnt 服务发现 服务/api/mgmnt 服务包括可用于发现 服务类和启用 REST 的 应用程序的调用。
要使用 服务来发现实例上可用的 REST 服务,请使用以下 调用:
HTTP 操作,选择或指定 GET。http://localhost:52773/api/mgmnt/v2/
或者,如果只想检查一个命名空间:
http://localhost:52773/api/mgmnt/v2/:namespace
其中 是服务器的名称, 是运行 的 服务器端口,命名空间是要检查的命名空间。
(请注意,这些调用会忽略手动编码的 服务。要发现手动编码的 应用程序,请使用调用 和 。)
如果调用成功, 以 格式返回一个列出 服务的数组。例如:
[
{
"name": "%Api.Mgmnt.v2",
"webApplications": "/api/mgmnt",
"dispatchClass": "%Api.Mgmnt.v2.disp",
"namespace": "%SYS",
"swaggerSpec": "/api/mgmnt/v2/%25SYS/%Api.Mgmnt.v2"
},
{
"name": "myapp",
"webApplications": "/api/myapp",
"dispatchClass": "myapp.disp",
"namespace": "USER",
"swaggerSpec": "/api/mgmnt/v2/USER/myapp"
}
]
如果 REST 服务正在访问机密数据,应该对服务使用身份验证。如果需要为不同的用户提供不同级别的访问权限,还要指定端点所需的权限。
REST 服务设置身份验证可以对 IRIS REST 服务使用以下任何形式的身份验证:
HTTP 身份验证标头 — 这是 REST 服务的推荐身份验证形式。Web 会话身份验证 — 其中用户名和密码在 URL 中的问号后面指定。要通过 OAuth 2.0 对 应用程序进行身份验证,请执行以下所有操作:
REST 应用程序的资源服务器配置为 OAuth 2.0 资源服务器。在例程中,修改 的值并根据需要进行其他更改。
本节提供 CORS 的概述以及如何在 IRIS REST 服务中启用 CORS 的概述。
跨域资源共享 () 允许在另一个域中运行的脚本访问服务。
通常,当浏览器从一个域运行脚本时,它允许对同一个域进行 调用,但在对另一个域进行调用时不允许它们。此浏览器行为限制某人创建可滥用机密数据的恶意脚本。恶意脚本可能允许用户使用授予用户的权限访问另一个域中的信息,但随后在用户不知道的情况下,将机密信息用于其他用途。为了避免这种安全问题,浏览器一般不允许这种跨域调用。
在不使用跨域资源共享 (CORS) 的情况下,具有访问 REST 服务的脚本的网页通常必须与提供 服务的服务器位于同一域中。在某些环境中,将带有脚本的网页与提供 REST 服务的服务器放在不同的域中是很有用的。 支持这种安排。
下面提供了浏览器如何使用 处理 的简化描述:
DomOne 中的网页中的脚本包含对 DomTwo 域中的IRIS REST 服务的 。 具有 的自定义标头。下表列出了修改规范类的原因并简要总结了所需的更改:
| 原因 | 改变 |
|---|---|
| 更新或替换规范 | 手动修改 OpenAPI XData 块或通过重新生成规范类。 |
启用 REST 服务以支持 CORS |
手动修改 OpenAPI XData 块;还添加一个类参数并创建一个自定义调度超类。 |
启用 服务以支持 Web 会话 |
添加类参数。 |
| 指定使用端点所需的权限 | 手动修改 OpenAPI XData 块。 |
| 覆盖默认内容类型、响应字符集或输入流处理 | 添加类参数。 |
| 为服务方法指定一个非默认名称 | 手动修改 块。 |
无论何时编译规范类,编译器都会在同一个包中重新生成调度类并更新实现类。
只需将类参数添加到规范类并重新编译,就可以覆盖 REST 服务的几个关键方面。
REST 服务需要 application/json 内容类型。要覆盖它,请将以下内容添加到规范类:Parameter CONTENTTYPE = "some-content-type";
其中 some-content-type 是 MIME 内容类型。
REST 服务的响应消息采用 格式。要覆盖它,请将以下内容添加到规范类:Parameter CHARSET = "some-character-set";
本章讨论如何修改 REST 服务的实现类。
实现类最初包含存根方法,如下例所示:
/// Returns all pets from the system that the user has access to<br/>
/// The method arguments hold values for:<br/>
/// tags, tags to filter by<br/>
/// limit, maximum number of results to return<br/>
ClassMethod findPets(tags As %ListOfDataTypes(ELEMENTTYPE="%String"), limit As %Integer) As %Stream.Object
{
//(Place business logic here)
//Do ..%SetStatusCode(<HTTP_status_code>)
//Do ..%SetHeader(<name>,<value>)
//Quit (Place response here) ; response may be a string, stream or dynamic object
}
本章介绍如何使用 %REST.API 类来创建、更新和删除 REST 服务。
创建 REST 服务的推荐方法是从 服务的 OpenAPI 2.0 规范开始,并使用它来生成 服务类。要使用 类执行此操作:
REST 服务的 OpenAPI 2.0 规范,采用 格式,并将规范保存为文件。该文件必须是 编码的。classmethod CreateApplication(applicationName As %String,
swagger As %DynamicObject = "",
ByRef features,
Output newApplication As %Boolean,
Output internalError As %Boolean)
as %Status
本章介绍如何使用 ^%REST 例程创建和删除 REST 服务。
提示:还可以使用此例程更新REST服务;只需删除服务,然后重新创建它。
^%REST例程是一个简单的命令行界面。在任何提示下,可以输入以下答案:
^ - 使例程跳回上一个问题。? - 使例程显示一条列出所有当前选项的消息。q或 - 结束例程。此外,每个问题都会在括号中显示该问题的默认答案。
创建REST服务的推荐方法是从服务的规范开始,并使用该规范生成服务类。要使用例程执行此操作:
JSON格式的服务的规范。将规范另存为文件或记下可访问规范的URL。REST 服务的名称。该名称用作生成类的包名;使用有效的包名。如果想使用名称列表、l、 或 (在任何情况下都是变体),请将名称用双引号括起来。例如:然后,该例程会提示输入要使用的 规范的位置。输入完整路径名或 URL。
该例程在此命名空间中的指定包内创建、 和 类。然后该例程显示如下输出:
接下来,例程会询问否还想创建一个 应用程序。将使用此
本章介绍如何使用 /api/mgmnt 服务来创建、更新和删除 REST 服务。
/api/mgmnt 服务还提供了可用于发现和记录 服务的选项,如本书后面所述。
创建 REST 服务的推荐方法是为 服务创建 OpenAPI 2.0(也称为 )描述,并使用它来生成 服务类。如果您正在实现由第三方定义的 服务,他们可能会提供此 描述。有关 描述格式的详细信息,请参阅 规范。以下主题描述了如何使用 服务来执行此操作。
第一步,生成 服务类,如下所示:
JSON 格式创建或获取 REST 服务的 描述。POST。其中 是服务器的名称,52773 是运行 的 服务器端口, 是要在其中创建 服务的名称空间, 是要在其中创建类的包的名称.
本文介绍 IRIS® 中的 REST 和 REST 服务。
命名自,具有以下属性:
REST 是一种架构风格,而不是一种格式。尽管 REST 经常使用 HTTP 来传输消息并使用 来传递数据,但也可以将数据作为 或纯文本传递。 利用现有的 标准,例如 、、 和 。HTTP 方法的操作,例如 、、 和 。在 及更高版本中定义 接口有两种方法:
REST 接口的代码。使用规范优先的定义, 服务正式由以下组件组成:
管理工具生成实现类的存根版本,然后可以扩展它以包含必要的应用程序逻辑。 (逻辑当然可以调用此类之外的代码。)
类提供了可以调用的方法,以便设置 HTTP
大家好,
我想知道是否有可能获取自身的值来运行查询。
我想创建一些查询以在%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
}
}我想安装Windows版本的管理门户引擎来创建Cache InterSystems数据库
我想为Cache InterSystems创建一个样本数据库,并想通过Cache Entity Framework Provider访问它。但是,我无法找到一个特定的管理门户引擎来创建数据库。
你能指导一下如何在Windows中安装管理门户吗?
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?
大家好,我可以在RSA和DSA之间进行选择。 ECC似乎不受支持。有没有不使用外部二进制(例如curl)的解决方法?
RY
大家好,
我需要根据用户请求删除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 ?