#InterSystems IRIS for Health

0 フォロワー · 887 投稿

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

記事 Megumi Kakechi · 5月 29, 2025 6m read

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

InterSystems製品では、複数のプロセスが同時に同じデータにアクセスする場合、排他制御を行うためにロックを使用できます。
ロックは、データの更新を正しく行い整合性を保つための仕組みで、あるデータに対する更新処理を制御するために使用します。
ロックを操作するには、LOCK(L)というコマンドが使用できます。

こちらの記事では、InterSystems製品で使用できるロックの種類、LOCKコマンドの使い方をご紹介します。


★ロックの種類

  増分 単純
排他(既定) LOCK +^A LOCK ^A
共有 LOCK +^A#"S" LOCK ^A#"S"


プラス記号 (+) をつけると、増分ロックになります。1つのプロセスで複数の増分ロックを追加できます。
プラス記号 (+) をつけないと、単純ロックになります。こちらは、1つのプロセスで1つのロックのみ所有できます。単純ロックコマンド実行時に既存のロックがあった場合、そのプロセスが保持している既存のロックをすべて削除し、新しいロックを追加します。

0
0 50
InterSystems公式 Seisuke Nakahashi · 5月 22, 2025

インターシステムズは、InterSystems IRIS、InterSystems IRIS for Health、HealthShare Health Connect のポイントリリース 2025.1 をリリースしました。
新しいバージョン番号は 2025.1.0.225.1 となります。
本リリースは、SDS対応ビジネスホストを利用するユーザに影響を与える、深刻な相互運用性の問題に対応するために行われました。

0
0 44
記事 Toshihiko Minamoto · 5月 22, 2025 6m read

しばらくの間、私はワークフロー機能について何らかの概念実証を行おうと計画していましたが、これは IRIS に存在する他の多くの機能と同様に、お客様にほとんど気付かれないまま終わってしまう傾向があります(その点については申し訳ありません)。 そこで数日前、この機能を構成して、Angular で開発したユーザーインターフェースに接続して使用するための例を作成することに決めました。

記事が非常に長くならなずに読みやすくするために、3 部に分けて説明しようと思います。 この最初の記事では、Workflow の機能とこれから解決する例について説明します。 2 つ目の記事では、Workflow の管理を担うプロファクションの構成と実装について詳しく説明します。 最後に、ウェブアプリケーションを通じて Workflow にある情報にアクセスする方法を説明します。

InterSystems IRIS Workflow Engine

この Workflow 機能を説明するには、IRIS ドキュメントに記載の説明をコピーするのが一番でしょう。

ワークフロー管理システムは、ユーザーへのタスクの分配を自動化します。 事前定義済みの戦略に従ってタスクの分配を自動化することによって、より効率的にタスクを割り当て、タスクの実行に対する責任感を高めることができます。 一般的な例は、顧客から問題に関する報告を受け取り、適切に対応できる組織のメンバーにその報告を送信し、問題が解決したら結果を顧客に報告するヘルプデスクアプリケーションです。

InterSystems IRIS Workflow Engine は、従来のスタンドアロン型のワークフロー管理システムよりもはるかに高レベルの機能を提供しています。

この Workflow 機能は IRIS のどこにあるのでしょうか? 非常に簡単です。管理ポータルからアクセスできます。

サンプルプロジェクトを詳しく見る前に、使用できる各オプションを簡単に説明します。

ワークフローロール

このオプションは、機能を使用するユーザーのロールを分類します。 ロールの定義に混乱するかもしれませんが、プロダクションから作成できるタスクのタイプとして考えています。 これらのロールに割り当てられる名前は、後でプロファクションで宣言し、そのロールに関連するタスクを作成するビジネスオペレーションの名前に一致する必要があります。

ワークフローユーザー

様々なタスクに割り当てられる IRIS ユーザーは、1 つ以上のロールに関連付けられます。 ユーザーは IRIS に登録されている必要があります。

ワークフロータスク

関連情報と共にシステムで作成されるタスクのリスト。 このウィンドウから、タスクのロールに応じた様々なユーザーにタスクを割り当てられます。

タスクは何でしょうか? 非常に簡単です。タスクは、EnsLib.Workflow.TaskRequest クラスのインスタンスであり、このタイプのオブジェクトは、生成されたビジネスプロセスから、クラス EnsLib.Workflow.Operation のビジネスオペレーションに、以前に作成したロールの名前とともに送信されます。 このアクションによって、EnsLib.Workflow.TaskResponse クラスのインスタンスが作成されます。 ビジネスオペレーションは、TaskResponse クラスインスタンスの CompleteTask メソッドが実行されるまで、レスポンスを返しません。

ワークフロー作業リスト

前の機能と同様に、関連する情報と共にタスクのリストも表示されます。

ワークフローの例

この記事に関連するプロジェクトには、慢性患者の治療など、医療組織の一般的な問題に対するソリューションを単純化した例が含まれます。 こういったタイプの患者には、継続的な管理と厳格なモニタリングが必要で、多くの場合、治療に関わる医療専門家にはそれらを行うための最適な手段がありません。

この例では、高血圧症の患者をモニタリングする方法を確認したいと思います。 患者は毎日、血圧計で血圧を測り、その血圧計から InterSystems IRIS がインストールされたサーバーにその読み取り値が送信されることを前提とします。 血圧測定値の収縮期血圧が 140、拡張期血圧が 90 を超える場合、その患者には特定の期間が過ぎてからもう一度血圧を測るように通知されます。2 回目の測定値がもう一度制限を超えた場合、患者と医師の両方にその状況が通知され、処置を決定することができます。

これを行うには、このタスクフローを 2 つのステージに分割します。

ステージ 1: 血圧測定値を毎日受信する。

  1. HL7 メッセージと血圧測定値をプロダクションで受信します。
  2. システムでユーザーの存在をチェックし(存在しない場合は作成)、その後で、ワークフローに関わるロールにユーザーを登録します。
  3. 血圧データを抽出し、アラート基準と比較します。
  4. データがアラート基準を超える場合:
    1. 状況を説明し、血圧をもう一度測定するように要求するための、患者向けのタスクを作成します。
    2. 2 回目の血圧測定値を管理するための自動タスクを作成します。
  5. データがアラート基準を超えない場合、このプロセスは次回の読み取りが翌日受信されるまで閉じられます。

ステージ 2: 最初の測定値がアラート値を超えた後の 2 回目の測定値を受信します。

  1. HL7 メッセージと 2 回目のデータ測定値を受信します。
  2. 自動タスクの復旧が保留されます。
  3. 血圧レベルがアラート基準を超える場合:
    1. 自動タスクは警告ステータスを示して中止されます。
    2. 患者の状況を報告する医師の手動タスクが作成されます。
    3. 状況と、医師に報告されたことを警告する患者の手動タスクが作成されます。
  4. レベルがアラート基準を超えない場合:
    1. 自動タスクは危険がないことを示して中止されます。

次の記事では、上記で説明した内容を反映するフローチャートのデザインについてより詳しく説明します。

ユーザーインターフェース

添付されたスクリーンショットからわかるように、InterSystems IRIS がタスク管理用に提供するユーザーインターフェースは控えめに言っても質素ではありますが、IRIS で得られるメリットの 1 つは、非常に簡単な方法でタスクフローを管理するための API REST を独自に作成できることです。この点については、最後の記事で説明します。

ユーザーに使いやすいインターフェースを提供するために、Angular Material を使用して、Angular で小さなウェブアプリケーションを開発しました。モバイルアプリケーションをシミュレーションするインターフェースを作成できます。

このモバイルアプリケーションは JSON Web Tokens を使って InterSystems IRIS に接続し、IRIS に公開された特定のウェブアプリケーションに HTTP リクエストを送信します。これにより、タスクに対してさまざまなアクターが実行したアクションが、定義されたタスクフローに反映されます。

次回の記事では...

この記事では Workflow の機能に関する紹介を終えたため、次の記事では、BPL を使って提供した例を解決するために必要なタスクフローを実装する方法を説明します。プロダクション全体を構成し、Workflow に関わるメインのクラス(EnsLib.Workflow.TaskRequestEnsLib.Workflow.TaskResponse など)を確認します。

お読みいただきありがとうございました!

0
0 36
記事 Toshihiko Minamoto · 5月 22, 2025 7m read

前回の記事では、一般的な概念と、InterSystems IRIS に統合されたタスクエンジンを使用して解決する問題を紹介しました。今回の記事では、相互運用性プロダクションを構成してソリューションを提供する方法を確認します。

Workflow Engine の構成

First we are going to define the roles of the tasks that we are going to manage, in our example we are going to define two types:

  • AutomaticBloodPressureRole: ユーザーの介入が不要な自動タスクを作成します。
  • ManualBloodPressureRole: ユーザーが手動で検証する必要のあるタスクを作成します。

後で様々な患者から HL7 メッセージを受信するたびにロールをユーザーに割り当てるため、ここでは割り当てる必要はありません。

また、IRIS ユーザーを Workflow に追加する必要もありません。これはプロダクションからコードで実行します。

プロダクションのセットアップ

この例では、アドホックで作成した「WORKFLOW」というネームスペース内にプロダクションを作成します。 このプロダクションに、必要とするビジネスコンポーネントを含めます。

最も単純なコンポーネントから説明し始めましょう。

ビジネスサービス

  • HL7_File_IN: 医療装置からのメッセージの受信をシミュレーションする特定のサーバーパスから HL7 ファイルを収集します。

ビジネスオペレーション

  • AutomaticBloodPressureRole: クラス EnsLib.Workflow.Operation のコンポーネント。Workflow で生成するために使用する、定義済みのロールの 1 つの名前を使用します。ユーザーとの直接的な対話を伴わないタスクです。
  • ManualBloodPressureRole: 前のビジネスオペレーションに似ていますが、この場合、生成するタスクには、それらをクローンするための直接的なユーザーの介入が必要です。

では、情報のフロー、およびサイクルに関連するタスクの作成と管理を管理するビジネスプロセスを詳しく見てみましょう。

Workflow.BP.BloodPressurePlan

このビジネスプロセスは BPL タイプで、患者のケアに関わるタスクの作成と、患者と血圧レベルに関連する情報を送信する医療装置からのレスポンスの取得を行います。

プロセスの開始:

この部分のフローは以下を行います。

  1. ユーザーのチェック: 受信した ADT^A08 メッセージのユーザーをチェックします。存在する場合はフローを続行し、存在しない場合は IRIS にユーザーを作成して、ワークフローに定義されたロールに割り当てます。 ユーザーをロールに割り当てるには、以下のコマンドを実行します。
    /// Workflow user creationset sc = ##class(EnsLib.Workflow.UserDefinition).CreateUser(username)
    /// Assigning Workflow user to the roleset sc = ##class(EnsLib.Workflow.RoleDefinition).AddUserToRole(role, username)
  2. 自動タスクの取得: このフローでは、自動タスクと手動タスクの両方を管理するため、受信した患者のユーザーに保留中の自動タスクがないかをチェックする必要があります。 保留中の自動タスクがある場合は、ノーマルレベルを超える値を持つ前の測定値があることを意味するため、重要です。 このチェックは、すべての作成されたタスクが保存されている TaskResponse テーブルで直接行います。クエリは以下のとおりです。
    &sql(SELECTIDINTO :taskId FROM EnsLib_Workflow.TaskResponse WHERE TaskStatus_AssignedTo = :username AND TaskStatus_IsComplete = 0AND %RoleName = :role)
  3. OBX 数の取得: HL7 メッセージから OBX セグメントの数を取得します。
  4. OBX 値の確認: OBX セグメントを確認し、血圧に関連するデータのみを抽出します。
  5. 保留中のタスクの有無: 2 番目のポイントで述べたように、保留中のタスクがあるかどうかを確認します。

1 回目の血圧測定:

この部分のフローでは、定義された最大血圧レベルを超える 1 回目の測定によって生成されていないメッセージを処理します。

  1. 血圧の確認: 血圧レベルが既定の制限を超えていないかをチェックします。超えていない場合は、プロセスは他の作業を行わずに終了します。 超えている場合は、櫃湯尾なタスクを作成する必要があります。
  2. 手動タスクの作成: 血圧が定義された安全レベルを超過している場合は、患者に状況を報告し、2 回目の測定が必要であることを示す手動タスクを作成する必要があります。 このアクティビティの構成を確認しましょう。    
    1. ビジネスオペレーション ManualBloodPressureRole を呼び出します。これにより、EnsLib.Workflow.TaskRequest タイプのメッセージを渡してタスクが生成されます。
    2. callrequest.%Actions に患者が実行できるアクションをカンマ区切りで定義します。ここでは、"Accept" アクションのみを定義しています。
    3. 患者に示すメッセージを callrequest.%Message に構成します。
    4. callrequest.%UserName でユーザー名を定義することで、作成したタスクに患者を割り当てます。
    5. 最後に、callequest.%Subject に題名またはタイトルを指定し、callrequest.%Priority に優先度(1~3)を指定します。
  3. 自動タスクの作成: 前のアクティビティの構成に似ていますが、ここではビジネスオペレーション AutomaticBloodPressureRole に送信します。 このタスクは、患者の 2 回目の血圧測定を待機するタスクで、保留中のタスクの有無のアクティビティで false を取得することによって、その患者に対してプロダクションで受信した新しいメッセージが新しいタスクを生成しないようにするタスクです。
  4. タスクの待機: このアクティビティは、タスクと手動操作が完了するまで、つまり、患者が ManualBloodPressureRole で作成されたアラームを閉じて IRIS プロダクションが医療装置から 2 回目のメッセージを受け取るまでタスクフローを停止します。
  5. 警告の有無のチェック: 前の保留中のタスクがクローズされたら、このアクティビティに進みます。 この時点では、自動タスクのクローズにおいて、構成された最大血圧値を超えるレベルの新しい測定を受信(タスクは警告アクションによってクローズされます)したかどうかを確認します。 測定値が最大値未満である場合、このプロセスは終了します。 測定値が最大値を超える場合は、次のアクティビティに進みます。
  6. 医師の警告タスク: 患者に割り当てられた医師に対し、患者が危険な状態にある可能性があることを報告する手動タスクが作成されます。
  7. 患者の警告タスク: 患者に対し、医師が状況が報告されたことを示す新しい手動タスクが作成されます。

2 回目の血圧測定:

この部分のフローは、前に作成された自動タスクが完了しなかった場合にのみ実行されます。

  1. 血圧のチェック: もう一度、血圧値が制限を超えるかどうかについて受信したメッセージを検証します。
  2. 通常タスクの終了: レベルが最大値を超えていない場合、タスクがインスタンス化する EnsLib.Workflow.TaskResponse クラスが提供する CompleteTask メソッドで保留中のタスクをクローズします。 使用されるパラメーターは対応処置を示しますが、この場合、FalseAlarm 値を渡して語法であることを示します。必要に応じて他の内容を定義することも可能です。
  3. 警告タスクの終了: 前の場合と同じですが、この場合に Workflow エンジンに渡すアクションは Warning であり、前の「警告の有無のチェック」アクティビティでチェックされる値です。

以下のダイアグラムで確認できるように(文字通りではありませんが、仕組みを把握することはできます)、タスクフローは 2 つの「スレッド」または「プロセス」で機能するようになっています。

最初のスレッド/プロセスは、2 回目の測定を待機する必要がある場合に備えてオープン状態のままとなり、2 回目の測定を受信したときに最初のオープンスレッドの再開を引き起こす、つまり定義されたタスクフローを終了するのは、2 つ目のスレッド/プロセスです。

まとめ

ご覧のように、BPL でタスクを構成するのは非常に単純です。それほど複雑な作業を行わずに、自動タスクと手動タスクをシミュレーションできます。 次の記事がこのシリーズの最後となりますが、ユーザーが外部アプリケーションからタスクを操作する方法を確認しましょう。

お読みいただきありがとうございました!

0
0 38
InterSystems公式 Seisuke Nakahashi · 5月 21, 2025

今回は大きなアップデートがあります。

  • RHEL 10 が昨日リリースされました。関連情報を以下でお伝えしています。
  • 2025.3 では、すべてのオペレーティングシステムで OpenSSL 3 が使用されます。SUSE 15 sp6 は、SUSEを利用する IRISユーザのミニマムサポート OS となります。
  • ミニマムサポート CPU の基準が 2025.3 で引き上げられます。
  • 古い Windows Server オペレーティングシステム は 2025.3 でサポート対象外となります。
0
0 94
記事 Toshihiko Minamoto · 5月 16, 2025 5m read

Auth0 と InterSystems IRIS FHIR リポジトリ使った SMART On FHIR に関する連載最終回では、Angular 16 で開発したアプリケーションをレビューします。

このソリューションに定義されたアーキテクチャがどのように構成されているかを思い出しましょう。

フロントエンドのアプリケーションは 2 列目で、ご覧のように 2 つのことを行います。

  1. ログインリクエストを Auth0 にリダイレクトし、レスポンスを受信する。
  2. REST 経由でリクエストを FHIR サーバーに送信し、そのレスポンスを受信する。

Angular

Angular は TypeScript が開発し、Google が管理するオープンソースの Web アプリケーションフレームワークで、シングルページ Web アプリケーションの作成と管理に使用されます。 この「シングルページアプリケーション」デザイン手法によって、はるかに動的なユーザー向けアプリケーションを設計することができます。 最初の記事で説明したとおり、ここではアプリケーションサーバーとリバースプロキシとして NGINX を使用し、呼び出しヘッダーがサーバーの呼び出しヘッダーに一致するように変更して、CORS から派生する問題を回避します。

アプリケーションのデザイン

モバイルアプリケーションのデザインをシミュレートするように、Angular Material を使ってアプリケーションを設計しました。 この例では、アプリケーションは心拍数、血圧、および体重などの一連の患者データを記録することを目的としており、このために、2 種類の FHIR リソースをサーバーに送信します。1 つ目はユーザーがデータを登録する Patient タイプリソースで、2 つ目は、送信しようとしている各タイプのデータを送信する Observation リソースに対応します。

アプリケーションには、記録されたデータの変化がグラフで表示されます。

ログイン画面

ユーザーがパス https:\\localhost にアクセスすると最初の画面が表示され、そこからログインをリクエストできます。

 

ログインボタンをクリックすると、アプリケーションは構成済みの API に対して有効化された Auth0 ページに自動的にユーザーをリダイレクトします。

ユーザー名とパスワードを入力すると、Auth0 はデータへのアクセス許可をアプリケーションに付与するよう求めます。 データへのアクセスが確認されたら、Auth0 は、構成プロセス中に指定した URL にリダイレクトします。 アクセストークンが生成されると、Auth0 ライブラリは、サーバーに対して発行するすべての呼び出しのヘッダーにそのトークンを含めるようになります。 これは以下の図で確認できます。

最初の画面

ログインが完了すると、ログインユーザーが使用できる情報を FHIR サーバーにリクエストする最初の通信が発生します。これには、パラメーターによるクエリを使用して、次のような GET 呼び出しを送信します。

https://localhost:8443/smart/fhir/r5/Patient?email=lperezra%40intersystems.com

サーバーのレスポンスは次の情報を含む Bundle タイプリソースです。

{
    "resourceType":"Bundle",
    "id":"8c5b1efd-cfdd-11ee-a06b-0242ac190002",
    "type":"searchset",
    "timestamp":"2024-02-20T10:48:14Z",
    "total":0,
    "link":[
        {
            "relation":"self",
            "url":"https://localhost:8443/smart/fhir/r5/Patient?email=lperezra%40intersystems.com"
        }
    ]
}

ご覧のように、そのメールアドレスを使用する患者は合計 0 人であるため、アプリケーションにはデータを登録できる最初の画面が表示されます。

 

ご覧のように、メールアドレスのフィールドにはログインユーザーのアドレスが入力されています。これは、最初のクエリで見たように、メールアドレスを ID として使用するためです。 フォームの入力が完了したら、POST 経由で次のような呼び出しを送信します。

https://localhost:8443/smart/fhir/r5/Patient

Patient リソースによって形成されたメッセージ本文:

{
    "resourceType":"Patient",
    "birthDate":"1982-03-08",
    "gender":"male",
    "identifier":[
        {
            "type":{
                "text":"ID"
            },
            "value":"12345678A"
        }
    ],
    "name":[
        {
            "family":"PÉREZ RAMOS",
            "given":[
                "LUIS ÁNGEL"
                ]
        }
    ],
    "telecom":[
        {
            "system":"phone",
            "value":"600102030"
        },
        {
            "system":"email",
            "value":"lperezra@intersystems.com"
        }
    ]
}

患者データがサーバーに登録され、患者のクエリによって結果が返されるようになったため、さまざまな経過観察を記録できる準備が整いました。 最初の画面がどのように表示されるか見てみましょう。

経過観察画面

患者のデータを送信したのと同じ方法で、特定の画面から経過観察を送信します。

サーバーに送信されたリソースごとに、アプリケーションは新しい点をグラフに追加します。

これを行うために、そのユーザーに属する Observation タイプリソースをリクエストするクエリをサーバーに発行します。

https://localhost/smart/fhir/r5/Observation?patient=Patient/1

すると、サーバーはもう一度、その患者に対して記録されたすべての経過観察を含む Bundle タイプリソースを返します。

結果が取得されたので、アプリケーションはすべての数値を抽出し、関連するグラフを構築します。

まとめ

この記事と前回の 2 つの記事で確認したように、SMART On FHIR アプリケーションの設計と作成はそれほど複雑ではなく、FHIR サーバーで使用できるすべての機能を利用するアプリケーションを素早くアジャイルに構築することができます。

この種のアプリケーションでは、データに対する CRUD タイプの操作を管理する複雑なバックエンドの開発が不要であり、OAuth2 を使用することで、アプリケーションのユーザーを管理する必要もありません。その機能は Auth0 または選択した認証・承認サーバーに任せることができます。

SMART On FHIR では、簡単かつ単純な方法で、患者と医療専門家に対し医療データ管理に必要なツールを提供することができます。

お読みいただきありがとうございました!

0
0 40
記事 Tomoko Furuzono · 5月 13, 2025 1m read

IRISから他DDLのデータを参照したり取り込んだりする場合、各DDLのデータ型はそれと同等の InterSystems IRIS データ型にマッピングされます。

マッピングの定義は、管理ポータル、および、下記ドキュメントページでご確認いただけます。

管理ポータル:[システム管理] > [構成] > [SQLとオブジェクトの設定] > [システムDDLマッピング]

ドキュメント:InterSystems IRIS へのデータ型のマッピングの表示

0
0 31
お知らせ Mihoko Iijima · 5月 7, 2025

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

次のコンテストの詳細が発表されましたのでご案内します。

🏆 InterSystems FHIR とデジタルヘルスの相互運用性コンテスト 2025 🏆

期間:2025年5月12日~6月1日

賞金総額:$12,000


0
0 37
記事 Mihoko Iijima · 1月 15, 2021 1m read

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

InterSystemsでは、既存のお客様および見込みのお客様と実施した他DBMS製品との比較を行った様々なベンチマーク結果を持っています。

しかし、それらの結果に関して、ほとんどのRDBMSベンダのライセンス条項に当該RDBMSベンダの承諾なしにベンチマーク結果を公表してはならないという条項があるため、現実問題として一般的な公表は、難しい状況です。

一方、TPC等の公共の機関等がベンチマーク条件を策定、公開しているベンチマークに関しては、必要な実施コストに対して得られるものが少ないと考えており、過去にも実施しておりませんし、将来も実施する予定はありません。

InterSystemsは、TPCの様な現実のシナリオからかけ離れたベンチマークを実施するのではなく、実際のアプリケーションを模したベンチマークシナリオを構築し、それに基づき、各ハードウェアベンダ、パートナ企業、エンドユーザとの協力の基、ベンチマークを実施しております。

様々なベンチマークの結果をまとめた記事があります。ぜひご参照ください。

IRISで公開しているベンチマーク資料

2
0 325
記事 Mihoko Iijima · 9月 29, 2020 2m read

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


LAST_IDENTITY() SQL関数を使用すると取得できます。
※ この関数は、埋め込み SQL または ODBC 利用時に使用できます。ダイナミック SQL、SQL シェル、または管理ポータルの SQL インタフェースによる値には設定されません。

簡単な埋め込み SQL での例をご紹介します。

1
0 1088
InterSystems公式 Ayumu Tanaka · 4月 23, 2025

インターシステムズは、InterSystems IRIS®データプラットフォームInterSystems IRIS® for HealthTMHealthShare® Health Connect のメンテナンスバージョン 2024.1.4 2023.1.6 をリリースしました。このリリースには以前ご案内した 警告:SQLクエリが間違った結果を返す の修正を含みます。製品の品質改善のために、開発者コミュニティを通じてぜひご意見をお聞かせください。

ドキュメント

詳細な変更リストとアップグレードチェックリストはこちらのドキュメントをご参照ください(すべて英語です):
✅ 2024.1.4

✅ 2023.1.6

早期アクセスプログラム (Early Access Programs; EAPs)

多くの 早期アクセスプログラムをご用意しております。こちらの ページ からご興味のあるプログラムにお申込みいただけます。

キットの入手方法

0
0 50
記事 Megumi Kakechi · 4月 22, 2025 5m read

先日、お客様よりタイトルのご質問をいただき、サンプルコードを作成しました。せっかくですので、こちらでも共有したいと思います。

今回は、データベースの空き容量情報を取得する、%SYS.DatabaseQueryクラスのFreeSpaceクエリを使用したサンプルとします。

C#.Net と VB.Net で作成してみました。


★C#.Net

0
0 55
記事 Tomoko Furuzono · 4月 17, 2025 1m read

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


メソッドの実装に使用する言語を明示する場合は、下記のようにメソッドキーワードで「Language=~~~」と指定します。

Method name(formal_spec) As returnclass [ Language = language ]
{    //implementation }

 指定できるLanguageの値は下記のとおりです。

  • objectscript (既定) — ObjectScript
  • python — 組み込み Python
  • tsql — Transact-SQL
  • ispl — Informix ストアド・プロシージャ言語

ドキュメント:Language (メソッド・キーワード)

上記の通り、ObjectScriptで記載する場合は、「Language=objectscript」と指定します。
但し、CSP内の<SCRIPT>タグ内で指定する場合は、下記の通り、「LANGUAGE=’cache’」と指定することにご注意ください。

<SCRIPT LANGUAGE='cache', ~~~>

ドキュメント:<SCRIPT>  

※CSPページは、IRISでは非推奨の機能です。

0
0 57
記事 Tomoko Furuzono · 4月 10, 2025 2m read

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

※Caché/Ensembleの「CSPゲートウェイ」は、IRISでは「Webゲートウェイ」と名称が変更されています。
 これに伴い、サービス名も、「%Service_CSP」 ⇒ 「%Service_WebGateway」となっています。
 以下は、IRISベースの名称で記載しておりますので、適宜読み替えてご参照ください。

Webゲートウェイ・レジストリとその関連クラスを使用すると、Webゲートウェイのインストール環境の確認、および、設定値の変更が可能です。
関連するクラスは、以下になります。
%CSP.Mgr.GatewayRegistry
%CSP.Mgr.GatewayMgr

例えば、以下は、アクティブなWebゲートウェイのインストール環境(リストの1番目)の情報を書き出しています。

Set reqistry = $system.CSP.GetGatewayRegistry()
Set gateways = reqistry.GetGatewayMgrs()
Set gateway = gateways.GetAt(1)
Write gateway.IPAddress," : ",gateway.Port," : ",gateway.Version

      ↓(結果)

0
0 57
記事 Tomoko Furuzono · 4月 10, 2025 1m read

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

サーバのIPアドレスやマシン名は、%SYSTEM.INetInfoクラスのメソッドで取得することが出来ます。

set hostname=$System.INetInfo.LocalHostName() //マシン(ホスト)名set ip=$system.INetInfo.HostNameToAddr($system.INetInfo.LocalHostName())  //IPアドレス 
0
0 45
記事 Tomoko Furuzono · 4月 7, 2025 1m read

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

指定した文字列式のうち指定したフィールド幅(半角での文字数)に収まる文字数を取得する関数:$ZPOSITIONと、部分文字列を返す関数:$EXTRACTを組み合わせることによって、全角/半角混在文字列から、指定された幅の文字列を取得することが出来ます。
※$Extractは文字単位で処理を行いますので、全角/半角を区別した取り扱いはできません。

構文:

$ZPOSITION(<文字列式>, <フィールド幅>, <全角文字に使用するピッチ値(デフォルトは2)>)

$EXTRACT(<文字列>, <開始位置>, <終了位置>)


例:

//指定した文字列(str)のうち、全角=2/半角=1 の幅として、フィールド幅10(半角10文字分)に含まれる文字数を取得
USER>set str="あい1234うえお"
USER>write$ZPOSITION(str,10,2)
7//指定した文字列(str)のうち、全角=2/半角=1 の幅として、フィールド幅10(半角10文字分)に含まれる文字列を取得
USER>write$extract(str,1,$zposition(str,10,2))
あい1234


$ZPOSITION、$EXTRACTの詳細については、下記各ドキュメントページをご確認ください。

0
0 66
記事 Tomoko Furuzono · 4月 7, 2025 1m read

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

InterSystems製品では、%Installerユーティリティによりインストール・マニフェストを定義することができます。これを利用することにより、複雑な構成設定を自動化することが可能になります。
これは特に、複数の同様なアプリケーションデプロイを行うときに大変有効です。

インストール・マニフェストの詳細については、下記のドキュメントページをご参照ください。
インストール・マニフェストの作成および使用

また、下記の トピックでも、詳しく記載されています。
%InstallerでInterSystems Cachéにアプリケーションをデプロイする
※記事ではCachéについて記述していますが、内容はIRISでも同様です。

0
0 28
記事 Tomoko Furuzono · 4月 3, 2025 1m read

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

HTTPプロキシサーバまたは負荷分散装置(ロードバランサ)を経由してウェブサーバに接続するクライアントの送信元IPアドレスを特定する際は、HTTPヘッダ:X-Forwarded-For (XFF) を取得しますが、IRISでは以下で取得できます。

set ip = %request.GetCgiEnv("HTTP_X_FORWARDED_FOR")
0
0 69
記事 Tomoko Furuzono · 4月 3, 2025 3m read

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

InterSystems製品は、二要素認証をサポートしています。
下記ドキュメントページに詳細について記載がありますので、ご参照ください。
2要素認証


以下、例として、スマートフォン用認証アプリを用いて、IRIS上のCSPアプリケーションの2要素認証を行うための設定方法を解説します。

0
0 35
InterSystems公式 Seisuke Nakahashi · 4月 3, 2025

IRIS 2024.3 で発生する2つの製品障害が確認されました。お使いの環境が該当する場合は、それぞれの解決方法にしたがってご対応いただきますよう、よろしくお願いします。

0
0 45
記事 Hiroshi Sato · 4月 2, 2025 2m read

その1で設定したODBCのシステムDSNを使って、LibreOfficeからアクセスしてみたいと思います。

ここでLibreOfficeをデスクトップから起動すると、詳細は不明ですが、日本語の表示がうまくできません。

(ロケール情報が正しく取得できていない様です)

なので、少し面倒なのですがターミナルから起動する必要があります。

起動する前にロケールが正しく設定されているか確認する必要があります。
一般的には、LC_ALLは設定されていないので、この環境変数に値を設定してエクスポートします。

0
0 44
記事 Hiroshi Sato · 4月 2, 2025 3m read

Mac版のIRISにSQLを使用して他ツールからアクセスするケースはそもそも少ないと思いますが、DBeaverにJDBCを使用してアクセスできることはこのコミュニティの住人であれば、知っている人は結構いるかと思います。

しかし今回ちょっと理由があってMac上のIRISにODBCを使ってアクセスする方法についてトライしてみました。

ここではその備忘録を書き留めておこうと思います。

実際の所、Mac上のクライアントツールでODBCでアクセスできるツールもそんなにないのですが、

候補としてMS-Excel(MS-Query経由)またはLibreOfficeがありました。

まず結論としてExcelは色々とトライしましたが、原因不明ですがうまくつながりませんでした。

(どうもExcel(MS-Query)が拒絶している感じです)

LibreOfficeは何とか接続でき、データの取得はできる様になりました。

まず、前準備としてODBC Driver Managerというものをセットアップする必要があります。

細かくいうとこれにもiODBCとUnixODBCの2系統があるのですが、ExcelおよびLibreOfficeはiODBCにしか対応していない感じです。
(これは正確な情報ではない可能性はあります)

0
0 43
記事 Hiroshi Sato · 4月 1, 2025 1m read

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

Content-Typeにcharset 情報が含まれていない場合、IRIS/Cachéは文字コードを判断できず文字コード変換が行われません。

そこで、以下のように、「自動的な文字変換を行わず、UTF-8に変換する処理を記述」することで、その指定がある無しに関わらず、対応することができます。
 

// requestオブジェクトは以下のように生成 // 詳細処理は省略// set request=##class(%Net.HttpRequest).%New()// リクエスト時に、文字変換を行わないように指定set request.ReadRawMode=1do request.Send("POST",URL)

 // 受取ったデータを、UTF-8に変換してから、JSON変換set response = request.HttpResponse.Data
 set data = response.Read()
 set data2 = $zcvt(data,"I","UTF8")
 set response = {}.%FromJSON(data2)
 write response.%ToJSON()
0
0 85
記事 Tomoko Furuzono · 3月 31, 2025 2m read

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

小数点桁数を指定しない単純な整数への切り上げ・切り捨ては、それぞれ、以下の関数で実行できます。

(SQL関数)

切り上げ:CEILING
切り捨て:FLOOR

(ObjectScript関数)

切り上げ: $system.SQL.Functions.CEILING()
切り捨て: $system.SQL.Functions.FLOOR()

USER>write $system.SQL.Functions.CEILING(168.5)
169
USER>write $system.SQL.Functions.FLOOR(168.5)
168

※バージョン2021.1以前は以下のメソッドを使用します。

 切り上げ: $system.SQL.CEILING()
 切り捨て: $system.SQL.FLOOR()


小数桁数を指定して切り上げ・切り捨てを行いたい場合は、2つの関数を組み合わせ、以下のようなメソッドを作成して対応します。

0
0 88
記事 Tomoko Furuzono · 3月 31, 2025 1m read

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

ウィンドウ関数は、結果セットを部分的に切り出した領域に集約関数を適用できるもので、WHERE GROUP BY および HAVING 節が適用された後、SELECT クエリで選択された行に対して作用します。
IRIS/IRIS for Health 2021.1からサポートしています。
サポートされるウィンドウ関数は以下の通りです。

  • FIRST_VALUE(field)
  • PERCENT_RANK()
  • RANK()
  • ROW_NUMBER()
  • SUM(field)

詳細については、下記ドキュメントページをご確認ください。
ウィンドウ関数の概要
関連記事:IRIS SQLでは OFFSET/LIMIT句のような機能をサポートしてますか?
                  IRIS SQLクエリで取得した結果セットのランキング(順位)を算出する方法

0
0 45
記事 Mihoko Iijima · 3月 28, 2025 4m read

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

先日、EM リリース新バージョン 2025.1 がリリースされました。

コンテナ版以外ですが、新規インストール時に指定する初期セキュリティオプションのデフォルトが「ロックダウン(Locked Down)」に変更となりましたので、今までとの違いについて以下ご説明します。

以前のバージョンのデフォルトは、IRIS:「最小(Minimal)」、IRIS for Health:「通常(Normal)」です。

ロックダウンオプションは、初期セキュリティの中で一番厳しいセキュリティ設定を行うオプションで、例えば、オブジェクト/SQL のアクセスが行えない、VSCode から IRIS にアクセスできない状況からスタートします。

そのため、使用したいアクセスに対してアクセス許可追加していく必要のあるセキュリティオプションです。

0
0 45
InterSystems公式 Masahito Miura · 3月 27, 2025

インターシステムズは、InterSystems IRIS®data platformInterSystems IRIS® for HealthTM、および HealthShare® Health Connect の 2025.1 リリースを一般提供 (GA) したことを発表しました。2025.1 は、拡張メンテナンス(EM)リリースです。
リリースハイライト
今回のリリースには、以下のような数々の興味深いアップデートが含まれます:

0
0 120
記事 Tomoko Furuzono · 3月 27, 2025 2m read

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

管理ポータルの [システムオペレーション] > [ジャーナル]のページで実行できる、 整合性チェックの実行や、サマリーの表示は、%SYS.Journal.File クラスのメソッドやクエリでも実行することができます。

クラスリファレンス:%SYS.Journal.File

以下、実行例です。
※全て、%SYSネームスペースで実行します。

(1) 整合性チェック

 set status = ##class(%SYS.Journal.File).CheckIntegrity(<ジャーナルファイルパス>,1)
// 整合性チェックで問題なければ status=1


(2)サマリー

0
0 54
記事 Tomoko Furuzono · 3月 27, 2025 1m read

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

システムログ(messages.log/cconsole.log)に出力される、

[Utility.Event] %SYS.Task.FeatureTracker failed to transfer data

というログは、機能トラッカというタスクが出力しているメッセージです。
このタスクは、弊社がユーザ使用状況の統計を取得する為のデータ送信タスクになります。
エラーは弊社と通信が行われてない為に発生しています。

機能トラッカの詳細については下記ドキュメントをご確認ください。
機能トラッカによる使用量統計の収集

このタスク自体は、アプリケーションやシステムの動作自体に関連はありませんので、メッセージが出ていても影響はありませんが、タスクを無効にすることもできます。
機能トラッカのタスクを無効にする手順は以下の通りです。

1. 管理ポータルで、[システム操作]→[タスクマネージャ]→[タスクスケジュール] を選択
2. 機能トラッカの行を見つけて、[機能トラッカ] を選択
3. タスク詳細のページが表示されたら、[一時停止]
4. [タスク実行が一時停止された場合にタスクを再スケジュールしますか?] という質問に適切に回答
 → いいえ
5. [このアクションをすぐに実行する] を選択、タスクを停止

0
0 26
記事 Tomoko Furuzono · 3月 25, 2025 1m read

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

SQLでクエリ実行時、ORDER BYで並べ替えをする場合、各RDBMSによって、照合順が異なることがあります。

たとえば、NULLと空文字の混じった文字列のカラムを並べ替える場合、

IRIS SQLでは、既定の照合順は下記のようになりますが、 

NULL, 空文字, 0, 00, 01, 1, 10, 100, 11, A, a, B, b

Oracleでは、下記のような照合順になります。

空文字, 0, 00, 01, 1, 10, 100, 11, A, B, a, b, NULL


複数のDB由来のデータを取り扱う際には、このような照合順の違いを合わせたい場合があります。

IRISの場合、既定の文字列照合はSQLUPPERですが、照合タイプを変更することによって、照合順を変えることが出来ます。
ドキュメント:照合

上記のIRIS SQLとOracleの違いを合わせるためには、照合タイプを「SQLSTRING」に設定し、インデックスを作成します。

Property TestColumn As%String(COLLATION = "SQLSTRING"); 
Index IdxTest On TestColumn;
0
0 62