Pesquisar

お知らせ
· 2024年9月13日

[Vidéo] Fluidifier le parcours patient via l'e-admission

Salut la Communauté!

Profitez de regarder la nouvelle vidéo sur la chaîne Youtube d'InterSystems France :

📺 Fluidifier le parcours patient via l'e-admission

 

Plongez dans la présentatin du portail patient administratif intégré à TrakCare qui offre une prise en charge du patient en amont et en aval de sa venue dans l'établissement. Vous découvrirez comment la dématérialisation des démarches administratives permet de simplifier le parcours du patient ainsi que redonner du temps au personnel administratif.

Intervenants : 
🗣 Hervé Rivière, Directeur Médical, InterSystems
🗣 Florence Cureau, Solution Architect, InterSystems

Abonnez-vous à notre chaîne youtube pour plus de vidéos et restez à l'écoute !

ディスカッション (0)0
続けるにはログインするか新規登録を行ってください
記事
· 2024年9月13日 7m read

Embedded python in InterSystems IRIS Part-2

In the previous article. Practices of class members and their execution within embedded Python. We will now turn our attention to the process of switching namespaces, accessing global variables , traversing and routine executions within embedded Python.

Before proceeding to the other functions. let us briefly review the execute function within the iris package. This function is exceptionally beneficial for executing the arbitrary ObjectScript functions and class invocation.

>>> b = iris.execute('return $Piece("test^aaaa","^",2)')
>>> b
'aaaa'
>>> b = iris.execute('return $Extract("123456",2,5)')
>>> b
'2345'
>>> b = iris.execute('return $Length(123456)')
>>> iris.execute('write ##Class(%SYSTEM.SYS).NameSpace()')
LEARNING>>>
>>> b = iris.execute('return ##Class(%SYSTEM.SYS).NameSpace()')
>>> b
'LEARNING'

 

Let us begin!

4. Switch Namespaces

Switching namespaces during execution is often necessary. However, unlike in IRIS, direct switching of namespaces within embedded Python is not feasible. Therefore, it is essential to utilize existing class definitions or to create a wrapper method to facilitate the switching of namespaces.  

ClassMethod SwitchNM() [ Language = python ]
{
    import iris
    print(iris.cls('%SYSTEM.SYS').NameSpace())
    print(iris.system.Process.SetNamespace("USER"))
    try:
        iris.cls('User.EmbeddedPython').pyGetTemplateString()
    except RuntimeError as e:
        print("Wrong NameSpace",e)
}

 

5. Global

To utilize the capabilities of global for data traversal or to retrieve information from legacy global systems directly, rather than through SQL or objects within embedded Python, one can access it directly by employing the gref function from the iris package. To set or get global values, the gref function can be utilized to establish a reference to the global variable and directly assign values within Python.

 
iris.gref

5.1 Set global values

ClassMethod SetGlobal() [ Language = python ]
{
import iris
#create a global reference
g = iris.gref('^mygbl') 
g[1],g[2]='Mon','Tue'
g["95752455",1]=iris.execute('return $LFS("Ashok,55720,9639639639,test@gmail.com",",")')
g["85752400",1]=iris.execute('return $LB("Test","9517539635","t@gmail.com")')
g["test","c1"]=iris.execute('return ##Class(MyLearn.EmbeddedPython).executeAndGetResult()') # method wil return some listbuild values
# declare values by using set function
g.set([3],'Wed')
g.set([3,1,1],'Test multilevel')
}

5.2 get global values
Fetch the global values from python directly by using the subscripts or get method.

ClassMethod GetGlobal() [ Language = python ]
{
    import iris
    #gets a global reference
    g = iris.gref('^mybgl') 
    # get values
    print(g[3,1,1])
    print(g.get([2,1]))
    print(g["95752455",1])
}

5.3 Traversal 

order - Traversing the global is essential for collecting multiple level of data's from global. This embedded Python  order functions similarly to the $Order command, utilizing the order function from the iris.gref. Initially, it is necessary to establish a reference to the global entity that requires traversal.

Single subscript level traversal

ClassMethod DollarOrder() [ Language = python ]
{
    import iris
    g = iris.gref('^MyLearn.EmbeddedPythonD') # I use my persistent class global
    key = ''
    while True:
        key = g.order([key])
        if key == None:
            break
        print(f'{key} {g.get([key])}')
}

Multi subscript level traversal

 
global
ClassMethod DollarOrderMultiLevel() [ Language = python ]
{
 import iris
 g = iris.gref('^mygbl')
 key1= ''
 while True:
 	key1 = g.order([key1])
 	if key1== None:
 		break
 	key2 = ''
 	while True:
 		key2 = g.order([key1,key2])
 		if key2 == None:
 			break
 		value = g.get([key1,key2])
 		print(key1,key2,value)
}

query - query function from the iris.gref similarly $query. This function is collects all the global values in to tuples. the tuple result contains the id(s) in list and values is the next tuple. You can refer the below tuple sample 

 
tuple
ClassMethod DollarQuery() [ Language = python ]
{
 	import iris
 	g = iris.gref('^mygbl')
 	key = g.query()#this will return tuples of all the subscripts
 	for x in key:
 		print(x) # output (['3', '1', '1'], 'Test multilevel')
}

data - this data function Check whether the given subscript is exist in the global and return the $data values by using the data function

ClassMethod DollarData() [ Language = python ]
{
    import iris
    g = iris.gref('^mygbl')
    key1= ''
    print(g.data([1]))
}

 

6. Routines

Furthermore, it is essential to implement the class members. We must execute the routines as part of the implementation for legacy codebase systems and other related situations. Consequently, there exists a dedicated function within the iris library package that allows for the invocation of routines from embedded python through the use of the routine function.

 
myirispython.mac
ClassMethod RunRoutines() [ Language = python ]
{
    import iris
    iris.routine('^myirispython')
    iris.routine('add^myirispython',1,2) # same as write $$add^myirispython(1,2)
}

Additionally, you can execute the routine by using execute function as well. iris.execute('do ^myirispython')

note: If the routine is not found 
>>> iris.routine('^myirispythonT')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
RuntimeError: Routine not found

Will continue the other topics in the next article.

6 Comments
ディスカッション (6)2
続けるにはログインするか新規登録を行ってください
記事
· 2024年9月12日 3m read

第二十三章 加密安全标头元素

第二十三章 加密安全标头元素

本主题介绍如何加密 Web 服务和 Web 客户端发送的消息中的 WS-Security 标头内的元素。(此处描述的工具也可单独使用或与安全标头元素结合使用来加密 SOAP 主体。)

通常,会同时执行加密和签名。为简单起见,本主题仅介绍加密。有关结合加密和签名的信息,请参阅结合加密和签名。

使用派生密钥令牌进行加密和签名主题描述了加密 SOAP 消息部分内容的另一种方法。

加密安全标头元素

与上一主题中显示的加密技术不同,加密 WS-Security 标头元素的过程要求您指定 <EncryptedData> 元素如何连接到相应的 <EncryptedKey> 元素。

要加密安全标头元素,请执行以下操作:

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
ダイジェスト
· 2024年9月12日

欢迎参会 | 面向未来的数据平台:InterSystems IRIS五大亮点提速数据潜力挖掘与AI应用

HI 各位开发者们,

📅2024年9月23日🕑14:00-15:30🕞,InterSystems将举办线上研讨会,点击🔔此处🔔报名参会。

此次研讨会以“面向未来的数据平台——InterSystems IRIS五大亮点提速数据潜力挖掘与AI应用”为主题,帮助您了解InterSystems IRIS数据平台的五大亮点:

  • 使用InterSystems IRIS for Health进行FHIR开发
  • 使用Python进行互操作Production开发
  • InterSystems IRIS列存储
  • InterSystems IRIS外部表(Foreign Table)
  • InterSystems IRIS向量和基于向量检索的患者相似度匹配

🔅亮点一:使用InterSystems IRIS for Health进行FHIR开发

InterSystems IRIS for Health早已内置了完整的FHIR服务器实例,从FHIR资源的存储与查询,到API的实现以及自定义Profile的加载与校验。此次演讲主要介绍了如何使用对象的方式,利用高性能的对象型数据开发平台InterSystems IRIS for Health的新特性,进行FHIR的相关开发工作。

🔅亮点二:使用Python进行互操作Production开发
Python作为最大的开发语言,有海量的开发者和广泛的生态。InterSystems IRIS支持使用Python进行多种开发。此次演讲探索在InterSystems IRIS数据平台上使用Python进行Production全流程开发,包括在BPL流程引擎中使用Python进行开发。

🔅亮点三:InterSystems IRIS列存储

Columnar Storage(列存储)是InterSystems IRIS SQL表的一个新的存储选项。Columnar Storage提供的分析性查询比InterSystems IRIS的传统存储方案快一个数量级。这种查询通常是在非常大的表上汇总数据,并且通常涉及到对一个或多个列的过滤和分组。通过按列而不是按行来存储表数据,可以大大减少运行这种查询所需的I/O量,并利用称为SIMD(单指令多数据)的现代芯片组级优化,进一步提高性能。

🔅亮点四:InterSystems IRIS外部表(Foreign Table)

Foreign Table是InterSystems IRIS SQL中一种特殊类型的表,它不代表数据库本地存储的数据,而是对外部数据源(如其他数据库系统、文件、远程服务器等)中数据的映射,通过定义foreign table,可以实现对外部数据的按需访问和动态扩展。

🔅亮点五:InterSystems IRIS向量和基于向量检索的患者相似度匹配

向量用于表示语言的语义,可将词语映射到高维度的几何空间,词语在空间中的位置代表其语义的远近程度。向量是机器学习和人工智能对语义进行运算的基础技术。我们将介绍如何在InterSystems IRIS中将数据转变为向量,并通过程序演示基于向量检索的患者相似度匹配。该程序将患者人口学信息整合后转换为向量,并运用IRIS SQL中的向量检索对数据语义进行相似度查询,从而识别患者人口学信息之间的相近程度。

❓答疑解惑💬

主题分享环节结束后,我们还准备了问答环节,为您答疑解惑!

快来报名吧!点击🔔此处🔔报名。

お知らせ
· 2024年9月12日

共有開発環境でGITを使用する

Git を使用してIRIS でソリューションを構築することは、素晴らしいことです! 単にローカルの git リポジトリにVSCodeを使用し、サーバーに変更をプッシュする... それは非常に簡単です。

でも、次の場合はどうでしょうか。

  • 共有リモート開発環境で他の開発者と共同作業を行い、同じファイルの同時編集を回避したい場合
  • BPL、DTL、ピボット、ダッシュボードなどにおいて管理ポータルに基づくエディターを使用しており、 作業に簡潔なソース管理を使用したい場合
  • 一部の作業においては引き続き Studio を使用しているかたまに VSCode から Studio に戻っているか、チームがまだ VSCode を完全に採用しておらず、一部のチームメンバーが Studio の使用を希望している場合
  • 同じネームスペースで同時に多数の独立したプロジェクト(InterSystems Package Manager を使って定義された複数のパッケージなど)に取り組んでおり、(多数の個別のプロジェクトではなく)1 つの isfs 編集ビューからすべてのプロジェクトの作業を行い、適切な git リポジトリで変更を自動的に追跡する場合

このような状況では、あまり簡単なオペレーションとは言えませんでした。ただし、先月末に Git for Shared Development Environments(Open Exchange / GitHubがリリースされるまでは、です。この拡張機能は、InterSystems パッケージマネージャーを使って入手できます。

zpm "install git-source-control"

これがリリースされる前は、Git によるソース管理のオプションは、ほぼ Windows 限定かローカル開発環境限定の古い Git 拡張機能これに基づいた若干使用方法が合理化されているより最近の Open Exchange プロジェクトでした。 また、ファイルを処理するだけのバージョン管理システムに依存しない Port もあります。

git-source-control にあり、これらのパッケージには含まれないものとは何でしょうか?

  • あらゆるオペレーティングシステムで動作する単純なメニューベースの git 統合
  • リモート環境に SSH 通信することなく、増大する一連の共通 git アクティビティに対応する git ユーザーインターフェース
  • 同じ環境で同時に作業する複数のユーザーを処理する並列制御。 クラスやルーチンなどに変更を行ったら、変更を破棄するかコミットするまでローカルに留まります。 (ただし、必要に応じて回避する方法があります!)
  • パッケージマネージャー対応: zpm "load -dev /path/to/package" を行って、/path/to/package/.git が存在する場合は、パッケージのリソースへの変更はサーバーのファイルシステムの適切な場所に自動的に反映されます。 UI も、それが起動された class/etc に基づいて動作します。

このすべては VSCode より動作します。

 
スポイラー

Studioからは以下の通り。

 
スポイラー

git リポジトリを操作したり視覚的に状況をみるには

 
スポイラー

これを使って、IRIS ベースのソリューションの開発がうまくいけば幸いです。フィードバックをお待ちしています!

注意 - 2021 Global Summit でのこのリリースのプレゼンテーションをご覧になるには、こちらの記事をご覧ください: https://community.intersystems.com/post/video-git-gitlab-shared-developm...

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください