Ensemble メッセージの定義
この章では、Ensemble メッセージ・ボディを定義するクラスの定義方法について説明します。この章は以下の節で構成されています。
概要
メッセージ・ボディは、任意の永続オブジェクトにすることができます。
実際には、Ens.RequestOpens in a new tab または Ens.ResponseOpens in a new tab のサブクラスを作成してプロパティを追加する方法が一般的です。これにより、標準のメッセージ・ボディが作成されます。これらのクラスを使用すれば、管理ポータルでメッセージの内容を表示するためのさまざまな組み込み機能に簡単にアクセスできます。これらの機能により、開発者や管理者がプロダクション実行時のエラーを見つけるのに役立ちます。特に、プロダクションでメッセージの内容を使用して送信先を決定する場合には有効です。
HL7 や X12 などの Electronic Data Interchange (EDI) 形式の一部の電子ドキュメントには、長さがまちまちで、複雑なデータが含まれています。この場合は、代替クラスの Ensemble 仮想ドキュメントを表すクラスを使用する方が適しています。またこの場合、メッセージの内容を含む一連のプロパティがメッセージ・ボディに含まれていません。詳細は、"Ensemble 仮想ドキュメント" を参照してください。
このドキュメントのほとんどの例では、標準のメッセージ本文と比較的少数のメッセージ・プロパティが想定されています。
単純なメッセージ・ボディ・クラスの作成
メッセージ・クラス (メッセージ・ボディとして使用する) を作成するには、次のようなクラスを作成します。
-
Ens.RequestOpens in a new tab と Ens.ResponseOpens in a new tab のどちらかを拡張する。
-
必要に応じて、メッセージ内で転送すべきデータの要素を表すプロパティを含む。
簡単な例を以下に示します。
Class Demo.Loan.Msg.CreditRatingResponse Extends Ens.Response
{
Property TaxID As %String;
Property CreditRating As %Integer;
}
クラスにはメソッドを含めることもできます。以下に例を示します。
Class Demo.Loan.Msg.Application Extends Ens.Request{
Property Amount As %Integer;
Property Name As %String;
Property TaxID As %String;
Property Nationality As %String;
Property BusinessOperationType As %String;
Property Destination As %String;
Method RecordNumber() As %String
{
If ..%Id()="" Do ..%Save()
Quit ..%Id()
}
Method GetRecordNumberText(pFormatAsHTML As %Boolean = 0) As %String
{
Set tCRLF=$s(pFormatAsHTML:"<br>",1:$c(13,10))
Set tText=""
Set tText=tText_"Your loan application has been received,"_tCRLF
Set tText=tText_"and is being processed."_tCRLF
Set tText=tText_"Your record number is "_..RecordNumber()_"."_tCRLF
Set tText=tText_"You'll receive a reply from FindRate"_tCRLF
Set tText=tText_"within 2 business days."_tCRLF
Set tText=tText_"Thank you for applying with FindRate."_tCRLF
Quit tText
}
}
Ens.RequestOpens in a new tab または Ens.ResponseOpens in a new tab を拡張しないメッセージ・クラスを作成する場合:
-
クラスの基本を永続クラスにします。
-
必要に応じて、%XML.AdaptorOpens in a new tab と、Ens.Util.RequestBodyMethodsOpens in a new tab または Ens.Util.ResponseBodyMethodsOpens in a new tab をスーパークラスとして含めます。%XML.AdaptorOpens in a new tab クラスは、管理ポータルにおける XML フォーム内のメッセージの表示をサポートしています。Ens.Util.RequestBodyMethodsOpens in a new tab クラスと Ens.Util.ResponseBodyMethodsOpens in a new tab クラスは、管理ポータル内のメッセージの表示と操作を追加サポートしています。
複雑なメッセージ・ボディ・クラスの作成
前の例では、メッセージ・ボディ・クラスに単純なプロパティしか含まれていませんでした。他のクラスを使用するプロパティを定義しなければならない場合があります。その場合は、メッセージ・ボディをパージするときにすべきことを慎重に検討する必要があります ("Ensemble の管理" を参照してください)。
メッセージ・ボディをパージすると、Ensemble では特定のメッセージ・ボディ・オブジェクトのみが削除されます。例えば、以下のメッセージ・クラスがあるとします。
Class MyApp.Messages.Person Extends Ens.Response
{
Property Name As %String;
Property MRN As %String;
Property BirthDate As %Date;
Property Address As MyApp.Messages.Address;
}
Address クラスは次のとおりです。
Class MyApp.Messages.Address Extends %Persistent
{
Property StreetAddress As %String;
Property City As %String;
Property State As %String;
Property ZIP As %String;
}
この場合は、メッセージ・ボディをパージすると、Ensemble によって MyApp.Messages.Person のインスタンスが削除されますが、MyApp.Messages.Address のインスタンスは削除されません。
メッセージ・ボディ・クラスで他のクラスがプロパティとして使用されている場合とアプリケーションで任意の参照オブジェクトもパージしなければならない場合は、以下のアプローチのいずれかを使用します。
-
参照クラスがシリアルであることを確認します。例えば、次のように、Address クラスを再定義します。
Class MyApp.Messages.Address Extends %SerialObject { ... }
この場合は、Address クラスのデータが Person クラスの一部として保存されます (そのため、自動的に同時にパージされます)。
-
適切なリレーションシップとしてプロパティを定義します。"Caché オブジェクトの使用法" の “リレーションシップ” の章で “リレーションシップの永続的な振る舞い” を参照してください。
-
メッセージ・クラスに削除トリガまたは %OnDelete() メソッドを追加して、参照クラス内の該当するレコードを削除できるようにします。
-
オプションで、%XML.AdaptorOpens in a new tab をスーパークラスとして含めることによって、参照クラス内で定義されたプロパティが管理ポータルに表示されるようにします。