トリガの導入

定義したトリガ定義を導入するには、それらの定義で使用されるレコードが、いずれかのフィールドの SavePostChange PeopleCode で関数 Generate_Triggers を宣言および呼び出すように設定する必要があります。この PeopleCode は、JOB などのトリガが定義される可能性があるレコードのほとんどで、あらかじめ追加されているため、この設定手順が必要なケースはそう多くありません。しかし、トリガをレコードに追加する必要がある場合には、以下の手順に従います。

注: SavePostChange PeopleCode があらかじめ追加されているレコードについては、このトピックの終わりを参照してください。

  1. トリガを作成する関数を宣言します。

    Declare Function Generate_Triggers PeopleCode 
    FUNCLIB_GP.TRGR_FUNCTIONS FieldFormula;
  2. ローカル日付の変数を宣言します。

    Local date &L_DT;
  3. 関数を呼び出します。

    Generate_Triggers(EMPLID, &L_DT);

関数 Generate_Triggers は、FUNCLIB_GP.TRGR_FUNCTIONS.FieldFormula に定義され、呼び出すときに 2 つのパラメータが必要です。必要とされるパラメータは以下のとおりです。

  • &P_EMPLID

    トリガが作成される従業員 ID (EMPLID) を識別します。EMPLID フィールドを &P_EMPLID に使用します。

  • &P_FIXED_DT

    トリガ有効日タイプが [固定日] のレコードのトリガ有効日の値を保持します。トリガ有効日タイプが [有効日] または [開始 - 終了日] のレコードは無視します。&P_FIXED_DT に &L_DT を使用します。

[固定日] タイプのトリガに限り、変数 &L_DT に値を割り当てる必要があります。たとえば、ポジティブ入力レコード (手動ポジティブ入力テーブル (GP_PI_MNL_DATA) と手動ポジティブ入力サポート エレメント上書きテーブル (GP_PI_MNL_SOVR)) がこれに該当します。

注: ある条件が満たされた場合のみ関数を呼び出すように、PeopleCode を設定することもできます。以下の例 2 を参照してください。

以下の例は、データベースに標準で用意されている PeopleCode を抜粋したものです。追加レコードに対して PeopleCode を設定する方法を示しています。

例 1: トリガ レコード = GP_PYE_SOVR

PeopleCode のサンプル:

PeopleCode on GP_PYE_SOVR.EMPLID.SavePostChange
Declare Function Generate_Triggers PeopleCode 
FUNCLIB_GP.TRGR_FUNCTIONS FieldFormula;
Local date &L_DT;
/*-----Function to generate Triggers for Global Payroll---*/
Generate_Triggers(EMPLID, &L_DT);

この例では、受給者サポート エレメント上書きテーブル (GP_PYE_SOVR) の [トリガ有効日タイプ] が [固定日] ではないため、&L_DT に値は割り当てられていません。

例 2: トリガ レコード = GP_PI_MNL_DATA (手動ポジティブ入力)

このレコードの [トリガ有効日タイプ] は [固定日] です。

PeopleCode のサンプル:

PeopleCode on GP_PI_MNL_DATA.LASTUPDDTTM.SavePostChange
Declare Function Generate_Triggers PeopleCode 
FUNCLIB_GP.TRGR_FUNCTIONS FieldFormula;
  Local date &L_DT;
  Local Rowset &L_RS0;
  Component datetime &C_CAL_IDNT_TS;
  /*-----Function to generate Triggers for Global Payroll---*/
  &L_RS0 = GetLevel0();
  &L_DT = &L_RS0(1).GP_PI_MNL_D.PRD_END_DT.Value;
  If All(&C_CAL_IDNT_TS) Then
   Generate_Triggers(EMPLID, &L_DT);
  End-If;

この例では、&L_DT には、ポジティブ入力から作成されるトリガのトリガ有効日として使用する値を設定します。

ポジティブ入力の場合は、ポジティブ入力があるカレンダーの期間終了日を使ってトリガを作成する必要があります。そのため、&L_DT を以下のように設定します。

&L_RS0 = GetLevel0();
&L_DT = &L_RS0(1).GP_PI_MNL_D.PRD_END_DT.Value;

注: GP_PI_MNL_D.PRD_END_DT には、GP_PI_MNL_DATA.ENTRY_TYPE_ID.RowInit の前の PeopleCode によって、カレンダーの PRD_END_DT の値が割り当てられています。

ここで、関数を呼び出すことができます。ポジティブ入力の場合は、ポジティブ入力があるカレンダーが指定された場合のみ、以下のようにトリガ作成機能を起動する必要があります。

If All(&C_CAL_IDNT_TS) Then
  Generate_Triggers(EMPLID, &L_DT);
End-If;

注: 遡及トリガや分割トリガを定義するときは、反復トリガも定義することを推奨します。カレンダー グループが一度計算されてからデータ変更が発生した場合、反復トリガが定義されていないと、データ変更によって作成された遡及トリガまたは分割トリガは次の確認フェーズまで処理されません。