搜索​​​​

清除过滤器
文章
Claire Zheng · 五月 18, 2023

【视频】对话:“数据二十条”与FHIR标准

“数据二十条”体现了怎样的制度创新和政策智慧?FHIR将如何发挥作用?来看InterSystems亚太区总经理老卢(Luciano Brustia)与CHIMA主任委员王才有的精彩探讨!
公告
Claire Zheng · 七月 4, 2022

2022年全球峰会主题演讲线上观看!

大家好! 一周前,在西雅图举办的InterSystems 2022年全球峰会刚刚结束,但对于那些错过会议现场的人,或者由于种种原因无法亲自参加会议的人(或者只是希望重新回忆并再次聆听会议的人)来说,线上主题演讲刚刚开始! 话不多说,请查收全球峰会上来自社区的问候: 欢迎通过YouTube播放列表观看2022年全球峰会三天所有主题演讲: ➡️ Global Summit 2022 on InterSystems Developers YouTube 明年,来佛罗里达州好莱坞加入我们吧!🤩 详情在这里.
文章
Claire Zheng · 三月 16, 2022

【极客聊吧】如何为用户提供更好的开发体验(上)

谈到开发体验,什么最重要?如何为客户提供更好的开发体验?InterSystems IRIS的最新版本有哪些新特性极大优化了用户的开发体验?这是本月“极客聊吧”聚焦的话题,我们将通过上、下两期视频进行探讨。在本期视频中,InterSystems中国销售工程师吕正之、马浩和WRC产品支持专家杨乐乐针对以下两点进行了分享:(1)开发语言的多样性与对FHIR的支持;(2)探讨开发平台的前瞻性:对Smart Data Fabric架构的支持。
公告
Michael Lei · 三月 25, 2022

新的在线 Kubernetes 练习!

大家好! 对于那些参加了2021年虚拟峰会的体验实验室的人来说,你可能还记得其中一个实验室会议是围绕Kubernetes进行的。我们现在已经将该实验室转换为完全线上按需使用。你可以启动一个小型的虚拟机集群,并按照练习来管理你的Kubernetes集群,将InterSystems IRIS容器部署到其中,并观察它在摧毁一个吊舱时的自我修复性质。 如果你有兴趣,这是一个很好的Kubernetes介绍。请看这里: 用InterSystems IRIS 和 Kubernetes实现高可用
文章
Qiao Peng · 四月 7, 2021

InterSystems IRIS医疗行业版的FHIR服务器上测试和开发SMART on FHIR应用

如果看了前一篇InterSystems IRIS医疗行业版创建FHIR服务器,应该您已经搭建好了FHIR服务器和FHIR资源仓库。除了使用FHIR REST API来操作这个FHIR服务器,您还可以更直观地看看它的价值 - 使用SMART on FHIR应用。这次,基于上次建好的FHIR服务器,我们用10分钟把一个SMART on FHIR运行起来。 SMART on FHIR背景 SMART是Substitutable Medical Applications and Reusable Technology的缩写,它的目标是创建可以被替换、可以复用的医疗应用,简单说就是希望医疗应用可以像我们的手机应用一样:不喜欢当前的天气应用,那么就换一个。SMART,这个起于2011年的哈佛和波士顿儿童医院的合作项目,在2013年注意到并快速采用了FHIR,成就了今天的SMART on FHIR。 不再需要处理数据持久化、数据模型标准化等问题,SMART on FHIR应用相当的轻量级,因此也容易快速开发。它主要借助FHIR API和OAuth认证,连接到FHIR服务器上操作数据。SMART on FHIR应用都是Web应用,它可以独立运行,也可以嵌入到任何现有应用中,例如TrakCare(InterSystems的EMR产品)和HealthShare Personal Community (InterSystems的患者门户),快速丰富和提升这些应用的价值。 现在SMART on FHIR应用商店里已经有很多针对医生或者患者的应用可供免费下载和测试,初步实现了SMART目标。不论您是想借助SMART on FHIR理解FHIR、还是想开发SMART应用、亦或直接测试和使用应用商店里的现成应用,都希望这篇文章对您有所帮助。 测试SMART on FHIR应用 完整的SMART on FHIR应用涉及到OAuth认证,我们先从一个简单的、无需认证的环境开始,快速了解一下SMART on FHIR应用。在下一篇中,我们将在InterSystems IRIS搭建完整的支持环境:不仅是FHIR服务器和FHIR资源仓库,还包括OAuth认证服务器。 1. 下载SMART on FHIR应用 我们先下载一个SMART on FHIR应用,SMART on FHIR应用商店里有很多不错的应用,我们下载儿童生长发育分析的应用,虽然简单,但它很有代表性,也是波士顿儿童医院的杰作。它支持DSTU2和STU3的FHIR版本,不过因为它用的FHIR资源类型不多,因此实际上也支持FHIR R4。 将代码下载到本地后,解压并保存在您上一篇创建的InterSystems IRIS FHIR服务器上,建议您创建一个名为SMART的目录,存放解压后的SMART 代码。 之后,请记得打开命令行,在这个目录下执行: npm install 它会下载需要的一系列文件到node_modules子目录下。 执行完这一步,您已经有一个完整的SMART on FHIR应用了。 2. 修改SMART on FHIR 要连接到我们上一篇创建的FHIR服务器,需要对应用的代码做一点点修改。需要修改的是launch.html文件,它负责OAuth认证并重定向到index.html。 找到您的launch.html文件,用任何文本编辑工具打开它: <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title>Growth Chart SMART Application</title> <script src="node_modules/fhirclient/build/fhir-client.js"></script> <!--<script> FHIR.oauth2.authorize({ "client_id": "growth_chart", "scope": "patient/Observation.read patient/Patient.read offline_access", // "client_id": "944d96a0-4caf-4a96-813e-bc38aadb1169" // HSPC // "client_id": "5570f8be-6caf-4915-ae15-69545ab38e68" // Cerner }); </script>--> <script> FHIR.oauth2.authorize({ "client_id": "growth_chart", "scope": "patient/*.read", "fhirServiceUrl": "http://localhost:52776/csp/healthshare/fhirserver/fhir/r4", "patientId": 95, "redirectUri":"index.html" }); </script> </head> <body>Loading...</body> </html> 找到FHIR.oauth2.authorize,我把原来的代码注释起来,用于比对。这里我们做了这些修改: 1. 增加fhirServiceUrl,用于指向FHIR服务器端点。增加它的原因是我们想在这篇文章中,跳过OAuth认证。请修改这个URL指向您的FHIR服务器端点。 2. 增加patientId,用于指定我们想打开的FHIR患者资源。增加它的原因是,我们不是通过其它应用打开这个SMART on FHIR,没有选中的患者上下文,因此我们在这里指定一个患者资源。请找一个您的FHIR资源仓库中,有身高、体重等信息的儿童患者资源,用它的FHIR资源id替换。上一篇中有介绍怎么使用API查找这样的患者。 3. 增加redirectUri,用于重定向页面。这里直接重定向到index.html。 如果您是开发者,FHIR.oauth2.authorize的API的文档在此,供参考。 3. 部署SMART on FHIR应用 将这个SMART on FHIR应用部署到Web服务器上。如果您的环境上没有安装Web服务器,可以使用InterSystems IRIS的私有Apache进行测试。 InterSystems IRIS安装时,会自动安装一个私有的Apache,用于提供管理门户的Web应用。这个私有Apache因为性能原因,不应作为提供外部服务的Web服务器,不过用于我们这次的测试是没有问题的。 在InterSystems IRIS的私有Apache上部署SMART on FHIR应用非常简单: 3.1 创建一个Web应用 打开InterSystems IRIS管理门户网页(http://<IRIS服务器地址>:<Web服务端口>/csp/sys/UtilHome.csp,例如http://localhost:52776/csp/sys/UtilHome.csp),然后在“系统管理>安全>应用程序>Web应用程序"中,点击"新建Web应用程序": 在名称中创建一个新的Web应用,例如/csp/gc; 在命名空间中,选则上一篇创建的FHIRSERVER,或者任何其它的命名空间,如USER; 选中启用“CSP/ZEN”; “CSP文件设置>物理路径”中,选择您下载并解压的SMART on FHIR应用的路径。 其它默认值无需更改,点击保存按钮。 现在您已经部署成功了SMART on FHIR。 3.2 测试SMART on FHIR 您可以直接打开浏览器,输入网址http://<IRIS服务器地址>:<Web服务端口>/csp/gc/launch.html(用您的环境的IRIS服务器IP和端口号)。应该看到和下面类似的页面,它已经自动重定向到了index.html: 这是一个非常直观的FHIR数据可视化的应用,显示了儿童的生长发育曲线。您还可以下载并部署其它SMART on FHIR应用,用于学习或测试。 还有没有其他类似https://apps.smarthealthit.org/apps/ 这样的应用市场?可以给个列表? 目前这是最主要的SMART on FHIR应用市场。但不少厂商都推出了自己的SMART on FHIR应用,放在自己的官网里,有些是免费的,更多是收费的。
文章
Michael Lei · 二月 14, 2022

成功案例分享--Cognetivity Neurosciences利用InterSystems的互操作性技术解决日益严重的痴呆症问题

痴呆症是一个重大的全球性问题,困扰着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

翻译文章--InterSystems IRIS 2021.2+ Python 代码样例 (Embedded嵌入式Python, Native 原生APIs 和 Notebooks)

# 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 ![Diagram](https://user-images.githubusercontent.com/47849411/145866257-cc88109b-db0b-4fed-8886-fddb4c31947d.png) # 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**动作在你希望连接的容器上. ![Containers Explorer screenshot](https://github.com/microsoft/vscode-docs/raw/main/docs/remote/images/containers/containers-attach.png) 然后配置你的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) ![Archiecture](https://code.visualstudio.com/assets/docs/remote/containers/architecture-containers.png) 这在使用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: ![flaskExample](https://raw.githubusercontent.com/thewophile-beep/integrated-ml-demo/main/misc/img/flaskExample.png) 正如你们看到的,为了 GET passenger 的 ID, 我们需要执行查询并使用它的结果集. 我们也可以直接用IRIS的对象: ![flaskObjectExample](https://raw.githubusercontent.com/thewophile-beep/integrated-ml-demo/main/misc/img/flaskObjectExample.png) 在这里, 我们使用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 · 十一月 9, 2023

InterSystems开发者社区中文版第二届技术征文大赛专家评审团亮相!

大家好! 2023年9月19日-11月24日(北京时间),🏆InterSystems开发者社区中文版第二届技术征文大赛🏆正在进行中(←点击链接进入参赛页面,浏览所有参赛文章)!作为此次大赛重要奖项“专家提名奖”评比的重要部分,我们的专家评审团已组建成团! 以下为我们的专家团成员,来自我们的销售工程师团队与WRC支持团队。 @Yunfei.Lei @Peng.Qiao @Lin.Zhu @jieliang.liu7848 @Ida.Yang @Louis.Lu @Hao.Ma @Jingwei.Wang @Tete.Zhang @Tengzhou.Zhuang 我们期待专家评审团对参赛作品的公平审阅与打分。 作为社区成员,您的个人贡献也会对每一篇参赛文章产生影响,每一次浏览和点赞都将助力您喜欢的文章赢得“开发者社区奖”。 欢迎大家积极投稿、点赞、分享、学习! 欢迎积极参加InterSystems开发者社区中文版第二届技术征文大赛
公告
Claire Zheng · 九月 22, 2022

InterSystems开发者社区中文版首届技术征文大赛专家评审团亮相!

中文社区的同学们大家好! 如你所知,从2022年9月5日-10月24日(北京时间),我们正在举办🏆InterSystems开发者社区中文版首届技术征文大赛🏆(←点击链接进入参赛页面,浏览所有参赛文章)! 截至目前,我们已收获了20余篇佳作 作为此次大赛重要奖项“专家提名奖”评比的重要部分,我们的专家评审团已组建成团! 以下为我们的专家团成员: @Yunfei.Lei @Peng.Qiao @Ida.Yang @Lin.Zhu @Louis.Lu @Hao.Ma @Jingwei.Wang @Tete.Zhang @Tengzhou.Zhuang @jieliang.liu7848 @Duan.Haihua @Wenyi.Liu 我们期待专家评审团对参赛作品的公平审阅与打分。 作为社区成员,你的个人贡献也会对每一篇参赛文章产生影响,你的每一次浏览和点赞都将助力你喜欢的文章赢得“开发者社区奖”。 欢迎大家积极投稿、点赞、分享、学习! 欢迎参赛InterSystems开发者社区中文版首届技术征文大赛
公告
Claire Zheng · 十一月 2, 2022

礼品全部寄出,大赛落下帷幕!一起期待下一次InterSystems开发者社区精彩活动!

各位开发者社区的同学们,大家好! 在各位社区同学的大力支持下,我们的“首届技术征文大赛”圆满完赛!在过去一周多的时间里,我们整理了各类奖项及礼品,目前已经全部寄出! 最新寄出的是开发者征文大赛获奖者的奖品,请以下同学留意查收,如未收到快递信息,请及时与我们联系: @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

2023 InterSystems开发者竞赛(Tool)获奖者名单出炉!来看看这优秀的应用吧!

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 同学,也感谢@王喆 和 @银行 郝 同学的参与,感谢所有参与投票的同学,期待大家更精彩的作品!
公告
Hao Ma · 五月 7, 2021

开发者社区改版, April 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. 请大家保持关注
文章
姚 鑫 · 七月 13, 2022

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

# 第四章 使用嵌入式 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`,然后选中启用服务框。
文章
Louis Lu · 十一月 2, 2021

IRIS 2021 技术文档 First Look 35 -- 使用 Production 进行大文件传输(Managed File Transfer, MFT)

本文介绍了 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使用大文件传输》)