データプロバイダーの出力形式は、SDT または BC です (出力後の任意のタイミングで XML などのほかの形式に変換できます)。対応している出力形式は SDT および BC のみです。また、単純な SDT または BC だけでなく、SDT や BC のコレクションを返すこともできます。
ほかの GeneXus オブジェクトでデータプロバイダーを使用することは、呼び出し元に SDT または BC を返すプロシージャーを使用することと似ています。
RSS フィードを実行する簡単な方法は、データプロバイダーを呼び出してデータを取り込み、RSS フォーマットの XML を返すプロシージャーを定義することです。
&rss = rss() // RSS() はデータをロードするデータプロバイダー
&response.addstring(&rss.toxml(true))
注:
- プロシージャーは、呼び出しプロトコルを HTTP に設定したメインプロシージャーとして定義する必要があります。
- &rss は RSS SDT タイプです。
- &response は HTTPResponse タイプです。
通常、データプロバイダーは SDT 形式で出力しますが、ビジネスコンポーネントを出力するほうが便利な場合があります。たとえば、次のデータプロバイダー 'CustomersProvider' の出力はビジネスコンポーネントである Customer であり、 [ Collection ] プロパティは [ True ] に、 [ Collection Name ] プロパティは customers (ソースのルートグループと同じ名前) に設定されています。

注
- このデータプロバイダーが複数の顧客を返す場合、 [ Collection ] プロパティは [ True ] に、 [ Collection Name ] プロパティは customers (ソースのルートグループと同じ名前) に設定されています。
customers
{
customer
{
CustomerId = 400
CustomerName = 'Mike Hemingway'
}
customer
{
CustomerId = 401
CustomerName = 'Jeniffer Faulkner'
}
}
プロシージャーでは、Customer ビジネス コンポーネント データタイプとして &myCustomersBC 変数を定義し、 [ Collection ] プロパティを True に設定します (「Collection 変数」を参照してください)。
 その後、オブジェクト内で次のとおり記述します:
&myCustomersBC = CustomersProvider()
For &customer in &myCustomersBC
&customer.Save()
endfor
つまり、CustomerProvider データプロバイダーが返す 2 アイテムのコレクションをスキャンし、(Customer ビジネス コンポーネント データ タイプの) &customer 変数で各アイテムを毎回ロードし、新しいレコードをデータベースの顧客テーブルに取り込んで保存します。
重要: データプロバイダーは BC の関連付けられた構造のみにデータを提供します (プロシージャーでは手動)。この結果、BC は INSERT モードになります。つまり、データプロバイダーは LOAD の操作ができません。すなわち、Save() メソッドは、データプロバイダーが返すビジネスコンポーネントに適用されると、データベース内で新しいレコードの作成を試みます。
&myCustomersBC 変数を定義する必要はありません。次のとおり記述します (「For in コマンド」を参照してください)。
For &customer in CustomersProvider()
&customer.Save()
endfor
データプロバイダーはパラメーターの受け取りにも対応していますが、パラメーターはすべて IN のパラメーターです。
例:
&CustomerId = 1
&Tabs = Tabs(&CustomerId)
Tabs という名前のデータプロバイダーの [ Output ] プロパティに関連付けられた SDT である、TABS タイプの &Tabs 変数を定義するとします。
次のとおり記述します:
For &Var in Dataprovider(parameters list)
&Var.SomeElement
Endfor
&Collection = Dataprovider(parameters list)
For &Var in &Collection
&Var.SomeElement Endfor
ほかの例として、SDT でトランザクション構造のツリーを表示します。
TreeNodeCollection
{
TreeNode
where CategoryParentId = &CategoryId when not &CategoryId.IsEmpty()
{
Id = CategoryId.ToString()
Name = CategoryName
Nodes = CategoriesDP(CategoryId)
}
TreeNode
where CategoryId = &CategoryId
{
Id = CategoryItemId.ToString()
Name = CategoryItemName
}
}
|