清除过滤器
文章
Jingwei Wang · 十一月 29, 2022
在Windows配置DSN
确认InterSystems ODBC客户端驱动已安装
InterSystems IRIS ODBC驱动会随着InterSystems IRIS安装包默认安装。
如果没有随着InterSystems IRIS安装,请由此下载驱动,下载后执行.exe文件进行安装。
定义DSN(Data Source Names)
打开Administrative Tools
打开ODBC Data Sources Administrator(32-bit 或者 64-bit)
选择‘System DSN’,点击右边 ‘Add’,弹出‘Create New Data Source’窗口。
选择一个InterSystems IRIS 安装版本的ODBC驱动,点击‘Finish’
如下图所示,输入驱动名称,IP地址,端口号(使用超级服务端口号),命名空间,用户名和密码。
然后点击 'Test Connection' 进行连接测试
在Linux配置DSN
确认InterSystems ODBC客户端驱动已安装
InterSystems IRIS ODBC驱动会随着InterSystems IRIS安装包默认安装。
如果没有随着InterSystems IRIS安装,请先安装ODBC驱动
Linux
点击下载ODBC驱动
创建一个文件夹,例如/usr/irisodbc,存放刚刚下载的.tar文件
解压.tar文件,执行ODBCinstall安装脚本,irisodbc.ini会被创建:
# tar xvf ODBC-2022.1.0.209.0-lnxrharm64.tar.gz
# ./ODBCInstall
Mac
执行以下命令安装unixODBC
brew install unixODBC
配置DSN - 根据InterSystems IRIS服务器修改odbcinst.ini文件的配置信息
[ODBC Data Sources]
User = User
Userunixodbc = Userunixodbc
[User]
Driver = /isc/iris/bin/libirisodbc35.so
Description = IRIS ODBC driver
Host = localhost
Namespace = IRISAPP
UID = username
Password = pws
Port = 51773
Protocol = TCP
Query Timeout = 1
Static Cursors = 0
Trace = off
TraceFile = iodbctrace.log
Authentication Method = 0
Security Level = 2
Service Principal Name = iris/localhost.domain.com
[Userunixodbc]
Driver = /isc/iris/bin/libirisodbcur6435.so
Description = IRIS ODBC driver
Host = localhost
Namespace = IRISAPP
UID = username
Password = pws
Port = 51773
Protocol = TCP
Query Timeout = 1
Static Cursors = 0
Trace = off
TraceFile = iodbctrace.log
Authentication Method = 0
Security Level = 2
Service Principal Name = iris/localhost.domain.com
您好,问下配置sqlsever的odbc应该怎么配置呢 您是在什么环境配置呢?windows的话,照着上面的截图配置,Linux的话需要安装配置unixODBC。 linux下,自己安装了unixODBC,安装之后配置了DSN,在页面中怎么才能选择到自己安装配置的DSN呢
文章
姚 鑫 · 七月 14, 2022
# 第五章 使用嵌入式 Python (二)
## 在 Python 脚本文件 (.py) 中
还可以使用 `irispython` 命令执行 `Python` 脚本。
考虑 `Windows` 系统上的文件 `C:\python\test.py`,其中包含以下代码:
```python
# 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)
```
可以从命令行运行 `test.py`,如下所示:
```python
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\test.py
Fibonacci series:
0 1 1 2 3 5 8
InterSystems IRIS classes in this namespace:
User.Company
User.Person
1
```
在基于 `UNIX` 的系统上,使用 `export` 而不是 `set`。
```python
/InterSystems/IRIS/bin$ export IRISUSERNAME=
/InterSystems/IRIS/bin$ export IRISPASSWORD=
/InterSystems/IRIS/bin$ export IRISNAMESPACE=USER
/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
```
注意:如果运行 `import iris` 并看到一条消息说 `IRIS_ACCESSDENIED`,请启用 `%Service_Callin`。在管理门户中,转至 `System Administration > Security > Services`,选择 `%Service_CallIn`,然后选中启用服务框。
# 在 IRIS 类的方法中
可以使用 `Language` 关键字在 `IRIS` 类中编写 `Python` 方法。然后,可以调用该方法,就像调用用 `ObjectScript` 编写的方法一样。
例如,使用 `Python` 编写的具有类方法的以下类:
```python
Class User.EmbeddedPython
{
/// Description
ClassMethod Test() As %Status [ Language = python ]
{
# 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()
return status
}
}
```
可以从 `ObjectScript` 调用此方法:
```python
USER>set status = ##class(User.EmbeddedPython).Test()
Fibonacci series:
0 1 1 2 3 5 8
InterSystems IRIS classes in this namespace:
User.Company
User.EmbeddedPython
User.Person
USER>write status
1
```
或来自 `Python`:
```python
>>> import iris
>>> status = iris.cls('User.EmbeddedPython').Test()
Fibonacci series:
0 1 1 2 3 5 8
InterSystems IRIS classes in this namespace:
User.Company
User.EmbeddedPython
User.Person
>>> print(status)
1
```
## 在 SQL 函数和存储过程中
还可以通过在 `CREATE` 语句中指定参数 `LANGUAGE PYTHON` 来使用 `Embedded Python` 编写 `SQL` 函数或存储过程,如下所示:
```python
CREATE FUNCTION tzconvert(dt DATETIME, tzfrom VARCHAR, tzto VARCHAR)
RETURNS DATETIME
LANGUAGE PYTHON
{
from datetime import datetime
from dateutil import parser, tz
d = parser.parse(dt)
if (tzfrom is not None):
tzf = tz.gettz(tzfrom)
d = d.replace(tzinfo = tzf)
return d.astimezone(tz.gettz(tzto)).strftime("%Y-%m-%d %H:%M:%S")
}
```
该代码使用 `Python datetime` 和 `dateutil` 模块中的函数。
以下 `SELECT` 语句调用 `SQL` 函数,将当前日期/时间从东部时间转换为协调世界时 (`UTC`)。
```sql
SELECT tzconvert(now(), 'US/Eastern', 'UTC')
```
该函数返回如下内容:
```sql
2021-10-19 15:10:05
```
公告
Claire Zheng · 六月 14, 2023
Hi 开发者们,
欢迎观看视频,以了解 InterSystems TrakCare 创新工具包( Innovation Toolkit),该工具包可免费下载,使 TrakCare 用户能够快速访问标准 HL7® FHIR® 格式的数据,使记录系统成为转型系统:
⏯ TrakCare 创新工具包介绍 @ 2022 年全球峰会
🗣主持人:Eslam Farahat,InterSystems 产品经理
订阅InterSystems B站!
公告
Claire Zheng · 四月 8, 2021
InterSystems中国正在招聘SE,具体职位需求以英文发布,详情如下,欢迎将简历砸过来 (claire.zheng@intersystems.com)or 私信联系 :)
Job Details
Seniority Level
Mid-Senior level
Industry
Information Technology & Services
Computer Software
Employment Type
Full-time
Job Functions
Sales
Information Technology
About the job
Intersystems China 系联软件(北京)有限公司, is the trusted Healthcare IT solution provider for many World-Class hospitals and clinics in China, such as China’s largest foreign-invested hospital, United Family Healthcare 和睦家医疗, and one of China’s most prestige medical institution, Peking Union Medical College Hospital 北京协和医院。
The company has a small but collaborative team of talented and passionate individuals working the Greater China Region.
Due to China’s economic growth, aging population and the government’s determination in the Healthcare reform, China has become one of InterSystems’ most important strategic regions with unparalleled growth potentials in the years to come.
Based at our Beijing office, the Sales Engineer will provide guidance in the use of InterSystems' products as they best suit the requirements of the customer and its market. Product and business strategies are coordinated with the InterSystems Sales Team to apply existing and new products to customers' database and application needs. The role is very wide-ranging and challenging, requiring a mixture of design skills, hands-on coding, presentation skills, technical architecture, sales awareness, business acumen, evangelism, mentoring and training. This role requires regular travel across China and occasionally overseas.
Responsibilities
Investigate & demonstrate the use of InterSystems products with other 3rd party technologies.
Manage the technical relationship with customer accounts, ensuring that they are aware of the latest product capabilities.
Identify new opportunities within existing accounts.
Build and demonstrate Proof of Concepts (POCs) for prospects and customers to illustrate the suitability, ease of use, performance, features, and reliability and/or connectivity capabilities of InterSystems technology.
Participate in business and detailed technical discussions at all levels and in all departments of the customer's organisation to foster the adoption, use and deployment of InterSystems’ technologies.
Recommend technical architecture, database schema, design patterns, migration and upgrade strategies and operational best practices.
Install InterSystems software and assist with benchmarking exercises to determine optimal deployment configurations.
Work as a hands-on lead application developer to coach partners and prospects, particularly in the early stages of adoption or during particularly technically challenging projects.
Provide application programming in a variety of InterSystems technologies, and other technologies.
Give corporate presentations to InterSystems' customers and prospects at site visits, marketing events and such venues. Topics include strategic and tactical considerations across both technical and business directions. Provide technical product demonstrations.
Carry out formal training courses in InterSystems technologies.
Support customers and prospects during beta test programmes or pre-launch activities and provide feedback to the software development groups.
Assist with troubleshooting and interact with the World-wide Response Centre (WRC) to support resolution of technical problems.
Provide consulting services for the Sales Department and other InterSystems departments (Marketing, Support, Development, Documentation among others) as requested
Skills and Qualifications
Extensive previous experience as a Sales Engineer or related role, preferably in the Healthcare industry.
Outstanding interpersonal, communication and presentation skills
Demonstrated expertise in developing and implementing the functional specifications for integration projects in the healthcare marketplace, including routing and/or transformation engines
Demonstrated experience in all or most of the following: HTML, CSS, JavaScript, XML, XSLT, XPath, XSD, SAX, JSP/Servlets, ASP, SOAP, Web Services
Demonstrated expertise in SQL and ODBC / JDBC
Demonstrated experience in developing applications in various modern Object-oriented programming languages such as Java, C# and VB.Net
Understanding of all or most of the following: Network domains and network configurations, IP Addressing, DNS, WINS, FTP, HTTP, SFTP, SMTP, TELNET and SNMP
High level of understanding in Analytics and Business Intelligence concepts.
Experience
Broad knowledge of IT industry issues & trends including integration, data management, application development and cloud, with specific vertical market & technical knowledge in Integration (SOA, ESB, EAI, ETL, BI…).
Proven experience or technical management in an application development environment.
At least 4 years programming with demonstrable current hands-on expertise in object-oriented languages such as C#, C++ or Java / J2EE.
Knowledge of ESB, Enterprise Application Integration (EAI) experience using InterSystems Ensemble, Health Connece, BEA Software, IBM, Oracle, Microsoft or similar.
Ongoing experience within the design, development & deployment of complex applications.
Knowledge of application frameworks, application servers and server-less programming models.
Knowledge of agile software development processes and continuous development.
Extensive use of 2 or more databases such as InterSystems Caché, Oracle, SQLServer, Sybase, Informix or DB2/UDB, including designing logical and physical database schema, good SQL and JDBC/ODBC expertise, installation and configuration skills, and performance tuning.
Proven business analysis and problem-solving skills.
Strong presentation, influencing and communication skills.
Understanding of the business considerations of application development, support and deployment.
Software Engineering experience.
Familiarity with healthcare related integration in particular HL7 and FHIR standards and protocols.
Experience with Business Intelligence and Analytics technologies and approaches.
Familiarity with modern web-based development frameworks such as Angular, React, Vue.js or similar.
Familiarity with Machine Learning tools and languages
English language fluency.
欢迎简历继续砸过来。。。 我们又开始招人啦!
文章
Louis Lu · 十一月 2, 2021
本文档介绍了 XEP API(com.intersystems.xep),它提供了在 InterSystems IRIS®数据平台上极其快速的对Java 对象存储和检索的能力。文档概述了使用 XEP 将 Java 对象持久化的方法,并引导您通过一个简单的场景来演示该API 的主要功能。
这些演示的内容、只使用默认设置和功能,这样您就可以熟悉 XEP 的基本原理,而不必处理超出本概述范围的细节问题。有关 XEP 的完整文档,请参见 Persisting Java Objects with InterSystems XEP(《使用 InterSystems XEP 持久化 Java 对象》)。
要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。
快速的 Java 对象存储和检索
Java 是一种面向对象的语言,因此对于 Java 应用程序来说,将数据建模为对象是很自然的。然而,当应用程序需要将数据存储在数据库中时,这可能会出现问题。如果您使用 JDBC 来存储和检索对象,您就面临着将对象数据转换为一组关系表,然后再将查询结果集转化为对象的问题。这个问题的通常解决方案是使用对象-关系映射(ORM)框架——如 Hibernate——来自动化这个过程。InterSystems IRIS 提供了一个标准的 Hibernate 接口,InterSystems 推荐它用于大型、复杂的对象层次结构。
另一方面,对于执行实时数据采集等任务的应用程序,主要问题是速度而不是数据复杂性。虽然 Hibernate 绝对不慢(如果适当优化的话),但对于需要极其快速地存储和检索简单或中等复杂数据的任务来说,XEP 是一个更好的选择。在大多数情况下,它将比 Hibernate 或 JDBC 快得多。
XEP 是如何工作的?
XEP 是一个轻量级的 Java API,它将 Java 对象数据作为持久化事件(persistent event)来处理。持久化事件(persistent event)是 InterSystems IRIS 类(通常是 %Persistent 的子类)的一个实例,包含 Java 对象中数据字段的副本。与任何此类实例一样,可以通过对象访问、SQL 查询或直接 global 访问来检索它。
在创建和存储持久化事件(persistent event)之前,XEP 必须分析相应的 Java 类,并将 schema 导入数据库。Schema 定义了用于存储 Java 对象的持久化事件类的结构。如果持久化事件类还不存在,导入 schema 将自动为其创建数据库定义。来自分析的信息可能是 XEP 导入 schema 所需要的全部信息。对于更复杂的结构,您可以提供额外的信息,允许 XEP 生成索引并覆盖导入字段的默认规则。
在为类创建 schema 之后,您可以使用各种 XEP 方法来存储、更新或删除事件、运行 SQL 查询,并遍历查询结果集。
试一试!XEP 的实际操作
现在是您自己尝试 XEP 的时候了。这个 XepSimple 演示是一个非常小的程序,但它提供了大多数重要的XEP 功能的示例,并概述了如何使用 XEP API。
想试试 InterSystems IRIS Java 开发和互操作性功能的在线视频演示吗?请查看 Java QuickStart(Java 快速入门)!
用前须知
要使用该程序,您需要在一个系统上安装 JDK 1.8 版本和任意的 Java IDE,并连接一个正在运行的 InterSystems IRIS 实例。您对 InterSystems IRIS 的选择包括多种已授权的和免费的评估实例;实例不需要是您正在工作的系统(尽管它们必须具有网络访问权限)。关于如何部署每种类型的实例的信息(如果您还没有可使用的实例),请参见 InterSystems IRIS Basics: Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的 Deploying InterSystems IRIS(部署 InterSystems IRIS)。使用同一文档中的 InterSystems IRIS Connection Information(InterSystems IRIS 连接信息)和 Java IDE 中的信息,将 IDE 连接到您的 InterSystems IRIS 实例。
添加示例代码
下面的演示向您演示如何使用 XEP 和 InterSystems IRIS。XepSimple 演示是一个非常小的程序,但它提供了大多数关键 XEP 功能的示例,并概述了如何使用 XEP API。
您可以阅读这里列出的代码,或者您可以从 InterSystems GitHub 存储库下载并自己运行它。下载的内容包括一个 ReadMe,其中包含开始时需要的所有信息。
演示程序分为四个部分,每个部分演示四个主要 XEP 类中的一个:EventPersister、Event、EventQuery 和 EventQueryIterator:
class XepSimple
package xepsimple;
import com.intersystems.xep.*;
import xep.samples.SingleStringSample;
public class XepSimple {
public static void main(String[] args) throws Exception {
// Generate 12 SingleStringSample objects for use as test data
SingleStringSample[] sampleArray = SingleStringSample.generateSampleData(12);
// EventPersister
EventPersister xepPersister = PersisterFactory.createPersister();
xepPersister.connect("127.0.0.1",51773,"User","_SYSTEM","SYS"); // connect to localhost
xepPersister.deleteExtent("xep.samples.SingleStringSample"); // remove old test data
xepPersister.importSchema("xep.samples.SingleStringSample"); // import flat schema
// Event
Event xepEvent = xepPersister.getEvent("xep.samples.SingleStringSample");
for (int i=0; i < sampleArray.length; i++) {
SingleStringSample sample = sampleArray[i]; // array initialized on line 8
sample.name = "Sample object #" + i;
xepEvent.store(sample);
System.out.println("Persisted " + sample.name);
}
// EventQuery
String sqlQuery = "SELECT * FROM xep_samples.SingleStringSample WHERE %ID BETWEEN ? AND ?";
EventQuery<SingleStringSample> xepQuery = xepEvent.createQuery(sqlQuery);
xepQuery.setParameter(1,3); // assign value 3 to first SQL parameter
xepQuery.setParameter(2,12); // assign value 12 to second SQL parameter
xepQuery.execute(); // get resultset for IDs between 3 and 12
// EventQueryIterator
EventQueryIterator<SingleStringSample> xepIter = xepQuery.getIterator();
while (xepIter.hasNext()) {
SingleStringSample newSample = xepIter.next();
newSample.name = newSample.name + " has been updated";
xepIter.set(newSample);
System.out.println(newSample.name);
}
xepQuery.close();
xepEvent.close();
xepPersister.close();
} // end main()
} // end class XepSimple
XepSimple 执行以下任务:
首先,通过调用示例数据类(sample data class) xep.samples.SingleStringSample 的方法生成一些示例对象。
EventPersister 是 XEP 的主要入口点(main entry point),并提供到数据库的连接。
它创建一个名为 xepPersister 的实例,该实例建立到数据库的连接并删除任何现有的示例数据。然后调用 importSchema() 来分析示例类并将 schema 发送到数据库,进而扩展空间保存持久化 SingleStringSample 对象。
EventPersister 包含连接 InterSystems IRIS 实例所需信息——主机名、端口、IRIS命名空间、用户名和密码。使用实例的正确信息更新它们,如 InterSystems IRIS Basics:Connecting an IDE( 《InterSystems IRIS 基础:连接一个 IDE》)中的 InterSystems IRIS Connection Information(InterSystems IRIS 连接信息)所述,这与您用来连接 IDE 和实例的信息相同。可以指定使用 USER 命名空间,或者使用您在已安装的实例中创建的另一个命名空间。如果实例是本地安装的,并且连接使用 localhost 作为服务器地址,程序将使用本地共享内存连接,这比标准的 TCP/IP 连接还要快。
Event 封装了(encapsulate) Java 对象和相应的数据库对象之间的接口。
一旦生成了 schema ,xepPersister 就可以为示例类创建一个名为 xepEvent 的 Event 对象。在循环中,SingleStringSample 的每个实例都将被修改,然后被持久化到数据库中。 xepEvent store() 方法使用了xepPersister 中定义的连接和 schema。
EventQuery 用于准备和执行 SQL 查询。
名为 xepQuery 的 EventQuery<SingleStringSample> 对象是通过将查询字符串传递给 xepEvent 对象的 createQuery() 方法创建的。 该字符串定义了一个接受两个参数(? 字符)的 SQL 查询。 参数值是通过调用 setParameter() 定义的,调用 execute() 可查询结果集。
EventQueryIterator 用于从结果集中读取行,并更新或删除相应的持久化对象。
现在 xepQuery 包含了查询结果集,可以通过调用 getIterator() 为它创建一个名为 xepIter 的迭代器。在循环中,迭代器的 next() 方法被用来获取每一行数据并将其分配给 SingleStringSample 对象。然后修改对象,迭代器的 set() 方法更新数据库中相应的持久化对象。
当处理完成后,它通过调用 XEP 对象的 close() 方法进行清理。
SingleStringSample 类
如果您感兴趣,下面是我们的示例类列表:
了解有关 XEP 和对象持久化的更多信息
xep.samples.SingleStringSample
public class SingleStringSample {
public String name;
public SingleStringSample() {}
SingleStringSample(String str) {
name = str;
}
public static SingleStringSample[] generateSampleData(int objectCount) {
SingleStringSample[] data = new SingleStringSample[objectCount];
for (int i=0;i<objectCount;i++) {
data[i] = new SingleStringSample("single string test");
}
return data;
}
}
之所以选择这个类,部分原因是在 XEP 生成 schema 之前不需要添加标注 annotation。大多数类都需要一个或多个标注来进行 schema 优化(这超出了本文的讨论范围)。
下一步
XepSimple 演示的目的是让您体验 XEP,而又不陷入细节困境,它并非用于实际生产代码的模型——它甚至没有进行异常检查。最重要的简化是在示例数据中。您不需要标注或其他机制来帮助 schema 的生成和优化,类持久化了一些很小的 Java 对象。实际应用程序通常需要一些标注(尽管通常比 Hibernate 少)。
当您把 XEP 引入生产系统时,您将需要了解 XEP 为提要优化、索引控制、批量加载和其他重要任务提供的全部工具 。主要的 XEP 书籍 Persisting Java Objects with InterSystems XEP (《使用 InterSystems XEP 持久化 Java 对象》)对这些功能进行了全面描述。本文档末尾列出的参考资料描述了 InterSystems IRIS 对 Java 支持的其他方面。
了解有关 XEP 和对象持久化的更多信息
要了解有关 Java 对象持久化和其他 InterSystems Java 互操作性技术的更多信息,请参见:
First Look: JDBC and InterSystems Databases(《技术概要:JDBC 和 InterSystems 数据库》)介绍了如何通过 JDBC 连接到 InterSystems IRIS:它提供了产品简介、特殊功能介绍,以及一个亲自尝试的机会。这是一个简单了解并熟悉 InterSystems IRIS 对 Java 支持的起点。
Using Java with the InterSystems JDBC Driver (《在 InterSystems JDBC 驱动程序中使用 Java》)中的 “InterSystems Java Connectivity Options(InterSystems Java 连接选项)”概述了 JDBC 驱动程序支持的所有 InterSystems IRIS Java 技术。
InterSystems IRIS 提供了 Java API,通过 SQL 表、对象和多维存储轻松访问数据库。有关每种类型访问的详细信息,请参见以下书籍:
Using Java with the InterSystems JDBC Driver(《在 InterSystems JDBC 驱动程序中使用 Java》)进行 SQL 表访问。InterSystems JDBC 驱动程序允许 InterSystems IRIS 建立到外部应用程序的 JDBC 连接,并通过 SQL 提供对外部数据源的访问。
Using the Native API for Java(《使用 Native API for Java》)进行本机多维存储访问。InterSystems IRIS 本机 API 允许您直接访问本机基于树的多维存储数据结构,这些结构是 InterSystems IRIS 对象和 SQL 表接口的基础
Persisting Java Objects with InterSystems XEP(《使用 InterSystems XEP 持久化 Java 对象》)进行对象访问。XEP 针对事务处理应用程序进行了优化,这些应用程序处理简单到中等复杂的对象层次结构,并需要极快的对象数据持久化和检索。
Implementation Reference for Java Third Party APIs(《Java 第三方 API 的实施参考 》)中的 "Hibernate Support(Hibernate 支持)"描述了 InterSystems IRIS 的 Hibernate 实现。这个实现了对 Java Persistence Architecture(JPA)的支持,这是推荐用于 Java 项目中大型、复杂对象层次结构的持久化技术。
文章
Jingwei Wang · 九月 28, 2021
本文档介绍了如何在 InterSystems IRIS®数据平台中使用 Java 网关(Gateway)与 Java 组件进行互操作。在本文中,您将首先创建一个示例 JAR 文件。然后,您将在 InterSystems IRIS 管理门户(Management Portal)中创建并启动 Java 网关(Gateway)。您将以编程方式导入创建的示例 JAR 文件。最后,您将在 ObjectScript 中创建并操作一些代理类(proxy class)和对象(object)。
为了让您体验 Java 网关(Gateway ),而又不陷入细节困境,我们保持了简单的探索。这些活动被设计成只使用默认设置和功能,这样您就可以熟悉功能的基本原理,而不必处理那些离题或过于复杂的细节。当您把 Java 网关(Gateway)引入您的生产系统时,您可能需要做一些不同的事情。请确保不要把这种对 Java 网关(Gateway )的探索与真实的情况相混淆!本文档末尾提供的参考资料将使您对在生产中使用 Java 网关(Gateway)的情况有一个很好的了解。
要浏览所有的技术概要(First Look),包括下面描述的可以在免费的社区版(Community Edition)实例上执行的那些,请参见 InterSystems 技术概要。
为什么 Java 网关(Gateway)很重要
Java 网关(Gateway)为 InterSystems IRIS 与 Java 组件进行互操作提供了一种简单的方法。在使用 Java 网关(Gateway)导入 JAR 文件后,您可以实例化一个外部 Java 对象,并将其作为 InterSystems IRIS 中的本机对象进行操作。您可以从 InterSystems IRIS 和 ObjectScript 内部访问 Java 类和方法!
在内部,Java 网关(Gateway)为每个 Java 类生成一对一的 ObjectScript 代理。通常,使用 Java 网关(Gateway)的最佳方法是构建一个小型 Java 封装类(wrapper class),它只公开您想要的功能,然后为这个封装创建一个代理。
探索 Java 网关(Gateway)
我们开发了一个简短的演示,向您展示如何使用 Java 网关(Gateway)和 InterSystems IRIS。想试试InterSystems IRIS Java 开发和互操作性功能的在线视频演示吗?请查看 Java QuickStart(Java 快速入门)!
用前须知
要使用该程序,您需要在一个系统上工作,应安装 JDK 1.8 版本和您选择的 Java IDE,并连接一个正在运行的 InterSystems IRIS 实例。您对 InterSystems IRIS 的选择包括多种已授权的和免费的评估实例;实例不需要由您正在工作的系统托管(尽管它们必须相互具有网络访问权限)。关于如何部署每种类型的实例的信息(如果您还没有可使用的实例),请参见InterSystems IRIS 基础:连接一个 IDE中的部署 InterSystems IRIS。使用同一文档中的InterSystems IRIS 连接信息和 Java IDE中的信息,将 IDE 连接到您的 InterSystems IRIS 实例。
创建 JAR 文件
使用您选择的 IDE 在 Java 中创建 Person 类。使用以下示例代码:
public class Person {
public int age; public String name;
//constructor
public Person (int startAge, String Name) {
age = startAge; name = Name;
}
public void setAge(int newAge)
{
age = newAge;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public static void main(String []args) {
Person myPerson = new Person (5, "Tom"); System.out.println(myPerson.getName()); System.out.println(myPerson.getAge());
}}
编译 Person 类。然后,打开命令提示符(Command Prompt)窗口,并导航到包含 Person.class 文件的目录。使用下面的命令来生成 Person.jar 文件:
jar cf Person.jar Person.class
注意文件的位置。
启动 Java 网关(Gateway)
要启动 Java 网关(Gateway),请按照以下步骤操作:
使用InterSystems IRIS 基础:连接一个 IDE中为您的实例描述的 URL,在浏览器中打开您的实例的管理门户(Management Portal)。
导航到 Object Gateways(对象网关)页面。(System Administration(系统管理) > Configuration(配置) > Connectivity(连接) > External Language Servers
选择 Create New External Language Servers
下拉菜单选择 Java 。
服务器名称输入 JavaGatewayTest,端口输入 55555。
点击 Save(保存)。
在新的 Java 网关(Gateway)所在行中,点击 Start(开始)。
生成代理类(Proxy Classes)
在 USER 命名空间(或您在已安装的实例)中创建一个名为 CreateProxyClasses.cls 的新 ObjectScript 类,包名为 JavaGatewayTest。粘贴以下代码,用您的 InterSystems IRIS 实例的连接信息 (如InterSystems IRIS 基础:连接一个 IDE中所述)替换 gwyConn.&Connect 的参数。您可以指定所示的 USER 命名空间,也可以选择实例上创建的另一个命名空间。用双引号括起来的 Person.jar 文件的完整文件路径替换 YOUR FILEPATH HERE。
Class JavaGatewayTest.CreateProxyClasses Extends %Persistent
{
ClassMethod run()
{
// get a connection to the Java Gateway
set gwyConn = ##class(%Net.Remote.Gateway).%New()
set status = gwyConn.%Connect("127.0.0.1", 55555, "USER") if $$$ISERR(status) {
write !,"error: "_$system.OBJ.DisplayError(status) quit
}
// add the jar to the classpath
set classpath = ##class(%ListOfDataTypes).%New() do classpath.Insert("YOUR FILEPATH HERE")
set status = gwyConn.%AddToCurrentClassPath(classpath) if $$$ISERR(status) {
write !,"error: "_$system.OBJ.DisplayError(status) quit
}
// create the proxy ObjectScript classes that correspond to the Java classes in the jar file set status = gwyConn.%Import("Person",,,,1)
if $$$ISERR(status) {
write !,"error: "_$system.OBJ.DisplayError(status) quit
}
// close the connection to the Java gateway set status = gwyConn.%Disconnect()
if $$$ISERR(status) {
write !,"error: "_$system.OBJ.DisplayError(status) quit
}}}
编译并构建该类。
打开 InterSystems 终端(Terminal),并导航到您指定的命名空间。使用以下命令执行 run() 方法:
do ##class(JavaGatewayTest.ManipulateObjects).run()
您应该可以看到以下输出:
Name: Tom Age: 5
setting age to 100 Age: 100
现在您已经成功地完成了练习,停止您创建的 Java 网关(Gateway)。返回到管理门户(Management Portal)中的 External Language Servers页面,找到您的 JavaGatewayTest 网关,并选择 Stop(停止)。
了解有关 Java 网关(Gateway)的更多信息
要了解有关 Java 网关(Gateway)和 InterSystems IRIS 的更多信息,请参见:
使用 Java 网关(Gateway) 有个疑问,生成代理类(Proxy Classes)该步骤中是不是应该体现为JavaGateway而不是Net.Remote.Gateway。 %Net.Remote.Gateway 是 %Net.Remote.Java.JavaGateway的基类,是用来建立JavaGateway的连接使用的。
文章
Jingwei Wang · 九月 26, 2021
本文解释了如何使用 InterSystems IRIS Native 从 .NET 应用程序访问 InterSystems IRIS®数据平台 globals。IRIS Native 还允许您运行ObjectScript 方法、函数和Routine。在本文中,您首先将连接到 InterSystems IRIS。然后您将在 InterSystems IRIS 中设置和检索一个global 节点的值,并在另一个 global 节点上进行迭代。您还将调用 InterSystems IRIS 类方法。所有这些活动都将在 .NET 应用程序中执行。
为了让您体验 IRIS Native,而又不陷入细节困境,本次探索特意设计得很简洁。这些活动被设计成只使用默认设置和功能,这样您就可以熟悉功能的基本原理,而不必处理那些离题或过于复杂的细节。当您把 IRIS Native 引入您的生产系统时,您可能需要做一些不同的事情。请确保不要把这种对 IRIS Native 的探索与真实的情况相混淆!
Globals 简介
InterSystems IRIS 提供了一种易于使用的方法来将数据存储在持久的多维数组中。global 是存储在 InterSystems IRIS 物理数据库中的多维数组。在应用程序中,globals 到物理数据库的映射基于当前命名空间,命名空间提供一个或多个物理数据库的逻辑统一视图。例如,要使用一个名为 ^Settings 的 global 将值 "Red "与键 "Color "关联起来,打开 InterSystems 终端并输入以下代码:
set ^Settings("Color")="Red"
您可以利用 globals 的多维特性来定义一个更复杂的结构:
set ^Settings("Auto1","Properties","Color") = "Red"
set ^Settings("Auto1","Properties","Model") = "SUV"
set ^Settings("Auto2","Owner") = "Mo"
set ^Settings("Auto2","Properties","Color") = "Green"
探索 IRIS Native
现在,您已经准备好实验 IRIS Native 了。下面的简短演示将向您演示如何在 .NET 应用程序中使用 IRIS Native。(想试试 InterSystems IRIS .NET 开发和互操作性功能的在线视频演示?请看.NET 快速入门!
用前须知
要使用该程序,您需要一个安装了 .NET 框架和 Visual Studio 的 Windows 系统,以及一个运行中的 InterSystems IRIS 实例来连接。您对InterSystems IRIS 的选择包括多种类型的已授权的和免费的评估实例;实例不需要由您正在工作的系统托管(尽管它们必须相互具有网络访问权限)。关于如何部署每种类型的实例的信息(如果您还没有可使用的实例),请参见InterSystems IRIS 基础:连接一个 IDE中的部署InterSystems IRIS 。使用同一文档中的InterSystems IRIS 连接信息和 .Net IDE 中的信息将 Visual Studio 连接到您的 InterSystems IRIS 实例。
配置 Visual Studio 项目
首先,打开 Visual Studio 并创建一个新的控制台应用程序项目,选择 Visual C# 和 Console App (.NET Framework)(控制台应用程序(.NET 框架))选项。对于 Name(名称)字段,输入 netnative。
添加程序集引用
InterSystems.Data.IRISClient.dll 程序集必须存在于您的本地系统中;您可以从 https://github.com/intersystems/quickstarts-dotnet/tree/master/EFPlay/bin/Debug 下载它。如果 InterSystems IRIS 安装在您的本地系统或您可以访问的另一个系统上,则该程序集已经安装在子目录 install-dir\dotnet\bin\v4.5 中,其中 install-dir 是该实例的安装目录。
要将 InterSystems.Data.IRISClient.dll 的程序集引用添加到项目:
从 Visual Studio 主菜单中,选择 Project(项目) > Add Reference(添加引用)...
在出现的窗口中,点击 Browse(浏览)....
浏览到 InterSystems.Data.IRISClient.dll 文件的位置。
选择文件并点击 Add(添加)。
点击 OK(確定)。
在 Visual Studio Solution Explorer 中, InterSystems.Data.IRISClient.dll 程序集现在应该列在 Reference(引用)下。
使用 IRIS Native
现在,您已经准备好实验 IRIS Native 了。打开在创建 Visual Studio 项目时创建的文件(例如,Program.cs)。删除文件的默认内容并粘贴以下代码,用您的 InterSystems IRIS 实例的连接信息替换 conn.ConnectionString 中的值。(logfile 的值必须是本地系统上的可写路径)。您可以指定所示的 USER命名空间,也可以选择在实例上创建另一个命名空间。
using System;
using InterSystems.Data.IRISClient;
using InterSystems.Data.IRISClient.ADO;
public class IRISNative
{
public static void Main(String[] args)
{
try
{
// open connection to InterSystems IRIS instance using connection string IRISConnection conn = new IRISConnection();
// edit this ConnectionString to match your environment
conn.ConnectionString = "Server=localhost; Port=1972; Namespace=User; Password=SYS; User
ID=_system;
logfile=c:\\sandbox\\dbnative.log";
conn.Open();
// create IRIS Native object
IRIS iris = IRIS.CreateIRIS(conn);
Console.WriteLine("[1. Setting and getting a global]");
// setting and getting a global
// ObjectScript equivalent: set ^testglobal("1") = 8888 iris.Set(8888, "^testglobal", "1");
// ObjectScript equivalent: set globalValue = $get(^testglobal("1")) Int16? globalValue = iris.GetInt16("^testglobal", "1");
Console.WriteLine("The value of ^testglobal(1) is " + globalValue); Console.WriteLine();
Console.WriteLine("[2. Iterating over a global]");
// modify global to iterate over
// ObjectScript equivalent: set ^testglobal("1") = 8888
// ObjectScript equivalent: set ^testglobal("2") = 9999 iris.Set(8888, "^testglobal", "1");
iris.Set(9999, "^testglobal", "2");
// iterate over all nodes forwards Console.WriteLine("walk forwards");
IRISIterator subscriptIter = iris.GetIRISIterator("^testglobal"); foreach (var node in subscriptIter)
{
Console.WriteLine("subscript=" + subscriptIter.CurrentSubscript + ", value=" + node);
}
Console.WriteLine();
Console.WriteLine("[3. Calling a class method]");
// calling a class method
// ObjectScript equivalent: set returnValue = ##class(%Library.Utility).Date(5) String returnValue = iris.ClassMethodString("%Library.Utility", "Date", 5); Console.WriteLine(returnValue);
Console.WriteLine();
// close IRIS object and connection iris.Close();
conn.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}}}
示例代码分为三个部分:
第一部分展示了如何设置一个 global 的值以及稍后如何检索它。这部分里面执行的命令等同于 ObjectScript 的 SET 和 GET 命令。
第二部分展示了如何迭代 global 的子节点,类似于ObjectScript中的 $ORDER函数。
第三部分展示了如何使用 IRIS Native 从您的 .NET 应用程序调用 ObjectScript 类方法。
如果您使用的是本地安装的实例,并且因此连接使用 localhost 作为服务器地址,那么程序可能使用本地共享内存连接,这比标准的 TCP/IP 连接还要快。
注意: ObjectScript 中的 Globals 以插入符号(^)开头。在使用 InterSystems IRIS Native API 的 .NET 应用程序中,这不是必需的。
运行练习
现在可以按 Ctrl+F5 运行演示应用程序了。如果示例执行成功,您应该会看到带有示例代码结果的打印输出:
[1. Setting and getting a global] The value of ^testglobal(1) is 8888
[2. Iterating over a global] walk forwards
subscript=1, value=8888 subscript=2, value=9999
[3. Calling a class method] Oct 30, 2018
在管理门户(Management Portal)中确认变更
接下来,使用以下程序在管理门户(Management Portal)中确认您的结果:
使用InterSystems IRIS 基础:连接一个 IDE中为您的实例描述的 URL,在浏览器中打开您的实例的管理门户(Management Portal)。
如果您不在代码指定的命名空间中,请切换到该命名空间。
导航到 Globals 页面(System Explorer(系统资源管理器) > Global)。您应该会看到在示例代码中创建的 testglobal。点击 VIEW 来查看其内容。 您应该会看到 global 的两个节点:^testglobal(1) = 8888 和 ^testglobal(2) = 9999。
了解有关 IRIS Native 的更多信息
有关 IRIS Native、globals 和 InterSystems IRIS 的更多信息,请参见:
用于.Net的 Native API
技术概要:用于Java的 InterSystems IRIS Native API
使用 Globals
用于.NET 的 InterSystems Managed Provider
文章
Michael Lei · 十一月 9, 2021
照顾好我们的客户并打造伟大的产品。这是我们InterSystems自从1978年成立以来的座右铭。40多年很快过去,这始终驱动着我们前进。过去是,未来也将一直是我们的基因。
追求卓越和持续提升的价值观是我们的“客户至上”方法取得成功的关键。这也是过去三年我们一直积极参与Gartner及其Peer Insights项目的原因,该项目主要征求最终用户的反馈意见和对厂商的打分。InterSystems连续两年荣膺Peer Insights运营数据库管理系统(ODBMS)客户选择奖,而且是该类别评分最高的供应商之一。
此外,InterSystems还入选Gartner目前推出的Gartner“客户至上”计划,并获得相应标识(上图),这一计划认可了我们为客户提供的坦诚分享、公正反馈的环境,根据用户反馈,我们不断改善产品和服务,从而最大程度地满足不断变化的客户需求。简言之,我们没有人为影响客户在Gartner网站上对我们的评价。这体现了我们对客户的承诺以及开放沟通渠道的重要性。InterSystems IRIS®数据平台是Gartner最新的云数据库管理系统魔力象限(Cloud Database Management Systems Magic Quadrant)中唯一获得此标识的产品,我们对此深感自豪。
以客户为中心的基因DNA
在我尚未加入InterSystems前,作为一家医学实验室的IT人员,我曾体验到InterSystems的“客户至上”。当时,我们还与另一家供应商合作,但他们的支持服务并不理想——我们需要等待很长时间;需要向很多人重复说明问题,而这些人并不能解决问题;我们还需要不断进行身份验证。他们的服务与其说是提供帮助,不如说是让人筋疲力尽,我认为他们从未将我的利益放在心上。
而InterSystems提供了天壤之别的客户体验。我第一次遇到问题呼叫InterSystems支持中心时,一位名叫Terry的人立刻接通了电话。他没有让我验证身份,而是让我解释了一下问题,并一直在线提供支持直到问题得到解决。当时我并不知道这位Terry居然就是InterSystems的创始人兼首席执行官(现在仍是)。显然,对InterSystems来说,最重要的事情是解决问题、让客户满意。尽管现在许多事情已经发生了改变(我们现在有不同人员负责处理服务请求了),但我们依然坚持这一理念。(注明:作者在1984年加入Intersystems 公司,这段故事发生在将近40年前公司刚刚成立的时候)
每周一上午,InterSystems总部都会召开高管例会,然而会议重点并非是公司的销售指标或收入,而是探讨如何通过改善产品、业务模式和支持服务来增强客户的成功。会议至少有一半的时间是在讨论客户支持服务——哪位客户提出了问题、我们是如何解决的、客户是否满意等等。
我们将客户支持作为我们的一大亮点,因为它能够彰显我们帮助客户成功的热情。如果我们能够助力客户实现自身目标,这比签署了一笔大单更有价值。这能够培育不可复制的客户信任。我们现在的客户留存率在99%以上,结果不言自明。
“如果你不清楚应该帮助客户还是帮助公司,那么请选择帮助客户。”——Terry Ragon,InterSystems CEO
未来之路
我们对获得Gartner的“客户至上”标识深感自豪。对我们而言,这不仅是又一次的认可,更是一个信号——我们正沿着正确的方向为用户提供卓越客户服务,其结果和客户口碑能说明一切。
借助Gartner的帮助,我们希望继续努力提供尽可能最佳的客户支持,我们的员工配备也反映了这一目标。我们授予支持团队与工程师和开发人员同等重要的权利,这样他们就可以为客户做出重要决定,而不必来回请示。对InterSystems而言,这不仅是客户支持的未来之路,也是我们提供最佳产品和服务的前进方向。
注:作者John Paladino是InterSystems负责客户服务的全球副总裁。自1984年加入InterSystems以来,他帮助开发了自动化支持跟踪系统和针对所有InterSystems软件产品的客户培训项目,制定并实施了旨在改善响应性、提高客户满意度的服务标准,并主导多个国内外团队建设计划。在加入InterSystems之前,他曾在New England Pathology担任三年的系统工程经理,负责获取、实施和管理各类信息技术。Paladino曾在伍斯特理工学院和马萨诸塞大学卢维尔分校攻读电机工程专业。
博客原文:How Can Putting the Customer First Drive Excellence and Innovation?
微信公众号原文:深深植根于InterSystems的DNA中,客户至上理念如何推动卓越与创新?
欢迎大家参与评审给我们提供宝贵意见:参与gartner-peer-insights同业评审,赢取价值25美元的礼品卡
文章
Jingwei Wang · 九月 16, 2022
连接前准备:
.Net 开发环境
InterSystems IRIS 客户端组件:InterSystems.Data.IRISClient.dll,这个dll文件可以再IRIS安装包中找到,在IRIS/dev/dotnet/bin/version
Connection String
步骤:
在.Net 开发环境中,配置客户端组件InterSystems.Data.IRISClient.dll作为一个dependency
Connection String:其中using InterSystems.Data.IRISClient 用来导入需要使用的dll文件,string connectionString = "Server = localhost; Port = 1972; Namespace = User; User ID = SQLAdmin; Password = deployment-password"是connection string。
using System;
using InterSystems.Data.IRISClient;
namespace ADODemo
{
internal class Program
{
static void Main(string[] args)
{
string connectionString = "Server = localhost; Port = 1972; Namespace = User; User ID = SQLAdmin; Password = deployment-password";
IRISADOConnection connection = new IRISADOConnection(connectionString);
connection.Open();
// when finished, use the line below to close the connection
// connection.Close();
}
}
}
公告
Claire Zheng · 九月 4, 2022
嗨,开发者们!
秋高气爽之际,我们很高兴地宣布启动🏆InterSystems开发者社区中文版首届技术征文大赛 🏆(←点击链接进入参赛页面,浏览所有参赛文章)!
从2022年9月5日-10月24日(北京时间),欢迎热爱InterSystems技术的你来投稿,撰写与InterSystems技术相关的文章。
🎁参与奖 我们为每一位成功参赛的作者准备了礼品!
🏆优秀文章大奖 Apple iPad; Beats Fit Pro; HUAWEI WATCH; Logitech键盘; WD固态硬盘;KEEP智能手环
奖品设置
1. 专家提名奖:活动期间发布文章且成功参赛后,由InterSystems专家评选得出
🥇一等奖1名,Apple iPad
🥈二等奖2名,Beats Fit Pro
🥉三等奖3名,WD 固态硬盘
2. 开发者社区奖:活动期间发布文章且成功参赛后,由社区成员点赞评选得出,点赞前五名获得以下奖品
🥇第一名,HUAWEI WATCH 3智能手表
🥈第二名,罗技(Logitech)ERGO键盘
🥉第三名-第五名,KEEP 运动智能手环
3. 入围奖:在征文大赛期间,所有在InterSystems开发者中文社区发布文章且成功参赛的其余用户都将获得特别奖励。
请注意:
每位作者只可以获得一个奖项(即:您只可以获得一次专家提名奖/开发者社区奖/入围奖);
当出现票数相当的平手情况时,将以专家评选投票数作为最终票数高低的判断标准。
谁可以参加?
任何开发者社区成员,除了InterSystems的员工。创建一个账户!
关键时间节点
📝 2022年9月5日-10月23日(北京时间),文章发布与点赞收集!在社区发布文章,呼朋引伴来点赞。越早发布文章,就越有时间收集更多点赞(这是您获得“开发者社区奖”的关键)。
🎉 2022年10月24日(北京时间),公布获奖名单。
参赛要求
❗️ 征文期间,发布在中文社区的文章只要满足以下要求,将自动参加比赛,无需额外提交:
文章必须与InterSystems技术有关
文章必须以中文撰写
文章必须是100%的原创文章(可以是现有文章的延续)
文章应在InterSystems开发者中文社区首发,严禁从其他社区进行搬运
文章严禁抄袭或翻译社区现有文章
社区成员可以发布多篇文章参赛
文章字数应不少于800字,写作时请关注编辑器右下角的计数器
额外奖励
您可以自由选择任何与InterSystems技术相关的主题,如果您提交的文章中符合以下要求,将获得额外奖励票数。
资源助力
➡️ 文章样例:同一主题系列文章
数据平台与三级等保第一篇
精华文章-基于docker的一体化集成ai环境中部署机器学习深度学习模型
数据平台互操作功能运行维护管理基础-互操作消息管理
互操作进阶-第二篇:规则引擎-(第一部分)
精华文章-webgateway系列1-web-gateway介绍
➡️ 文章样例:独立主题文章
精华文章-从软件架构发展谈业务集成技术演进与展望
精华翻译文章:什么是智慧医院数字孪生?
在intersystems-iris医疗行业版的fhir服务器上测试和开发smart-fhir应用
➡️ 操作指导:首次加入社区,如何发帖?
如何发帖以及其他常见问题解答
如何在开发者社区上发布包含代码的帖子?
如何从 Word 或 Google Docs 发布文章
如何在帖子中突出显示 ObjectScript?
如何在其他开发者社区翻译并发布帖子
➡️ 操作指导:更多开发者社区技能学习
【精华置顶帖】一文了解关于InterSystems开发者社区的各种积分福利!
快乐分享技术,期待您的大作!✨
🏆InterSystems开发者社区中文版首届技术征文大赛 🏆(←点击链接进入参赛页面,浏览所有参赛文章)
如果有疑问/高见,欢迎跟帖留言!
公告
Claire Zheng · 十一月 2, 2022
Hi!大家好!
截至11月3日中午,我们的开发者社区会员共495人!我们准备了一份惊喜礼品,准备送给第500名开发者社区会员!
那么,谁是第500名幸运的开发者社区成员呢?我们拭目以待!(*^▽^*)
文章
Claire Zheng · 六月 8, 2023
亲爱的开发者们,
向大家分享一个好消息!InterSystems开发者中文社区版主、InterSystems高级销售工程师祝麟 ( @Lin.Zhu ) 于近日顺利通过“HL7 FHIR R4 Proficiency Exam”并取得资格认证证书!
HL7 FHIR(R4)能力证书可以证明在最新和最热门的HL7标准方面达到行业公认的专业水平。考试涵盖了以下内容:FHIR原则;FHIR资源的基本概念;交换机制;一致性和实施指导;如何使用术语;如何建立安全和可靠的FHIR解决方案;FHIR维护过程;以及如何使用和处理FHIR许可和知识产权(IP)。
FHIR®(快速医疗互操作性资源)是HL7的下一代标准框架,2023年,我们推出的InterSystems IRIS医疗版互联互通套件3.0版(V3.0)就实现了与FHIR更深层的生态互通——借助强大的、打通多个互操作生态的能力,用户可以将互联互通服务和消息与其它互操作标准(如FHIR、HL7 V2)进行自动双向转换,为数据挖掘与价值实现带来更多可能性。
举例来说,在数据利用上,通过V3.0内置的FHIR资源仓库,用户可按业务需要,将互联互通文档和消息通过FHIR资源投射为SQL结构化数据,为实现“原始数据不出院、数据可用不可见”提供了技术基础,从而极大加强现有院内临床数据中心、科研数据中心以及区域健康大数据平台等数据仓库类系统的数据利用,使BI、AI/ML过程可基于数据发掘实现价值洞察,进行数字化业务闭环,把数据转化为可以持续产生价值的资产,为医院实现数据资产变现提供必要条件,全面助力医院数字化转型和生产力提升。
在应用创新上,V3.0 提供强大的FHIR生态能力(包含SMART on FHIR与CDS Hooks),支持快速开发和集成任意支持FHIR标准的、即插即用的第三方创新应用,实现数据利用最大化,为包括居民健康管理、临床决策支持、专科电子病历等打造坚实的数据和平台基础。
InterSystems作为FHIR标准在全球范围的推广者,已经在美国和亚太地区拥有众多成功案例,并且帮助越来越多的国家部署并遵循这种标准。
再次恭喜 @Lin.Zhu ✿✿ヽ(°▽°)ノ✿ 获得这一证书!
文章
Qiao Peng · 三月 29, 2021
前面介绍了通过mirroring或shadow,使用journal日志过滤器的方式,在不改动数据模型的情况下实现InterSystems IRIS/Caché上的CDC能力。但如果你可以修改InterSystems IRIS/Caché上的数据模型,也可以考虑使用DSTIME特性实现变更数据捕获。
DSTIME特性
DSTIME特性是InterSystems IRIS/Caché的嵌入式实时BI工具DeepSee用于跟踪数据变更的。InterSystems IRIS和2011版之后的Caché,都支持DSTIME特性。它会自动记录数据库中SQL表记录或持久化对象的变更,并将变更记录写入持久化的多维数组^OBJ.DSTIME中。
DSTIME特性是针对于SQL表/持久化类的,因此需要为每个需要记录变化的表/持久化类开启。当开启了DSTIME的表/持久化类,有记录插入、更新、删除时,InterSystems IRIS/Caché引擎会自动在^OBJ.DSTIME中记录这些操作。其格式为:^OBJ.DSTIME(类名,DSTIME,对象ID) = 执行的操作代码
DSTIME:当SQL表/持久化类的参数DSINTERVAL未被设置时,DSTIME=0;当SQL表/持久化类的参数DSINTERVAL被设置时,DSTIME=1840/12/31午夜12点到记录发生时的秒数。
执行的操作代码:
代码
操作
0
更新
1
插入
2
删除
例如:^OBJ.DSTIME(“Demo.Patient”,5673588714,2) = 1^OBJ.DSTIME(“Demo.Patient”,5673588735,3) = 1^OBJ.DSTIME(“Demo.Patient”,5673588784,4) = 1^OBJ.DSTIME(“Demo.Patient”,5673588791,2) = 0
因此,如果你没有使用DeepSee,就可以监控^OBJ.DSTIME即可获得IRIS/Cache’的数据变更。注:DeepSee在同步cube时,会自动查询、操作、删除^OBJ.DSTIME的数据,因此,将会对于直接使用它进行数据变更捕获产生影响。如果你的确在使用DeepSee自动同步cube,也想使用^OBJ.DSTIME实现CDC,请联系InterSystems获得解决方案。这不在本文的讨论范围。
开启DSTIME特性
InterSystems IRIS/Caché可以在SQL表建模时、对象模型上开启DSTIME特性。涉及2个类参数:DSTIME 和DSINTERVAL
DSTIME 类参数设置为AUTO时,InterSystems IRIS/Caché会自动记录对应SQL表/持久化类的数据变更。DSINTERVAL类参数控制记录的数据变更如何分组。用于实现CDC时,建议设置该参数=1。
1. 通过SQL建模,新建SQL表
在使用SQL新建表时,可以增加对于类参数DSTIME 和DSINTERVAL的设置。
例如下面的SQL创建一个开启了DSTIME的表Demo.Patient:
CREATE TABLE Demo.Patient (
%CLASSPARAMETER DSTIME = 'AUTO',
EMPNUM INT NOT NULL,
NAMELAST CHAR(30) NOT NULL,
NAMEFIRST CHAR(30) NOT NULL,
CONSTRAINT EMPLOYEEPK PRIMARY KEY (EMPNUM))
其中%CLASSPARAMETER DSTIME = 'AUTO'开启表的DSTIME特性。
2. 通过面向对象建模,修改持久化的对象模型
对于对象模型,在建模时或之后修改模型,设置DSTIME类参数的方式开启:Parameter DSTIME = "AUTO";:
Class Demo.Patient Extends %Persistent [ ClassType = persistent, DdlAllowed, Final, Owner = {_SYSTEM}, ProcedureBlock, SqlRowIdPrivate, SqlTableName = PATIENT ]
{
Property NAME As %Library.String(MAXLEN = 1) [ SqlColumnNumber = 2 ];
Property DOB As %Library.Date [ SqlColumnNumber = 3 ];
Parameter USEEXTENTSET = 1;
Parameter DSTIME = "AUTO";
Parameter DSINTERVAL = 1;
}
3. 对批量对象模型增加DSTIME特性
如果想对整个SQL Schema下对所有表或一个包下的所有对象类增加DSTIME,也可以定义一个持久化的纯虚基类,在基类中定义DSTIME类参数,然后让所有的类继承于这个基类。示例代码如下:
定义基类:
Class Demo.Super Extends %Persistent [ Abstract, NoExtent ]
{
Parameter DSTIME = "AUTO";
}
注意,基类应该设置NoExtent关键字,以避免编译器生成存储模型。
修改子类,使Demo.Super成为其主父类:
Class Demo.Patient Extends Demo.Super [ Language = objectscript ]
{
Property NAME As %Library.String(MAXLEN = 100) [ SqlColumnNumber = 2 ];
Property DOB As %Library.Date [ SqlColumnNumber = 3 ];
}
测试
开启DSTIME后,就可以使用SQL或对象操作方式,在InterSystems IRIS/Caché中执行一些插入、更新、删除操作,并观察持久化多维数组^OBJ.DSTIME的记录。
总结
通过开启DSTIME特性,让InterSystems IRIS/Caché自动记录需要追踪的SQL表或持久化类的数据变更,可以方便的通过^OBJ.DSTIME捕获这些变更,并处理数据变更或将变更记录输出到下游系统。
其它注意事项:应考虑在处理/输出完数据变更后,记录上次处理的DSTIME值,或删除^OBJ.DSTIME中已处理过的记录,以方便持续的、高效的捕获新的数据变更。
CDC系列
更多的CDC选项实现,请参考:
1. CDC系列之一 :使用Dejournal Filter在InterSystems IRIS/Caché上通过Mirroring实现CDC功能
2. CDC系列之二 :使用Dejournaling filter routine在Caché上通过Shadow实现CDC
3. CDC系列之三 :建立InterSystems IRIS/Caché的Global数据变更与SQL表记录的对应关系
4. CDC系列之四:使用DSTIME特性在InterSystems IRIS/Caché上实现CDC功能
公告
Claire Zheng · 九月 18, 2023
嗨,开发者们!
秋高气爽之际,我们很高兴地宣布启动🏆InterSystems开发者社区中文版第二届技术征文大赛 🏆(←点击链接进入参赛页面,浏览所有参赛文章)!
从2023年9月19日-11月24日(北京时间),欢迎热爱InterSystems技术的你来投稿,撰写与InterSystems技术相关的文章。
🎁参与奖 我们为每一位成功参赛的作者准备了礼品!
🏆优秀文章大奖 Apple AirPods Pro; Osprey Proxima Backpack; Home Office Pro Lap Desk; Sound Machine with Wireless Charger; JBL Pulse 5 Bluetooth Speaker; Sound Machine with Wireless Charger; Hammock InterSystems; Light Up Your Logo Charging Pad; InterSystems Developer Community Blanket
奖品设置
1. 专家提名奖:活动期间发布文章且成功参赛后,由InterSystems专家评选得出
🥇第一名,Apple AirPods Pro(2nd Generation w Active Noise Cancellation)
🥈第二名,Osprey Proxima Backpack
🥉第三名,Home Office Pro Lap Desk
🏆第四名-第六名,Sound Machine with Wireless Charger
2. 开发者社区奖:活动期间发布文章且成功参赛后,由社区成员点赞评选得出,点赞前五名获得以下奖品
🥇第一名,JBL Pulse 5 Bluetooth Speaker
🥈第二名,Sound Machine with Wireless Charger
🥉第三名,Hammock InterSystems
🏆第四名,Light Up InterSystems Charging Pad
🏆第五名,InterSystems Developer Community Blanket
3. 入围奖:在征文大赛期间,所有在InterSystems开发者中文社区发布文章且成功参赛的其余用户都将获得特别奖励。
请注意:
每位作者只可以获得一个奖项(即:您只可以获得一次专家提名奖/开发者社区奖/入围奖);
在“开发者社区奖”的评选过程中,当出现票数相当的平手情况时,将以专家评选投票数作为最终票数高低的判断标准。
谁可以参加?
任何开发者社区成员,除了InterSystems的员工。创建一个账户!
关键时间节点
📝 2023年9月19日-11月23日(北京时间),文章发布与点赞收集!在社区发布文章后即可开始为您的文章收集点赞。越早发布文章,就越有时间收集更多点赞(这是您获得“开发者社区奖”的关键)。
📝 2023年11月23日(北京时间),专家打分截止(专家提名奖)。在此期间,用户可继续为文章收集点赞,赢得“开发者社区奖”。
🎉 2023年11月24日(北京时间),公布获奖名单。
参赛要求
❗️ 征文期间,发布在中文社区的文章只要满足以下要求,将自动参加比赛,无需额外提交:
文章必须与InterSystems技术有关
文章必须以中文撰写
文章必须是100%的原创文章(可以是现有文章的延续)
文章应在InterSystems开发者中文社区首发,严禁从其他社区进行搬运
文章严禁抄袭或翻译社区现有文章
社区成员可以发布多篇文章参赛
文章字数应不少于800字,写作时请关注编辑器右下角的计数器
额外奖励
您可以自由选择任何与InterSystems技术相关的主题,如果您提交的文章中符合以下要求,将获得额外奖励票数。
资源助力
➡️ 文章样例:FHIR
在InterSystems IRIS医疗行业版的FHIR服务器上测试和开发SMART on FHIR应用
➡️ 文章样例:互操作
IRIS如何进行CRUD操作
➡️ 文章样例:API
使用规范优先的方式开发REST API
➡️ 文章样例:应用
FHIR创新应用示例:使用 FHIR Cloud Server 和 IRIS for Health 对妊娠糖尿病进行连续血糖监测
➡️ 文章样例:同一主题系列文章
数据平台与三级等保第一篇
精华文章-基于docker的一体化集成ai环境中部署机器学习深度学习模型
数据平台互操作功能运行维护管理基础-互操作消息管理
互操作进阶-第二篇:规则引擎-(第一部分)
精华文章-webgateway系列1-web-gateway介绍
➡️ 文章样例:独立主题文章
精华文章-从软件架构发展谈业务集成技术演进与展望
精华翻译文章:什么是智慧医院数字孪生?
在intersystems-iris医疗行业版的fhir服务器上测试和开发smart-fhir应用
➡️ 操作指导:首次加入社区,如何发帖?
如何发帖以及其他常见问题解答
如何在开发者社区上发布包含代码的帖子?
如何从 Word 或 Google Docs 发布文章
如何在帖子中突出显示 ObjectScript?
如何在其他开发者社区翻译并发布帖子
➡️ 操作指导:更多开发者社区技能学习
【精华置顶帖】一文了解关于InterSystems开发者社区的各种积分福利!
➡️ 一起来欣赏首届技术征文大赛的文章!
专家提名奖
@Zhe Wang
获奖作品:IRIS如何进行CRUD操作
@姚 鑫
获奖作品:IRIS与Caché的23种设计模式
@聆严 周
获奖作品:使用Prometheus监控Cache集群
@John Pan
获奖作品:如何调用Ensemble/IRIS内置的HL7 V2 webservice - Java,PB9,Delphi7样例
@he hf
获奖作品:10分钟快速开发一个连接到InterSystems IRIS数据库的C#应用
@sun yao
获奖作品:前端操作自动生成BS、BP、BO
开发者社区奖
@Meng Cao
获奖作品:Caché数据库私有apache版本升级
@lizw lizw
获奖作品:关于%Dictionary.CompiledClass类在实际业务中的一些应用
@Chang Liu
获奖作品:在国产系统上安装Healthconnect2021
@shaosheng shengshao
获奖作品:HEALTHSHARE2018版如何实现AES(CBC)的HEX输出,并可以实现加密和解密
@Guangliang Zhang
获奖作品:基于cconsole.log的cache数据库的实时监控
入围奖
@water huang
获奖作品:对 %XML.PropertyParameters类的探索
@zhanglianzhu zhanglianzhu
获奖作品:Cache死循环检测和申明式事务
@li wang
获奖作品:HealthConnect访问HTTPS开头地址
@bai hongtao
获奖作品:第三方HA软件结合MIRROR使用方法探讨
@Liu Tangh
获奖作品:在Cache系统中使用负载均衡服务的探讨
@yaoguai wan
获奖作品:IRIS架构的浅显理解以及windows10、docker安装IRIS Health详解流程及部分问题浅析
@li dong
获奖作品:实现Cache/IRIS中zip文件的下载、解压及读取
@Yuxiang Niu
获奖作品:Cache中不同类型锁的理解与分析
@Vincent Wu
获奖作品:TrakCare Lab之延伸应用-护理站自动采检备管系统(NSAD)之开发
快乐分享技术,期待您的大作!✨
🏆InterSystems开发者社区中文版第二届技术征文大赛 🏆(←点击链接进入参赛页面,浏览所有参赛文章)
如果有疑问/高见,欢迎跟帖留言!
试发