最近のアクセス:
Data Provider オブジェクト

階層構造のデータをロードします (データベース、サービス、固定値などから)。

説明

アプリケーションでは、データ交換による相互作用の必要性がますます高まっています。旅行会社のアプリケーションでは、航空会社にチケットの発券を要求する際に、乗客の情報を送る必要があります。別のアプリケーションでは、Google のサービスを使用したり、アプリケーション内の構造化されたデータを交換する必要があります。
この場合、構造化されたデータを扱うことが不可欠です。そのようなデータの形式が 1 種類に固定されることはありません。XML は今日最も普及している形式ですが、転送を軽量化する JSON などその他の形式も登場しており、今後の予測は困難です。
データプロバイダーとは階層構造のデータの取得に使用される「宣言型のプロシージャー」のことを言い、非常に分かりやすく操作も簡単です。これは、出力という明確な意図があり、希望の出力形式が示されているためです。
イメージ:5973.jpg
データプロバイダーで実行できることはすべて、プロシージャーでも実行できます。これらはいずれも入力、変換、および出力を含むプロセスと考えることができます。異なる点は、通常のプロシージャーでは、変換言語を重視し、データプロバイダーでは、出力言語を重視することです。

たとえば、すべての顧客の読み込み (入力) と、これを使った XML ファイルの書き出し (出力) でプロセスが構成される場合、プロシージャーは次のようになります:
&XmlWriter.Open(...)
&XmlWriter.WriteStartElement('Clients')
For Each
   &XmlWriter.WriteStartElement('Client')
      &XmlWriter.WriteElement('Code', CustomerId.ToString())
      &XmlWriter.WriteElement('Name', CustomerName)
   &XmlWrite.EndElement()
Endfor
&XmlWriter.EndElement()
&XmlWriter.Close()
&XmlWriter は、GeneXus XMLWriter データタイプの変数です。
ここで、プロシージャーの出力をすぐに表示するのは、簡単ではありません。プロシージャーは、それを取得するために書き出されたコード内部に、分かりにくく埋め込まれています。
その代わり、データプロバイダーが明確に目的を示します。
Clients
{
     Client
     {
          Code = CustomerId
          Name = CustomerName
     }
}
ToXML メソッドでは、出力を相当する XML 形式に簡単に変換できます:
<Clients>
   <Client>
      <Code>1</Code>
      <Name>John Smith</Name>
   </Client>
   <Client>
      <Code>2</Code>
      <Name>Jennifer Lopez</Name>
   </Client>
   ...
</Clients>
イメージ:6020.jpg

GeneXus で階層構造を実装するには、Structured Data Type (SDT) オブジェクトを使用します。詳しくは、「実装例」を参照してください。
データプロバイダーは書き込みが容易で分かりやすいため、タスクによっては、通常のプロシージャーよりデータプロバイダーを使ったほうが簡単に行えるものがあります。テーマについてこのようなタスクは、構造化データを返すものです。次に例を示します。

定義を示す前に、例をいくつかあげます:

例 1: 本日分の請求書を発注額順に一覧にする

Invoices
{
  Date = today()
  Invoice Order InvoiceAmount
  Where InvoiceDate = today()
  { 
    Id = InvoiceId 
    CustomerId = CustomerId
    CustomerName = CustomerName
    Amount = InvoiceAmount
    Product
    { 
      Id = ProductId
      DetailQuantity = InvoiceDetailQuantity 
      DetailAmount = InvoiceDetailAmount 
    } 
  }
}
出力は、今日の日付の SDT となり、InvoiceDate = today() の請求書アイテムの集合です。

例 2: システム定数

ChartConstants
{
  ChartServer = 'http://www.gxchart.com/drawchart.asp'
  ChartParameters = '...'
}
同様の例には、TabbedView Web コンポーネントに必要な SDT タブのロードがあります。
LoadTabs parm(&CustomerId)
Tabs
{
  Tab
  {
    Code = 'General'
    WebComponent = link(WCustomerGeneral, &CustomerId)
  }
  Tab
  {
    Code = 'Invoices'
    WebComponent = link(WCustomerInvoices, &CustomerId)
  }
}
(詳細は、こちらを参照してください。)

例 3: 本日分の請求書を含む RSS フィード

rss
{
  version = "2.0"
  channel
  {
    title = 'Today's Invoices"
    link = link(ViewTodayInvoices)
    item where InvoiceDate = today()
    {
      title = format('Invoice %1', InvoiceId)
      link = link(ViewInvoice, InvoiceId)
      description = format('Invoice %1 for customer %2, amount %3', InvoiceId, CustomerName, InvoiceAmount)
      author = 'system'
      pubDate = today()
    }
  }
}
データプロバイダーの要旨についての説明は以上です。次も参照してください:
次の例およびユースケースも参照してください:
データプロバイダーは、「プログラミング」ではなく、「宣言」によって手順を進めます。この方法の利点は、基礎の実装部分を変更でき、データプロバイダーを有効に保つことができることです。詳細については、「Data Provider の考え方」を参照してください。

動画

イメージ:20668.png Compound data types



サブページ
Created: 14/09/18 03:16 by Admin Last update: 21/05/20 06:18 by Admin
カテゴリ
Powered by GXwiki 3.0