DICOM プロダクションに関するタスク
このページでは、特に DICOM プロダクションで一般的なプロダクション構成を実行する方法について説明します。
DICOM 二重ビジネス・サービスの追加
インターシステムズは、TCP 接続を介して外部ソースから DICOM ドキュメントを受け取る組み込みの二重ビジネス・ホストを提供しています。
DICOM 二重ビジネス・サービスをプロダクションに追加するには、以下の操作を行います。
-
そのプロダクションを管理ポータルの [Interoperability]→[構成する]→[プロダクション] ページで表示します。
-
[サービス] 列で、[追加] ボタン (プラス記号) をクリックします。
-
ダイアログ・ボックスで、[サービスクラス] リストから EnsLib.DICOM.Service.TCPOpens in a new tab クラスを選択します。
-
[サービス名] に、このビジネス・サービスの名前を入力します。この名前は、ビジネス・サービス間で一意である必要があります。ピリオドやスペースを使用しないでください。
デフォルトは、このサービスの基になるクラスの名前です。
-
[OK] をクリックします。
DICOM ファイル・ビジネス・サービスの追加
インターシステムズは、外部ファイルから DICOM ドキュメントを受け取る組み込みのファイル・ビジネス・サービスを提供しています。
DICOM ファイル・ビジネス・サービスをプロダクションに追加するには、以下の操作を行います。
-
そのプロダクションを管理ポータルの [プロダクション構成] ページで表示します。
-
[サービス] 列で、[追加] ボタン (プラス記号) をクリックします。
-
ダイアログ・ボックスで、[サービスクラス] リストから EnsLib.DICOM.Service.FileOpens in a new tab クラスを選択します。
-
[サービス名] に、このビジネス・サービスの名前を入力します。この名前は、ビジネス・サービス間で一意である必要があります。ピリオドやスペースを使用しないでください。
デフォルトは、このサービスの基になるクラスの名前です。
-
[OK] をクリックします。
-
必要に応じて、新しいビジネス・ホスト (EnsLib.DICOM.Service.FileOpens in a new tab) の UseStorageLocation 設定を有効にします。
ファイルを読み込んだ EnsLib.DICOM.Service.FileOpens in a new tab によって、ネームスペースのストリーム・ディレクトリ (mgr/name/stream など) に格納されるストリームが作成されます。UseStorageLocation が有効であれば、以降の DICOM データが格納される StorageLocation に、このストリームが格納されます。
DICOM ビジネス・プロセスの作成
DICOM プロダクションで使用する DICOM ビジネス・プロセスを構築するには、適切なロジックを実行するカスタム・ビジネス・プロセス・クラスを開発し、開発したカスタム・クラスを使用するビジネス・プロセスを作成して構成し、それをプロダクションに統合する必要があります。このトピックでそれぞれの手順について説明します。
DICOM ビジネス・プロセス・クラスの開発
DICOM の双方向性は、BPL を使用してビジネス・プロセスを記述できないことを意味します。ObjectScript を使用してカスタム・ビジネス・プロセスを作成する必要があります。
カスタム・クラスを作成する際には、すべてのユーザ定義 DICOM ビジネス・プロセスのスーパークラスである EnsLib.DICOM.ProcessOpens in a new tab を拡張します。詳細は、"クラス・リファレンス" でそのエントリを参照してください。クラスの作成の詳細は、"カスタム・ビジネス・プロセスの定義" を参照してください。
DICOM 通信の二重性により、ビジネス・プロセスは、プロセス外で何が行われているかを追跡する必要があります。プロセスの状態のコンテキスト変数を使用することでこれを実現し、イベント駆動型の有限状態機械の後にコードをモデル化することができます。
セッションについて
DICOM ビジネス・プロセスのベース・クラスには StopPrivateSession メソッドが含まれており、これを呼び出すことで各メッセージが専用のセッションを確実に取得できます。例えば、ビジネス・プロセスの OnMessage メソッドに以下のコードを含めることができます。
#; Send the reply back to the service ( don't want a response )
Set tSC=..SendRequestAsync(..ServiceDuplexName,tOutput,0)
f $$$ISERR(tSC) Quit
#; Stop the private session to ensure each message gets its own session
Set tSC=..StopPrivateSession(..ServiceDuplexName)
If $$$ISERR(tSC) Quit
ただし、このアプローチでは、プロダクションのビジネス・サービスが、プライベート・セッションの停止要求を処理する前に新しいドキュメントを受け取った場合、タイミングが非同期になる問題が発生する可能性があります。このシナリオが発生する可能性があり、DICOM 受信メッセージそれぞれに専用のプライベート・セッションが必要な場合は、解決策として、StopPrivateSession() 呼び出しをビジネス・プロセスではなくカスタム・ビジネス・サービスに配置します。例えば、次のコードでは、EnsLib.DICOM.Service.TCP のサブクラスを生成して、SendDocument メソッドをオーバーライドすることができます。
Method SendDocument(pRequest As EnsLib.DICOM.Document, Output pResponse As %Library.Persistent) As %Status
{
Set tSC = ##super(pRequest)
If $$$ISOK(tSC)
{ If ..%InPrivateSession Set tSC=..StopPrivateSession() }
Quit tSC
}
プライベート・セッションを停止するかどうかを判断する際は、1 つの要求に複数の応答があるかどうかを考慮することが重要です。例えば、複数の応答を予期する要求があり、その応答が高速に到着するために問題が起こる可能性がある場合は、処理がすべて終わるまで待ってからセッションを停止するのが適切です。これに対し、シンプルな 1 対 1 の操作 (単一の C-STORE とその応答など) がある場合は、各要求/応答を個別のプライベート・セッションに配置するのが適切です。
DICOM ビジネス・プロセスの追加
DICOM ビジネス・プロセスをプロダクションに追加するには、以下の操作を行います。
-
そのプロダクションを管理ポータルの [プロダクション構成] ページで表示します。
-
[プロセス] 列で、[追加] ボタン (プラス記号) をクリックします。
-
ダイアログ・ボックスで、[ビジネス・プロセス・クラス] リストからカスタム・クラスを選択します。
-
[プロセス名] に、このビジネス・プロセスの名前を入力します。この名前は、ビジネス・プロセス間で一意である必要があります。ピリオドやスペースを使用しないでください。
デフォルトは、このプロセスの基になるクラスの名前です。
-
[OK] をクリックします。
DICOM ビジネス・プロセスの統合
新しい DICOM ビジネス・プロセスをプロダクションに統合するには、その受信ドキュメントを受け取るビジネス・サービスとルーティング・ルール・セット (それらのドキュメントに基づいてそのアクションを決定するルール・セット) にビジネス・プロセスを関連付ける必要があります。これを行うには、以下を実行します。
構成ダイアグラムで DICOM ビジネス・サービスを選択します。[重複ターゲット構成名] フィールドに、DICOM ビジネス・プロセスの構成済みの名前を入力します。
DICOM 二重ビジネス・オペレーションの追加
インターシステムズは、TCP 接続を介して外部ソースから DICOM ドキュメント・メッセージを受け取る組み込みの二重ビジネス・ホストを提供しています。
DICOM ビジネス・オペレーションをプロダクションに追加するには、以下の操作を行います。
-
そのプロダクションを管理ポータルの [プロダクション構成] ページで表示します。
-
[オペレーション] 列で、[追加] ボタン (プラス記号) をクリックします。
-
ダイアログ・ボックスで、[オペレーションクラス] リストから EnsLib.DICOM.Operation.TCPOpens in a new tab クラスを選択します。
-
[オペレーション名] に、このビジネス・オペレーションの名前を入力します。この名前は、ビジネス・オペレーション間で一意である必要があります。ピリオドやスペースを使用しないでください。
デフォルトは、このオペレーションの基になるクラスの名前です。
-
[OK] をクリックします。
DICOM のユーザ ID クラスとバージョンの設定
インターシステムズの DICOM の実装は、UIC と VER という 2 つの項目の情報によって識別されます。独自の UIC や VER を構成できますが、そのためには、^Ens.Config("DICOM","UIC") ノードと ^Ens.Config("DICOM","VER") ノードをそれぞれ設定します。
ストレージ場所を制御するための DICOM プロダクションの構成
DICOM データはインターシステムズ・データベースには格納されず、代わりに外部ファイル・ストリームとして格納されるため、DICOM プロダクションを構成して、これらの外部ファイルに使用する場所を指定する必要があります。そのためには、プロダクションで StorageLocation というプロパティを定義します。DICOM のビジネス・サービス、ビジネス・プロセス、およびビジネス・オペレーションが機能するためには、このプロパティが定義されている必要があります。このプロパティでディレクトリを指定すると、そのディレクトリが DICOM データのストレージ場所として使用されます。このプロパティの値が空の文字列である場合は、DICOM データを格納するために既定の一時ディレクトリが使用されます。
Important:
DICOM コンポーネントをプロダクションに追加する場合、StorageLocation プロパティがそのプロダクションで定義されていることを確認する必要があります。StorageLocation プロパティが定義されていない場合は、DICOM データを作成しようとすると、DICOM コンポーネントでエラーが発生する可能性があります。空の文字列を指定してデフォルトの一時ディレクトリを使用するのではなく、DICOM データに使用するディレクトリを指定することをお勧めします。インターシステムズのインスタンスを再起動すると、既定の一時ディレクトリからデータが削除される場合があります。
また、既定では、ファイルを読み込んだ EnsLib.DICOM.Service.FileOpens in a new tab によってネームスペースのストリーム・ディレクトリ (mgr/name/stream など) に格納されるストリームが作成されます。これらのストリームを StorageLocation に格納するには、EnsLib.DICOM.Service.FileOpens in a new tab の UseStorageLocation 設定を有効にします。
StorageLocation プロパティはプロダクション定義で定義されています。このプロパティを新しいプロダクションに追加するには、次の手順に従います。
-
スタジオでプロダクション・クラスを編集します。
-
プロダクション・クラス定義で、プロダクション設定を定義する XDATA の後に次の行を挿入します。
Parameter SETTINGS = "ShutdownTimeout,UpdateTimeout,StorageLocation";
/// This is the storage location for the DICOM streams to be stored
Property StorageLocation As %String [ InitialExpression = "directory-location" ];
DICOM データをシステムで格納するディレクトリ (c:\InterSystems\DICOM など) で directory-location を置き換えてください。
-
プロダクション・クラスをコンパイルします。
-
管理ポータルでプロダクションを開きます。StorageLocation プロパティが [追加設定] セクションに表示されます。必要に応じて StorageLocation の値を設定します (または、既に説明したように InitialExpression で指定した値を保持します)。
Note:
EnsLib DICOM コンポーネントによって、次の呼び出しを使用してストレージ場所がチェックされます。
Set tStorageLocation=..GetProductionSettingValue("StorageLocation",.tSC)