ビジネスコンポーネントを Web サービスとして公開し、データベースに対する挿入、変更および削除の操作を実行できるようにするには、次の手順を実行します:
1)
トランザクションの
[ Business Component ] プロパティを True に設定します。
2) トランザクションの
[ Expose as Web Service ] プロパティを True に設定します。
この 2 つのプロパティの設定が完了したら、トランザクションを生成してコンパイルする必要があります。これにより、トランザクションに関連付けられた Web サービスが生成され、(生成された各 Web オブジェクトが転送されるタイミングで) 対応するディレクトリーに転送されます。
生成されるプログラムの名前は次のようになります:
- .NET 環境の場合: <トランザクション名>_bc (customer_bc)
-
Java 環境の場合: <トランザクション名>_bc_ws (customer_bc_ws)
ブラウザーで URL に
WSDL パラメーター(http://localhost/BillingSystem.NetEnvironment/customer_bc.aspx?wsdl) を入力すると、Web サービスについての説明となるすべての情報 (ロケーション、メソッド、パラメーターなど) を確認できます。
用意されているメソッドは次のとおりです:
- LoadKeySvc
- SaveSvc
- CheckSvc
- DeleteSvc
これらのメソッドは、名前が示しているとおり、ビジネスコンポーネントのメソッドである
Load、
Save、
Check、および
Delete と同じ機能を提供します。
重要: ここで紹介する Web サービスのメソッドと、一般的なビジネスコンポーネントのメソッドの唯一の違いは、Web サービスのメソッドでは、操作を実行した後にコミットが実行される点です。
公開された Web サービスを別の
ナレッジベースで使用するとします。対象のナレッジベースで、GeneXus メニューバーから、
[ ツール ] > [ アプリケーションの統合 ] > [ WSDL インポート ] の順に選択します。
これで、
WSDL インポートウィザードが開きます:
[ WSDL ロケーション ] ファイルフィールドに、Web サービスの公開先の URL および WSDL パラメーター (http://localhost/BillingSystem.NetEnvironment/customer_bc.aspx?wsdl) を入力する必要があります。
WSDL インポートウィザードの 2 番目のページには、Web サービスに関連する情報 (名前、プロパティ、メソッド、パラメーターなど) をすべて格納するためにナレッジベースに作成される、
外部オブジェクト (EO) の名前を入力する必要があります。また、ナレッジベースにはトランザクション構造に類似した
SDT が作成されます (SDT には、各項目属性のプロパティと、各項目属性の古い値 (名前: AttributeName_Z) に対応するプロパティがあります)。複数レベルのトランザクションの場合、第 1 レベルの SDT に加えて、ネストされたコレクションが定義されます。
そのため、外部オブジェクトに基づいて変数を定義して、Web サービスのメソッドを呼び出すことができます。
1) 顧客を挿入するためのリモートサービスの呼び出し
&ws.LoadKeySvc(10,&Customer)
&Customer.CustomerName = 'Susan Parker'
&ws.SaveSvc(&Customer)
入力値の説明:
&ws
ナレッジベースに作成された外部オブジェクトに基づいています。
&Customer
WSDL の使用時に WSDL インポートウィザードで作成された SDT に基づいています。
2) 請求書を挿入するためのリモートサービスの呼び出し
&Invoice.InvoiceId = 111
&Invoice.CustomerId = 1
&Invoiceline.Mode = 'INS'
&Invoiceline = new()
&Invoiceline.ProductId = 1
&Invoiceline.InvoiceLineQuantity = 10
&Invoice.InvoiceLevel.Add(&Invoiceline)
&Invoiceline = new()
&Invoiceline.ProductId = 2
&Invoiceline.InvoiceLineQuantity = 20
&Invoice.InvoiceLevel.Add(&Invoiceline)
&ws.SaveSvc(&Invoice)
入力値の説明:
&Invoice および
InvoiceLine
WSDL の使用時に WSDL インポートウィザードで作成された SDT に基づいています。
&ws
ナレッジベースに作成された外部オブジェクトに基づいています。
3) 請求書の行を更新するためのリモートサービスの呼び出し
&Invoice.InvoiceId = 111
&ws.LoadKeySvc(&Invoice.InvoiceId,&Invoice)
For &Invoiceline in &Invoice.Level
IF &Invoiceline.ProductId = 1
&Invoiceline.InvoiceLineQuantity = 5
&InvoiceLine.Modified = 1
Endif
endfor
&ws.SaveSvc(&Invoice)
入力値の説明:
&Invoice および InvoiceLine
WSDL の使用時に WSDL インポートウィザードで作成された SDT に基づいています。
&ws
ナレッジベースに作成された外部オブジェクトに基づいています。