#InterSystems IRIS for Health

0 フォロワー · 887 投稿

InterSystems IRIS for Health™は、世界で最も重要なデータを管理する医療アプリケーションの迅速な開発を目的に特別に設計された世界初、かつ唯一のデータプラットフォームです。 トランザクションの処理と分析、拡張可能な医療データモデル、FHIRベースのソリューション開発、医療情報の相互運用性に関わる標準規格への対応など、すぐに使える強力な機能を搭載しています。 これらすべての機能により、開発者は価値を実現し、画期的なアプリケーションをすばやく構築することができます。 詳細はこちらをご覧ください

記事 Tomohiro Iwamoto · 10月 3, 2023 7m read

こちらの内容は、今後のリリースにより変わる(不要になる)可能性があります。

バージョン2023.2以降で、IRISスタジオが非推奨となったこともあり、VSCode拡張機能を評価される方も今後増えるかと思います。

既存のCache'資産をお持ちで、ソース管理をソースコントロールフックで実施されている方などにおかれましては、その際にサーバサイド編集を選択される方もおられるかと思います。

VSCode拡張には、Cache'/IRISスタジオの「ファイルから検索」と同じ要領でサーチを行いたいというご要望に応えるための機能が備わっています。その導入方法が、VSCodeの未公開APIを使用している関係で、ひと手間かかるものとなっているため、解説します。

方法は複数ありますが、手順を簡素化するべく、なるべくGUIを使わない方法をご紹介しています。

導入方法

サーバサイドのサーチ機能は、VSCodeの"Proposed API"であるTextSearchProvider,FileSearchProvideを使用しています。 いずれこれらのAPIが安定化してStableとしてリリースされるまでの措置として、これらを使用している拡張機能はマーケットプレイスからの導入(クリックするだけの簡単インストール)が制限されています。

サーバサイドのサーチ機能を使用する目的でVisual Studio Code Insidersリリースを使用する必要はないようです。

それまでは、マニュアルで導入する必要があります。以降、その導入手順をご紹介します。

InterSystems ObjectScriptのベータ版を導入

使用中のバージョンの「次のバージョン」のbeta.1をインストールします。

VSCode拡張は、日々更新・改良されていますので、常に最新バージョンを保つことをお勧めします。

使用中のバージョンは、下記で確認できます。

この例では2.10.3ですので、2.10.4-beta.1をダウンロードし、ダウンロードされたファイル(拡張子vsix)を、Extentionsにドラッグ&ドロップします。

再起動を促されますので、VSCodeを再起動します。

Proposed APIを有効化

Command Paletteで"Preferences: Configure Runtime Arguments"を選択し、下記を追加します。

	"enable-proposed-api": ["intersystems-community.vscode-objectscript"]

実体はC:\Users\Windowsユーザ名.vscode\argv.jsonにありますので、直接編集しても良いです。

// This configuration file allows you to pass permanent command line arguments to VS Code.
// Only a subset of arguments is currently supported to reduce the likelihood of breaking
// the installation.
//
// PLEASE DO NOT CHANGE WITHOUT UNDERSTANDING THE IMPACT
//
// NOTE: Changing this file requires a restart of VS Code.
{
	// Use software rendering instead of hardware accelerated rendering.
	// This can help in cases where you see rendering issues in VS Code.
	// "disable-hardware-acceleration": true,

	// Allows to disable crash reporting.
	// Should restart the app if the value is changed.
	"enable-crash-reporter": true,

	// Unique id used for correlating crash reports sent from this instance.
	// Do not edit this value.
	"crash-reporter-id": "xxxxxxxxxxxxx",

	"enable-proposed-api": ["intersystems-community.vscode-objectscript"]
}

有効化されると、OUTPUT(ObjectScript)に下記のようなメッセージが表示されるようになります。

VSCodeのワークスペースを作成・保存

VSCodeのワークスペースを作成・保存して、アクセスしたいIRIS環境を追加(感覚的にはマウントする感じです)します。

この作業はUIで行っても良いのですが、ここではワークスペースの設定ファイル(.code-workspace.code-workspace)を直接編集する方法をご紹介します。ワークスペースの設定ファイルをVSCode自身で編集するには、いったん、フォルダとして開き直します。

編集後の.code-workspace.code-workspaceは下記のようになります。

{
	"folders": [
		{
			"name": "local:scdemo",
			"uri": "isfs://local:scdemo/",
		},
		{
			"name": "local:samples",
			"uri": "isfs://local:samples/"
		},
		{
			"path": "."
		}
	],
	"settings": {
		"objectscript.showExplorer": false,
		"intersystems.servers": {
			"local": {
				"webServer": {
					"scheme": "http",
					"host": "localhost",
					"port": 52773
				},
				"username": "SuperUser"
			}
		}
	}
}

上記の意味は

  • local:scdemoという名前(name)で,アクセス先サーバ isfs://local/ のネームスペースscdemoを、ワークスペースにマウントする
  • local:samplesという名前(name)で,アクセス先サーバ isfs://local/ のネームスペースsamplesを、ワークスペースにマウントする
  • フォルダの"."、つまりルートフォルダをワークスペースにマウントする(これはローカルにファイルがなければ不要です)
  • ただしサーバlocalの実体は、http://localhost:52773/ 、IRISユーザ名SuperUserを使用する

となります。IRISサーバのホスト名やポート、ユーザ名は、環境に合わせて変更してください。

nameは、検索対象のフォルダ名の一部として使用されますので、あまり長くすると、サーチ結果を読みにくくなります。

これでサーバサイド編集やサーバサイドサーチを使用する準備が出来ました。ワークスペースとして開き直してください。

ご参考までに、UIで行う方法は下記になります。

接続するIRISサーバの定義と、ネームスペース指定して、仮想的なファイルシステムであるisfsをワークスペースに追加します。

使用

ここまでの作業を行ったフォルダをGitHubで公開してありますので、ご利用ください。git cloneした後に、フォルダ内の.code-workspace.code-workspaceをワークスペースとして開いて使用します。

うまく設定が出来ていれば、Exploreに下記のようなフォルダが表示されます。

この時点で、各フォルダをクリックすれば、IRISサーバ内の要素がツリー表示され、編集、保存(コンパイル)可能になっているはずです。

初めてアクセスする場合はパスワードを聞いてきます。以降、The extenstion 'InterSystems Language Server' wants to sign in using InterSystems Server Credentials.と表示されたら、Allowを押して使用するCredential(SupseUser on localなど)を選択してください。この辺りは、通常のサーバサイド編集時の操作と同じです。

肝心のサーチ機能ですが、Control+シフト+Fを押してファイルサーチ機能を開いてください。普通にVSCodeでファイルサーチを行う要領で、サーチワードを入力すると、ヒットした対象が列挙されます。大量にヒットした場合、(画像のように)Collapse Allアイコンで全体を折りたたんで、まずはヒット件数表示すると良いかもしれません。

files to includeにフォルダ指定するのと同じ要領で、フィルタ設定すると、サーチ対象もフィルタされます。

EnsLibパッケージを対象にする場合。

ワイルドカードを含む場合。

MACのみを対象にする場合。

名前が分かっている場合は、Quick Open機能を使用できます。フォルダツリーを使って、大量に存在するクラスやルーチンの中から、編集対象をピックアップするのが大変な時に役立ちます。

1
0 353
記事 Megumi Kakechi · 9月 24, 2023 4m read

IRISアップグレードやインストールがうまくいかない場合、初めに以下の4点をご確認ください。

  1. インストーラーに問題はないか?
  2. 対象バージョンの最新インストーラー(キット)を使用しているか?
  3. サポート対象プラットフォームへのインストールを行っているか?  
  4. インストールディレクトリパスに日本語を含んでいないか?   

★1について
インストーラーのダウンロードに問題があったなどで、インストーラー自体に問題があり、インストールできないというケースがあります。
その場合は、インストーラーのハッシュ値(md5 checksum)を比較してファイルの同一性を確認するか、再ダウンロードしてインストールをお試しください。

インストーラーのハッシュ値は、WRCDirectのダウンロードページ にて対象の製品を選択してご確認いただけます。

例:

 


お持ちのインストーラーのハッシュ値は、以下のように確認します(Windowsの場合)。

0
0 514
お知らせ Mihoko Iijima · 9月 21, 2023

開発者の皆さん、こんにちは!

このお知らせ📣では、第1回 InterSystems Japan 技術文書ライティングコンテスト の応募記事の探し方をご紹介します。

コンテストにご応募いただいた記事は、こちらのページ👉https://jp.community.intersystems.com/contests/1 からご覧いただけます。

または、コミュニティのページ上部にあるメニューからも同じページに移動できます。

または、「第1回 InterSystems Japan 技術文書ライティングコンテスト 開催!」の記事内リンク(赤枠部分)からも移動できます。

コミュニティのアカウントをお持ちの方なら誰でも「いいね」を押して投票することができます。

🔥これだ!🔥と思う作品に「いいね」してみてください!

0
0 126
InterSystems公式 Seisuke Nakahashi · 9月 20, 2023

InterSystems IRIS® と InterSystems IRIS for HealthTM 2023.3 の開発者プレビュープログラムの一環として、最初の開発者プレビューを公開いたします

今後のプレビューリリースは、2週間ごとの発表を予定しており、新機能が完成次第、プレビュー版に追加されていきます。

みなさまとよりよい製品にできるよう、ぜひ開発者コミュニティみなさまのフィードバックをお寄せください。ドキュメントは以下のリンクからご覧いただけます。本バージョンが正式公開 (General Availability - GA) されるまで、数週間かけてドキュメントは更新される予定です。

本リリースの注目点

2023.3 では、HL7® FHIR® version R5 のサポートや IBM FHIR® Validator のインテグレーション といった注目の新機能が含まれる予定です。 また ObjectScript の実行パフォーマンス向上もはかられる予定です。なお、これらの新機能は最終的に公式リリースに含まれる見込みですが、変更となる可能性もございます。

キットについて

0
0 108
記事 Mihoko Iijima · 9月 20, 2023 2m read

開発者の皆さん、こんにちは!

ObjectScriptのコード実行中にエラーが発生した場合 "<UNDEFINED>HelloWorld+2^Simple.Demo.1 *name" のようなエラーメッセージが表示されます。

エラーメッセージの読み方については、ObjectScriptクックブックの「ObjectScriptでエラーが発生したら」のエラーメッセージの読み方 をご参照ください。

エラー行の特定を行う際、VSCodeのコマンドパレットを利用すると簡単に対象行にジャンプできますので、以下、方法をご紹介します。

1)VSCodeのView→Command Palette... を開きます。

2) 「ObjectScript:Open Error Location...」を選択します(初回は表示項目に登場しないため > の後ろに ObjectScript と入力すると表示されます)。

3) テキストボックスが表示されるので、エラーメッセージの出力情報の中から ラベル名+行数^生成ルーチン名 をコピーして貼り付け、Enterをクリックします。

※スタジオにも同様の機能がありますが、VSCodeの場合対象となるコード(生成コードの元コード)をVSCode上で表示していなくても対象となる生成ルーチンを開きエラー行をポイントしてくれます。

0
0 1144
InterSystems公式 Megumi Kakechi · 9月 19, 2023 2m read

インターシステムズは、接続性に関する 2 つの問題を修正しました。これらの不具合とその修正はそれぞれ独立しています。

この警告は、2つの問題の修正を含む ポイントリリース があるため、両方に対処する内容になります。

どちらの問題も、以下の製品のバージョン2019.1.42020.1.4のみに影響します:

  • InterSystems IRIS®
  • InterSystems IRIS for Health™
  • HealthShare® Health Connect

HealthShare Unified Care Record®、Information Exchange、Health Insight、Patient Index、Provider Directory、Care Community、Personal Community、またはHealthcare Action Engine については、いずれのリリースバージョンにも影響はありません。

1つ目の問題は、ログインに失敗した際に復帰するまでに60秒間ハングするという問題です。今回の修正で、ハングする時間が2秒に短縮され、通知メッセージも改善されました。この修正は DP-421918 です。

0
0 97
記事 Mihoko Iijima · 9月 18, 2023 4m read

開発者の皆さん、こんにちは!

スタジオを利用されている方にはお馴染みのソースコードの「XMLファイルへのエクスポート/インポート機能」がVSCodeのObjectScriptエクステンションに追加されました! (ObjectScript 2.10.0以降に含まれています。こちらのリクエストが元となりました👉https://github.com/intersystems-community/vscode-objectscript/issues/1158   エクステンションの追加番号は#1171です)

今まで、過去エクスポートしたXMLファイルをVSCodeから参照するためには、管理ポータル(またはスタジオ)を利用してインポートする必要がありましたが、VSCodeの画面だけでできるようになりました!

💡注意1: InterSystems IRIS /InterSystems IRIS for Health 2023.2以降のバージョンに接続した状態でご利用いただける機能です。

💡注意2:この機能は管理ポータルやスタジオのインポート/エクスポートのVSCode版のような機能となるため、インポートしたソースコードはサーバ側にインポートされ、エクスポートはサーバ側コードを選択してXMLファイルにエクスポートする動作となります。XMLファイルインポート後、VSCodeのワークスペースでローカルファイル(*.cls や *.mac)として編集 したい場合は、 ObjectScriptエクステンションマークをクリックし、対象のコードを選択→エクスポート の手順でローカルにエクスポートする必要があります。

0
1 596
質問 Shuichi Igusa · 9月 7, 2023

こんにちは、皆さま。

IRIS for Healthを業務に利用すべく試用中です。

FHIR R4 リソースリポジトリの体験とFHIR サーバサイドアプリケーションを利用したデータの追跡を簡単に試せるテンプレートで提供されている環境をローカルに展開しています。

患者登録を実際に行った動作の理解を進めておりますが、以下2点不明となっております。どなたか情報ございましたらフォローいただければと思います。

・実際のデータが登録されているテーブルは「HSFHIR_X0001_S.Patient」かと思いますが、どこでInsert文が流れているのでしょうか。

・clsと実際のテーブルは対になるという認識でおりますが、vscode上に「HSFHIR_X0001_S.Patient」に該当するようなclsが無いように見受けられましたがどこかにあるのでしょうか。

見当違いな質問でしたら申し訳ありません。

2
0 136
記事 Megumi Kakechi · 9月 6, 2023 1m read

Windows環境にWebGatewayのみをインストールした場合に、「Service Unavailable / HTTP Error 503. The service is unavailable.」エラーとなりWebアプリケーションに接続できない場合があります。

 

こちらは、Visual C++ 再頒布可能パッケージ がインストールされていない環境に、Webゲートウェイをインストールした場合に見られる事象です。

Microsoft社のホームページより、Visual C++ 再頒布可能パッケージ(X64)をダウンロードしてインストールしてください。

インストール後IISを再起動し、以下のリンクよりWebゲートウェイ管理ページに接続できることをご確認ください。
 

Webゲートウェイ管理ページ:
http://localhost/csp/bin/Systems/Module.cxw

 
 


エラーが解消されない場合は、IISのアプリケーションプールが起動しているかをご確認ください。


【ご参考】
Microsoft Visual C++ Redistributable latest supported downloads

0
0 340
記事 Megumi Kakechi · 9月 4, 2023 3m read

こちらの記事では、RESTやCSPなどの「Webアプリケーションのトラブルシューティング」のヒントをご紹介します。

何かしらのトラブルと思われる事象が発生した場合、確認したいのがログファイルになります。
各コンポーネント間のやり取りで、どこでどのようなトラブルが発生しているかを、それぞれログを取得して確認することができます。

① クライアント ⇔ Webサーバ間では、「Webサーバログ(IISやApacheのアクセスログなど)」、
② Webサーバ ⇔ Webゲートウェイ間では、「イベントログ」・「HTTPトレース」、
③ Webゲートウェイ ⇔ IRISサーバ間では、「ISCLOG」・「監査ログ」・「messages.log」などがあります。

 

こちらの記事では、IRISで取得できるログとして で取得可能なログの取得方法をご紹介します。
 

② Web サーバと Webゲートウェイ間のアクセスに関連するログ情報


◆ イベントログ

1) Webゲートウェイ管理ページ(http://<IPアドレス>:<ポート>/csp/bin/Systems/Module.cxw)に接続します。

2) イベントログを削除します。
 [イベントログを参照] > ログをクリア をクリック

0
1 442
InterSystems公式 Seisuke Nakahashi · 9月 1, 2023

InterSystems Reports 23.2 がリリースされました。 WRC Direct のコンポーネントページで InterSystems Reports Designer および InterSystems Reports Server で検索することで、Mac OSX、Windows、Linux の各種プラットフォーム用キットを入手いただけます。 このバージョンでは、弊社パートナーである insightsoftware の Logi Report 23.2 に含まれる以下の素晴らしい機能が追加されています。

  • ページレポートのテンプレートエディタである Report Studio の機能が強化され、Reports Server からの追加編集が可能となりました。 これは、長期スパンの製品強化のひとつであり、Reports Server 上の編集に関する権限ベースのアクセスを利用して、レポートデザイナーがレポートを修正できるようになりました。
  • ブックマークを直接実行したり、パラメータやフィルタ情報を表示したりできる、"My Bookmarks" フォルダによるブックマーク管理機能が追加されました。ユーザはブックマーク機能を利用して、フィルタやパラメータを保存することができます。これによって、共有レポートのカスタマイズされたビューに簡単にアクセスすることが可能となりました。
0
0 144
記事 Toshihiko Minamoto · 9月 1, 2023 2m read

以下は、InterSystems IRIS で使用するデータベース、ネームスペース、および Web アプリケーションを作成できる ObjectScript スニペットです。

    set currentNS = $namespace

    zn "%SYS"

    write "Create DB ...",!
    set dbName="testDB"
    set dbProperties("Directory") = "/InterSystems/IRIS/mgr/testDB"
    set status=##Class(Config.Databases).Create(dbName,.dbProperties)
    write:'status $system.Status.DisplayError(status)
    write "DB """_dbName_""" was created!",!!


    write "Create namespace ...",!
    set nsName="testNS"
    //グローバルの DB
    set nsProperties("Globals") = dbName
    //ルーチンの DB
    set nsProperties("Routines") = dbName
    set status=##Class(Config.Namespaces).Create(nsName,.nsProperties)
    write:'status $system.Status.DisplayError(status)
    write "Namespace """_nsName_""" was created!",!!


    write "Create web application ...",!
    set webName = "/csp/testApplication"
    set webProperties("NameSpace") = nsName
    set webProperties("Enabled") = $$$YES
    set webProperties("IsNameSpaceDefault") = $$$YES
    set webProperties("CSPZENEnabled") = $$$YES
    set webProperties("DeepSeeEnabled") = $$$YES
    set webProperties("AutheEnabled") = $$$AutheCache
    set status = ##class(Security.Applications).Create(webName, .webProperties)
    write:'status $system.Status.DisplayError(status)
    write "Web application """webName""" was created!",!

    zn currentNS

以下のマニュアルもご覧ください。

0
0 168
記事 Megumi Kakechi · 8月 31, 2023 4m read

 IRISをアップグレードすると、SQLクエリオプティマイザの機能向上により、旧バージョンとは異なるクエリプランによるクエリ実行コード(クエリキャッシュ)が作成される場合があります。
ほとんどの場合はパフォーマンスが向上するのですが、稀にパフォーマンスが低下するケースもあります。

・アップグレードによりオプティマイザが改善しているとはいえ、中には遅くなるクエリがあるのではないか?
・予期しないSQLの問題が起きるのではないか?
・アップグレード後に全てのクエリパターンをテストするには時間と労力がかかりすぎる

このように、機能向上よりも安定性を優先して「今までのプランのまま実行したい」というご要望もあることでしょう。
こちらの記事では、そのようなお客様への解決策をご案内します。


解決策 = 凍結プラン(Frozen Plan)を使用する:

Cache2016.2以降(IRISはすべてのバージョン)で、クエリプランの凍結機能 が実装されました。
この機能により、IRISを新しいバージョンにアップグレードする際、既存のクエリプランは自動的に凍結されます。
これにより、アップグレードによる既存のクエリのパフォーマンスの低下の可能性を防げます(古いバージョンと同じプランが使用されるため)。
新しいクエリについてはもちろん、アップグレード後のクエリオプティマイザによるプランが使用されます。

0
0 177
記事 Seisuke Nakahashi · 8月 14, 2023 5m read

突然ですが、みなさま、IRIS でのコーディングに Visual Studio Code をご利用されていますか? 以前投稿しましたように、2023.2からスタジオは非推奨 となっています。私自身も数年前からは VSCode 一本に移行しました。VSCode はご存じのように、ありとあらゆる項目でカスタマイズが可能となっており、一度慣れると、スタジオより見た目よく、自分好みに仕上げられ、何より動作が軽いのがお気に入りです。

さて今日は、その VSode の見た目のカスタマイズのお話です。

5
0 387
InterSystems公式 Seisuke Nakahashi · 8月 14, 2023

InterSystems IRIS Adaptive Analytics 2023.2 がリリースされました。このバージョンでは、弊社パートナーである AtScale のバージョン 2023.2 に含まれる以下の素晴らしい機能が追加されています。

  • 仮想データモデルの開発しやすくなる、キューブ間オブジェクト共有の増加
  • 時間相対メジャー、インテリジェント・ディメンジョン、計算グループといった一般的だが複雑なモデル作成手順の単純化
  • Microsoft PowerBI との接続の改善
  • 集計とクエリを管理する使用状況メトリックダッシュボード機能

詳細な情報については、これらの新機能の デモ をごらんください。

Adaptive Analytics に関する情報については、ドキュメント ならびに オンライントレーニング をご参照ください。

0
0 131
InterSystems公式 Ayumu Tanaka · 8月 7, 2023

インターシステムズは InterSystems IRIS Data PlatformInterSystems IRIS for HealthInterSystems IRIS Studio のバージョン 2023.2 をリリースしました。

2023.2 は Continuous Delivery(CD)リリースです。2023.2には多くのアップデートや拡張機能が追加されています。

リリースハイライト

プライベートウェブサーバ

本リリースより以下の点が変更されます:

  • InterSystems IRIS インストールではプライベートウェブサーバがインストールされなくなります。管理ポータルやその他の組み込みウェブアプリケーションにアクセスするためには、外部ウェブサーバの接続を構成する必要があります。インストール時にApacheウェブサーバ(Microsoft Windows以外のすべてのプラットフォーム)またはIIS(Microsoft Windows)が既にシステムにインストール済みの場合、ウェブサーバを自動構成するオプションが選択可能です。
  • InterSystems IRIS コンテナにプライベートウェブサーバは同梱されません。コンテナ内インスタンスの管理ポータルにアクセスするには対応するウェブゲートウェイコンテナをデプロイする必要があります。

アナリティクスとAIの強化

0
0 199
InterSystems公式 Seisuke Nakahashi · 8月 3, 2023

このたび InterSystems IRIS 2023.1 の日本語ドキュメントが完成しました。以下のURLでご参照いただけます。

ランチャーから日本語ドキュメントを参照したい

0
0 267
InterSystems公式 Seisuke Nakahashi · 8月 1, 2023

インターシステムズは、以下2点の修正を行いました。

.

障害1: ECP アプリケーションサーバがハングする

以下の CPU かつ 以下のバージョンで発生します。
    対象バージョン: 2022.1.2, 2022.1.3
    対象CPU: ARM, IBM Power プロセッサ
この問題は修正ID DP-423661 で解決します。この修正は、今後のすべてのバージョンに含まれる予定です。 

.

障害2: 非常に稀な状況において デジャーナルがハングする

デジャーナルとはジャーナルをリストアすることで、例えば、ミラーリングのフェイルオーバーやDR非同期メンバで常時実行されています。また障害復旧に際しジャーナルをリストアする作業も対象になります。

本障害は以下のバージョンで発生します。
    対象バージョン: 2020.4, 2021.x, 2022.x, 2023.1
この問題は修正ID DP-423505 で解決します。この修正は、今後のすべてのバージョンに含まれる予定です。また 2023.1.1 には既に含まれています。

.

これら2点の修正を入手いただけるよう、公開済みの 2022.1.3 の更新版を公開いたしました。バージョン番号は以下の通りです。

    過去版:  2022.1.3.668.0
    更新版:  2022.1.3.670.1

0
0 127
記事 Megumi Kakechi · 8月 1, 2023 2m read

あるメソッドやルーチンを実行してエラーとなった場合、エラー発生個所はエラーメッセージより取得することができますが、処理の呼び出し履歴(スタックトレース)はエラーメッセージのみではわかりません。
また、.Net や Python など IRIS 外からの呼び出しの場合に、エラー情報の詳細がクライアントに返らない場合などもあるかと思います。

/// 例:エラーメッセージだけでは、エラーが発生した処理の呼び出し履歴まではわからない。
USER>d##class(User.Test).TestMethod1()
 
 write a
 ^
<UNDEFINED>TestMethod3+1^User.Test3.1 *a
USER 4e1>


そんなときは、エラー処理にて Do BACK^%ETN を実施することで、IRIS側で強制的にスタック情報を記録することができます。
スタック情報を記録することで、どのような処理がどの順番で呼び出されたかや、エラー時の内部変数情報を知ることができます。

BACK^%ETN は、エラー発生後に $ZError($ZE) 変数に値が set されている場合、アプリケーションエラーログ(^ERRORS)に情報が記録されます。
上のエラーの場合の $ZE は、以下のように確認できます。

0
0 170
InterSystems公式 Seisuke Nakahashi · 7月 27, 2023

2023.2 の開発者プレビュープログラムの一環として、7番目の開発者プレビューを公開いたします。今回リリースされたのは、InterSystems IRIS と InterSystems IRIS for Health です。

プライベート・ウェブサーバ (PWS) の提供終了

本リリースの一番のトピックは、プライベート・ウェブサーバ (PWS) の提供終了です。昨年から事前に発表していましたが、今回のプレビュー版で初めて InterSystems 製品のインストーラから PWS が削除されています。

こちら のドキュメントもあわせてご確認ください。本件に関する詳細な情報は こちら の記事でも公開しています。

--> 本件に関して何か問題が発生したり、弊社のプロダクトマネージメントに連絡したいことがある、あるいはご意見やご感想を伝えたい等ございましたら、ぜひ遠慮なく NoPWS@InterSystems.com までメールをお送りください。

本リリースの注目点

2023.2では、多くの機能修正と改善に加えて、時間認識モデリングや 強化された外部テーブル (まだ実験的な機能です) といった新機能が含まれます。

ドキュメントは以下のリンクからご覧いただけます。本バージョンが正式公開 (General Availability - GA) されるまで、数週間かけてドキュメントは更新される予定です。

0
0 83
記事 Toshihiko Minamoto · 7月 24, 2023 8m read

Python は世界で最も使用されているプログラミング言語になり(出典: https://www.tiobe.com/tiobe-index/)、SQL はデータベース言語としての道をリードし続けています。 Python と SQL が連携して、SQL だけでは不可能であった新しい機能を提供できれば、素晴らしいと思いませんか? 結局のところ、Python には 380,000 を超える公開ライブラリがあり(出典: https://pypi.org/)、Python 内で SQL クエリを拡張できる興味深い機能が提供されています。 この記事では、Embedded Python を使用して、InterSystems IRIS データベースに新しい SQL ストアドプロシージャを作成する方法を詳しく説明します。

サンプルとして使用する Python ライブラリ

この記事では、IRIS で SQL を扱う人にとって非常に便利な GeoPy と Chronyk という 2 つのライブラリを使用します。 

Geopy は、ジオコーディング(住所と地理座標の修飾)を住所データに適用するために使用するライブラリです。 これを使用すると、通りの名前から郵便番号と完全な住所を郵便局の形式で取得することができます。 多くのレコードには住所が含まれるため、非常に便利です。

Chronyk は、人間の言語で日付と時刻を処理するために使用されます。 これは、IRIS と Python の両方において、日付は内部的に最初の日付から経過した時間を表す数字でたるため、非常に便利です。 人間の場合、日付は 7 月 20 日、または昨日や明日、または 2 時間前と表現しますが、 Chronyk では、このような日付を受け取って、ユニバーサル日付形式に変換します。

InterSystems IRIS への Python サポート

バージョン 2021.1 より、Python を使用してクラスメソッド、ストアドプロシージャ、相互運用プロダクション、Python と IRIS(ObjectScript)間の双方向のネイティブ呼び出しを作成できるようになりました。 Python とこれほど深く連携するデータプラットフォームを他に知りません。 これが機能するためには、要件として、Python が IRIS と同じ同じ物理マシンか仮想マシンまたはコンテナにインストールされている必要があります。 詳細は、https://docs.intersystems.com/iris20221/csp/docbook/DocBook.UI.Page.cls?KEY=AFL_epython をご覧ください。 Python をインストールするには、以下を実行します。

# install libraries required for python and pip
RUNapt-get-yupdate\
    &&apt-get-yinstallapt-utils\
    &&apt-getinstall-ybuild-essentialunzippkg-configwget\
    &&apt-getinstall-ypython3-pip  

InterSystems IRIS への Python ライブラリサポート

InterSystems IRIS が Python ライブラリを使用できるようにするには、Python ライブラリが <installdir>/mgr/python にインストールされている必要があります。 installdir は IRIS がインストールされているフォルダです。 新しいパッケージをインストールするには、以下を実行します。

# use pip3 (the python zpm) to install geopy and chronyk packages
RUNpip3install--upgradepipsetuptoolswheel
RUNpip3install--target/usr/irissys/mgr/pythongeopychronyk

Pip3 は Python の最も一般的なパッケージマネージャーおよびインストーラー Pip です。

Python 言語でストアドプロシージャを作成する

InterSystems IRIS で Python を使用する可能性の 1 つは、Python を使用してストアドプロシージャを作成することです。 以下の 2 つの可能性があります。

  1. Create 関数またはプロシージャの SQL 文を使用したストアドプロシージャ Python の作成。
  2. sqlProc タグと language=Python タグを使用した ObjectScript クラス内での ClassMethod の作成。

Create プロシージャの SQL 文を使用したストアドプロシージャ Python の作成

InterSystems ドキュメントによると、以下に示すとおり、CREATE ステートメントに LANGUAGE PYTHON 引数を指定することで、Embedded Python を使って SQL 関数またはストアドプロシージャを記述することもできます(出典: https://docs.intersystems.com/iris20221/csp/docbook/DocBook.UI.Page.cls?KEY=AEPYTHON#AEPYTHON_runpython_sql)。

CREATE FUNCTION tzconvert(dt TIMESTAMP, tzfrom VARCHAR, tzto VARCHAR)
    RETURNS TIMESTAMP
    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")
}

この新しい SQL 関数を実行する場合:

SELECT tzconvert(now(), 'US/Eastern', 'UTC')

関数は以下のようなものを返します。

2022-07-20 15:10:05

sqlProc タグと language=Python タグを使用した ObjectScript クラス内での ClassMethod の作成

正直に言うと、sqlProc タグと language=Python タグを使って ClassMethod を作成するこのアプローチが私のお気に入りです。 私の意見では、管理しやすく、十分な文書化で明確に示されており、ソースコードバージョンの管理もうまく行えます。 このアプローチのためのサンプルアプリケーションを公開しました(https://openexchange.intersystems.com/package/Python-IRIS-SQL-Procedures-Sample)。 これを使用して、この 2 番目のアプローチを詳しく説明します。

サンプルアプリケーションのインストール

サンプルアプリケーションをインストールするには、以下の手順に従います。

  1. リポジトリを任意のローカルディレクトリに Clone/git pull します。
$ git clone https://github.com/yurimarx/iris-sql-python-sample.git
  1. このディレクトリで Docker ターミナルを開き、以下を実行します。
$ docker-compose build
  1. IRIS コンテナを実行します。
$ docker-compose up -d

もう 1 つのインストール方法は、ZPM を使用する方法です。

zpm "install iris-sql-python-sample"

Python を使用したストアドプロシージャのサンプル

最初の例は、住所のジオコーディングを処理するストアドプロシージャです。ソースコードを参照してください。

ClassMethodGetFullAddress(StreetAs%String,CityAs%String,StateAs%String)
  <div>
    <span style="color: #85a6ff;">As</span><span style="color: #d4d4d4;"> </span><span style="color: #4ec9b0;">%String</span><span style="color: #d4d4d4;"> </span><span style="color: #ffffff;">[</span><span style="color: #d4d4d4;"> </span><span style="color: #85a6ff;">Language</span><span style="color: #d4d4d4;"> </span><span style="color: #ffffff;">=</span><span style="color: #d4d4d4;"> </span><span style="color: #d4b57c;">python</span><span style="color: #ffffff;">,</span><span style="color: #d4d4d4;"> </span><span style="color: #85a6ff;">SqlName</span><span style="color: #d4d4d4;"> </span><span style="color: #ffffff;">=</span><span style="color: #d4d4d4;"> </span><span style="color: #dcdcaa;">GetFullAddress</span><span style="color: #ffffff;">,</span><span style="color: #d4d4d4;"> </span><span style="color: #85a6ff;">SqlProc</span><span style="color: #d4d4d4;"> </span><span style="color: #ffffff;">]</span>
  </div>
  
  <div>
    <span style="color: #ffffff;">{</span>
  </div>
  
  <div>
    <span style="color: #85a6ff;">    </span><span style="color: #85a6ff;">import</span><span style="color: #ade2ff;"> </span><span style="color: #ade2ff;">geopy</span><span style="color: #ffffff;">.</span><span style="color: #ade2ff;">geocoders</span>
  </div>
  
  <div>
    <span style="color: #85a6ff;">    </span><span style="color: #85a6ff;">from</span><span style="color: #ade2ff;"> </span><span style="color: #ade2ff;">geopy</span><span style="color: #ffffff;">.</span><span style="color: #ade2ff;">geocoders</span><span style="color: #85a6ff;"> </span><span style="color: #85a6ff;">import</span><span style="color: #ade2ff;"> </span><span style="color: #ade2ff;">Nominatim</span>
  </div>
  
  <div>
    <span style="color: #ade2ff;">    </span><span style="color: #ade2ff;">geopy</span><span style="color: #ffffff;">.</span><span style="color: #ade2ff;">geocoders</span><span style="color: #ffffff;">.</span><span style="color: #ade2ff;">options</span><span style="color: #ffffff;">.</span><span style="color: #ade2ff;">default</span><span style="color: #ade2ff;">_</span><span style="color: #ade2ff;">timeout</span><span style="color: #ffffff;"> =</span><span style="color: #d4b57c;"> </span><span style="color: #d4b57c;">7</span>
  </div>
  
  <div>
    <span style="color: #ade2ff;">    </span><span style="color: #ade2ff;">geolocator</span><span style="color: #ffffff;"> =</span><span style="color: #ade2ff;"> </span><span style="color: #ade2ff;">Nominatim</span><span style="color: #ffffff;">(</span><span style="color: #ade2ff;">user</span><span style="color: #ade2ff;">_</span><span style="color: #ade2ff;">agent</span><span style="color: #ffffff;">=</span><span style="color: #d4b57c;">"intersystems_iris"</span><span style="color: #ffffff;">)</span>
  </div>
  
  <div>
    <span style="color: #ade2ff;">    </span><span style="color: #ade2ff;">location</span><span style="color: #ffffff;"> =</span><span style="color: #ade2ff;"> </span><span style="color: #ade2ff;">geolocator</span><span style="color: #ffffff;">.</span><span style="color: #ade2ff;">geocode</span><span style="color: #ffffff;">(</span><span style="color: #ade2ff;">Street</span><span style="color: #ffffff;"> +</span><span style="color: #d4b57c;"> </span><span style="color: #d4b57c;">", "</span><span style="color: #ffffff;"> +</span><span style="color: #ade2ff;"> </span><span style="color: #ade2ff;">City</span><span style="color: #ffffff;"> +</span><span style="color: #d4b57c;"> </span><span style="color: #d4b57c;">", "</span><span style="color: #ffffff;"> +</span><span style="color: #ade2ff;"> </span><span style="color: #ade2ff;">State</span><span style="color: #ffffff;">,</span><span style="color: #ade2ff;"> </span><span style="color: #ade2ff;">country</span><span style="color: #ade2ff;">_</span><span style="color: #ade2ff;">codes</span><span style="color: #ffffff;">=</span><span style="color: #d4b57c;">"US"</span><span style="color: #ffffff;">)</span>
  </div>
  
  <div>
    <span style="color: #85a6ff;">    </span><span style="color: #85a6ff;">return</span><span style="color: #ade2ff;"> </span><span style="color: #ade2ff;">location</span><span style="color: #ffffff;">.</span><span style="color: #ade2ff;">address</span>
  </div>
  
  <div>
    <span style="color: #ffffff;">}</span>
  </div>
</div>

ClassMethod が [ Language = python, SqlProc] タグで(dc.pythonsql.Company クラス内に)宣言されているのが分かります。
SqlName タグによって、新しいストアドプロシージャの名前を SQL 分に設定できます。

管理ポータルの[システム]>[SQL]に移動し、以下のコードを実行します。

SELECT 
ID, City, Name, State, Street, Zip, dc_pythonsql.GetFullAddress(Street, City, State) As FullAddress 
FROM dc_pythonsql.Company

結果が表示されます。

Geopy

不完全な住所から「完全な」住所(完全修飾)が返されるようになりました。

注意: 何も返されない場合は、#class(dc.pythonsql.Company).CreateFiveCompanies() を実行してください。 テストに使用する 5 つの会社が作成されます。

このパッケージは、主なオープンのジオコーディングサービスと有料のサービスと連携できます。 この例では、Nominatim というオープンサービスを使用していますか、Bing、Google、ArcGIS などを使用することも可能です。 利用可能なサービスについて、https://geopy.readthedocs.io/en/stable/#module-geopy.geocoders をご覧ください。

2 つ目の例は、人間が読み取れる形式による Chronyk という日付と時刻のパッケージです。

「明日」、「昨日」、「今から 4 時間後」、「2022 年 7 月 4 日」などの文を送信し、ユニバーサル日付形式の結果を取得できます。 ストアドプロシージャの作成を参照してください。

ClassMethodGetHumanDate(SentenceAs%String)As%String[Language=python,SqlName=GetHumanDate,SqlProc]
{
    fromchronykimportChronyk
    t =Chronyk(Sentence)
    returnt.ctime()
}

管理ポータル >[システム]>[SQL]で、以下の呼び出しを実行します。

SELECT 
ID, City, Name, State, Street, Zip, dc_pythonsql.GetHumanDate('yesterday') As Datetime      
FROM dc_pythonsql.Company

結果が表示されます。

https://raw.githubusercontent.com/yurimarx/iris-sql-python-sample/main/screen2.png

ストアドプロシージャを呼び出すだけの場合は、この SQL 分を使用できます。

select dc_pythonsql.GetHumanDate('yesterday') as Datetime  

このライブラリには、人間が読み取れる日付と時刻の例が複数含まれています。https://github.com/KoffeinFlummi/Chronyk をご覧ください。

Python ストアドプロシージャは簡単に作成できます。ぜひ試してみてください!

0
0 399
記事 Megumi Kakechi · 3月 2, 2021 2m read

これは InterSystems FAQ サイトの記事です。
※記事後半に、「2>&1」で 標準エラー出力(2) を 標準出力(1) にリダイレクトする方法を追記しました。

$ZF(-100) では実行したコマンドの出力を取得することはできませんが、代わりにコマンド・パイプ デバイスを使用する方法があります。

詳細は、以下ドキュメントをご参照ください。

コマンド・パイプ デバイスを使用する方法について
 

こちらを %File クラスで使用した例が以下になります。

1
0 544
InterSystems公式 Seisuke Nakahashi · 7月 19, 2023

2023.2 の開発者プレビュープログラムの一環として、6番目の開発者プレビューを公開いたします。今回リリースされたのは、InterSystems IRIS と InterSystems IRIS for Health です。

本リリースの注目点

2023.2では、多くの機能修正と改善に加えて、時間認識モデリングや 強化された外部テーブル (まだ実験的な機能です) といった新機能が含まれる予定です。これら新機能の一部は、今回の開発者プレビュー版にはまだ含まれていません。ご注意ください。

2023.2の別の注目点は、プライベート・ウェブサーバ (PWS) がインストーラから削除されることです。このことは昨年に発表され、インターシステムズ製品のインストーラから削除予定ですが、今回のプレビュー版ではまだPWSは存在します。詳細はこちらのドキュメントをご覧ください。

--> PWSが含まれないインストーラにご興味のある方は、こちらのフォームからEAPに登録してください。その際、オプションで「No Private Web Server」をお選びください。このEAPに関する情報はこちらをご参照ください。

0
0 95
記事 Megumi Kakechi · 2月 6, 2023 4m read

ファイルとディレクトリの操作に使用できる API 、%Library.File クラス (%File が省略形) の便利なサンプルコードをご紹介します。

こちらのAPIを使用して、ディレクトリやファイルの中身をのぞいたり、作成・書込み・読込みを行ってみます。


ディレクトリ内のファイル一覧をリストする

以下のサンプルは、C:\temp フォルダ内の *.txt ファイルをリストします(ファイルパス_サイズ_作成日)。

 set stmt = ##class(%SQL.Statement).%New()
 set status = stmt.%PrepareClassQuery("%File", "FileSet")
 set rs = stmt.%Execute("c:\temp", "*.txt")
 while rs.%Next(.rStatus) { write !, rs.%Get("Name")_"_"_rs.%Get("Size")_"byte"_"_"_rs.%Get("DateCreated") }

サブディレクトリ内のファイルを含む場合はこちら (filetest.mac で保存) ↓

1
0 710
記事 Mihoko Iijima · 7月 14, 2023 4m read

開発者の皆さん、こんにちは!

InterSystems IRIS 、InterSystems IRIS for Healthのコミュニティエディションは、WindowsやLinuxにインストールするキットの他にコンテナ版も公開されています。

コンテナ版はダウンロードページからではなく、InterSystemsコンテナレジストリ よりpullいただけます。

この記事では、InterSystemsコンテナレジストリ の使い方と、コンテナ開始までの流れをご紹介します。

0
1 297
InterSystems公式 Masahito Miura · 7月 13, 2023

インターシステムズは、InterSystems IRIS データ・プラットフォーム、InterSystems IRIS for Health 、HealthShare Health Connect のメンテナンスバージョン 2023.1.1 をリリースしました。これらのリリースは、2023.1.0 に対するバグフィックスを提供します。
詳細な変更リスト/アップグレード・チェックリストは、以下のページをご参照ください。(すべて英語版です)

InterSystems IRIS
InterSystems IRIS for Health
HealthShare Health Connect
ソフトウェアの入手方法

本製品は、従来からのインストーラパッケージ形式と、コンテナイメージ形式をご用意しています。利用可能なインストーラとコンテナイメージの一覧は、サポートプラットフォームページ(英語) をご覧ください。

0
0 143
記事 Megumi Kakechi · 7月 11, 2023 3m read

クラスメソッドの多くは、%Status データ型を使用して、成功 または 失敗 の情報を返します。
成功の場合は 1 が返り、失敗の場合はエラーステータス および 1 つ以上のエラーコードとテキストメッセージを含むエンコードされた文字列が返ります。
このようなメソッドでは、戻り値を必ず取得して確認するようにしてください。

こちらの記事では、失敗の場合の具体的なエラー情報を確認する方法をご紹介します。

USER>set file=##class(%File).%New("C:\test\text.txt")
 
USER>set st=file.Open("R")
 
USER>write st
・・C:\test\text.txt.USER%e^Open+5^%Library.File.1^4e^^^0// 何のエラーかわからない


エンコードされたエラーの文字列より、具体的なメッセージを表示したい場合、%SYSTEM.Status クラスのメソッドを使用します。

0
1 232
記事 Nobuyuki Hata · 7月 10, 2023 1m read

最近人気上昇中のプログラミング言語Python、ご存じのとおりIRISでは2通りの使い方が出来ます。

組み込みPython(Embedded Python)

PythonコードはIRISプロセス内でObjectScriptコードと並列に実行

具体的には

  1. IRISクラス内のメソッド
  2. SQL関数とストアドプロシージャ
  3. ターミナルからPythonシェルを起動
  4. irispythonコマンド実行

が該当します。

ネイティブAPI(Native API)

IRISの外からグローバルへのアクセス、クラスメソッドを呼び出し

上の4種類以外は全てネイティブAPIを使用します。

Pythonコードが実行される場所でIRISへのアクセス手段が決まりますが、ライブラリ名が双方とも”iris”のため注意が必要です。

* 従来からのirisnativeはDeprecated(非推奨)となりました

サンプルコードを探す時やドキュメントを参照する時、どちらのPython APIを使用しているか頭の片隅にあると予期せぬエラーに遭遇する機会が減るかも知れません。

組み込みPythonのirisパッケージ

 

組み込み Python | InterSystems IRIS Data Platform 2022.1
 

ネイティブSDKのirisパッケージ

0
0 381
InterSystems公式 Seisuke Nakahashi · 7月 6, 2023

2023.2 の開発者プレビュープログラムの一環として、5番目の開発者プレビューを公開いたします。今回リリースされたのは、InterSystems IRIS と InterSystems IRIS for Health です。

本リリースの注目点

2023.2では、多くの機能修正と改善に加えて、時間認識モデリングや 強化された外部テーブル (まだ実験的な機能です) といった新機能が含まれる予定です。これら新機能の一部は、今回の開発者プレビュー版にはまだ含まれていません。ご注意ください。

2023.2の別の注目点は、プライベート・ウェブサーバ (PWS) がインストーラから削除されることです。このことは昨年に発表され、インターシステムズ製品のインストーラから削除予定ですが、今回のプレビュー版ではまだPWSは存在します。詳細はこちらのドキュメントをご覧ください。

--> PWSが含まれないインストーラにご興味のある方は、こちらのフォームからEAPに登録してください。その際、オプションで「No Private Web Server」をお選びください。このEAPに関する情報はこちらをご参照ください。

0
0 97
記事 Tomoko Furuzono · 7月 2, 2023 3m read

これは、InterSystems FAQサイトの記事です。


以下の様な方法で、グローバルのインポート/エクスポート処理をプログラムに組み込むことができます。

1. グローバルエクスポート方法
1.1 XML形式でのエクスポート
グローバルをXML形式のファイルにエクスポートする場合、$system.OBJ.Export() を使用します。 1.1.1. 指定したグローバルをエクスポートする場合
エクスポート対象グローバルを グローバル名.gbl で指定します(先頭の ^ は不要)。
例:

Do$system.OBJ.Export("a.gbl,b.gbl","c:\temp\globals.xml",,.errors)

結果については、errors に格納されます。

$system.OBJ.Export() の詳細は%SYSTEM.OBJクラスのクラスリファレンスをご確認ください。
クラスリファレンス:%SYSTEM.OBJ
1.1.2. ネームスペース内の全グローバルをエクスポートする場合
%SYS.GlobalQueryクラスでグローバル一覧を取得し、それを $system.OBJ.Export() に渡してエクスポートを実行します。

例:

0
0 415