プロダクション・ジェネレータ
プロダクション・ジェネレータを使用すると、CSV ファイルの HL7 インタフェース・ルートをすべて入力して、各ノードに必要なすべてのコンポーネント (サービス、ルータ、ルール、変換、およびオペレーション) が含まれるスケルトンの相互運用プロダクションを生成できます。プロダクションが生成された後に、まだニーズに合うようにプロダクションを微調整する必要はありますが、プロダクション・ジェネレータを使用すると初期の実装が迅速化されます。また、プロダクション・ジェネレータを使用して既存のプロダクションを更新することもできます。
プロダクション・ジェネレータは、CSV ファイルを使用してプロダクション・コンポーネントを作成する InterSystems ターミナルのユーティリティです。コンマまたはセミコロンで区切られたファイルを使用できますが、両方のファイルで同じ区切り文字を使用する必要があります。必要な CSV ファイルは以下のとおりです。
プロダクション・ジェネレータによってプロダクションに自動的に追加されるビジネス・ホスト Ens.Activity.Operation.Local は、アクティビティ・モニタリングのために使用され、この機能が必要ない場合は削除できます。
プロダクション・ジェネレータの実行
プロダクション・ジェネレータを実行するには、以下の手順に従います。
-
InterSystems ターミナルを開きます。
-
set $namespace="namespace" と入力して、プロダクションを作成するネームスペースに移動します。
-
以下のように入力します。
set status = ##class(EnsLib.InteropTools.HL7.ProductionGenerator).Load("configuration.csv","items.csv",.out)
引数は以下のとおりです。
-
configuration.csv は、構成ファイルのパスとファイル名です。
-
items.csv は、項目ファイルのパスとファイル名です。
-
out は、プロダクション・ジェネレータによってレポートされるデータの問題を収集します。
-
-
エラーをチェックするには、以下のように入力します。
write status
結果は 1 になります。
簡単なプロダクションの生成に使用できるサンプル CSV ファイルは、"CSV ファイルの例" を参照してください。
構成ファイル
構成ファイルは、生成されるプロダクションに属するコンポーネント (ビジネス・サービスや変換など) の名前付け規約を定義します。コンポーネント名は、リテラル値とプレースホルダの組み合わせから構築されます。プレースホルダの構文は { } です。プレースホルダには、プロダクション・ジェネレータによって以下の 3 つの場所からの値が入力されます。
-
構成ファイル内の他のレコード。
-
項目 CSV ファイルからの値。項目 CSV ファイルからの値をプレースホルダに入力するには、値が含まれる列名を指定します。例えば、項目ファイルに BusinessServiceName という名前の列があり、その列の最初のレコードに SourceA が指定されているとします。構成ファイルの ServiceName キーの値が {BusinessServiceName} である場合、SourceA という名前のサービスがプロダクション・ジェネレータによって作成されます。項目ファイルの BusinessServiceName 列に、値 SourceB が入った 2 つ目のレコードがある場合、SourceB という名前の別のサービスが作成されます。
-
プロダクション・ジェネレータ・ユーティリティを実行するネームスペース。プロダクション・ジェネレータを MyArea ネームスペースで実行する場合、{Namespace} プレースホルダを使用するすべてのコンポーネントの名前に MyArea が含まれます。
以下に、必要なレコードがすべて含まれる構成ファイルの例を示します。Key、Value、および Description が含まれる最初のレコードは必須です。この例では、{BusinessServiceName} は項目ファイルの列から取得され、{Namespace} は、プロダクション・ジェネレータ・ユーティリティを実行したネームスペースから取得されます。
キー | 値 | 説明 |
---|---|---|
ProductionClassName | MyBasePackage.MyProduction | 生成されるプロダクションの名前。ここでは MyBasePackage.MyProduction になります。 |
ServiceName | {BusinessServiceName} | サービスの名前付け規約を定義します。 |
RouterName | {BusinessServiceName}Router | ルータ・プロセスの名前付け規約を定義します。 |
OperationName | {BusinessOperationName} | オペレーションの名前付け規約を定義します。 |
RuleName | {BasePackage}.{Namespace}.Rules.{BusinessServiceName}Rule | ルールの名前付け規約を定義します。 |
TransformationName | {BasePackage}.{Namespace}.Transforms.{BusinessServiceName}Transform | 変換の名前付け規約を定義します。 |
これらの必須のレコードのほかに、以下のオプションのレコードを構成ファイルに追加することができます。
キー | 説明 |
---|---|
ConstrainRule | 既定値は 1 です。つまり、ルールの定義で、constraint フィールドによって "source" がビジネス・サービスの名前に設定されることを意味します。他の制約は設定されません。0 に設定すると、ルールの constraint フィールドは空のままです。 |
Override_componentID:setting |
componentID:setting に、項目ファイルの指定した列からの値を入力します。例えば、Key が Override_S:H:MessageSchemaCategory、Value が {SourceDocVersion} の場合、[メッセージ・スキーマ・カテゴリ] 設定は、項目ファイルの SourceDocVersion 列の値に設定されます。これにより、この設定の値を常に既存の列と共有する場合は、構成ファイルに列を追加しなくても済みます。 または、Value 列に固定値を指定できます。これは、項目ファイルに componentID:setting という名前の列を追加して、その列のすべてのレコードに同じ固定値を入力することと同じです。 構文 componentID:setting の詳細は、"コンポーネント設定の指定" を参照してください。 |
構成ファイルの他の値に名前を付ける目的のためだけに、構成ファイルに行を定義することもできます。これらの場合、キーには任意のユーザ定義文字列を指定できます。例えば、構成ファイルに以下が含まれているとします。
キー | 値 | 説明 |
---|---|---|
EnvironmentType | Test | ProductionClassName の値を入力するために使用されるオプションのレコード。 |
ProductionClassName | MyProduction.{EnvironmentType} | 生成されるプロダクションの名前。ここでは MyProduction.Test になります。 |
項目ファイル
項目 CSV ファイルの各レコードは、生成されるプロダクションのインタフェース・ルートに対応しており、どのコンポーネントをその属性で作成するかを決定します。複数のルートで同じコンポーネントを使用する場合は、1 つのコンポーネントが作成されます。例えば、同じビジネス・サービスが複数のルートに属する場合、プロダクションでは 1 つのビジネス・サービスのみが作成されます。
項目 CSV ファイル内の列の順序は、プロダクション・ジェネレータの動作には影響しません。各列は、以下のいずれかを実行します。
-
構成 CSV ファイルのプレースホルダの値を提供する。これらの列名に特殊文字や句読点文字を使用することはできません。
コンポーネント設定の指定
項目ファイルを使用して、コンポーネントの設定の初期値を指定できます。ほとんどの設定は、列名に componentID:settingName という特殊な構文を使用して指定します。例えば、オペレーションの [有効] 設定は、列名 O:Enabled で指定します。componentID は、以下のいずれかにできます。
ComponentID | コンポーネント |
---|---|
S: | ビジネス・サービス |
S:A: | サービス・アダプタ |
S:H: | サービス・ホスト |
O: | ビジネス・オペレーション |
O:A: | オペレーション・アダプタ |
O:H: | オペレーション・ホスト |
P: | ルータ・ビジネス・プロセス |
R: | ルール |
T: | 変換 |
settingName は、定義するコンポーネント設定の名前です。正しい名前は、以下の 2 つの方法で取得できます。
-
この設定が定義されたプロダクションが既にある場合は、そのプロダクション・クラスをスタジオまたは Atelier で開いて、設定名を検索します。“ホスト” または “アダプタ” のどちらを指定する必要があるのか、あるいはどちらも指定する必要がないのかを確認できます。
-
また、管理ポータルでダミー・プロダクションを作成してコンポーネントを追加することもできます。その後、右側のパネルの設定に移動し、システムの既定の設定のアイコンをクリックして、名前とホスト/アダプタを表示します。英語版以外のシステムを使用している場合は、マウスでローカル名をポイントすると、英語の設定名を表示できます。リストされるのはホストとアダプタの値だけです。
複数の値を指定できる設定の場合は、レコード内の値をコンマで区切ります。その際、スペースは使用しません。例えば、新しいサービスの [カテゴリ] 設定を Test1 および Test2 に設定するには、項目ファイルの S:Category 列に Test1,Test2 と指定します。区切り文字としてコンマを使用して、テキスト・エディタで CSV ファイルを手動で編集する場合は、"Test1,Test2" と指定します。
設定は以下のいずれかで定義されます。
-
コンポーネントのクラス定義
-
コンポーネントのアダプタ・クラス定義
-
これらのクラス定義のスーパークラス
-
クラス Ens.Config.ItemOpens in a new tab (例えば、[有効] 設定または [プール・サイズ] 設定)
HL7 メッセージ設定
ソースおよびターゲットの HL7 メッセージの特性を定義する設定では、componentID:settingName の構文は使用されません。代わりに、SourceType、SourceSchema、TargetType、および TargetSchema の各列を使用して、ソースおよびターゲットの HL7 メッセージのタイプ (例えば、ADT_A01) とスキーマ (例えば、2.7.1) を指定することができます。
コンポーネントのタイプの指定
項目ファイルには、プロダクション・ジェネレータによって作成されるビジネス・サービスとビジネス・オペレーションのタイプを指定する、列 ServiceType および OperationType が含まれる必要があります。ServiceType および OperationType で指定できる値は、TCP、File、FTP、HTTP、および SOAP です。サービスまたはオペレーションの基盤となるクラスは、ServiceType または OperationType で指定された値に基づきます。ServiceType 列または OperationType 列で MyProduct.MyFileService のような完全修飾クラス名を指定することにより、サービスまたはオペレーションに対してカスタム・クラスを指定できます。
オプションで、列 RouterType を項目ファイルに含め、これによってインタフェース・ルートに関連付けられたカスタム・ルータのクラス名を指定できます。この列がない場合は、クラス EnsLib.HL7.MsgRouter.RoutingEngine が使用されます。
特別な命令
事前定義済みの特定の列名は、プロダクション・ジェネレータに特殊な命令を提供します。この列のレコードのブーリアン値 (0 または 1) は、プロダクション・ジェネレータがその命令を実行する必要があるかどうかを示します。以下の列を使用して特殊な命令を指定できます。
列名 | 説明 |
---|---|
RuleDisabled | ルールを有効にする場合は値を 0 に設定し、ルールを無効にする場合は 1 に設定します。この命令がない場合、ルールは無効になります。 |
NoTransformation | プロダクション・ジェネレータが変換を生成しないようにする場合は、値を 1 に設定します。プロダクションを更新する場合、この列を追加しても既存の変換は削除されません。 |
T:Create | 既定では、変換の送信メッセージは受信メッセージのコピーです。T:Create 列を追加してその値を new に設定すると、変換の送信メッセージは空のオブジェクトになります。 |
CSV ファイルの例
以下に、連携して基本的なプロダクションを作成する構成 CSV ファイルと項目 CSV ファイルの例を示します。以下をコピーして CSV テキスト・ファイルに貼り付け、プロダクション・ジェネレータに入力することができます。また、ファイルをスプレッドシート・アプリケーションで開いて列を表示することもできます。プロダクション・ジェネレータでは、セミコロンも区切り文字として使用できます。
Key,Value,Description
BasePackage,MyPackage,Base package name of all classes
ProductionClassName,{BasePackage}.MyProduction,Definition of the production name
ServiceName,{ServiceName},Definition of service name
RouterName,{ServiceName}_Router,Definition of process name
OperationName,{OperationName},Definition of operation name
RuleName,{BasePackage}.{Namespace}.Rules.{ServiceName}Rule,Definition of rule name
TransformationName,{BasePackage}.{Namespace}.Transforms.{ServiceName}Transform,Definition of transformation name
ServiceName,OperationName,ServiceType,OperationType,O:Enabled,S:A:FileSpec,S:H:MessageSchemaCategory,O:H:FailureTimeout,P:Category,NoTransformation
Service1,Op1,File,File,0,*,2.7.1,60,Cat1,0
Service2,Op2,TCP,FTP,1,,2.7.1,,,1
既存のプロダクションの更新
CSV ファイルを変更した後でプロダクション・ジェネレータを再実行すると、管理ポータルを使用せずに、生成されたコンポーネントを修正できます。設定の値をクリアするには、設定の列のレコードで "" を使用します。以前に値に区切り文字が含まれていた列 (例えば、Categories 列の FTP,Hospital) があると、値をクリアしようとしたときに問題が発生します。この場合は、"""""" を使用して値をクリアする必要があります。NULL データが含まれるレコードでは、生成されるコンポーネントは変更されません。
重要なロジックが失われるのを防ぐため、特定の項目は、プロダクションを更新する際にプロダクション・ジェネレータによって削除されません。
-
項目ファイルから行を削除する場合、その行で定義されているサービスとオペレーションはプロダクションから削除されません。
-
変換が存在していて、ルールに割り当てられている場合、NoTransformation 列を項目ファイルに追加すると、変換は削除されません。
-
いったん作成されたルーティング・ルールは削除されません。