InterSystems公式 Seisuke Nakahashi · 10月 23, 2025

インターシステムズは、InterSystems IRIS® data platformInterSystems IRIS® for HealthTMHealthShare® Health Connect のメンテナンスバージョン 2025.1.2 および 2024.1.5 をリリースしました。今回のリリースでは、最近お知らせした以下の警告や勧告の修正が含まれています。

製品の品質改善のために、開発者コミュニティを通じてぜひご意見をお聞かせください。

ドキュメント

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

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

0
0 25
記事 Toshihiko Minamoto · 10月 9, 2025 8m read

少し遅れましたが、モバイルアプリケーションから接続する例を示して Workflow Engine に関する連載記事をようやく締めくくることにします。

前回の記事では、これから説明する例として、患者と担当医師の両方にとって高血圧症などの慢性病状の詳細な管理を可能にするアプリケーションを示しました。 この例では、患者は携帯電話からウェブアプリケーション(基本的に、デバイスに応答するように設計されたウェブページ)にアクセスし、ポータブル血圧計が IRIS インスタンスに送信する測定に基づく通知を受信します。

したがって、IRIS インスタンスへのアクセスは 2 つです。

  • モバイルアプリケーションからのユーザーアクセス。
  • 血圧の測定値を送信するデバイスアクセス。

この記事では、患者が測定値を生成するタスクを管理できる、最初のアクセスを確認します。

モバイルアプリケーションと IRIS の接続

この接続では、IRIS 内でウェブアプリケーションを構成するのが最も単純です。これを行うには、管理ポータルのシステム管理 -> セキュリティ -> アプリケーション -> ウェブアプリケーションからアクセスします。

次に、表示されるリストでアプリケーションの新規作成をクリックすると、以下のような画面が開きます。

この画面で、以下のフィールドを構成しましょう。

  • 名前: IRIS にデプロイされる機能にアクセスできるように公開する URL を定義します。
  • ネームスペース: ウェブアプリケーションを関連付けるネームスペースです。これによって、後で相互運用性プロダクションの機能を利用できるようになります。
  • REST: 公開するものが HTTP 接続を可能にする REST API であるため、このオプションを選択します。
  • ディスパッチクラス: HTTP 呼び出しを受け取り、その処理を決定する ObjectScript クラス。
  • JWT 認証を使用する: このオプションをオンにすると、アプリケーションに定義した URL の /login および /logout エンドポイントが有効になるため、IRIS への呼び出しを認証するための JSON ウェブトークンを取得できるようになります。
  • セキュリティ設定 -> 許可される認証方法: 呼び出しを安全にするためにパスワードを設定します。

Workflow.WS.Service クラスを確認しましょう。

Class Workflow.WS.Service Extends%CSP.REST
{

Parameter HandleCorsRequest = 0;Parameter CHARSET = "utf-8"; XData UrlMap [ XMLNamespace = "https://www.intersystems.com/urlmap" ] { <Routes> <Route Url="/getTasks" Method="GET" Call="GetTasks" /> <Route Url="/saveTask" Method="POST" Call="SaveTask" /> </Routes> }

ClassMethod OnHandleCorsRequest(url As%String) As%Status { set url = %request.GetCgiEnv("HTTP_REFERER") set origin = $p(url,"/",1,3) // origin = "http(s)://origin.com:port"// here you can check specific origins// otherway, it will allow all origins (useful while developing only)do%response.SetHeader("Access-Control-Allow-Credentials","true") do%response.SetHeader("Access-Control-Allow-Methods","GET,POST,PUT,DELETE,OPTIONS") do%response.SetHeader("Access-Control-Allow-Origin",origin) do%response.SetHeader("Access-Control-Allow-Headers","Access-Control-Allow-Origin, Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control") quit$$$OK }

ClassMethod GetTasks() As%Status { Try { Do##class(%REST.Impl).%SetContentType("application/json") If '##class(%REST.Impl).%CheckAccepts("application/json") Do##class(%REST.Impl).%ReportRESTError(..#HTTP406NOTACCEPTABLE,$$$ERROR($$$RESTBadAccepts)) QuitDo##class(%REST.Impl).%SetStatusCode("200") set sql = "SELECT %Actions, %Message, %Priority, %Subject, TaskStatus_TimeCreated, ID FROM EnsLib_Workflow.TaskResponse WHERE TaskStatus_AssignedTo = ? AND TaskStatus_IsComplete = 0"set statement = ##class(%SQL.Statement).%New(), statement.%ObjectSelectMode = 1set status = statement.%Prepare(sql) if ($$$ISOK(status)) { set resultSet = statement.%Execute($USERNAME) if (resultSet.%SQLCODE = 0) { set tasks = [] while (resultSet.%Next() '= 0) { set task = {"actions": "", "message": "", "priority": "", "subject": "", "creation": "", "id": ""} set task.actions = resultSet.%GetData(1) set task.message = resultSet.%GetData(2) set task.priority = resultSet.%GetData(3) set task.subject = resultSet.%GetData(4) set task.creation = resultSet.%GetData(5) set task.id = resultSet.%GetData(6) do tasks.%Push(task) }
} } set result = {"username": ""} set result.username = $USERNAMEDo##class(%REST.Impl).%WriteResponse(tasks)

} <span class="hljs-keyword">Catch</span> (ex) {
    <span class="hljs-keyword">Do</span> <span class="hljs-keyword">##class</span>(<span class="hljs-built_in">%REST.Impl</span>).<span class="hljs-built_in">%SetStatusCode</span>(<span class="hljs-string">"400"</span>)
    <span class="hljs-keyword">return</span> ex.DisplayString()
}

<span class="hljs-keyword">Quit</span> <span class="hljs-built_in">$$$OK</span>

}

ClassMethod SaveTask() As%Status { Try { Do##class(%REST.Impl).%SetContentType("application/json") If '##class(%REST.Impl).%CheckAccepts("application/json") Do##class(%REST.Impl).%ReportRESTError(..#HTTP406NOTACCEPTABLE,$$$ERROR($$$RESTBadAccepts)) Quit// Reading the body of the http call with the person dataset dynamicBody = {}.%FromJSON(%request.Content)

    <span class="hljs-keyword">set</span> task = <span class="hljs-keyword">##class</span>(EnsLib.Workflow.TaskResponse).<span class="hljs-built_in">%OpenId</span>(dynamicBody.<span class="hljs-built_in">%Get</span>(<span class="hljs-string">"id"</span>))
    <span class="hljs-keyword">set</span> sc = task.CompleteTask(dynamicBody.action)

    <span class="hljs-keyword">if</span> <span class="hljs-built_in">$$$ISOK</span>(sc) {	        
        <span class="hljs-keyword">Do</span> <span class="hljs-keyword">##class</span>(<span class="hljs-built_in">%REST.Impl</span>).<span class="hljs-built_in">%SetStatusCode</span>(<span class="hljs-string">"200"</span>)
        <span class="hljs-keyword">Do</span> <span class="hljs-keyword">##class</span>(<span class="hljs-built_in">%REST.Impl</span>).<span class="hljs-built_in">%WriteResponse</span>({<span class="hljs-string">"result"</span>: <span class="hljs-string">"success"</span>})         
	}	
    
} <span class="hljs-keyword">Catch</span> (ex) {
    <span class="hljs-keyword">Do</span> <span class="hljs-keyword">##class</span>(<span class="hljs-built_in">%REST.Impl</span>).<span class="hljs-built_in">%SetStatusCode</span>(<span class="hljs-string">"400"</span>)
    <span class="hljs-keyword">Do</span> <span class="hljs-keyword">##class</span>(<span class="hljs-built_in">%REST.Impl</span>).<span class="hljs-built_in">%WriteResponse</span>({<span class="hljs-string">"result"</span>: <span class="hljs-string">"error"</span>})
}

<span class="hljs-keyword">Quit</span> <span class="hljs-built_in">$$$OK</span>

}

}

ご覧のとおり、WS から必要なすべてのロジックを解決していますが、この方法は推奨されません。ネームスペースに構成されたプロダクションに受信したリクエストを送信することで可能なトレーサビリティを失ってしまうためです。

URLMap セクションを確認すると、2 つのエンドポイントが WS で構成されていることが分かります。

  • getTasks: ユーザーのすべての保留中のタスクを復旧します(使用されている SQL を見ると、ログインしたときに生成される変数から直接ユーザー名を渡しています)。
  • saveTask: ユーザーのタスクへのレスポンスを受信し、EnsLib.Workflow.TaskResponse クラスの CompleteTaks メソッドを実行することで、タスクの終了に進みます。

IRIS の部分では、外部アプリケーションが接続できるようにすべてが構成済みです。

Workflow Engine で外部アプリケーションをテストする

まず、ファイル /shared/hl7/message_1_1.hl7 をパス /shared/in にコピーすることで、HL7 からプロダクションへのメッセージの送信をシミュレーションします。送信するメッセージを確認しましょう。

MSH|^~\&|HIS|HULP|EMPI||20240402111716||ADT^A08|346831|P|2.5.1
EVN|A08|20240402111716
PID|||07751332X^^^MI^NI~900263^^^HULP^PI||LÓPEZ CABEZUELA^ÁLVARO^^^||19560121|F|||PASEO MARIO FERNÁNDEZ 2581 DERECHA^^MADRID^MADRID^28627^SPAIN||555819817^PRN^^ALVARO.LOPEZ@VODAFONE.COM|||||||||||||||||N|
PV1||N
OBX|1|NM|162986007^Pulso^SNM||72|^bpm|||||F|||20240402111716
OBX|2|NM|105723007^Temperatura^SNM||37|^Celsius|||||F|||20240402111716
OBX|3|NM|163030003^Presión sanguínea sistólica^SNM||142|^mmHg|||||F|||20240402111716
OBX|4|NM|163031004^Presión sanguínea diastólica^SNM||83|^mmHg|||||F|||20240402111716

前回の記事を覚えていらっしゃらない方のために説明すると、BPL は収縮期血圧が 140 を超えるか拡張期血圧が 90 を超えるとアラートが生成されるように定義していたため、このメッセージにより、DNI(スペインの身分証明書)が 07751332X である患者に対する警告タスクと、IRIS が新しい通知を受信するまで開いたままになる別の自動タスクが生成されます。

モバイルアプリケーションを確認しましょう。

2 つのタスクが生成されています。1 つは手動タスクとして定義されており、ユーザーによって終了方法が異なります。もう 1 つは自動タスクとして宣言されており、それを終了するには、ユーザーが血圧計で新しい測定を行う必要があります。 HTTP 呼び出しを見てみると、これにどのように JWT を含めているのかが分かります。

ユーザーが保留中のタスクの Accept ボタンをクリックすると、このフローは血圧計の測定値の受信を待機したままとなり、次のステップに進みません。 手動タスクが受け入れられ、血圧計からの新しい測定値を受信し、それがもう一度制限を超えている場合は、システムは患者向けのタスクと、関連する医師向けに危険な状態の可能性を警告するタスクの 2 つの新しい警告タスクを生成します。 :

完璧です! 患者通知システムは素早く簡単にセットアップ済みです。

まとめ

この連載記事でご覧になったとおり、Workflow Engine の機能と InterSystems IRIS の相互運用性機能を合わせることで、他のビジネスソリューションではほとんど実現できないビジネス プロセスの実装において、驚異的な可能性を切り開くことができます。 最大限に活用するためには、技術的な知識が必要となる可能性がありますが、実際に必要な取り組みを投じる価値はあります。

0
0 23
InterSystems公式 Masahito Miura · 7月 30, 2025

インターシステムズは InterSystems IRIS® data platform のバージョン 2025.2 をリリースしました。2025.2 は Continuous Delivery(CD)リリースです。InterSystems IRIS for Health™ および HealthShare®Health Connect™ のバージョン 2025.2 はセキュリティ・アップデートによるミラーリングの制限のため、現在提供されていません (詳細は後述)。

リリースハイライト

このリリースでは、セキュリティ、開発者エクスペリエンス、運用および相互運用性にわたってインパクトのある機能強化が導入されています。注目すべき新機能は以下のとおりです:

1.   新しい IRISSECURITY データベースによるセキュリティ強化

  o    セキュリティー・データは新しい IRISSECURITY データベースに移されました。このデータベースは暗号化することができます。

  o    新しいロール %SecurityAdministrator は、一元管理をサポートします。

  o    セキュリティ関連のグローバルとテーブルへの直接アクセスは非推奨です。代わりに提供されている API を適切なパーミッションで使用してください。

0
0 56
InterSystems公式 Ayumu Tanaka · 7月 24, 2025

インターシステムズは、InterSystems IRIS®データプラットフォームInterSystems IRIS® for HealthTMHealthShare® Health Connect のメンテナンスバージョン 2025.1.1 をリリースしました。製品の品質改善のために、開発者コミュニティを通じてぜひご意見をお聞かせください。

ドキュメント

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

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

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

キットの入手方法

0
0 30
InterSystems公式 Megumi Kakechi · 6月 16, 2025

概要

勧告 ID

影響を受ける製品と
バージョン

リスクカテゴリー &
スコア

明示的な発生条件

DP-439649

製品:

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

バージョン:

  • 2025.1.0.225.1
  • 2025.1.0.223.0
  • 2024.1.4
  • 2023.1.6
  • 2022.1.7

運用:
4 – 高リスク

 

システム安定性:
3 – 中リスク

 

この問題はセキュリティ上の脆弱性ではありません。ユーザーの権限チェックを無効にしたり、承認されたネームスペース外のデータアクセスを可能にするものではありません。

暗黙のネームスペースの使用、管理ポータル または データベースに対する読み取り専用/読み取り書き込み混合アクセス。


上記にリストされたInterSystems製品において、以下の機能のいずれかを使用している環境で、ネームスペースを切り替えたりグローバル変数にアクセスしたりする際、予期しない <PROTECT> エラーが発生する可能性があります。

0
0 42
InterSystems公式 Megumi Kakechi · 6月 11, 2025

InterSystems は、以下のサポート対象製品バージョン 2025.1.0、2024.1.4、2023.1.6、および 2022.1.7 に影響する不具合を解決するために、新しいポイント アップデートをリリースしました。

  • InterSystems IRIS
  • InterSystems IRIS for Health
  • HealthShare Health Connect


この問題により、以下の機能を使用する際、予期しない <PROTECT> エラーやアクセス異常が発生する可能性があります:

  • 暗黙のネームスペース
  • データベースへの読み取り専用/読み取り書き込みの混合アクセス
  • 管理ポータルでのルーチンとグローバル一覧表示


含まれる症状:

  • ネームスペースの作成の失敗
  • ルーチンをリストするときに断続的に「アクセス拒否」エラーが発生する
  • 読み取り専用権限を持つユーザーに対してグローバル表示ページがデータを返さない

これらの問題によりアクセス制御やユーザー権限が損なわれることはありませんが、複数のシナリオにおいて、システムの想定された動作に影響を及ぼします
 

解決済みバージョン

修正は次のポイントリリースに含まれています。

  • 2025.1.0.230.2
  • 2024.1.4.516.1
  • 2023.1.6.810.1
  • 2022.1.7.116.1
0
0 51
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公式 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
InterSystems公式 Seisuke Nakahashi · 4月 3, 2025

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

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
InterSystems公式 Seisuke Nakahashi · 12月 12, 2024

InterSystems IRIS® data platform、InterSystems IRIS® for Health、HealthShare® Health Connect 2025.1 の最初の開発者プレビューが WRC 開発者プレビューページ に公開されました。コンテナ版は InterSystems コンテナレジストリ から latest-preview のタグで取得いただけます。

この開発者プレビューには、IBM の Open XL C/C++ for AIX 17.x コンパイラへの移行機能が含まれています。これにより、古いコンパイラがサポート終了に近づいている中、将来の AIX ビルドとの互換性が確保されます。この移行では、AIX 7.2 と 7.3 で SSL3 をサポートする aixopenssl30 に焦点をあてています。

ドキュメントは以下のリンクからご覧いただけます。

キットについて

本リリースでは、すべてのサポート対象プラットフォーム向けに、従来のインストーラ形式をご提供します。サポート対象プラットフォーム一覧は こちらのドキュメント をご覧ください。

0
0 112
InterSystems公式 Seisuke Nakahashi · 11月 28, 2024

インターシステムズは InterSystems IRIS data platform、InterSystems IRIS for Health、HealthShare Health Connect のバージョン 2024.3 をリリースしました。2024.3 は Continuous Delivery(CD)リリースです。

0
0 81
InterSystems公式 Ayumu Tanaka · 8月 1, 2024

インターシステムズは InterSystems IRIS Data PlatformInterSystems IRIS for Health, HealthShare Health Connect バージョン 2024.2 をリリースしました。

リリースハイライト

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

開発者向け機能の強化

0
0 61
記事 Mihoko Iijima · 7月 16, 2024 9m read

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

管理ポータル > [システム管理] > [セキュリティ] 以下の設定は、%SYSネームスペースにあるSecurityパッケージ以下クラスが提供するメソッドを利用することでプログラムから作成することができます。

以下シナリオに合わせたセキュリティ設定例をご紹介します。

シナリオ:RESTアプリケーション用設定を作成する

事前準備

シナリオの中で使用するソースを2種類インポートします。

アプリケーション用RESTディスパッチクラスをインポートします。

0
0 142
記事 Mihoko Iijima · 7月 11, 2024 4m read

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

管理ポータル > [システム管理] > [セキュリティ] 以下の設定は、%SYSネームスペースにあるSecurityパッケージ以下クラスが提供するメソッドを利用することでプログラムから作成することができます。

ユーザ設定については、Security.UsersクラスCreate()メソッドを使えば作成できますが、ユーザを作成するだけでは適切な権限が付与されずに目的のデータにアクセスできない状況もあります。

例)testAユーザ作成

%SYS>set st=##class(Security.Users).Create("testA",,"testA","これはテストユーザです","USER")

%SYS>write st
1

上記メソッドで作成した結果は以下の通りです。(ロール付与無し、テーブルに対する権限の割り当てもなしの状態)

 

以降の解説では、以下のシナリオをもとにした設定を行っていきます。

シナリオ:アプリケーション開発者用ロールとユーザを作成する

1) アプリケーション開発者のtestAは、USERネームスペースにログインするアプリケーション開発者です(=%DevelopmentリソースのUse許可を与えます)。

0
0 96
記事 Mihoko Iijima · 7月 9, 2024 2m read

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

メッセージログ(messages.log)/コンソールログ(cconsole.log) に以下のようなメッセージが表示される場合があります。

03/22/18-14:27:34:624 (1851) 2 [SYSTEM MONITOR] WriteDaemon Alert: Write Daemon still on pass 320186

このメッセージ出力は、ライトデーモンのデータベースファイルへの書き込み処理の遅延を示しています。
その原因としては、ディスクI/O負荷が高く、そのI/O要求量に対してディスク処理性能が不足していることが考えられます。

ディスクI/O負荷の原因としては以下が考えられます。

  • アプリケーションによるデータへの更新や参照処理が集中した
  • アンチウイルスソフトのスキャンやデータベースバックアップソフト等によるディスクへのI/O負荷

もしアンチウイルスソフトがインストールされている場合は、「アンチウイルスソフト(セキュリティソフト)のスキャンから除外してほしいリスト」に記述している情報を参考に、InterSystems製品の対象ファイルをスキャンの対象外に設定変更してください。

0
0 106
記事 Mihoko Iijima · 7月 7, 2024 4m read

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

監査ログはシステムDB内テーブル(%SYS.Audit)に記録されていますので、そのテーブルに対するクエリを実行して抽出したり、%SYS.Auditテーブルに用意されていストアドプロシージャを利用して情報を取得しファイル出力するようにプログラムを用意することもできます。

以下にご紹介する内容は「監査ログをプログラムで出力(ユーザやイベント指定など)する方法」に関連した内容で、監査ログのファイル出力を管理ポータルの機能を利用した例とプログラムを利用した例でご紹介します。

 

1. 管理ポータルの印刷機能を使う

管理ポータル > [システムエクスプローラ] > [SQL]を開き、%SYSネームスペースに接続します。

システムのチェックを入れ、スキーマに%SYSを指定した後、プロシージャの階層を展開するとプロシージャリストが参照できます。

%SYS.Audit_ で始まるプロシージャが監査ログに対して実行できるプロシージャです。

SQL文例)InterSystems製品内ユーザのSuperUserに対する監査ログをストアドプロシージャ:%SYS,Audit_ListByUser を利用して出力しています。

call %SYS.Audit_ListByUser(,,,,,'SuperUser')
0
0 144
記事 Mihoko Iijima · 7月 4, 2024 2m read

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

InterSystems製品のサーバサイドでファイル入出力を行うと、文字列はシステムで設定されたファイル入出力用文字コードに自動変換され、文字単位でREADします。

ファイルから入力する文字をバイト単位で操作するためには、自動変換を行わない無変換の状態でファイル入力を行い指定バイトずつ読みながら読んだ分だけUnicodeに手動で変換していく必要があります。

変換には$ZCONVERT()関数を使用します。($ZCONVERT()には省略形があり$ZCVT()でも同様の操作が行えます。)

なお、READした指定バイトを変換する際、文字の全バイトが含まれない場合もあるため、途中までの読み取りになった文字列を第4引数に指定する変数に設定できるようになっています。
次回読み取り時に途中だった文字を自動的に先頭に追加し、$ZCONVERT()の処理を実行します。

《メモ》ファイル入出力の文字コードについては、以下管理ポータルの画面で確認できます。
管理ポータル > 構成 > 国際言語設定 > 構成したデフォルト値
 入力/出力テーブルの表の「ファイル」

以下の文章がファイルにUTF8で保存されているとします。

2024/4/19:強風でしたが良い天気でした
0
0 143
InterSystems公式 Ayumu Tanaka · 6月 2, 2024 2m read

InterSystems IRIS® データ・プラットフォーム 2022.3 からライセンス消費メカニズムにRESTとSOAPを追加しました。この変更により、コア・ベースライセンス以外でRESTまたはSOAPを使用している場合、アップグレード後にライセンス消費量が多くなる可能性があります。この勧告がお使いのシステムに該当するかどうかは、以下にあるFAQ(英語)のリンクをご参照ください。.

ライセンス使用について、こちらの表にまとめています。

製品

REST と SOAP のリクエストがライセンスを消費するかどうか

InterSystems Caché®

する

InterSystems Ensemble®

しない

InterSystems IRIS, InterSystems IRIS® for Health, Health Connect  2022.3 より前

しない

InterSystems IRIS, InterSystems IRIS for Health, Health Connect 2022.3 以降

する

 

0
0 295
記事 Mihoko Iijima · 5月 20, 2024 2m read

InterSystems製品のバックアップ方法の中の4つの目方法は「コールドバックアップ」です。

InterSystems製品を停止できるときに利用できるバックアップ方法です。別サーバに環境を移植するときや、コミュニティエディションから製品版キットのインストール環境にデータベースを移植する場合などにもお使いいただけます。

 

バックアップ手順

1. InterSystems製品を停止する

2. バックアップしたいデータベースを退避する

3. InterSystems製品を開始する

 

既存環境から新環境へ移植する場合などの手順

1. 既存環境のInterSystems製品を停止する。

既存環境の設定など含めて全てを新環境に移植する場合は、以下記事の退避内容をご確認いただき、ご準備ください。

2. 新環境にInterSystems製品をインストールする。

1. の手順でコピーしていた情報をもとに、新環境の構成を設定します。

3. 新環境のInterSystems製品を停止する。

4. 既存環境のデータベースファイル(.DAT)を新環境の対象となるデータベースディレクトリに配置する(置換する)

対象:ユーザ用DB

5. 新環境のInterSystems製品を開始する。

0
0 106
記事 Mihoko Iijima · 5月 20, 2024 5m read

InterSystems製品のバックアップ方法の中の3つの目方法は、「並行外部バックアップ」についてです。

この方法は外部バックアップと異なり、スナップショットなどのストレージ機能がない環境に向いている方法でオンラインバックアップよりも高速にバックアップできます。(古いバージョンのInterSystems製品でも利用できるバックアップ方法です。)

ただし、バックアップやリストア手順が複雑になります。

並行外部バックアップの利用を検討される際は、事前にリストア手順についてもテスト環境などでご確認いただくことを推奨します。

 

並行外部バックアップ概要

データベースファイル(.DAT)を通常のコピーコマンドなどで退避します。

データベースファイルのサイズによってはコピー時間が長くなります。外部バックアップの方法を利用するとライトデーモン凍結時間のタイムアウトを迎えてしまうため、バックアップを正しく完了できません。

そのため並行外部バックアップでは、ライトデーモンの凍結を行わずデータベースのダーティコピーを行う方法を採用しています。

ダーティコピーのバックアップファイルだけでは不完全であるため、最後にオンラインバックアップの差分バックアップを行うことで完全なバックアップを取得します。

最後の手順に差分バックアップを行うため、オンラインバックアップと同様にデータベースリストを事前に作成する必要があります。

0
0 169
記事 Mihoko Iijima · 5月 16, 2024 27m read

この記事は、「インターシステムズ製品をバックアップする前に確認したいこと」に続く記事で、InterSystems製品のバックアップの手法の中の「オンラインバックアップ」の仕組みと、バックアップ・リストア手順について解説します。

オンラインバックアップは、InterSystems製品が用意するバックアップ機能を利用する方法で、バックアップ対象に設定した全データベースの使用済ブロックをバックアップする方法です。

InterSystems製品のデータベースには、サーバ側で記述したコード、テーブル定義/クラス定義、データ(レコード、永続オブジェクト、グローバル)が格納されていますので、これらすべてが1つのファイルにバックアップされます。

0
0 321
記事 Mihoko Iijima · 5月 16, 2024 26m read

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

この記事は、「インターシステムズ製品をバックアップする前に確認したいこと」に続く記事で、InterSystems製品のバックアップの手法の中の「外部バックアップ」の仕組みと、バックアップ・リストア手順について解説します。

まず、「外部バックアップ」とは、InterSystems製品の専用ルーチン使用せず、InterSystems製品以外のバックアップソリューションを使用してデータベースをバックアップする方法で、現時点の推奨されるバックアップ方法です。

詳細な説明、手順については、ドキュメント「外部バックアップ」をご参照ください。

外部バックアップでは、主に、論理ディスク・ボリュームの有効な "スナップショット" を迅速に作成するテクノロジと共に使用します。

例えば、

  • Windowsサーバの場合は、VSS(ボリューム・シャドウ・コピー・サービス)と組み合わせて利用する
  • AWSのEBS Snapshotと組み合わせて利用する

スナップショット・テクノロジが使用できないシステムであっても、後述する「特別な考慮」で対応できればご利用いただけます。

それでは早速、外部バックアップの前後で必要となるIRIS側の手続きと、バックアップとリストアについて確認していきましょう!

0
0 311
記事 Mihoko Iijima · 5月 16, 2024 9m read

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

この記事では、InterSystems製品のバックアップ方法(4種類)のご紹介と、バックアップを行う前に確認しておきたい内容について解説します。

また、この記事に続くシリーズ記事では、それぞれのバックアップの仕組みと操作例を交えたバックアップとリストア手順を解説していきます。

シリーズ記事の中で行っているバックアップ練習、リストア練習の内容については、インターシステムズの講師付きトレーニングコースの中でも取り入れている内容で、一人1環境の演習環境内で実際にお試しいただいています。

参加者の皆さんと一緒に演習を進めて行きますと、データベースリストアの後に行うジャーナルリストアについては、ユーティリティから出力される確認項目が多いため、皆さん慎重に確認されながらリストアの指示を入力されています。そのため、リストア開始前の手続きや準備に意外と時間がかかっています。(実行例

0
0 132
InterSystems公式 Megumi Kakechi · 5月 15, 2024 2m read

インターシステムズは、InterSystems IRIS データ・プラットフォーム、InterSystems IRIS for Health 、HealthShare Health Connect のバージョン 2024.1.0.267.2 をリリースしました。
 

このリリースには、Ubuntu 24.04 オペレーティング・システムのサポートが追加されています。 Ubuntu 24.04 には、Linux カーネル 6.8、セキュリティの改善、インストーラおよびユーザ・インタフェースの改善が含まれています。 InterSystems IRIS IntegratedML は、Ubuntu 24.04 ではまだご利用いただけません。
 

さらにこのリリースでは、すべてのプラットフォームで以下の2つの不具合が修正されています:

  • "NOT %INLIST" を使用した SQL クエリが不正な結果を返す問題を修正しました。以前、このエラーに関する警告 を発行しました。
  • 特定の状況で不完全なスタック・トレースが発生する問題を修正しました。


ソフトウェアの入手方法

0
0 87
InterSystems公式 Masahito Miura · 5月 2, 2024 1m read

警告:"NOT %INLIST" を使用した SQL クエリが結果を返さない

インターシステムズは、一部の SQL クエリが不正な結果を返す原因となる 3 つ
の不具合を修正しました。 影響を受けるクエリの詳細については、以下を参照し
てください。

この問題は、以下の製品のリストにあるバージョンに存在します:

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

同様に上記製品をベースとしたその他のインターシステムズ製品

影響を受けるバージョン:

  • 2021.1.3, 2021.1.4
  • 2022.1.3, 2022.1.4
  • 2023.1.0, 2023.1.1, 2023.1.2, 2023.1.3
  • 2024.1.0

以下の条件を満たすクエリで、誤った結果を返す可能性があります:
    WHERE 節に NOT %INLIST が含まれている
    そのリストに NULL 値がある

この不具合の修正は DP-430793 で解決します。この修正は、2022.1.5、2023.1.4、2024.1.1
以降のすべてのバージョンに含まれる予定です。修正はアドホックによる配布でも可能です。

0
0 120
InterSystems公式 Ayumu Tanaka · 4月 30, 2024

インターシステムズは、InterSystems IRIS、InterSystems IRIS for Health、HealthShare Health Connect のメンテナンスバージョン 2022.1.5 および 2023.1.4 をリリースしました。

【2022.1.5】

2022.1.x に対するバグフィックスを提供しています。詳細な情報は、以下のページをご参照ください(すべて英語版です)

InterSystems IRIS
InterSystems IRIS for Health
HealthShare Health Connect 

【2023.1.4】

2023.1.x に対するバグフィックスを提供しています。詳細な情報は、以下のページをご参照ください(すべて英語版です)

InterSystems IRIS
InterSystems IRIS for Health
HealthShare Health Connect 

【キットのご案内】

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

0
0 98