清除过滤器
公告
Claire Zheng · 十一月 2, 2022
各位开发者社区的同学们,大家好!
在各位社区同学的大力支持下,我们的“首届技术征文大赛”圆满完赛!在过去一周多的时间里,我们整理了各类奖项及礼品,目前已经全部寄出!
最新寄出的是开发者征文大赛获奖者的奖品,请以下同学留意查收,如未收到快递信息,请及时与我们联系:
@Zhe Wang
@姚.鑫
@聆严 周
@John Pan
@he hf
@sun yao
@Meng Cao
@lizw lizw
@shaosheng shengshao
@Guangliang Zhang
@zhanglianzhu zhanglianzhu
@water huang
@yaoguai wan
@bai hongtao
@Liu Tangh
@li wang
@Yuxiang Niu
目前我们仍未收到以下几位获奖者的信息,请于11月30日前尽快与我们沟通奖品领取事宜哦:D
@Chang Liu
@li dong
@Vincent Wu
让我们一起期待下一次InterSystems开发者社区的精彩活动吧!如果大家有什么好点子,欢迎跟帖!✿✿ヽ(°▽°)ノ✿ 恭喜获奖的小伙伴 感谢 赞赞赞
公告
Michael Lei · 二月 13, 2023
Hi 开发者们,
我们非常高兴地向大家宣布此次InterSystems 开发者竞赛(Tool)的获奖者!
首先,我们要感谢提交了21 份申请的 优秀参与者们 🔥
我们很高兴知道您认为这个主题很重要!
事不宜迟,我们在此公布此次竞赛的获胜者是……
专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出:
🥇第一名,奖金5,000 美元,获奖项目irissqlcli ,开发者 @Dmitry.Maslennikov
🥈第二名,奖金3,000 美元,获奖项目DX Jetpack for VS Code,开发者 @John.Murray
🥉第三名,奖金1,500 美元,获奖项目OpenAPI-Suite,开发者 @Lorenzo.Scalese
🏅第四名,奖金750 美元,获奖项目iris-geo-map, 开发者 @Muhammad.Waseem
🏅第五名,奖金500 美元, 获奖项目iris-tripleslash,开发者 @José Roberto Pereira, @Henrique Dias, @Henry Pereira
更多获奖者:
🏅 奖金100 美元,获奖项目iris-log-viewer,开发者 @Oliver.Wilms
🏅 奖金100 美元,获奖项目iris-persistent-class-audit,开发者 @Stefan.Cronje1399
🏅 奖金100 美元,获奖项目iris-connections,开发者 @Yuri.Gomes
🏅 奖金100 美元,获奖项目cos-url-shortener,开发者 @Daniel.Aguilar
🏅 奖金100 美元,获奖项目iris-deploy-tools,开发者 @Francisco.López1549
社区提名奖(Community Nomination)- 获得总投票数最多的应用:
🥇第一名,奖金1,000 美元,获奖项目iris-tripleslash,开发者@José Roberto Pereira, @Henrique Dias, @Henry Pereira
🥈第二名,奖金750 美元,获奖项目Intersystems IRIS 平台队列趋势监控组件,开发者 @yubo.mao
🥉第三名,奖金500 美元,获奖项目irissqlcli,开发者 @Dmitry.Maslennikov
我们向所有参赛者和获奖者表示最诚挚的祝贺!所有参赛作品和投票情况可以到我们的参赛作品展示查看。
下次一起来参赛吧😎 恭喜 @Yubo Mao 同学,也感谢@王喆 和 @银行 郝 同学的参与,感谢所有参与投票的同学,期待大家更精彩的作品!
文章
Michael Lei · 二月 14, 2022
痴呆症是一个重大的全球性问题,困扰着5400万人,到2050年这个数字将上升到1.3亿。由英国剑桥大学的学者创立的Cognetivity Neurosciences公司设计了一个尖端的解决方案,以帮助缓解全球痴呆症的流行。
根植于先进神经科学的简单解决方案
在出现临床症状之前的早期检测,为专家干预和改变生活方式打开了大门,可以减缓痴呆症的发展,提高生活质量。生活方式的改变有可能将症状的出现推迟五年,进而将普通人群中的痴呆症发病率降低50%。
Cognetivity Neurosciences的综合认知评估测试(ICA)是基于人类对动物刺激的强烈反应,以及健康的大脑在不到200毫秒内处理动物图像的能力。
ICA将基于云的人工智能和神经科学的进展结合起来,进行快速的动物/非动物视觉分类测试,目的是在记忆症状出现之前发现疾病的迹象。它涉及在阿尔茨海默症的前症状阶段受到影响的大脑区域,并检测出信息处理速度的细微损伤。
ICA基于云的敏捷性使临床医生和用户能够在熟悉的硬件上进行ICA测试,如iPad和智能手机,并在任何有互联网连接的地方进行。
Cognetivity Neurosciences正在通过一个先进的、可扩展的解决方案,利用神经科学的进步、人工智能和InterSystems IRIS for Health云数据管理平台的力量,重新发明痴呆症检测。
核心需求是数据的互操作性
任何新的诊断技术的成功都在很大程度上受其与现有工作流程和信息系统的整合程度的影响。对于像ICA平台这样具有巨大全球潜力的解决方案,要想在临床上有效和可扩展,它必须与已有的临床数据整合。在大多数国家,这需要完全遵守强制性的医疗数据标准,如HL7® FHIR®和HL7 V2,这些标准规定了互操作性。
Cognetivity Neurosciences选择InterSystems作为其技术合作伙伴,以实现这一重要的数据管理和互操作性。InterSystems IRIS for Health™数据平台非常适合这一高要求的角色,它是专门为从医疗保健数据中提取洞察力而设计的。它完全云中立,支持在所有主要的公有云、多云和混合云环境中部署。InterSystems IRIS for Health还使该团队能够减少在创建平台时使用的不同技术的数量。结果是--关键信息在正确的时间流向正确的人,这是高效采用和有效决策所需的关键因素。
"Cognetivity Neurosciences的首席技术官Jonathan El-Sharkawy说:"InterSystems作为我们的互操作性和集成合作伙伴,选择是自然的。"从一开始,我们就对引进他们帮助我们发展的决定充满信心。InterSystems IRIS for Health的功能非常强大,经过验证并被英国国家卫生服务系统(NHS)完全接受,更重要的是,InterSystems团队在NHS环境中拥有丰富的经验。"
InterSystems IRIS for Health完全云中立,支持在公有云、多云和混合云环境中部署。
一个完全集成的、用户友好的、能发挥作用的测试
InterSystems IRIS for Health使Cognetivity Neurosciences能够与消费者设备和医疗级设备有效连接,并让患者使用现有的iPad和智能手机等硬件进行ICA测试。
随着Cognetivity Neurosciences公司向英国以外的地区扩展,与电子病历(EHR)的高度整合正在推动其技术的广泛采用。该公司还希望扩展到多发性硬化症等疾病的早期检测。
InterSystems IRIS for Health为Cognetivity Neurosciences提供了其尖端技术所需的互操作性和灵活性,以帮助改变整个NHS的痴呆症护理路径,并满足全球对远程测试、诊断和监测工具的广泛需求。
"El-Sharkawy说:"InterSystems IRIS for Health独特的数据管理和整合能力对我们的工作至关重要。"对我们来说,InterSystems IRIS for Health已经成功地与这么多医疗信息系统整合,包括最大的EHR供应商的系统,这对我们来说意义重大。随着我们的平台无缝协作,现在我们可以使用的国际应用程序的范围非常大。"
随着我们的平台无缝连接,我们现在可以使用的国际应用范围很广。
临床实施进展顺利,有可能使数百万人受益
ICA测试是早期痴呆症检测的一个重大进步,使其更快、更便宜、更可靠。它的简单性消除了语言、文化或教育障碍,使该解决方案几乎在世界任何地方都能得到采用。该平台得到了英国药品和保健品监管局的批准,并已在NHS精神健康专业机构North Staffordshire Combined Healthcare NHS Trust部署。它还在英国桑德兰的初级保健中使用。
ICA平台也被英国政府的G-Cloud所接受,并被选入美国德克萨斯医学中心秋季2020创新项目的最后一批小组。
其创新的力量,以及InterSystems IRIS for Health先进的云数据管理和整合能力,使Cognetivity Neurosciences能够大幅扩展,帮助全球数百万人。
"Cognetivity Neurosciences首席执行官Sina Habibi博士说:"我们与InterSystems的合作大有裨益,帮助我们实现了我们的愿景。"和我们一样,InterSystems的员工也热衷于利用技术对病人护理进行重大的、有影响力的改进。InterSystems IRIS for Health为我们提供了我们的尖端技术所需的互操作性和敏捷性,以帮助改变NHS和国际上的痴呆症护理路径。我们可以满足对更快、更准确和更有成本效益的诊断的加速需求。"
关于Cognetivity Neurosciences(https://cognetivity.com/about/)
Cognetivity Neurosciences是一家成立于英国剑桥大学的医疗技术公司,它开发了一种由人工智能驱动的五分钟认知功能测试。其综合认知评估(ICA)是一种易于使用、敏感、可靠和可扩展的测试,代表了监测大脑健康的重大进展。ICA通过触摸屏设备和网络提供,为测量认知能力提供了一个独特的端到端解决方案。它可以早期发现神经系统问题,为病人带来更好的结果,并降低医疗系统的成本。Cognetivity正在美国、欧洲、中东和其他地区的医疗和企业市场上将ICA商业化。预计到2026年,全球认知评估和训练的市场规模将达到114亿美元,以26.6%的年均增长率增长,美国、欧盟和中东地区有超过3.5亿的55岁以上人口,Cognetivity的独特技术有望改变测量大脑健康的方式,并服务数百万以上的人群。
文章
Michael Lei · 十二月 16, 2021
# Iris-python-template
包含各种Python代码的项目模版,可用于InterSystems IRIS 社区容器版Community Edition with container。
特性 :
* Notebooks 记事本
* Embedded Python 内核
* ObjectScript 内核
* Vanilla Python 内核
* Embedded嵌入式 Python
* Code example代码样例
* Flask demo
* IRIS Python Native 原生APIs
* Code example

# 2. 目录
- [1. iris-python-template模版](#1-iris-python-template)
- [2. 目录](#2-table-of-contents)
- [3. 安装](#3-installation)
- [3.1. Docker](#31-docker)
- [4. 开始编程](#4-how-to-start-coding)
- [4.1. 预设条件Prerequisites](#41-prerequisites)
- [4.1.1. 使用 ObjectScript编程](#411-start-coding-in-objectscript)
- [4.1.2. 使用嵌入式Embedded Python](#412-start-coding-with-embedded-python)
- [4.1.3. 使用记事本Notebooks编程](#413-start-coding-with-notebooks)
- [5. Repository的内容](#5-whats-inside-the-repository)
- [5.1. Dockerfile](#51-dockerfile)
- [5.2. .vscode/settings.json](#52-vscodesettingsjson)
- [5.3. .vscode/launch.json](#53-vscodelaunchjson)
- [5.4. .vscode/extensions.json](#54-vscodeextensionsjson)
- [5.5. src folder](#55-src-folder)
- [5.5.1. src/ObjectScript](#551-srcobjectscript)
- [5.5.1.1. src/ObjectScript/Embedded/Python.cls](#5511-srcobjectscriptembeddedpythoncls)
- [5.5.1.2. src/ObjectScript/Gateway/Python.cls](#5512-srcobjectscriptgatewaypythoncls)
- [5.5.2. src/Python](#552-srcpython)
- [5.5.2.1. src/Python/embedded/demo.cls](#5521-srcpythonembeddeddemocls)
- [5.5.2.2. src/Python/native/demo.cls](#5522-srcpythonnativedemocls)
- [5.5.2.3. src/Python/flask](#5523-srcpythonflask)
- [5.5.2.3.1. How it works](#55231-how-it-works)
- [5.5.2.3.2. Launching the flask server](#55232-launching-the-flask-server)
- [5.5.3. src/Notebooks](#553-srcnotebooks)
- [5.5.3.1. src/Notebooks/HelloWorldEmbedded.ipynb](#5531-srcnotebookshelloworldembeddedipynb)
- [5.5.3.2. src/Notebooks/IrisNative.ipynb](#5532-srcnotebooksirisnativeipynb)
- [5.5.3.3. src/Notebooks/ObjectScript.ipynb](#5533-srcnotebooksobjectscriptipynb)
# 3. 安装
## 3.1. Docker
这个 repo已经docker化,你可以clone/git 把repo拉到任何本地目录下
```
git clone https://github.com/grongierisc/iris-python-template.git
```
打开该目录下的终端并执行:
```
docker-compose up -d
```
并为记事本Notebooks打开 http://localhost:8888/tree
或, 在VSCode打开克隆的目录, 启动docker-compose 并通过VSCode 菜单打开URL:
# 4.如何开始编程
## 4.1. 前提
确保安装好 [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) and [Docker desktop](https://www.docker.com/products/docker-desktop)
这个repository 已经可以开始在带ObjectiveScript 插件的VSCode中编写代码.
安装 [VSCode](https://code.visualstudio.com/), [Docker](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker) and [ObjectScript](https://marketplace.visualstudio.com/items?itemName=daimor.vscode-objectscript) 插件并打开文件夹.
### 4.1.1. 用ObjectScript编程
打开 /src/ObjectScript/Embedded/Python.cls 类并开始尝试变更 - 它会在运行IRIS docker container容器中被编译.
### 4.1.2. 用嵌入式Embedded Python编程
最简单的方法是在容器中运行VsCode.
要连上一个 Docker container, 要么从命令板中选择 **Remote-Containers: Attach to Running Container...** (`kbstyle(F1)`) 或者使用在活动Activity条中选择 **Remote Explorer** 并从 **Containers** 视图中选择 **Attach to Container**动作在你希望连接的容器上.

然后配置你的python 解析器 /usr/irissys/bin/irispython
### 4.1.3. 用Notebooks编程
打开这个网址 : http://localhost:8888/tree
你可以用三个不同的内核访问三个不同的notebooks
* Embedded嵌入式 Python 内核 kernel
* ObjectScript 内核kernel
* Vanilla python3 内核kernel
# 5. Repository的内容
## 5.1. Dockerfile
一个安装了某些python 依赖 (pip, venv) 和 容器Sudo的dockerfile 以方便使用.
接下来创建开发目录并拷贝在这个 git repository里
启动IRIS 并倒入Titanics csv 文件, 然后激活 **%Service_CallIn** for **Python Shell**.
使用相关的docker-compose.yml 文件来轻松设置另外的参数如 port number 以及你在哪里配置 keys 和host 文件夹.
dockerfile 以安装python模块所需要的东西为终止.
最后一部分是关于安装jupyter notebook记事本和它的内核.
使用 .env/ 文件 来调整在docker-compose里面使用到的dockerfile.
## 5.2. .vscode/settings.json
配置文件可以马上用 [VSCode ObjectScript plugin](https://marketplace.visualstudio.com/items?itemName=daimor.vscode-objectscript)开始编程
## 5.3. .vscode/launch.json
配置文件如果你想用VSCode ObjectScript debug.
[Read about all the files in this article](https://community.intersystems.com/post/dockerfile-and-friends-or-how-run-and-collaborate-objectscript-projects-intersystems-iris)
## 5.4. .vscode/extensions.json
如果你想在容器中运行VSCode添加拓展建议的文档.
[更多信息请查看这里](https://code.visualstudio.com/docs/remote/containers)

这在使用embedded python非常有用.
## 5.5. src folder文件夹
这个文件夹被分成两部分, one 用来保存 ObjectScript 样例,另一个保存Python 代码.
### 5.5.1. src/ObjectScript
显示如何在IRIS中使用python的不同部分代码.
#### 5.5.1.1. src/ObjectScript/Embedded/Python.cls
所有的注释(都是用法文写的因为是法国人编的代码。。。).
```objectscript
/// Embedded python example
Class ObjectScript.Embbeded.Python Extends %SwizzleObject
{
/// HelloWorld with a parameter
ClassMethod HelloWorld(name As %String = "toto") As %Boolean [ Language = python ]
{
print("Hello",name)
return True
}
/// Description
Method compare(modèle, chaine) As %Status [ Language = python ]
{
import re
# compare la chaîne [chaîne] au modèle [modèle]
# affichage résultats
print(f"\nRésultats({chaine},{modèle})")
match = re.match(modèle, chaine)
if match:
print(match.groups())
else:
print(f"La chaîne [{chaine}] ne correspond pas au modèle [{modèle}]")
}
/// Description
Method compareObjectScript(modèle, chaine) As %Status
{
w !,"Résultats("_chaine_","_modèle_")",!
set matcher=##class(%Regex.Matcher).%New(modèle)
set matcher.Text=chaine
if matcher.Locate() {
write matcher.GroupGet(1)
}
else {
w "La chaîne ["_chaine_"] ne correspond pas au modèle ["_modèle_"]"
}
}
/// Description
Method DemoPyhtonToPython() As %Status [ Language = python ]
{
# expression régulières en python
# récupérer les différents champs d'une chaîne
# le modèle : une suite de chiffres entourée de caractères quelconques
# on ne veut récupérer que la suite de chiffres
modèle = r"^.*?(\d+).*?$"
# on confronte la chaîne au modèle
self.compare(modèle, "xyz1234abcd")
self.compare(modèle, "12 34")
self.compare(modèle, "abcd")
}
Method DemoPyhtonToObjectScript() As %Status [ Language = python ]
{
# expression régulières en python
# récupérer les différents champs d'une chaîne
# le modèle : une suite de chiffres entourée de caractères quelconques
# on ne veut récupérer que la suite de chiffres
modèle = r"^.*?(\d+).*?$"
# on confronte la chaîne au modèle
self.compareObjectScript(modèle, "xyz1234abcd")
self.compareObjectScript(modèle, "12 34")
self.compareObjectScript(modèle, "abcd")
}
/// Description
Method DemoObjectScriptToPython() As %Status
{
// le modèle - une date au format jj/mm/aa
set modèle = "^\s*(\d\d)\/(\d\d)\/(\d\d)\s*$"
do ..compare(modèle, "10/05/97")
do ..compare(modèle, " 04/04/01 ")
do ..compare(modèle, "5/1/01")
}
}
```
* HelloWorld
*用python简单地打个招呼吧
*在标签Tag熵使用OjectScript wrapper打包器 [ Language = python ]
* 对比
* 一个用来对比带有regx的字符串的python 函数, 如果匹配就打印,否则如果找不到匹配就不打印
* compareObjectScript
* ObjectScript 中跟Python 一样的函数
* DemoPyhtonToPython
* 显示如何在ObjectScript中打包的python代码中使用python函数
```objectscript
set demo = ##class(ObjectScript.Embbeded.Python).%New()
zw demo.DemoPyhtonToPython()
```
* DemoPyhtonToObjectScript
* 显示如何调用ObjecScript 函数的python函数
* DemoObjectScriptToPython
* 显示如何调用python函数的ObjectScript函数(好像绕口令,哈哈)
#### 5.5.1.2. src/ObjectScript/Gateway/Python.cls
显示如何用gateway功能调用外部python 代码的ObjectiveScritp 类.
在这个栗子中python 代码并不在同一IRIS进程中“被执行”.
```objectscript
/// Description
Class Gateway.Python
{
/// Demo of a python gateway to execute python code outside of an iris process.
ClassMethod Demo() As %Status
{
Set sc = $$$OK
set pyGate = $system.external.getPythonGateway()
d pyGate.addToPath("/irisdev/app/src/Python/gateway/Address.py")
set objectBase = ##class(%Net.Remote.Object).%New(pyGate,"Address")
set street = objectBase.street
zw street
Return sc
}
}
```
### 5.5.2. src/Python
显示如何在IRIS中使用嵌入式embedded python的不同部分的python 代码.
#### 5.5.2.1. src/Python/embedded/demo.cls
所有的注释(都是用法文写的因为是法国人编的代码。。。)
```python
import iris
person = iris.cls('Titanic.Table.Passenger')._OpenId(1)
print(person.__dict__)
```
首先倒入iris 模块来启用 嵌入式embedded python 能力.
从IRIS模块中打开一个带cls功能的持久化类 class.
请注意所有 `%` 功能被替换为 `_`.
你需要使用shell来运行这个例子 :
```shell
/usr/irissys/bin/irispython /opt/irisapp/src/Python/embedded/demo.py
```
#### 5.5.2.2. src/Python/native/demo.cls
显示如何在python代码中使用native api .
```python
import irisnative
# create database connection and IRIS instance
connection = irisnative.createConnection("localhost", 1972, "USER", "superuser", "SYS", sharedmemory = False)
myIris = irisnative.createIris(connection)
# classMethod
passenger = myIris.classMethodObject("Titanic.Table.Passenger","%OpenId",1)
print(passenger.get("name"))
# global
myIris.set("hello","myGlobal")
print(myIris.get("myGlobal"))
```
为了倒入 irisnative, 你需要在python环境中安装 native api wheels.
```shell
pip3 install /usr/irissys/dev/python/intersystems_irispython-3.2.0-py3-none-any.whl
```
然后你可以执行python代码
```shell
/usr/bin/python3 /opt/irisapp/src/Python/native/demo.py
```
请注意在这个例子中有一个连接是练到IRIS数据库的, 这意味着, **这个代码是在另一个不同的IRIS 线程中被执行**.
#### 5.5.2.3. src/Python/flask
一个完整的结合嵌入式embedded python和微框架flask的demo.
你可以测试一下 :
```
GET http://localhost:4040/api/passengers?currPage=1&pageSize=1
```
##### 5.5.2.3.1. 它是如何工作的
为了使用嵌入式embedded Python, 我们使用 `irispython` 作为python 解析 并do:
```python
import iris
```
就在文件的最开头.
我们将能够运行如下的方法methods:

正如你们看到的,为了 GET passenger 的 ID, 我们需要执行查询并使用它的结果集.
我们也可以直接用IRIS的对象:

在这里, 我们使用SQL 查询来获得所有表里的 ID, 并从`Titanic.Table.Passenger` 类带有 `%OpenId()` 方法method的表里获取每个passenger (请注意由于 `%` 在 Python是非法字符, 我们用下划线 `_` 来代替).
感谢Flask, 我们已经这样完成了所有的方法和路线.
##### 5.5.2.3.2. 启动 flask server
为了启动服务器, 我们用 `gunicorn` 和 `irispython`.
在 docker-compose 文件里, 我们增加了下面的行:
````yaml
iris:
command: -a "sh /opt/irisapp/server_start.sh"
````
这会在容器启动后(感谢 `-a` flag), 启动以下脚本:
````bash
#!/bin/bash
cd ${SRC_PATH}/src/Python/flask
${PYTHON_PATH} -m gunicorn --bind "0.0.0.0:8080" wsgi:app &
exit 1
````
Dockerfile 里的环境参数如下:
````dockerfile
ENV PYTHON_PATH=/usr/irissys/bin/irispython
ENV SRC_PATH=/opt/irisapp/
````
### 5.5.3. src/Notebooks
带有三种不同内核的三个不同的记事本Notebooks :
* 一个跑原生API的 Python3 内核
* 一个嵌入式Embedded Python 内核
* 一个 ObjectScript 内核
记事本Notebooks 在这里访问 http://localhost:8888/tree
#### 5.5.3.1. src/Notebooks/HelloWorldEmbedded.ipynb
这个是使用IRIS 嵌入式embedded python 内核的记事本notebook .
它展示了打开和保存持久化类和如何执行sql 查询.
#### 5.5.3.2. src/Notebooks/IrisNative.ipynb
这个notebook使用 vanilla python 内核.
它展示了如何执行IRIS原生 native apis.
#### 5.5.3.3. src/Notebooks/ObjectScript.ipynb
这个notebook 使用 ObjectScript 内核kernel.
它展示了如何运行ObjectSCript代码以及如何在ObjectScript 中使用嵌入式embedded python.
公告
Claire Zheng · 六月 3
Hi 开发者们!
我们来宣布 InterSystems 2025开发者竞赛:FHIR和数字医疗健康互操作性的优胜者!
感谢我们的参赛者,我们收到了 11份应用! 🔥
我们来宣布这些优胜者吧!
专家提名奖(Experts Nomination)
🥇第一名 - 5,000 美元 获奖项目 FHIRInsight app,开发者 @José.Pereira, @henry, @Henrique
🥈 第二名 - 2,500 美元 获奖项目 iris-fhir-bridge app,开发者@Muhammad.Waseem
🥉 第三名 - 1,000 美元 获奖项目 health-gforms app,开发者@Yuri.Gomes
🏅 第四名 - 500 美元 获奖项目 fhir-craft app,开发者@Laura.BlázquezGarcía
🏅 第五名 - 300 美元 获奖项目 CCD Data Profiler app,开发者@Landon.Minor
🌟 $100 获奖项目 IRIS Interop DevTools app,开发者@Chi.Nguyen-Rettig
🌟 $100 获奖项目 hc-export-editor app,开发者@Eric.Fortenberry
🌟 $100 获奖项目 iris-medbot-guide app,开发者 @shan.yue
🌟 $100 获奖项目 Langchain4jFhir app,开发者@ErickKamii
🌟 $100 获奖项目 ollama-ai-iris app,开发者@Oliver.Wilms
社区提名奖(Community Nomination)
🥇 第一名 - 1,000 美元 获奖项目 iris-medbot-guide app,开发者@shan.yue
🥈第二名 - 600 美元 获奖项目 FHIRInsight app,开发者@José.Pereira, @henry, @Henrique
🥉第三名 - 300 美元 获奖项目 FhirReportGeneration app,开发者@XININGMA
🏅 第四名-200 美元 获奖项目 iris-fhir-bridge app,开发者@Muhammad.Waseem
🏅 第五名-100美元 获奖项目 fhir-craft app,开发者@Laura.BlázquezGarcía
向获奖者表示最诚挚的祝贺!
一起来期待下次竞赛吧!
文章
姚 鑫 · 二月 25, 2021
# 第四十七章 Caché 变量大全 ^$JOB 变量
提供系统间IRIS进程(`JOB`)信息。
# 大纲
```java
^$JOB(job_number)
^$J(job_number)
```
# 参数
- `job_number` 输入ObjectScript命令时创建的系统特定OBJ编号。每个活动的InterSystems IRIS进程都有一个唯一的作业号。登录到系统会启动一个作业。在UNIX®系统上,作业号是调用InterSystems IRIS时启动的子进程的`PID`。`JOB_NUMBER`必须指定为整数;不支持十六进制值。
# 描述
可以将`^$JO`B结构化系统变量用作`$DATA`、`$ORDER`和`$QUERY`函数的参数,以获取有关本地InterSystems IRIS系统上是否存在InterSystems IRIS作业的信息。
# 示例
以下示例显示如何将`^$JOB`用作`$DATA`、`$ORDER`和`$QUERY`函数的参数。
## 作为$DATA的参数
`$DATA(^$JOB(job_number))`
`^$JOB`作为`$DATA`的参数返回一个整数值,该值指示指定的作业是否作为节点存在于`^$JOB`中。下表显示了`$DATA`可以返回的整数值。
Value | Meaning
---|---
0 | `JOB`不存在
1 | `JOB`存在
以下示例测试系统间IRIS进程是否存在。
```java
DHC-APP>SET x=$JOB
DHC-APP>WRITE !,$DATA(^$JOB(x))
1
```
变量`x`设置为当前进程的作业号(例如:4294219937)。写入操作返回布尔值1,表示此进程存在。
## 作为$ORDER的参数
`$ORDER(^$JOB(job_number),direction)`
`^$JOB`作为`$ORDER`的参数,按排序顺序将下一个或上一个`^$JOB`编号返回到指定的作业编号。如果不存在作为`^$JOB`节点的此类`JOB`编号,`$ORDER`将返回空字符串。
Direction参数指定是否返回下一个或上一个`job`编号。如果不提供方向参数,InterSystems IRIS会将排序顺序中的下一个`job`编号返回给指定的`job`编号。
以下子例程搜索InterSystems IRIS作业表,并将`job`号存储在名为`job`的本地数组中。
```java
/// d ##class(PHA.TEST.SpecialVariables).JOB()
ClassMethod JOB()
{
JOB
SET pid=""
FOR i=1:1 {
SET pid=$ORDER(^$JOB(pid))
QUIT:pid=""
SET JOB(i)=pid
}
zw JOB
WRITE "总共job有: ",i
QUIT
}
```
```java
DHC-APP>d ##class(PHA.TEST.SpecialVariables).JOB()
JOB(1)=612
JOB(2)=1424
JOB(3)=1972
JOB(4)=5624
JOB(5)=7244
JOB(6)=7864
JOB(7)=7872
JOB(8)=7892
JOB(9)=7920
JOB(10)=8332
JOB(11)=9048
JOB(12)=9084
JOB(13)=9340
JOB(14)=10084
JOB(15)=10112
JOB(16)=10156
JOB(17)=10200
JOB(18)=10212
JOB(19)=10828
JOB(20)=22432
总共job有: 21
```
## 作为$QUERY的参数
`$QUERY(^$JOB(job_number))`
`^$JOB`作为`$QUERY`的参数,按排序顺序将下一个`^$JOB`编号返回到指定的`JOB`编号。如果`^$JOB`中没有这样的`JOB`编号作为节点,则`$QUERY`将返回空字符串。
以下示例返回InterSystems IRISJOB表中的前两个`JOB`。请注意间接运算符`(@)`的用法:
```java
DHC-APP>SET x=$QUERY(^$JOB(""))
DHC-APP> WRITE !,x
^$JOB("612")
DHC-APP>WRITE !,$QUERY(@x)
^$JOB("1424")
```
公告
Claire Zheng · 十月 23, 2022
开发者社区的同学们,1024快乐!
今晚19:30,我们将通过“InterSystems首届技术征文大赛线上分享会”发布获奖名单、进行征文作品分享&点评、探讨热门话题,同期还将举办多轮抽奖!欢迎参会,锁定#腾讯会议
会议主题:InterSystems首届技术征文大赛线上分享会会议时间:2022/10/24 19:30-21:00 (GMT+08:00) 中国标准时间 - 北京
点击链接入会,或添加至会议列表:https://meeting.tencent.com/dm/nVHWgZcY5NfZ
#腾讯会议:372-615-324
文章
姚 鑫 · 一月 27, 2023
# 第五十八章 使用 `^BLKCOL` 监视块冲突
当一个进程被迫等待访问一个块时,就会发生块冲突。过多的块冲突会降低应用程序性能。
# `Using ^BLKCOL`
在 `IRIS®` 数据平台中,`^BLKCOL` 实用程序对指定时间段(默认为 `10` 秒)内的块碰撞进行采样,记录这段时间内指定时间间隔(默认为 `10` 毫秒)内的最新块碰撞。对于每个记录的冲突,`^BLKCOL` 不仅标识块,还标识涉及的全局及其在块中的第一个和最后一个引用,以及创建试图访问块的进程的例程和行。
注意:`irisstat -D` 选项,如本指南附录“使用 `irisstat` 实用程序监视 `IRIS`”中的使用选项运行 `irisstat` 中所述,也对块冲突进行采样,但仅识别涉及的块。
`irisstat -D` 的输出包含在 `^SystemPerformance` 实用程序生成的报告中,如本指南的使用 `^SystemPerformance` 监控性能一章所述。
运行 `^BLKCOL` 时,可以指定以下内容:
- 采样周期的长度(以秒为单位)
- 采样之间的间隔(以毫秒为单位)
- 是否收集例程详细信息(默认为是)
- 是否将输出格式化为:
- 具有最高冲突计数的块列表(默认)
- 涉及的所有块的列表`in collisions`
- 来自检测到的所有块碰撞的逗号分隔值,按块编号和例程排序和计数
- 来自所有检测到的块碰撞的逗号分隔值,未排序(`RAW`)
- 例程中的碰撞热点列表
- 要显示的块数(如果适用)
- 是否将输出发送到文件
# `^BLKCOL Ouputend` 输出到文件
`^BLKCOL` 实用程序的使用显示在以下示例终端会话中:
```java
%SYS>do ^BLKCOL
Block Collision Analysis
How many seconds should we sample:
How long to wait (ms) between each sample:
Collect routine details?
Format for 'T'op counts, 'D'isplay all, 'S'orted CSV, 'H'ot spot, or 'R'aw CSV:
Number of blocks to display:
Output to file:
Sampling ... (any key to interrupt)
625 block collisions in 735 samples.
Block # (count) - Global refs (first - last in block) - Routine refs (SFN)
767 (395) in c:\InterSystems\iris\mgr\user\
^acctest - ^acctest(10220," 167") (T/BPtr)
325 at ^AccessTest+156(4)
25 at ^AccessTest+121(4)
24 at ^AccessTest+92(4)
8 at ^AccessTest+109(4)
8 at ^AccessTest+127(4)
4 at ^AccessTest+170(4)
1 at ^AccessTest+163(4)
3890 (11) in c:\InterSystems\iris\mgr\user\
^acctest(2552," 371") - ^acctest(2552," 38") (Data)
6 at ^AccessTest+164(4)
3 at ^AccessTest+163(4)
1 at ^AccessTest+134(4)
1 at ^AccessTest+156(4)
15572 (9) in c:\InterSystems\iris\mgr\user\
^acctest(6980," 4795") - ^acctest(6988," 3259") (Data)
7 at ^AccessTest+134(4)
1 at ^AccessTest+164(4)
1 at ^AccessTest+170(4)
15818 (8) in c:\InterSystems\iris\mgr\user\
^acctest(9124," 173") - ^acctest(9124," 1743") (Data)
5 at ^AccessTest+164(4)
3 at ^AccessTest+170(4)
971 (7) in c:\InterSystems\iris\mgr\user\
^acctest(484," 3927") - ^acctest(484," 3938") (Data)
5 at ^AccessTest+170(4)
2 at ^AccessTest+164(4)
1137 (7) in c:\InterSystems\iris\mgr\user\
^acctest(756," 4063") - ^acctest(756," 4073") (Data)
3 at ^AccessTest+109(4)
2 at ^AccessTest+134(4)
1 at ^AccessTest+156(4)
1 at ^AccessTest+163(4)
2999 (7) in c:\InterSystems\iris\mgr\user\
^acctest(2092," 666") - ^acctest(2092," 674") (Data)
3 at ^AccessTest+170(4)
1 at ^AccessTest+109(4)
1 at ^AccessTest+121(4)
1 at ^AccessTest+134(4)
1 at ^AccessTest+164(4)
6173 (7) in c:\InterSystems\iris\mgr\user\
^acctest(3684," 528") - ^acctest(3684," 536") (Data)
3 at ^AccessTest+163(4)
1 at ^AccessTest+109(4)
1 at ^AccessTest+156(4)
1 at ^AccessTest+164(4)
1 at ^AccessTest+170(4)
14617 (7) in c:\InterSystems\iris\mgr\user\
^acctest(9688," 18") - ^acctest(9688," 26") (Data)
4 at ^AccessTest+170(4)
2 at ^AccessTest+164(4)
1 at ^AccessTest+134(4)
15282 (7) in c:\InterSystems\iris\mgr\user\
^acctest(8700," 4889") - ^acctest(8760," 1402") (Data)
4 at ^AccessTest+170(4)
3 at ^AccessTest+164(4)
%SYS>d ^BLKCOL
Block Collision Analysis
How many seconds should we sample:
How long to wait (ms) between each sample:
Collect routine details?
Format for 'T'op counts, 'D'isplay all, 'S'orted CSV, 'H'ot spot, or 'R'aw CSV: H
Number of blocks to display:
Output to file:
Sampling ... (any key to interrupt)
571 block collisions in 768 samples.
Sorted by routine/line that waits for block ownership
_____________________________________________________
(571) AccessTest
(324) +156^AccessTest : s @G@($J,node)=$$getdata($E(Str,1,$r(1000))) ;SMLXXX+, AFH
(54) +164^AccessTest : k @G@($J,node)
(43) +134^AccessTest : . k @G@($J,node)
(31) +92^AccessTest : . . k @G@($j)
(28) +109^AccessTest : . s x=$O(@G@($J,x))
Sorted by routine that owns the block
_____________________________________
(472) AccessTest
(472) +AccessTest
```
公告
Michael Lei · 二月 28, 2023
我们很高兴地宣布我们的抢先体验计划的最新成员 - Health Data De-ID工具。
该工具将根据 *HIPAA 安全港* 对结构化临床数据进行去标识化处理,并允许在需要时进行重新标识。它使用 InterSystems 的 *SDA* 规范格式,该格式用于我们从一种格式到另一种格式的所有标准转换,例如 *HL7* 到 *CDA*、*HL7* 到 *FHIR* 等。虽然该工具使用 XSLT 转换来提高性能原因,它提供了辅助方法,您不需要成为 XSLT 专家的情况下更轻松地调整开箱即用的去标识化规则。
Health Data De-ID 适用于任何 InterSystems 产品,从 InterSystems IRIS for Health 到 Health Connect 再到 Unified Care Record。
您可以在此处加入抢先体验计划 - [如何注册抢先体验计划 (EAP)]?我们需要您的反馈,因此请在您完成整个过程或遇到任何问题时与我们联系。
文章
Louis Lu · 十一月 2, 2021
本文介绍了 InterSystems IRIS®数据平台中的大文件传输(Managed File Transfer,MFT)集成选项,它使您能够轻松地将第三方文件传输服务直接集成到 InterSystems IRIS 产品中。本文还包括在新产品中使用 MFT 的逐步指导。
要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。
在 InterSystems IRIS 中使用 MFT 的好处
许多拥有 InterSystems IRIS 产品的网站也使用文件传输服务,如 Box、Dropbox 或 Accellion kiteworks,以实现安全、符合 HIPAA 的文件共享。然而,这种服务的使用取决于终端用户是否愿意使用它。在没有强制执行的情况下,他们可能很容易忘记这样做,或者有时干脆选择将文件作为附件发送。通过将 MFT 服务集成到您的产品中,您可以确保文件总是被安全地发送。另一个好处是,由于产品可以根据需要自动地将敏感文件路由到正确的位置,并遵循适当的工作流程,因此,错位或错误指向文件的风险更小。
考虑以下用例:一家职业介绍所将潜在员工的常规体检或药物测试外包给门诊医疗测试机构。测试机构和职业介绍所都有责任确保私人信息的安全数据传输,并在彼此之间进行传输。然而,虽然医疗机构可能已经有了符合 HIPAA 的程序,并可能已经使用了安全文件传输服务,但职业介绍所可能没有适当的基础设施来处理所需的安全级别。在任何一端设置启用 MFT 的 InterSystems IRIS 产品,均可简化所有此类通信的标准化文件传输服务的使用。
对于需要向内部和外部位置(location)提交相同文件的企业来说,或者当单个部门接收到需要根据发件人进行不同处理的文件时,MFT 也非常有用。例如,假设一家汽车经销商需要将签署的客户财务文件传送到他们的总部以及金融机构。另外,假设销售部门与租赁部门有不同的流程(即使这两个部门必须向同一家银行提交相同类型的信息)。这些差异可能会导致混乱和错位或发送错误的文书工作。此外,经销商不能也不应该将客户签署的财务或其他个人数据作为常规电子邮件的附件发送。使用集成了 MFT 的 InterSystems IRIS 产品简化了提交和路由过程,以便将正确的文档送到正确的部门进行适当的处理,从而减少了文档丢失的机会。
它是如何工作的?
InterSystems IRIS 提供了业务主机,您可以将其添加到产品和配置中,而不需要编程。这些业务主机支持 Box、DropBox 和 Accellion kiteworks 服务。一旦您添加了这些业务主机并配置了它们,产品就可以轻松地从终端用户帐户检索文件,或将文件放入这些帐户,或两者都是。
InterSystems IRIS 使用开放授权框架(Open Authorization Framework)2.0 版本(称为 OAuth 2.0)授权对第三方传输服务的访问。当您配置 InterSystems IRIS 产品来使用传输服务时,您将该产品设置为传输服务帐户的授权用户。这允许产品从该帐户下的任何目录(例如分配给单个终端用户的目录)中提取文件并将文件放入其中。这些个人 终端用户的访问完全不受任何影响,他们可以继续像以前一样放置和检索文件。
尝试 MFT:创建启用 MFT 的产品
将 MFT 集成到 InterSystems IRIS 产品中只需要几个步骤:首先,创建并初始化与传输服务的连接,然后包括适当的业务主机,使产品能够直接与传输服务对话。您可以按照本节中的步骤创建一个在您的 Accellion kiteworks 帐户和您的本地桌面系统之间复制文件的产品,就可以看到它是多么简单。如果您更习惯或已经可以访问 Box 或 DropBox,只需在使用 kiteworks 的地方为您的服务替换这些项目。
重要提示: 为了简单起见,使用这些说明创建的产品使用默认设置。在创建实时产品时,InterSystems 强烈建议您根据您的环境来调整设置,特别是那些与安全和您自己特定的 InterSystems IRIS 实例有关的设置。例如,下面提到的 Redirect URL(重定向 URL) 使用 http 而不是 https,这在产品中不是一个好的做法。
想试试 InterSystems IRIS 互操作性功能的在线视频演示吗?请查看 Interoperability QuickStart(互操作性快速入门)!
用前须知
要使用这个程序,您需要一个正在运行的 InterSystems IRIS 实例。您对 InterSystems IRIS 的选择包括多种类型的已授权的和免费的评估实例;该实例不需要在您工作的系统中(尽管它们必须相互具有网络访问权限)。有关如何部署每种类型的实例的信息(如果您还没有可使用的实例),请参见 InterSystems IRIS Basics: Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的 Deploying InterSystems IRIS(部署 InterSystems IRIS)。
您还需要对 Accellion kiteworks 上的帐户进行管理访问;您可以在 https://www.accellion.com/kiteworks/ 上创建一个免费试用帐户。
创建 TLS 配置
使用以下程序创建一个 TLS 配置:
使用 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中为您的实例描述的 URL,在浏览器中打开您的实例的管理门户(Management Portal)。
导航到 TLS 配置页面(System Administration(系统管理) > Security(安全) > SSL/TLS Configurations(SSL/TLS 配置))。
点击 Create New Configuration(创建新的配置) ,并为 Configuration Name(配置名称) 字段输入 MFTTLSConfig。让所有其他字段保持原样,并点击Save(保存)来保存这个新的配置。
在传输服务中注册您的 InterSystems IRIS 实例
接下来,您需要在传输服务本身上为这个 MFT 产品创建一个应用程序(条目)。在一个单独的浏览器窗口或标签中,进入您的 Accellion kiteworks 帐户的管理页面并执行这些步骤。
在管理门户(Management Portal)中,进入 Customs Applications(自定义应用程序)页面,该页面在 Application(应用程序) > Client Management(客户端管理)(适用于 kw2017.02.04 版本)下。
添加一个新条目,并为应用程序指定一个名称,如 ISCFileTransferApp。
请确保 Authorization Code(授权代码)和 Enable Refresh Token(启用刷新令牌)被选中。
在 Redirect URI(重定向 URI) 字段中,输入 URL http://server:port/csp/sys/oauth2/OAuth2.Response.cls,其中服务(server) 和端口(port) 是您的实例的主机标识符和 web 服务器端口。例如,对于一个云实例,URL可能是
http://35.192.42.98:52773/csp/sys/oauth2/OAuth2.Response.cls
本地安装的实例可以在服务(server) 字段中使用 localhost。
这是 kiteworks 用来联系 InterSystems IRIS 实例的 URL。
点击 Add Application(添加应用程序)并记录显示的安全令牌(Client Application ID(客户端应用程序 ID) 和 Client Secret Key(客户端密钥))。稍后在 InterSystems IRIS 上创建 TLS 连接时将使用此信息。
重要提示: 此信息只有在这个时候对您可用,所以您必须立即记录它。如果您在 InterSystems IRIS 产品上创建 TLS 连接时没有此信息,那么您必须再次生成此信息并使用新的值来创建 TLS 连接。
在传输服务中添加目录
现在导航到主 kiteworks(非管理)Folders(文件夹)页面,其中显示您的文件和目录,并创建两个新的顶级目录,一个名为 FilesReceived,用于接收文件,另一个名为 FilesToSend,用于发送文件。
添加可访问 InterSystems IRIS 的目录
现在您应该在实例的主机上创建两个目录,InterSystems IRIS 将在其中访问文件。执行此操作的方法取决于您所使用的实例类型 ,如下所示:
对于由 ICM 部署的实例,可以使用带有 -machine 和 -interactive 选项的 icm exec 命令,在运行实例的容器内打开 bash shell,例如:
icm exec -command bash -machine MYIRIS-AM-TEST-0004 -interactive
然后您可以在容器文件系统上创建目录。
对于任何容器化的实例, 无论是授权版还是社区版(Community Edition),使用命令 docker exec -it container_name bash 在容器中打开 bash shell (社区版[Community Edition]容器的名称是 try-iris)。然后在容器文件系统上创建目录。
对于 InterSystems 学习实验室(Learning Labs),使用集成 IDE 中的命令行终端,在 Shared 文件夹中创建新文件夹;您可以在 /home/project/shared 下的管理门户(Management Portal)中浏览到这些。
对于已安装的实例,在本地文件系统上创建目录。
这个文本假设在 Windows 系统上安装的实例有以下目录路径;替换您创建的实际目录的路径。
C:\InterSystems\ToRemote
C:\InterSystems\FromRemote
创建 MFT 连接
接下来,您需要通过创建 MFT 连接对象在 Intersystems IRIS 上注册传输服务。要做到这一点,请返回管理门户(Management Portal),进入 Managed File Transfer Connections(托管文件传输连接)页面(System Administration[系统管理] > Security(安全)> Managed File Transfer Connections[托管文件传输连接])。点击 Create Connection(创建连接)。请以以下方式指定字段的值,然后点击 Save(保存):
Field Name(字段名称)
Value(值)
Connection Name(连接名称)
KiteSecured
File management service(文件管理服务)
Kiteworks
SSL/TLS configuration(SSL/TLS 配置)
MFTTLSConfig
Email address(电子邮件地址)
您的 Kiteworks 管理员的电子邮件地址,例如
MFTadmin@yourcompany.com
Base URL(基准 URL)
您企业的 kiteworks 的根 URL,例如
https://yourcompany.kiteworks.com/
OAuth 2.0 application name(OAuth 2.0 应用程序名称)
ISCFileTransferApp
OAuth 2.0 client id(OAuth 2.0 客户端 id)
之前从 kiteworks 检索到的 Client Application ID(客户端应用程序 ID)
OAuth 2.0 client secret(OAuth 2.0 客户端机密)
之前从 kiteworks 检索到的 Client Secret Key(客户端密钥)
OAuth 2.0 redirect URL(OAuth 2.0 重定向 URL)
留空。一旦您填写了 Host name(主机名) 和 Port(端口),该字段将自动使用前面提供的 Redirect URI(重定向 URI) 的值填充。
Use TLS/SSL(使用 TLS/SSL)
(清除复选框)
Host name(主机名)
您的实例的主机标识符。
Port(端口)
您的实例的 web 服务器端口。
Prefix(前缀)
(留空)
获取访问令牌
Managed File Transfer Connections(托管文件传输连接)页面会再次显示所有可用的连接,包括您刚刚创建的新连接。如果该连接的状态是 Not Authorized,那么:
点击 Get Access Token(获取访问令牌) 以显示来自 kiteworks 的 Oauth 同意页面,该页面识别了您之前注册的应用程序的名称(ISCFileTransferApp)。
点击 Grant Access(授予访问权限)来授权访问。这将重新显示 Connections(连接) 列表,新的 MFT 连接的状态现在被列为 Authorized。
创建命名空间
为了创建产品,您必须有一个启用互操作性的命名空间。如果您已经创建了一个启用互操作性的命名空间,您可以把它用于此产品。要创建一个新的启用互操作性的命名空间,请使用以下程序。(您首次安装 InterSystems IRIS 时创建的命名空间没有启用互操作性。)
在管理门户(Management Portal)主页上,选择 System Administration(系统管理) > Configuration(配置) > System Configuration(系统配置) >Namespaces(命名空间),进入 Namespaces(命名空间)页面。
在 Namespaces(命名空间)页面,选择 Create New Namespace(创建新的命名空间)。这将显示 New Namespace(新的命名空间)页面;按照 System Administration Guide(《系统管理指南》)的“Configuring InterSystems IRIS(《配置 InterSystems IRIS》)”章节中 Create/Modify a Namespace(创建/修改命名空间)中的使用说明,确保选中了 Enable namespace for interoperability productions(启用互操作性产品的命名空间)复选框。
选择靠近页面顶部的 Save(保存),然后在生成的日志末尾选择 Close(关闭)。
创建产品
接下来,您需要切换到新的命名空间来创建新的产品本身。
进入 InterSystems IRIS 管理门户(Management Portal)主页,在顶部横幅的中间部分找到命名空间标识符。点击 Switch(切换)链接以调出 Namespace Chooser(命名空间选择器)。
选择您刚刚创建的命名空间(例如,ForMFT),然后点击 OK(确定)。
现在导航到 Production(产品) 页面(Interoperability(互操作性) > Configure(配置) > Production(产品))。
点击 New(新建)以调出 Production Wizard(产品向导)。
对于 Package(包),从下拉菜单中选择 INFORMATION(信息)。
输入 Production Name(产品名称),如 NewMFTProduction。
将 Production Type(产品类型)保留为 Generic(通用型),然后点击 OK(確定)来创建产品。
有关产品的更多信息,请参见 Introducing Interoperability Productions guide(《介绍互操作性产品指南》)的 "Introduction to InterSystems IRIS Interoperability(《InterSystems IRIS 互操作性介绍》)"一章中的 "Introduction to Productions(产品介绍)"。
创建业务操作和业务服务
留在新创建的产品中,并添加文件传输所需的四种业务操作和服务(每个方向一个业务操作和一个业务服务):
业务主机名
主机类型
用于
SecureToRemoteOffice
业务操作
发送文件到传输服务
GatherLocalFiles
业务服务
发送文件到传输服务
StoreFilesLocally
业务操作
从传输服务中接收文件
ReceiveFromRemoteOffice
业务服务
从传输服务中接收文件
创建和配置:SecureToRemoteOffice
SecureToRemoteOffice 是将文件发送到传输服务的业务操作(Operation)。为了将它添加到产品中:
点击 Operations(操作)旁边的加号。
选择 Operation Class(操作类) EnsLib.MFT.Operation.Passthrough。
输入 Operation Name(操作名称) SecureToRemoteOffice。
请确保未选中 Enable Now(立即启用),并保留其他字段。
点击 OK(确定)来添加该操作。
选择该操作,然后从右侧的面板进入 Settings(设置)标签。
在 Basic Settings(基础设置)部分,仅配置以下内容:
Field Name(字段名称)
Value(值)
说明
Enable(启用)
(在方框内打勾)
启用该业务主机
MFT Connection Name(MFT 连接名称)
KiteSecured
之前创建的 TLS 配置的名称
Default MFT Folder(默认的 MFT 文件夹)
/FilesReceived/
传输服务的顶级接收目录的名称
Default Filename Specification(默认的文件名规范)
%f
用于创建接收文件名称的模板
将所有其他字段保留为默认设置,并点击 Apply(应用)来保存您的更改。
创建和配置:GatherLocalFiles
GatherLocalFiles 是用于收集从 InterSystems IRIS 发送的文件的业务服务(Service)。为了将它添加到产品中:
点击 Services(服务)旁边的加号。
选择 Service Class(服务类) EnsLib.File.PassthroughService。
输入 Service Name(服务名称) GatherLocalFiles。
请确保未选中 Enable Now(立即启用),并保留其他字段。
点击 OK(确定) 来添加该服务,
选择该服务,然后从右侧的面板进入 Settings(设置)标签。
在 Basic Settings(基础设置)部分,仅配置以下内容:
Field Name(字段名称)
Value(值)
说明
Enable(启用)
(在方框内打勾)
启用该业务主机
File Path(文件路径)
C:\InterSystems\ToRemote\
您的本地系统中包含要发送的文件的目录(如果不同,请用正确的路径代替)。
File Spec(文件规范)
*
要发送的文件名的正则表达式
Target Config Names(目标配置名称)
SecureToRemoteOffice
从此业务服务接受输入的业务主机
将所有其他字段保留为默认设置,并点击 Apply(应用)来保存您的更改。
创建和配置:StoreFilesLocally
StoreFilesLocally 是在 InterSystems IRIS 中存储接收到的文件的业务操作(Operation)。为了将它添加到产品中:
点击 Operations(操作)旁边的加号。
选择 Operation Class(操作类) EnsLib.File.PassthroughOperation。
输入 Operation Name(操作名称) StoreFilesLocally。
请确保未选中 Enable Now(立即启用),并保留其他字段。
点击 OK(确定)来添加该操作。
选择该操作,然后从右侧的面板进入 Settings(设置)标签。
在 Basic Settings(基础设置)部分,仅配置以下内容:
Field Name(字段名称)
Value(值)
说明
Enable(启用)
(在方框内打勾)
启用该业务主机
File Path(文件路径)
C:\InterSystems\FromRemote\
您的本地系统中存储所接收的文件的目录(如果不同,请用正确的路径代替)。
File Name(文件名称)
%f_%Q%!+(_a)
要发送的文件名的语法。为了保证唯一性,InterSystems 建议在文件名中加入日期和时间戳。
将所有其他字段保留为默认设置,并点击 Apply(应用)来保存您的更改。
创建和配置:ReceiveFromRemoteOffice
ReceiveFromRemoteOffice 是用于从您的传输服务接收文件的业务服务(Service)。为了将它添加到产品中:
点击 Services(服务)旁边的加号。
选择 Service Class(服务类)EnsLib.MFT.Service.Passthrough。
输入 Service Name(服务名称) ReceiveFromRemoteOffice。
请确保未选中 Enable Now(立即启用),并保留其他字段。
点击 OK(确定)来添加该服务。
选择该服务,然后从右侧的面板进入 Settings(设置)标签。
在 Basic Settings(基础设置)部分,仅配置以下内容:
Field Name(字段名称)
Value(值)
说明
Enable(启用)
(在方框内打勾)
启用该业务主机
MFT Connection Name(MFT 连接名称)
KiteSecured
之前创建的 TLS 配置的名称
MFT Source Folders(MFT 源文件夹)
/FilesToSend
传输服务的顶级发送目录的名称
Files to Retrieve(检索的文件)
(留空)
从远程位置收集的文件名称(类型)的模板
Target Config Names(目标配置名称)
StoreFilesLocally
从此业务服务接受输入的业务主机
将所有其他字段保留为默认设置,并点击 Apply(应用)来保存您的更改。
测试产品
现在,您已经创建了产品,是时候尝试一下了!只需将文件拖放到您的本地目录和第三方传输服务的指定文件夹中,就可以看到它们出现在另一个位置。
通过点击顶部的 Start(启动) 按钮来启动产品,然后在 Start Production(启动产品)对话框中点击 OK(确定)。
要验证发送到 kiteworks 的文件:
使用操作系统的目录资源管理器,导航到添加 GatherLocalFiles 业务服务时,您在 FilePath(文件路径)字段中指定的目录(C:\InterSystems\ToRemote\ 或您创建的其他目录)。
在该位置放置一个文件。
进入 kiteworks 并导航到 /FilesToRemote/ 文件夹,(添加 SecureToRemoteOffice 业务操作时,您在 Default MFT Folder(默认的 MFT 文件夹)字段中指定的目录)。
刷新文件夹视图,直到新文件出现。这通常是在几秒钟内,甚至更早。
要验证从 kiteworks 接收的文件:
进入 kiteworks 并导航到 /FilesToCentral 文件夹(添加 ReceiveFromRemoteOffice 业务服务时,您在 DefaultMFTFolder(默认的 MFT 文件夹)字段中指定的目录)。
在该位置放置一个文件。
使用您的 OS 目录资源管理器,导航到添加 StoreFilesLocally 业务操作时,您在 FilePath(文件路径) 字段中指定的目录 (C:\InterSystems\FromRemote\ 或您创建的其他目录)。
刷新目录视图,直到新文件出现。这通常是在几秒钟内,甚至更早。
祝贺您,您刚刚成功地使用 MFT 创建了一个工作的production!
了解有关 MFT 的更多信息
更多信息,请参见:
Video Introduction to Managed File Transfer(《托管文件传输视频简介》)
Enabling Productions to Use Managed File Transfer Services(《启用Production使用大文件传输》)
文章
姚 鑫 · 七月 13, 2022
# 第四章 使用嵌入式 Python (一)
嵌入式 `Python` 允许使用 `Python` 作为编程 `IRIS` 应用程序的本机选项。
# 预备知识
使用嵌入式 `Python` 所需的 `Python` 版本取决于运行的平台。
在 M`icrosoft Windows` 上,`IRIS` 安装工具包安装正确版本的 `Python`(当前为 `3.9.5`),仅用于嵌入式 `Python`。如果在开发机器上并希望将 `Python` 用于一般用途,建议从 `https://www.python.org/downloads/` 下载并安装相同的版本。
许多基于 UNIX 的操作系统都安装了 `Python`。如果需要安装,请使用包管理器为操作系统推荐的版本,例如:
- `macOS`:使用 `Homebrew` 安装 `Python 3.9` `(https://formulae.brew.sh/formula/python@3.9)`
- `Ubuntu`: `apt-get install python3`
- `Red Hat Enterprise Linux or Oracle Linux: yum install python3`
- `SUSE`: `zypper install python3`
如果收到“无法加载 `python`”的错误,这意味着没有安装 `Python`,或者系统上安装了意外版本的 `Python`。使用上述方法之一安装或重新安装。
在基于 `UNIX` 的系统上,可能希望使用 `pip3` 命令安装 `Python` 包。如果尚未安装 `pip3`,请使用系统的包管理器安装包 `python3-pip`。
要防止在运行 `Embedded Python` 时出现 `IRIS_ACCESSDENIED` 错误,请启用 `%Service_Callin`。在管理门户中,` System Administration > Security > Services`,选择 `%Service_CallIn`,然后选中启用服务框。
# 运行嵌入式 Python
本节详细介绍了运行 `Embedded Python` 的几种方法:
## 从Python Shell
可以从终端会话或命令行启动 `Python shell`。
### 从终端启动 Python Shell
通过调用 `%SYS.Python` 类的 `Shell()` 方法,从 终端会话启动 `Python shell`。这将以交互模式启动 `Python` 解释器。终端会话中的用户和命名空间被传递给 `Python shell`。
通过键入命令 `quit()` 退出 `Python shell`。
以下示例在终端会话中从 `USER` 命名空间启动 `Python shell`。它打印斐波那契数列中的前几个数字,然后使用 `IRIS SYSTEM.OBJ.ShowClasses()` 方法打印当前命名空间中的类列表。
```java
USER>do ##class(%SYS.Python).Shell()
Python 3.9.5 (default, Jul 6 2021, 13:03:56) [MSC v.1927 64 bit (AMD64)] on win32
Type quit() or Ctrl-D to exit this shell.
>>> a, b = 0, 1
>>> while a < 10:
... print(a, end=' ')
... a, b = b, a+b
...
0 1 1 2 3 5 8 >>>
>>> status = iris.cls('%SYSTEM.OBJ').ShowClasses()
User.Company
User.Person
>>> print(status)
1
>>> quit()
USER>
```
方法 `%SYSTEM.OBJ.ShowClasses()` 返回一个 `IRIS %Status` 值。在这种情况下,`1` 表示未检测到错误。
注意:使用 `%SYS.Python` 类的 `Shell()` 方法运行 `Python shell` 时,不需要显式导入 `iris` 模块。继续使用该模块。
### 从命令行启动 `Python Shell`
使用 `irispython` 命令从命令行启动 `Python shell`。这与从终端启动 `shell` 的工作方式大致相同,但必须传入 `IRIS` 用户名、密码和命名空间。
以下示例从 `Windows` 命令行启动 `Python shell`:
```java
C:\InterSystems\IRIS\bin>set IRISUSERNAME =
C:\InterSystems\IRIS\bin>set IRISPASSWORD =
C:\InterSystems\IRIS\bin>set IRISNAMESPACE = USER
C:\InterSystems\IRIS\bin>irispython
Python 3.9.5 (default, Jul 6 2021, 13:03:56) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
```
在基于 `UNIX` 的系统上,使用 `export` 而不是 `set`。
```java
/InterSystems/IRIS/bin$ export IRISUSERNAME=
/InterSystems/IRIS/bin$ export IRISPASSWORD=
/InterSystems/IRIS/bin$ export IRISNAMESPACE=USER
/InterSystems/IRIS/bin$ ./irispython
Python 3.9.5 (default, Jul 22 2021, 23:12:58)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
```
注意:如果尝试运行 `import iris` 并看到一条消息说 `IRIS_ACCESSDENIED,请启用 %Service_Callin`。在管理门户中,转至 `System Administration > Security > Services`,选择 `%Service_CallIn`,然后选中启用服务框。
问题
ruihua ruihua · 二月 21, 2022
关于产品原型的设计软件有哪些推荐?如何快速和高效地提升设计能力? InterSystems 没有提供产品原型工具,请百度。 vs code 算吗?
公告
Hao Ma · 五月 7, 2021
Hi Developers!
看看2021年4月的开发者社区新版本有些什么改善, 主要的新特性包括:
This is a release of how did we improve the Developer Community in April 2021. The key features:
代码块里的‘拷贝到剪贴板’按钮
帖子翻译页
私信帖子作者
InterSystems官方版本和安全警示
以下是详细介绍。
代码块里的‘拷贝到剪贴板’按钮Copy-to-clipboard button to code blocks
现在你可以轻松的从任何帖子或者回复里拷贝代码 - 把鼠标放在代码块,然后按这个按钮:
帖子翻译页面
在DC网站你可以请求任意帖子的专业翻译,或者您自己翻译,到5中语言中的一种。为了做起来方便,我们改善了翻译页的界面。
1. 从下拉菜单选择您想要的目标语言:
2. 做出您的选择:
生成翻译 - 如果您希望翻译并发帖,按"Translate"
请求翻译 - 如果您希望我们提供专业翻译,按"Request"
私信帖子作者
现在你可以轻松的发送私信给帖子的作者。点击"Direct Message"按钮,私信会自动添加标题。
InterSystems官方版本和安全警示
InterSystems Official tag 会及时向您更新InterSystems官方声明。现在您可以过滤想要收到的声明,从 releases 和 alerts.
希望您喜欢我们的改版
欢迎提交new requests for improvements and bug reports.
请大家保持关注
问题
洪玉 刘 · 二月 8, 2023
运行池的机制和组件运行池的建议配置大小 请参考我们的社区文章:运行池大小配置的解读 | InterSystems Developer Community | FTP|REST API|SOAP|DevOps