カスタム・ビジネス・オペレーション
この章では、カスタム・ビジネス・オペレーションを構築する方法について説明します。また、SQL 送信アダプタ (EnsLib.SQL.OutboundAdapterOpens in a new tab) とプロダクション内でのその使用方法についても詳しく説明します。事前構築済みのビジネス・オペレーションを使用したい場合は、"SQL ビジネス・オペレーションの使用法" を参照してください。
デフォルトの動作
プロダクション内で、送信アダプタは、ユーザが作成および構成するビジネス・オペレーションに関連付けられます。このビジネス・オペレーションはプロダクション内からメッセージを受信し、メッセージ・タイプを調べ、適切なメソッドを実行します。このメソッドは、通常、関連するアダプタのメソッドを実行します。
SQL 送信アダプタ (EnsLib.SQL.OutboundAdapterOpens in a new tab) には、接続先となるデータ・ソースとそのデータ・ソースに必要なログイン詳細の指定に使用する設定が用意されています。また、以下のような一般的な SQL アクティビティを実行するメソッドも用意されています。
-
クエリの実行
-
ストアド・プロシージャの実行
-
挿入、更新、および削除の実行
アダプタを使用するビジネス・オペレーションの作成
EnsLib.SQL.OutBoundAdapter を使用するビジネス・オペレーションを作成するために、新しいビジネス・オペレーション・クラスを作成します。後で、それをプロダクションに追加して、構成します。
存在しなければ、適切なメッセージ・クラスを作成する必要もあります。"プロダクションの開発" の “メッセージの定義” を参照してください。
ビジネス・オペレーション・クラスの基本要件を以下に列挙します。
-
ビジネス・オペレーション・クラスは、Ens.BusinessOperationOpens in a new tab を拡張するものでなければなりません。
-
ADAPTER パラメータは EnsLib.SQL.OutboundAdapterOpens in a new tab である必要があります。
-
INVOCATION パラメータは、使用する呼び出しスタイルを指定する必要があります。以下のいずれかを使用します。
-
Queue は、メッセージが 1 つのバックグラウンド・ジョブ内で作成され、元のジョブが解放された段階でキューに配置されます。その後、メッセージが処理された段階で、別のバックグラウンド・ジョブがそのタスクに割り当てられます。これは最も一般的な設定です。
-
InProc は、メッセージが、作成されたジョブと同じジョブで生成、送信、および配信されることを意味します。このジョブは、メッセージが対象に配信されるまで送信者のプールに解放されません。これは特殊なケースのみに該当します。
-
-
クラスでは、少なくとも 1 つのエントリを含むメッセージ・マップを定義します。メッセージ・マップは、以下の構造を持つ XData ブロック・エントリです。
XData MessageMap { <MapItems> <MapItem MessageType="messageclass"> <Method>methodname</Method> </MapItem> ... </MapItems> }
-
クラスでは、メッセージ・マップ内で名前が付けられたすべてのメソッドを定義します。これらのメソッドは、メッセージ・ハンドラと呼ばれます。通常、これらのメソッドは、ビジネス・オペレーションの Adapter プロパティのプロパティおよびメソッドを参照します。
-
その他のオプションと一般情報は、"プロダクションの開発" の “ビジネス・オペレーション・クラスの定義” を参照してください。
以下の例は、必要となる一般的な構造を示しています。
Class ESQL.NewOperation1 Extends Ens.BusinessOperation
{
Parameter ADAPTER = "EnsLib.SQL.OutboundAdapter";
Parameter INVOCATION = "Queue";
Method SampleCall(pRequest As Ens.Request, Output pResponse As Ens.Response) As %Status
{
Quit $$$ERROR($$$NotImplemented)
}
XData MessageMap
{
<MapItems>
<MapItem MessageType="Ens.Request">
<Method>SampleCall</Method>
</MapItem>
</MapItems>
}
}
スタジオには、上記のようなスタブの作成に使用できるウィザードが用意されています。このウィザードにアクセスするには、[ファイル] メニューで [新規作成] をクリックし、[プロダクション] タブをクリックします。ビジネス・オペレーションの作成を選択し、関連付ける送信アダプタとして EnsLib.SQL.OutboundAdapterOpens in a new tab を選択します。
SQL オペレーションを実行するメソッドの作成
EnsLib.SQL.OutboundAdapterOpens in a new tab で使用するビジネス・オペレーション・クラスを作成する場合の最大のタスクは、通常、メッセージ・ハンドラ、つまり、各種 SQL オペレーションを実行するメソッドの記述です。通常、これらのメソッドは、ビジネス・オペレーションの Adapter プロパティのプロパティおよびメソッドを参照します。以下に例を示します。
set tSC = ..Adapter.ExecuteUpdate(.numrows,sql)
メソッドは以下のようになります。
/// Insert into NewCustomer table
Method Insert(pReq As ESQL.request, Output pResp As ESQL.response1) As %Status
{
kill pResp
set pResp=$$$NULLOREF
set sql="insert into NewCustomer (Name,SSN,City,SourceID) values (?,?,?,?)"
//perform the Insert
set tSC = ..Adapter.ExecuteUpdate
(.nrows,sql,pReq.Name,pReq.SSN,pReq.City,pReq.CustomerID)
//create the response message
set pResp=##class(ESQL.response1).%New()
set pResp.AffectedRows=nrows
if 'tSC write " failed ",tSC quit tSC
quit 1
}
これらのメソッドを作成するには、EnsLib.SQL.OutboundAdapterOpens in a new tab クラスのメソッドとプロパティに精通している必要があります。これらのツールについては、“SQL のアダプタ・メソッドの作成” の章で詳しく説明します。
1 件のメッセージによる複数の SQL 文の処理
アダプタ構成は、ビジネス・オペレーションで受信したメッセージ 1 件について 1 つの SQL 文を実行する単純なケースを扱うように設計されています。 指定した 1 つのメッセージで複数の SQL 文をビジネス・オペレーションで実行するには、OnMessage() メソッドで次のような形式を使用します。
OnMessage(..)
{
Set tStayConn=..Adapter.StayConnected
Set ..Adapter.StayConnected=-1
//... your ..Adapter SQL Operations here...
Set ..Adapter.StayConnected=tStayConn
If 'tStayConn&&..Adapter.Connected Do ..Adapter.Disconnect()
Quit tSC
}
ビジネス・オペレーションの追加と構成
ビジネス・オペレーションをプロダクションに追加するには、管理ポータルを使用して以下の操作を行います。
-
カスタム・ビジネス・オペレーション・クラスのインスタンスをプロダクションに追加します。
-
ビジネス・オペレーションを有効化します。
-
特定の外部データ・ソースと通信を行うためのアダプタを構成します。これらの構成設定の詳細は、"SQL ビジネス・オペレーションの使用法" を参照してください。
-
プロダクションを実行します。