最近のアクセス:
Subtract ルール

挿入時に、ある項目属性の値を別の項目属性の値から減算します。
削除時に、ある項目属性の値を別の項目属性の値に加算します。
更新時に、更新する項目属性の新しい値と古い値の差分を計算して、その差分を別の項目属性から減算します。


構文

Subtract(att1 , att2) [ if cond ] ;
次のモードを使用できます:
  • 挿入: att1 項目属性の値が att2 項目属性の値から減算されます (指定された条件が true の場合)。
  • 削除: att1 項目属性の値が att2 項目属性の値に加算されます (指定された条件が true の場合)。
  • 更新: att1 項目属性の新しい値と古い値の差分が att2 項目属性の値から減算されます (指定された条件が true の場合)。


次の例を参照してください:
Customer                              Trip                      Prize                    Country  
{                                     {                         {                        {
    CustomerId*                          TripId*                  PrizeId*                  CountryId*
    CustomerName                         TripDate                 PrizeDate                 CountryName
    CustomerLastName                     CountryId                PrizeDescription          City
    CustomerPhone                        CountryName              PrizeMiles                {
    CustomerTotalMiles                   CityId                   CustomerId                  CityId*
    Trip                                 CityName                 CustomerName                CityName
    {                                    TripMiles                CustomerTotalMiles        }
      TripId*                          }                        }                         }
      TripDate                                                                     
      CountryId
      CountryName
      CityId
      CityName
      TripMiles
    }
}
ここでは、マイルと交換する商品を定義できる Prize トランザクションを使用します。
それぞれの商品には特定のマイル数が必要であり、必要なマイルを貯めた (またはそれ以上のマイルを保有している) 顧客に商品が提供されます。そのため、顧客に商品を提供する際は、顧客がその商品に相当する十分なマイルを保有しているかどうかを確認する必要があります。顧客が十分なマイルを保有していて商品を受け取る場合は、交換したマイルを減算する必要があります。顧客が十分なマイルを保有していない場合は、エラーメッセージを表示する必要があります。
Prize トランザクションには次の 2 つのルールが定義されています:
Subtract(PrizeMiles, CustomerTotalMiles);
Error(“Customer doesn’t have enough miles accrued”) if CustomerTotalMiles < 0;
Subtract ルールには次の動作が定義されています:
  • 新しい賞品が挿入されると、PrizeMiles の値が CustomerTotalMiles から減算されます。
  • 賞品が削除されると、PrizeMiles の値が CustomerTotalMiles に加算されます。
  • PrizeMiles の値が変更されると、その古い値が顧客の合計マイル数に自動的に加算され、新しい値が顧客の合計マイル数から減算されます。
Subtract ルールと Error ルールには CustomerTotalMiles 項目属性が含まれており、一方のルールがその項目属性を更新し、もう一方のルールがその値を評価するため、GeneXus は、最初に CustomerTotalMiles 項目属性を更新する減算を実行してから、その値を評価する必要があると判断します。
最初に減算が実行されるため、顧客が保有するマイル数が商品に必要なマイル数よりも少ない場合は、CustomerTotalMiles 項目属性の値がマイナスになります。したがって、CustomerTotalMiles<0 であるかどうかが Error ルールによって評価されます。該当する場合は Error ルールがトリガーされ、エラーメッセージが表示され、Subtract ルールが取り消されます。つまり、Subtract ルールの実行内容は元に戻され、顧客の合計マイル数は変更されません。
減算の実行後に CustomerTotalMiles の値がマイナス (CustomerTotalMiles<0) にならない場合は、減算処理が実行されたことを示します。 
顧客に提供する商品のレコードが削除されると、Subtract ルールは減算ではなく加算を実行します。つまり、商品に対応するマイル数 (PrizeMiles) が、顧客が貯めた合計マイル数 (CustomerTotalMiles) に加算されます。


参考情報

Add ルール









サブページ
Created: 14/09/18 03:19 by Admin Last update: 24/12/16 19:57 by Admin
カテゴリ
Powered by GXwiki 3.0