これは InterSystems FAQ サイトの記事です。
ネームスペースを作成後にInteroperability機能を有効にするには、%EnsembleMgrクラスのEnableNamespaceメソッドを使用します。
do##class%EnsembleMgrInterSystems IRIS for Health™は、世界で最も重要なデータを管理する医療アプリケーションの迅速な開発を目的に特別に設計された世界初、かつ唯一のデータプラットフォームです。 トランザクションの処理と分析、拡張可能な医療データモデル、FHIRベースのソリューション開発、医療情報の相互運用性に関わる標準規格への対応など、すぐに使える強力な機能を搭載しています。 これらすべての機能により、開発者は価値を実現し、画期的なアプリケーションをすばやく構築することができます。 詳細はこちらをご覧ください
これは InterSystems FAQ サイトの記事です。
ネームスペースを作成後にInteroperability機能を有効にするには、%EnsembleMgrクラスのEnableNamespaceメソッドを使用します。
do##class%EnsembleMgrこれはInterSystems FAQ サイトの記事です。
ファイルサイズを取得する専用メソッドはありませんが、%Net.FtpSession クラスの sendCommand() メソッドを通してFTPのSIZEコマンドを呼び出し、サイズを取得できます。
簡単な利用例をご紹介します。
まず、以下の様なクラスを定義します。
ClassExtends%Net.FtpSession上記で作成したクラスを使用したサンプルコードです。
※ sendCommand() メソッドは [Internal] 属性が付与されているため将来変更される可能性があります。
これは、InterSystems FAQサイトの記事です。
監査ログをプログラミングで出力するために、監査ログの一覧を取得する%SYS.Audit クラスのListクエリを利用することができます。
サンプルコードは以下のようになります。
Set##class前の記事では、ObjectScript Package Manager を使用してユニットテストを実行するためのパターンについて説明しました。 この記事では、さらに一歩踏み込み、GitHub Actions を使用してテストの実行とレポート作成を行います。 私の Open Exchange プロジェクトの 1 つである AppS.REST に CI を実行するのが、やる気の出るユースケースでしょう(この導入編の記事は、こちらにあります)。 この記事のスニペットが使用されている完全な実装は、GitHub でご覧ください。ObjectScript Package Manager を使って他のプロジェクトで CI を実行するためのテンプレートとして簡単に利用できます。
紹介する実装の機能は以下のとおりです。
GitHub Actions に関する完全なドキュメントはこちらにあります。この記事の目的に準じ、この例で紹介される側面だけを詳しく確認します。
これは InterSystems FAQ サイトの記事です。
InterSystems IRIS Data Platform(以下IRISと表記)ではマルチモデルのサポートにより、データに対して様々なアクセス手法を使用することができます。
主だったアクセス手法としてダイレクトアクセス、SQLアクセス、オブジェクトアクセスがあります。
ダイレクトアクセス は、IRISのネイティブ構造であるグローバルと呼ばれるキーバリュー型のデータに直接アクセスする方法です。
SQLアクセス は、リレーショナルデータベースシステムにアクセスするための標準言語であるSQLを使用してデータにアクセスする方法です。
オブジェクトアクセス は、オブジェクト指向言語でオブジェクトを操作するための表記法として幅広く利用されるドット記法を使用してデータにアクセスする方法です。
ダイレクトアクセスとSQLアクセスおよびオブジェクトアクセスでは、処理の抽象度が異なります。
抽象度が高くなるに伴い、内部的な処理のオーバヘッドが増加するため、単純な1スレッド単位でのアクセススピードの速さについては、ダイレクトアクセスが、SQLアクセスとオブジェクトアクセスに比較して速い場合が多いです。
しかしながら、今後SQLアクセスに関してより高速に処理できるよう様々な開発が進行中です。
Question:
Windows環境にて、新規サーバにWebゲートウェイ(Web Gateway)をインストールしたところ「HTTP Error 503. The service is unavailable.」エラーで接続ができません。
対処法を教えてください。
Answer:
IRIS2022.1以降のバージョンでは、Visual Studio 2015 Visual C++ 再頒布可能パッケージ(64bit) のインストールが必須となりました。
IRISをインストールされているお客様は、IRISのインストール時に VC++ 2015 再頒布可能パッケージもインストールされるため気にする必要はありませんが、Webゲートウェイのみインストールされる場合は別途インストールする必要があります。
VC++ 2015 再頒布可能パッケージをインストールしていない環境に Webゲートウェイのみインストールした場合、Webゲートウェイ管理ページ(http://localhost/csp/bin/Systems/Module.cxw)にアクセスすると、
Service Unavailable / HTTP Error 503. The service is unavailable.
IRISTEMPというデータベースをご存じでしょうか?
特定の処理に対してデータを無期限に保存する必要がなく、「同一プロセス内でのみ使用したい場合」や「IRISが起動中のみ使用したい場合」に、IRISTEMPデータベースに保存されるグローバルを使用できます。
IRISTEMPデータベースに保存されるグローバルに対する操作は ”一切ジャーナルされない” ため、効率性を最大限にしたい作業に使用できます。
IRISTEMPデータベースに保存されるグローバル(データ)には、以下の種類があります。
------------------------------------------------------------------------------------------------------------------------------------------------------------------
1. システムテンポラリグローバル(IRISが起動中は全ネームスペース&プロセスからアクセス可能)
2. プロセスプライベートグローバル(同一プロセス内でのみ、全ネームスペースからアクセス可能)
3. GLOBAL TEMPORARY テーブル(テーブルは全ネームスペース、データは各プロセスでアクセス可能)
4.
Python は世界で最も使用されているプログラミング言語になり(出典: https://www.tiobe.com/tiobe-index/)、SQL はデータベース言語としての道をリードし続けています。 Python と SQL が連携して、SQL だけでは不可能であった新しい機能を提供できれば、素晴らしいと思いませんか? 結局のところ、Python には 380,000 を超える公開ライブラリがあり(出典: https://pypi.org/)、Python 内で SQL クエリを拡張できる興味深い機能が提供されています。 この記事では、Embedded Python を使用して、InterSystems IRIS データベースに新しい SQL ストアドプロシージャを作成する方法を詳しく説明します。
この記事では、IRIS で SQL を扱う人にとって非常に便利な GeoPy と Chronyk という 2 つのライブラリを使用します。
Geopy は、ジオコーディング(住所と地理座標の修飾)を住所データに適用するために使用するライブラリです。 これを使用すると、通りの名前から郵便番号と完全な住所を郵便局の形式で取得することができます。 多くのレコードには住所が含まれるため、非常に便利です。
これは InterSystems FAQ サイトの記事です。
こちらの記事 では、HTMLのフォームからRESTを使って画像ファイルをアップロードする方法をご紹介しました。
お客様からは、ダウンロードする方法もあわせてお問い合わせいただくことがあるため、この記事では両方の方法に加え、イメージファイル以外にも対応したサンプルをご紹介します。
サンプルでは、HTMLのフォームから IRIS REST API を呼び出してファイルの「アップロード/ダウンロード」を行っています。
【手順】
サンプルプログラムの使い方は次のとおりです。
警告:"NOT %INLIST" を使用した SQL クエリが結果を返さない
インターシステムズは、一部の SQL クエリが不正な結果を返す原因となる 3 つ
の不具合を修正しました。 影響を受けるクエリの詳細については、以下を参照し
てください。
この問題は、以下の製品のリストにあるバージョンに存在します:
同様に上記製品をベースとしたその他のインターシステムズ製品
影響を受けるバージョン:
以下の条件を満たすクエリで、誤った結果を返す可能性があります:
WHERE 節に NOT %INLIST が含まれている
そのリストに NULL 値がある
この不具合の修正は DP-430793 で解決します。この修正は、2022.1.5、2023.1.4、2024.1.1
以降のすべてのバージョンに含まれる予定です。修正はアドホックによる配布でも可能です。
これは InterSystems FAQ サイトの記事です。
通常SQLCODE -114(一致する行が既に別のユーザにロックされています)のエラーはロックが競合した場合に発生します。
こちらはレコードロック競合があったり、ロック閾値を超える更新を行いテーブルロックに昇格した際に、そのテーブルレコードに対して別のプロセスよりSelectを行い共有ロックを取ろうとして失敗した(ロック待ちがタイムアウトとなった)場合に発生します。
Selectで共有ロックを取る場合というのは、IRIS の ISOLATION LEVEL がREAD COMMITTED(デフォルトはREAD UNCOMMITTED)で、Selectを行った場合です。
例:Sample.Personテーブルにテーブルロックがかかった状態で以下を実行する場合
USER>:sql
SQL Command Line Shell
----------------------------------------------------
The command prefix is currently setq
こちらは、
これは InterSystems FAQ サイトの記事です。
イベントログの削除には、Ens.Util.LogクラスのPurge()メソッドを使用します。実行時以下の引数を指定します。
第1引数:削除数(参照渡し)
第2引数:保持日数(デフォルト7)
メッセージの削除には、2種類の方法があります。
1) 2022.1.2以降の導入されたマルチプロセスで削除する方法
Ens.Ens.Util.MessagePurgeクラスのPurge()メソッドを使用します。実行時以下の引数を指定します。
第1引数:削除数(参照渡し)
第2引数:保持日数(デフォルト7)
第3引数:1を指定(Completeではないメッセージの削除を防止するための指定)
第4引数:メッセージボディも一緒に削除する場合は1を指定
第5引数:デフォルトは500(秒)が設定されていますが、大量のメッセージをパージするとクリアされたビットマップの最適化に時間を要して最適化が完了しない場合があるため、大量削除の場合は 10000000000など大きな値を指定します。
2) Ens.MessageHeaderクラスのPurge()メソッドを使用する方法。
実行時以下の引数を指定します。
これは、InterSystems FAQサイトの記事です。
クライアントーサーバ接続を担当するスーパーサーバで、SSLバージョン3とTLSバージョン1での通信が可能です。
このオプションを利用することで、通信上のデータを暗号化できます。
その他、Kerberosを使うことで通信上の暗号化も可能です。
これは InterSystems FAQ サイトの記事です。
各InterSystems製品のサポートOS情報は、製品ドキュメントの「サポートプラットフォーム」情報で確認できます。
製品ドキュメントは、弊社ホームページ > サポート > ドキュメント よりご確認いただけます。
確認したい製品バージョンのドキュメント(例えば、InterSystems IRIS Version 2025.1)を開いていただき、「サポート対象プラットフォーム」リンクからご確認いただけます。
↓↓↓
※Cache & Ensemble の場合は(例えば、Cache & Ensemble Version 2018.1)、ドキュメント上部の Supported Platforms リンク
※過去のバージョンは、
IRIS:
InterSystems IRIS 過去一覧 > バージョン > Supported Platforms > サポート対象プラットフォーム
Cache:
Caché & Ensemble 過去一覧 > バージョン > Supported Platforms > サポート対象プラットフォーム 各OSをサポートするInterSystems製品の一覧は用意しておりませんので、製品バージョンごとのサポートOSをご確認いただく必要があります。 例:
IRIS 2025.1 の サポートプラットフォーム
これは InterSystems FAQ サイトの記事です。
SQLアクセス( ADO含む)を行う場合は、SQLトランザクションを使用して、トランザクションを制御します。
一方オブジェクトアクセス(ObjectScript)ではtstart / tcommit / trollbackコマンド
(Native SDK for .NETでは IRIS の TStart(), TCommit(), TRollback() メソッド)
によってトランザクションを制御します。
この2種類のトランザクションモードを混在させて使用することはサポートされていません。
詳細は、以下のドキュメントをご参照ください。
また関連するメソッドの以下ドキュメントの注意事項にも
「このメソッドは Native SDK トランザクション・モデルを使用し、ADO.NET/SQL トランザクション・メソッドとは互換性がありません。
この 2 つのトランザクション・モデルを混在させないでください。」
と記載をしております。
あるお客さんから、ワークフローの待受画面での新着通知方法についてご相談がありました。
何か良い方法は無いでしょうか。 といった内容です。
この課題に対して調査したところ、以下の方式が見つかりました。
今回は以下の点について手順や設定等解説していきたいと思います。
nginx-push-stream-module を使った SSE (Server-Sent Events) 通知/subscribe) とサーバ送信 (/publish) の最小実装まずは全体像です。データの流れをシンプルに分けることで、役割が明確になります。
私たちのほとんどは、多かれ少なかれDockerに慣れ親しんでいます。 Dockerを使用している人たちは、ほとんどのアプリケーションを簡単にデプロイし遊んで、何かを壊してしまってもDockerコンテナを再起動するだけでアプリケーションを復元できる点を気に入っています。
InterSystems も Docker を気に入っています。
InterSystems OpenExchange プロジェクトには、InterSystems IRISのイメージを簡単にダウンロードして実行できるDockerコンテナで実行するサンプルが多数掲載されています。また、Visual Studio IRISプラグインなど、その他の便利なコンポーネントもあります 。
特定のユースケース用の追加コードを使ってDockerでIRISを実行するのは簡単ですが、ソリューションを他のユーザーと共有する場合は、コマンドを実行し、コードを更新するたびに繰り返し実行するための何らかの方法が必要になります。 この記事では、継続的インテグレーション/継続的デリバリー (CI / CD)を使ってそのプロセスを簡素化する方法を説明します。
セットアップ
まず、IRISをベースにしたシンプルなREST APIアプリケーションから紹介します。
これはInterSystems FAQ サイトの記事です。
%Net.HttpRequest クラスの SSLConfiguration プロパティに SSL/TLS 構成の「クライアント」構成名が指定されているかご確認ください。
%Net.HttpRequest クラスを使用して、https の url にアクセスするためには、以下のドキュメントに記載されている SSL/TLS 構成 の「クライアント」構成を作成して指定した名前を SSLConfiguration プロパティに指定する必要があります。
管理ポータルの [システム管理] > [セキュリティ] > [SSL/TLS構成] メニューを開き、「構成名」に任意名を設定し、「保存」ボタンをクリックします(そのほかの構成パラメータは、デフォルト値で作成します)。
.png)
実行例は以下の通りです(https://www3.nhk.or.jp/news/ にアクセスしています)。
これは、InterSystems FAQサイトの記事です。
プログラムでロック情報を取得するには以下2種類の方法があります。
#dim rset As
より詳細なロック情報を取得する場合には List クエリではなく Detail クエリを使用します。
set st=stmt.%PrepareClassQuery("%SYS.LockQuery","List") を
set st=stmt.%PrepareClassQuery("%SYS.LockQuery","Detail") に変更します。
その他 条件を指定してロック情報を取得する事が出来ます。詳細についてはクラスリファレンス(%SYS.LockQuery)【IRIS】をご参照ください。
(クラスリファレンス(%SYS.LockQuery))
以下サンプルは、現在のネームスペースにあるロックを検索し表示します。またローカル変数 LOCKET の配列に検索で見つかったロック名を設定しています。
SET
詳細は、^$LOCKについて【IRIS】
これは InterSystems FAQ サイトの記事です。
システムのパフォーマンスが低下した場合、OSやインターシステムズ製品の様々なツールを使用して情報収集を行い
”通常時と比較して、どこがどの程度変わっているか”
を確認することで、問題のある箇所を特定できます。
(逆に、通常時の状況が不明な場合、パフォーマンス問題点の切り分けが非常に困難となる場合もあります。)
いざ という時に備え、通常時のパフォーマンスを確認することは、大変重要な情報となります。
収集情報詳細は、以下のドキュメントをご参照ください。
ガイド内でご紹介しているサンプルは、https://github.com/Intersystems-jp/performance-sample からダウンロードいただけます。
パフォーマンス低下時の情報収集ツールについては、以下の関連FAQトピックをご参照ください。
これは InterSystems FAQ サイトの記事です。
仮想ドキュメント(以降VDOC)とは複雑な構造のドキュメント(メッセージ)を効率良く高速に処理するために考えられたメッセージ処理の仕組みです。
HL7に代表される EDI 標準は電子データ交換のための汎用的なかなり複雑なメッセージ形式を含んでいます。
また、メッセージの種類を増やすと運用が複雑になってしまうため、1 つのメッセージに様々なデータを詰め込む傾向があります。
その結果 1 つのメッセージは複雑かつデータ量が多いものになりがちです。
一方、実際のメッセージ交換では、メッセージの全てのデータを処理することはまれで一部のデータのみが必要となるケースがほとんどです。
複雑なメッセージ構造から必要な項目を抽出して処理する際、メッセージを InterSystems IRIS data platform のオプジェクト指向フレームワークに基づき一度オブジェクトとしてインスタンス化することで処理を簡潔に記述できます。
しかし、データ量の多いメッセージを解析しオブジェクトにインスタンス化する処理は非常に負荷のかかる処理で、しかも大量のメッセージを処理しなければならない場合は求められるスループットを満たせない状況になりがちです。
しかも必要なデータは「全体の中のほんの少し」という状況の場合、無駄の多い処理となります。
これは InterSystems FAQ サイトの記事です。
InterSystemsでサポートを保証するバージョンは、最小サポートバージョン(ミニマムサポートバージョン)となります。
最小サポートバージョンは、通常リリース後 2 年以内のバージョンになります。
保守契約のあるお客様には、最小サポートバージョンより前のバージョンに対しても技術的なご質問や障害時の対応は可能な限りさせていたいただきますが、その保守対応はベストエフォートとなり、深刻な問題に対してもそのバージョンに対応したワークアラウンドや修正(パッチ)のご提供が難しくなります。
そのような場合には、最新バージョンへのバージョンアップをお勧めいたします。
最小サポートバージョンについては、以下のドキュメントをご覧ください。
InterSystemsは最近、HL7バージョン2の相互運用性に焦点を当てた、IRIS for Health 2020.1のパフォーマンスとスケーラビリティのベンチマークを完了しました。 この記事では、さまざまなワークロードで観察されたスループットを説明し、IRIS for HealthをHL7v2メッセージングの相互運用性エンジンとして使用しているシステムの一般的な構成とサイジングのガイドラインを提供します。
これは、InterSystems FAQサイトの記事です。
$system.SQL.Shell() を使用します。
以下にサンプルを示しますので参考にしてください。
SAMPLES>do $System.SQL.Shell()
SQL Command Line Shell
---------------------------------------------------- The command prefix is currently set to: <>.
Enter q to quit, ? for help.
SAMPLES>>select * from Sample.Vendor
1. select * from Sample.Vendor Vendor Balance Contact DaysClear DiscDays DiscRate LastInvDate LastPayDate MinPayment Name NetDays PayFlag TaxReportingAddress_City Address_State Address_Street Address_Zip
: ※最初の行で何も入力せずにEnterを押すと、複数行入力モードに切り替わります。
USER>d $SYSTEM.SQL.
これは、InterSystems FAQサイトの記事です。
マップされたクラス・ルーチンも含めてコンパイルする場合は、コンパイラ修飾子に "/mapped=1" もしくは "/mapped" を指定します。 例えば、以下のように行います。
【例1】クラスリストを取得してコンパイル
【例2】全てのクラスをコンパイル
IRIS 2022.1では Embedded Python が導入されました。Embedde Python によって、IRISの独自言語である ObjectScript と Python の親和性の良さをぜひ実感いただけると嬉しいです。今回の記事では、日本語PDFをPythonライブラリを利用して作成し、さらに ObjectScript と融合するところまで見ていただこうと思います。
これは InterSystems FAQ サイトの記事です。
コンテナログイン時、-u オプションで root を指定することでログインできます。
docker exec -it -u root コンテナ名 bash本記事は、あくまで執筆者の見解であり、インターシステムズの公式なドキュメントではありません。
IRISのoAuth2機能関連の情報発信は既に多数ありますが、本稿では
ということを主眼においています。
コミュニティ版で動作しますので、「とりあえず動かす」の手順に従って、どなたでもお試しいただけます。
現状、使用IRISバージョンはIRIS 2023.1のプレビュー版になっていますが、ソースコードは適宜変更します。
手順に沿ってコンテナを起動すると下記の環境が用意されます。この環境を使用して動作を確認します。

ユーザエージェント(ブラウザ)やPython/curlからのアクセスは、全てApache (https://webgw.localdomain/) 経由になります。青枠の中のirisclient等の文字はコンテナ名(ホスト名)です。
例えば、irisclientホストの/csp/user/MyApp.Login.clsにアクセスする場合、URLとして
https://webgw.localdomain/irisclient/csp/user/MyApp.Login.cls
と指定します。
つまり、各エンドポイントは同一のorigin (https://webgw.localdomain) を持ちます。そのため、クロスサイト固有の課題は存在しません(カバーされません)が、仮に各サーバが別のドメインに存在しても基本的には動作するはずです。
oAuth2/OIDC(OpenID Connect)の利用シーンは多種多様です。
本例は、認証・認可サーバ,クライアントアプリケーション,リソースサーバの全てがIRISで実行されるクローズドな環境(社内や組織内での使用)を想定して、認可コードフロー(Authorization Code Flow)を実現します。分かりやすい解説が、ネットにたくさんありますので、コードフロー自身の説明は本稿では行いません。
認証・認可サーバの候補はIRIS, WindowsAD, Azure AD, AWS Cognito, Google Workspace, keycloak, OpenAMなどがあり得ます。個別に動作検証が必要です。
クライアントアプリケーション(RP)は、昨今はSPAが第一候補となると思いますが、利用環境によっては、SPA固有のセキュリティ課題に直面します。
IRISには、Confidential Clientである、従来型のWebアプリケーション(フォームをSubmitして、画面を都度再描画するタイプのWebアプリケーション)用のoAuth2関連のAPI群が用意されています。
そこで、Webアプリケーション(CSP)を選択することも考えられますが、クライアント編では、よりセキュアとされるSPA+BFF(Backend For Frontend)の構成を実現するにあたり、Webアプリケーション用APIをそのまま活用する方法をご紹介する予定です。
以下、サーバ編の動作確認には、CSPアプリケーションを使用しています。これは、新規開発にCSP(サーバページ)を使用しましょう、という事ではなく、BFF実現のために必要となる機能を理解するためです。BFFについては、クライアント編で触れます。BFFについては、こちらの説明がわかりやすかったです。
リソースサーバの役割はデータプラットフォームであるIRISは最適な選択肢です。医療系用のサーバ機能ですがFHIRリポジトリはその良い例です。本例では、至極簡単な情報を返すAPIを使用しています。
少しの努力でFHIRリポジトリを組み込むことも可能です。
サーバ編とクライアント編に分けて記載します。今回はサーバ編です。
とはいえ、クライアントとサーバが協調動作する仕組みですので、境界は少しあいまいです
開発者の皆さん、こんにちは!
この記事では、システム連携の自動的な流れの中にユーザからの指示を介入できる「ワークフローコンポーネント」のサンプル でご紹介した内容を、お手元のIRIS、IRIS for Healthを利用して体験いただくための手順を解説します。
なお、ワークフローコンポーネントでどんなことができるのか?の概要説明については、ウェビナーをご参照ください。
まだインストール環境がない場合は、コミュニティエディション(コンテナ版かキット版)をご利用ください。
開発者の皆さん、こんにちは!
この記事では、Muhammad Waseem さんが(US開発者コミュニティに)投稿された「SQLのスキルを次のレベルに引き上げることのできる5つの便利なSQL関数」の記事についてご紹介します。
✅ SQLに関わらず、IRIS/Caché全般で日頃利用されている便利な機能、使い方、関数などなどありましたら、ぜひコミュニティで共有いただければと思います。
✅ 現在「技術文書ライティングコンテスト」開催中です! 🎁 参加賞/特賞 🏆ありますので、ぜひチャレンジしてみてください!
以下、Muhammad さんの記事です。
この記事では、5つの便利なSQL関数の説明を実行例と共にご紹介します👇
まずは、COALESCE関数から始めてみましょう