クエリの追加
クエリを実行するメソッドを Web サービス・クラスに追加することができます。Caché には、.NET クライアントが Caché Web サービスを使用するときのために、SOAP を使用してクエリ結果を返すクラス %XML.DataSetOpens in a new tab が用意されています。%XML.DataSetOpens in a new tab は、%Library.ResultSetOpens in a new tab の SOAP 対応のサブクラスです。.NET クライアント・アプリケーションでは、返された SOAP メッセージは自動的に .NET DataSet オブジェクトに変換されます。
%XML.DataSetOpens in a new tab を使用するには、以下の手順を実行します。
-
Web メソッドの返りタイプとして %XML.DataSetOpens in a new tab を指定します。
-
新しい %XML.DataSetOpens in a new tab インスタンスをインスタンス化します。
-
Prepare を使用して、実行する SQL を指定します。SQL は、コンパイル時または実行時に決定することができます。
-
SetArgs を使用して、クエリに必要なパラメータを設定します。
-
メソッドから %XML.DataSetOpens in a new tab インスタンスを返します。Execute は呼び出されないことに注意してください。
次のメソッドでは、以下の基準を満たす各 PhoneNumber インスタンスの PhoneNumberType 値と Number 値が返されます。
-
関連する Contact インスタンスに、クエリ・パラメータで指定された id 値がある。
-
PhoneNumberType に値が指定されている。
例えば、このクエリを使用して、Contact 1 の "Business" 電話番号に関するすべての電話番号情報を取得することができます。
次の Web メソッドを SOAPTutorial.SOAPService クラスに追加します。クラスをリコンパイルします。
Method RunPhoneNumberQuery(contactId As %String,
phoneNumberType As %String)
As %XML.DataSet [ WebMethod ]
{
set query = ##class(%XML.DataSet).%New("%DynamicQuery:SQL")
set sql = "SELECT p.PhoneNumberType, p.Number FROM SOAPTutorial.Contact"
set sql = sql_" as c inner join SOAPTutorial.PhoneNumber as p"
set sql = sql_" on p.Contact=c.ID WHERE c.ID=? AND p.PhoneNumberType=?"
do query.Prepare(sql)
do query.SetArgs(contactId, phoneNumberType)
quit query
}