最近のアクセス:
再帰データプロバイダー

データプロバイダーは、直接または再帰呼び出しを通じて再帰構造にデータを挿入します。

次の構造を持つ Employee トランザクションを見てみましょう。
Employee
{
   EmployeeId*
   EmployeeName
   BossId subtype of EmployeeId
   BossName subtype of EmployeeName
}

例 1

従業員の情報を構造にロードする必要があるとします (たとえば、ほかのオブジェクトにパラメーターとして送信する必要がある場合など)。まず、SDT を次のように定義します:
イメージ:6285.jpg
これは再帰 SDTです。次に、従業員を受け入れるデータプロバイダーがこの問題を解決します:
イメージ:6288.jpg
入力値の説明:
出力: EmployeeSDT

Collection: False

Parm( &EmployeeId );
これは再帰データプロバイダーです。DPLoadEmployee が自身を呼び出し、EmployeeSDT の再帰メンバーにデータを挿入します。たとえば、XML 出力 (DPLoadEmployee( 123 ).toXML()) は次のようになります:
 <EmployeeSDT>
    <Id>123</Id>
    <Name>John Doe</Name>
    <Manager>
        <Id>99</Id>
        <Name>Mary Shelley</Name>
        <Manager>
            <Id>69</Id>
            <Name>Ernest Jackson</Name>
            <Manager></Manager>
        </Manager>
    </Manager>
<EmployeeSDT>

例 2

任意の従業員について、次のように、その部下 (直接および間接の部下) 全員を出力する必要があるとします:
<SubEmployees> 
   <Employee>
      <Id>99</Id>
      <Name>Mary Shelley</Name>
      <Subordinates>
         <Employee>
            <Id>123</Id>
            <Name>John Doe</Name>
            <Subordinates>
	       ...
	    </Subordinates>
         </Employee>
         <Employee>
            <Id>150</Id>
            <Name>Camile Green</Name>
            <Subordinates>
               ...
            </Subordinates>
         </Employee>
         ...
      </Subordinates>
   </Employee>
   <Employee>
      ...
   </Employee>
   ...
</SubEmployees>
これはデータプロバイダーにより簡単に処理できます。
まず、Output 構造を定義する必要があります (SDT を使用して定義します)。
イメージ:6289.jpg
データプロバイダーは次のようになります:
Name:   DPLoadSubordinates
Output: SubEmployees
Rules:  parm(&BossId)
 
SubEmployees
{
   Employee
   {
      Id   = EmployeeId
      Name = EmployeeName
      Subordinates = DPLoadSubordintates( EmployeeId )
   }
}
これは再帰データプロバイダーである点に注意してください (DPLoadSubordinates が自身を呼び出しています)。








サブページ
Created: 14/09/18 03:16 by Admin Last update: 22/03/14 00:50 by Admin
カテゴリ
Powered by GXwiki 3.0