Creating Service Requests
Platform 4.5+が必要
サービスリクエストの作成
アプリケーションのクライアント UI ファイルでserviceRequestまたはembeddedserviecRequestタグを使用して、Nexaweb の SQL または Web サービスタイプのデータサービスを使用したエンタープライズデータにアクセスします。
次の表に、これらの各タグについての簡単な説明を示します。
タグ | 説明 | 使用するタイミング |
serviceRequest | サーバーサイドで指定したdataRequestDefintion を使用してエンタープライズ データにアクセスします。 |
|
embeddedServiceRequest | SQL 文または Web サービスリクエストをクライアント UI ファイルでインライン指定してエンタープライズ データにアクセスします。 |
|
serviceRequest
serviceRequestタグには、次の表に示す属性および子要素が含まれています。
要素 | タイプ | 説明 | 必須/省略可能 |
dataRequestId | 属性 | エンタープライズ データへのアクセスに使用する、nexaweb-data.xmlファイルで指定されたdataRequestDefinitionを識別するための ID を指定します。dataRequestDefinition のserviceResourceDefintionまたはserviceResourceReference で、データソースにアクセスする SQL 文または Web サービスタイプのリクエストの特定のシンタックスが指定または参照されます。 | 必須 |
id | 属性 | このリクエストを識別するための ID を指定します。 | 必須 |
onFailure | 属性 | リクエストが失敗したときに実行する MCO またはマクロを指定します。 | 省略可能 |
onSuccess | 属性 | リクエストが成功したときに実行する MCO またはマクロを指定します。 | 省略可能 |
target | 属性 | リクエストの完了を通知するオブジェクトを指定します。 | 省略可能 |
parameters | 子要素 | データソースのパラメータを指定します。 | 省略可能 |
例:
<serviceRequest dataRequestId="customerStateSearch" id="getCustomerByState1">
<parameters>
<parameter name="state">{0}</parameter>
<parameters>
</serviceRequest>
この例では、serviceRequest、getCustomerByState1によってnexaweb-data.xmlファイルで定義されたdataRequestDefintion、customerStateSearchが使用され、データソースからデータが取得されます。customerStateSearch には引数マッピングが定義され、データが取得される特定の状態の名前をgetCustomerByState1から渡せるようになっています。
embeddedserviceRequest
embeddedserviceRequestタグには、次の表に示す属性および子要素が含まれています。
要素 | タイプ | 説明 | 必須/省略可能 |
id | 属性 | このリクエストを識別するための ID を指定します。 | 必須 |
onFailure | 属性 | リクエストが失敗したときに実行する MCO またはマクロを指定します。 | 省略可能 |
onSuccess | 属性 | リクエストが成功したときに実行する MCO またはマクロを指定します。 | 省略可能 |
target | 属性 | リクエストの完了を通知するオブジェクトを指定します。 | 省略可能 |
SQL 文または Web サービスリクエスト | 該当なし | SQL 文または Web サービスの REST または SOAP リクエストのシンタックスを指定します。 | 必須 |
例:
<embeddedServiceRequest id="getCustomerByState2">
<sqlSelect connectionId="corporate_db" xmlns="http://nexaweb.com/service/data/sql">
<table>customer_table</table>
<where>state = {0}</where>
</sqlSelect>
</embeddedServiceRequest>
この例では、embededServiceRequest、getCustomerByState2によって nexaweb-sql 名前空間で定義されたconnectionID、corporate_dbが使用され、指定された値に状態が一致する顧客テーブルからデータを取得する select 文が実行されます。
serviceRequest の拡張例
次の例では、次の条件で serviceRequestを使用する方法を示します。
serviceRequestでdataRequestDefinitionを参照する (nexaweb-data.xmlファイル内)
dataRequestDefinitionに REST リクエストを参照するserviceResourceReferenceを含める (nexaweb-webservice.xmlファイル内)
クライアント UI
<data:documentDataSource xmlns:data="http://nexaweb.com/data" id="SearchResultsDS"/>
<dr:serviceRequest id="FlickSrch" target="dataSource://SearchResultsDS"
dataRequestId="FlickrSearchRest" xmlns:dr="http://nexaweb.com/service/data">
<parameters>
<parameter>{0}</parameter>
</parameters>
</dr:serviceRequest>
クライアント UI には、oncommand イベント (示されていません) の結果として UI にデータを入力するための dataSource であるSearchResultsDSが含まれます。データサービスの serviceRequest であるFlickrSrchを使用して、SearchResultsDSデータソースで外部ソースからデータが取得されます。serviceRequest、FlickrSrch で、渡された引数によってフィルタ処理されたデータがnexaweb.data.xmlファイルの http://nexaweb.com/service/data 名前空間で定義された外部データソースFlickrSearchRestから取得されます。
nexaweb-data.xml
<dataRequestDefinition id="FlickrSearchRest">
<serviceResourceReference dataServiceId="WebService" serviceResourceId="searchFlickrParam" />
nexaweb-data.xmlファイルには、nexweb-webservice.xmlファイルで定義された WebService タイプのデータサービスリクエストsearchFlickrParamを参照するdataRequestDefinition、FlickrSearchRestが定義されています。
nexaweb-webservice.xml
<webService xmlns="http://nexaweb.com/service/data/webservice">
- <webServiceRequests>
- <restRequest id="searchFlickrParam">
<url>http://www.flickr.com/services/rest</url>
- <urlParameters>
<urlParameter name="method">flickr.photos.search</urlParameter>
<urlParameter name="api_key">ffdbbd159bdde999cc638c280377a8d1</urlParameter>
<urlParameter name="text">{0}</urlParameter>
<urlParameter name="per_page">25</urlParameter>
</urlParameters>
</restRequest>
nexaweb-webservice.xml ファイルでは、nexaweb-data.xmlファイルのdataRequestDefinition、FlickrSearchRest が restRequest、searchFlickrParamを参照しています。searchFlickrParam によって、URL http://www.flickr.com/services/rest に対して GET が呼び出されます。その際、method=flickr.photos.search; api_key=ffdbbd159bdde999cc638c280377a8d1; text=ユーザー指定の値; per_page=25 という追加パラメータが指定されます。
まとめ
このクライアント UI ファイルには次のものも含まれます。
<button text="Search Flickr"
onCommand="serviceRequest://FlickSrch.execute(searchtext.text)"/>
この onCommand イベントが発生すると、UI によってFlickSrch serviceRequest が実行されます。serviceRequest が実行されると、データがSearchResultsDS dataSource に提供されます。これを使用して、次のコマンドで UI にデータが表示されます。
<data:iterator xmlns:data="http://nexaweb.com/data" dataSource="SearchResultsDS"
name="rowIterator" select="//rsp/photos/photo" type="ONE_WAY">
<row>
<cell text="{*('@title')}"/>
<link alignHorizontal="right"
onCommand="{bind('select=.;dataSource=rowIterator;formatter=linkFormatter')
}" text="View Picture"/>
</row>
</data:iterator>