最近のアクセス:
ほかの GX オブジェクトでのデータプロバイダーの使用

データプロバイダーの出力形式は、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 (ソースのルートグループと同じ名前) に設定されています。
イメージ:5974.jpg

  • このデータプロバイダーが複数の顧客を返す場合、 [ Collection ] プロパティは [ True ] に、 [ Collection Name ] プロパティは customers (ソースのルートグループと同じ名前) に設定されています。
customers
{
  customer
  {
     CustomerId = 400
     CustomerName = 'Mike Hemingway'
  }
  customer
  {
     CustomerId = 401
     CustomerName = 'Jeniffer Faulkner'
  }
}
プロシージャーでは、Customer ビジネス コンポーネント データタイプとして &myCustomersBC 変数を定義し、 [ Collection ] プロパティを True に設定します (「Collection 変数」を参照してください)。
イメージ:5975.jpg

その後、オブジェクト内で次のとおり記述します:
&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 変数の定義および次の記述を回避します。
&Collection = Dataprovider(parameters list)

For &Var in &Collection
    &Var.SomeElement Endfor
For in コマンド」を参照してください。

ほかの例として、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  
 }
}



サブページ
Created: 14/09/18 03:16 by Admin Last update: 21/10/28 23:31 by Admin
カテゴリ
Powered by GXwiki 3.0