27福利厚生のFormula作成およびエラー処理

この章の内容は次のとおりです。

Formulaを使用して、自社の要件に合わせてプラン設計を構成します。Formulaは柔軟性が高く、次の用途で提供されるビジネス・ルールのかわりに使用できます。

  • 次に示すような、日付計算。

    • 登録の開始日および終了日

    • レートまたは補償の開始日および終了日

    • 待機期間および登録期間

    • 処理項目期日

  • レート額と補償範囲額、最小値と最大値、または上限と下限の計算

  • 証明要件

  • 不完全月と按分の計算

  • 適格性および加入の評価

たとえば、福利厚生の適格性を計算するFormulaを作成し、提供された適格性基準では満たせない自社の要件に対応できます。

福利厚生Fast Formulaリファレンス・ガイド

福利厚生Fast Formulaリファレンス・ガイドには、よく使用される福利厚生Formulaタイプについての説明があります。このガイドで説明するFormulaタイプにはすべて、サンプル・コード、コンテキスト、データベース・アイテム、入力変数および戻り変数が含まれています。詳細は、My Oracle Support (https://support.oracle.com)にある福利厚生Fast Formulaリファレンス・ガイド(1456985.1)を参照してください。

Oracle FastFormulaは、英単語および基本的な数学関数を使用して、簡単にFormuraを記述する方法です。データベース構造やプログラミング言語を学習しなくても、データベースの情報をFormulaで使用できます。このトピックで説明するFormulaの使用例はそれぞれ1つ以上のFormulaタイプに対応しており、特定のFormula入力値および出力値を必要とします。

Oracle HCM Cloudで提供されるFormulaには英語の言語名が含まれていますが、他の言語でFormulaを記述することもできます。Formulaの名前と説明は、任意の言語で指定できます。Formulaテキストは翻訳されていませんが、英語以外のユーザー定義エレメント、入力値またはバランスを処理できます。たとえば、中国語でエレメント名を定義すると、中国語でベース・エレメント名が保存されます。Formulaを作成する場合は、中国語などの他の言語および文字セットで変数名または文字列値を設定できます。

給与の計算

支給項目と控除項目を表すエレメントに対して、給与計算およびスキップ・ルールを記述できます。

FastFormulaを使用して次のタスクを実行できます。

  • 給与フローの反復を制御します。

  • 給与計算でエレメントが処理されるタイミングを制御します。

  • 給与処理、データ入力またはレポート作成に使用する対象者のセットを定義します。

  • 1つ以上のエレメント入力値を検証します。エレメント入力値のデフォルト値を設定したり、他の入力値へのユーザー入力に基づいて入力値を計算します。

  • ユーザー定義表のエントリを検証します。

  • 按分Formulaにより、特定のイベント(期間途中のエレメント入力値の変更など)が発生したときに、給与計算でエレメント入力をどのように按分するかを制御します。

  • 各エレメントに複数の給与計算Formulaを関連付けて、ステータスの異なる従業員アサイメントに対して異なる処理を実行します。

  • 変換Formulaにより、HCMデータ・ローダーが理解できる形式にインバウンド・データを変換します。

  • 支払方法プリファレンスを構成します。たとえば、支払方法の数とタイプを制限できます。

福利厚生管理

Formulaを使用して、福利厚生プランを構成できます。Formulaは、提供されているビジネス・ルールの柔軟な代替手段として使用できます。Formulaを使用して、次のものを構成します。

  • 日付計算(登録開始日と終了日、レートや補償範囲の開始日と終了日、待機期間と登録期間、処理項目の期日など)

  • レート額と補償範囲額、最小値と最大値、または上限と下限の計算

  • 証明要件

  • 不完全月と按分の計算

  • 適格性および加入の評価

たとえば、提供された適格基準では特定の要件が満たされない場合に福利厚生適格を計算するFormulaを記述できます。

ノート: 詳細は、My Oracle Support (https://support.oracle.com)にある福利厚生Fast Formulaリファレンス・ガイド(1456985.1)を参照してください。

報酬の構成の定義

Formulaを使用して変更でき、既存の報酬プラン構成に柔軟性を追加できるものを次に示します。

  • 個別報酬プランの報酬割付の開始日と終了日

  • ワークフォース報酬プランの個人選択、階層決定、列のデフォルト値および通貨選択

  • 総合報酬文書に表示される項目のソース

勤怠管理用のルール・テンプレートを作成するためのFormulaの定義

Formulaを時間リポジトリ・ルール・テンプレートで使用して、ルールを作成します。Formula内には、ルール・パラメータと出力結果の組合せが提供されています。テンプレート構成を変えることにより、1つのFormulaを複数のルール・テンプレートで使用できます。

ルール・テンプレートを作成する際には、Formula名を選択してから、パラメータ・タイプと、パラメータおよび変数の表示名を構成します。どの詳細を変更すると特定の結果を達成できるかを判断するために、Formula文全体を再実行する必要はありません。

Formulaを使用して勤怠管理に適用できる内容は次のとおりです。

  • 時間を処理または計算するためのロジック

  • ルールが計算で使用する式に値を渡すことを可能にするパラメータ

  • Formulaが計算結果をルールに返すために使用する出力変数

たとえば、期間最大時間数テンプレートでは、WFM_PERIOD_MAXIMUM_TIME_ENTRY_RULE Formulaを使用して、レポートされた時間カテゴリの時間数を、定義された最大時間数と比較します。

ノート: 詳細は、My Oracle Support (https://support.oracle.com)にある勤怠管理Fast Formulaリファレンス・ガイド(1990057.1)を参照してください。

この例では、テキスト・エディタを使用してFastFormulaを作成します。

作成するFormulaを決定する際の主な検討事項は次のとおりです。

主な決定事項 この例の場合

このFormulaは特定の国別仕様データ・グループに対するFormulaですか。

いいえ、これはどの国別仕様データ・グループでも使用できるグローバルFormulaです。

このFormulaで使用されるコンテキストはありますか。

いいえ

データベース・アイテムのデフォルトはありますか。

はい、PER_ASG_JOB_NAMEです

入力値のデフォルトはありますか。

いいえ

戻り値は何ですか。

MIN_HOURS、MAX_HOURS、FREQUENCY

テキスト・エディタを使用したFastFormulaの作成によるマネージャの予定時間の決定

  1. 「自分のクライアント・グループ」「FastFormula」を検索して選択します。

  2. 「作成」をクリックします。

  3. 次のフィールドに入力します。

    FastFormulaのフィールド FastFormulaの値

    Formula名

    マネージャの予定時間数の範囲

    Formulaタイプ

    予定時間数の範囲

    説明

    マネージャの時間数の範囲

    有効開始日

    2010年1月1日

  4. 「続行」をクリックします。

  5. 「Formulaテキスト」セクションに次のFormula詳細を入力します。

    /* DATABASE ITEM DEFAULTS BEGIN */
    DEFAULT FOR per_asg_job_name IS ' '
    /* DATABASE ITEM DEFAULTS END */
    JOB_1 = PER_ASG_JOB_NAME
    IF JOB_1 = 'Manager' then
    (MIN_HOURS = 25
    MAX_HOURS = 40
    FREQUENCY = 'H')
    else
    (MIN_HOURS = 20
    MAX_HOURS = 35
    FREQUENCY = 'H')
    return MIN_HOURS, MAX_HOURS, FREQUENCY

  6. 「コンパイル」をクリックします。

  7. 「保存」をクリックします。

様々なアプローチを使用して、Formulaが読みやすく、使用しやすく、理解しやすく、効率的に処理されるようにします。

変数名と別名

簡潔でわかりやすい変数名を使用します。データベース・アイテム名が長い場合は、別名を使用できます。データベース・アイテム名の長さは、Formulaのパフォーマンスやメモリー使用量には影響しません。

Inputs文

ヒント: 可能なかぎり、データベース・アイテムではなくINPUTS文を使用することをお薦めします。入力変数のためにデータベースにアクセスする必要はありません。そうすれば、給与計算が高速になります。

INPUTS文を使用しないFormulaの例を次に示します。

SALARY = SALARY_ANNUAL_SALARY / 12
RETURN SALARY

INPUTS文を効率的に使用する方法を次に示します。

INPUTS ARE ANNUAL_SALARY
SALARY = ANNUAL_SALARY / 12
RETURN SALARY

CHANGE_CONTEXTS文

ヒント: 必要な場合にのみCHANGE_CONTEXTS文を使用することをお薦めします。これは、CHANGE_CONTEXTSを使用すると、データベースからデータベース・アイテム値が再度フェッチされる可能性があるためです。

他のCHANGE_CONTEXTSブロックからCHANGE_CONTEXTSを呼び出さなくても、単一のCHANGE_CONTEXTS文を使用して複数のコンテキスト変更を実行できます。

たとえば、最初のFormulaは、2番目のFormulaより効率的な単一のCHANGE_CONTEXTS文を使用しています。

CHANGE_CONTEXTS(EFFECTIVE_DATE = l_eff_date, AREA1= 'California')
(
  /*Do something here*/
)
CHANGE_CONTEXTS(EFFECTIVE_DATE = l_eff_date)
(
CHANGE_CONTEXTS(AREA1 = 'California')
   (
    /*Do something here*/
   )
)

すでに設定されている可能性が高いコンテキストを、CHANGE_CONTEXTS文を使用して設定しないでください。

たとえば、個人情報を処理するFormulaには、通常はPERSON_IDコンテキストがすでに設定されています。このコンテキストが設定されていない場合、GET_CONTEXTは値をフェッチしません。GET_CONTEXTは、デフォルト値の-1のみを返します。このコードでは何も行われません。

l_person_id = GET_CONTEXT(PERSON_ID, -1)
l_effective_date = GET_CONTEXT(EFFECTIVE_DATE, '0001-01-01 00:00:00)(DATE))

CHANGE_CONTEXTS(PERSON_ID = l_person_id, EFFECTIVE_DATE = l_effective_date)
(
  /*Do something here*/
)

データベース・アイテム

ヒント: 必要なデータベース・アイテムのみをFormulaに保持することをお薦めします。絶対に必要な場合を除き、Formulaでデータベース・アイテムを参照しないでください。不要なデータベース呼出しが発生する原因となるデータベースがFormulaに含まれている場合があります。その結果、Formulaの効率が影響を受けます。

この例では、データベース・アイテムを使用すると、AGEのデータベース・フェッチが常に発生します。

S = SALARY
A = AGE
IF S < 20000 THEN
IF A < 20 THEN
  TRAINING_ALLOWANCE = 30
ELSE
  TRAINING_ALLOWANCE = 0

この例では、給与が20000未満の場合にのみ、データベース・アイテムを使用してAGEをフェッチします。

IF SALARY < 20000 THEN
IF AGE < 20 THEN
  TRAINING_ALLOWANCE = 30
ELSE
  TRAINING_ALLOWANCE = 0

HCM抽出のデータベース・アイテム

一部のデータベース・アイテムは、HCM抽出レポート専用です。これらのデータベース・アイテムは大量のデータを返すため、Formulaで使用しても効率的に取得できません。

たとえば、HCM抽出データベース・アイテムでは、アプリケーション上のすべての従業員の情報、または特定の従業員の雇用開始以降のすべての情報が取得されます。レポートでは大量のデータが処理されるため、このデータの取得はレポート作成に適しています。Formulaでは通常、特定のケースに限定された少量のデータを処理します。HCM抽出では、返されるデータを制限するために条件を追加できますが、Formulaでは追加できません。

これらのデータベース・アイテムを使用すると、適切なデータを取得するためにより複雑なFormulaが必要になり、データ量が多くなるために式のパフォーマンスが極端に低下します。たとえば、配列データベース・アイテムPER_EXT_ALL_PHONE_AREA_CODEは、有効日時点のすべての電話市外局番を返します。PER_EXT_ALL_PHONE_PERSON_IDおよびPER_EXT_ALL_PHONE_TYPEとともに使用すれば、個人の自宅電話の市外局番の取得は可能です。

しかし、PER_PER_HOME_PHONE_AREA_CODEデータベース・アイテムを使用して自宅電話の市外局番を取得すれば、Formulaを単純化してパフォーマンスを向上できます。PER_PER_HOME_PHONE_AREA_CODEは、PERSON_IDおよびEFFECTIVE_DATEのコンテキストを使用してデータを取得します。PER_EXT_ALL_PHONE_AREA_CODEは、EFFECTIVE_DATEのコンテキストのみを使用します。

WHILEループ

タスクの完了直後にWHILEループを抜けるには、EXIT文またはループ条件の変更を使用します。たとえば、探していた単一のアイテムがすでに見つかった場合は、処理を続行しません。

コンパイル・エラーは、Formulaのコンパイル後に「FastFormula」ページに表示されます。エラーが発生すると、コンパイラはコンパイル・プロセスを停止します。エラー・メッセージには、行番号およびエラー・タイプが表示されます。

一般的なコンパイル・エラー

一般的なFormulaコンパイル・エラーをいくつか次に示します。

Formulaコンパイル・エラー 説明

構文エラー

FormulaのテキストがFormula言語の構文ルールに違反しています。たとえば、IF文でIFのかわりにIF1を使用した場合。

文の順序が正しくない

ALIASDEFAULTまたはINPUT文は、他の文よりも後に配置します。

ASSIGNMENTの使用方法が間違っている

次のいずれかの条件が存在する場合に発生します。

  • ASSIGNMENTによって値がデータベース・アイテムに割り当てられています。

  • CHANGE_CONTEXTS文の外部でコンテキストに値が割り当てられています。

  • FormulaがCHANGE_CONTEXTS文の内部で値を非コンテキスト変数に割り当てています。

CHANGE_CONTEXTS文をFormulaで使用できます。

ALIAS文の使用方法が間違っている

ALIAS文はデータベース・アイテムに対してのみ使用できます。

DEFAULT文がない

デフォルト値を指定するデータベース・アイテムにはDEFAULT文が必要です。

DEFAULT文の使用方法が間違っている

DEFAULT文は、入力またはデータベース・アイテム以外の変数に対して指定します。

変数が初期化されていない

コンパイラは使用時に初期化されていない変数を検出します。ただし、コンパイラがこれを必ずしも実行できるとはかぎりません。このエラーが発生するのは主に、Formulaに含まれているデータベース・アイテムがそのFormulaタイプではサポートされないコンテキストを必要とするような場合です。Formulaはデータベース・アイテムをローカル変数として扱います。たとえば、バランス・データベース・アイテムには、PAYROLL_REL_ACTION_ID、PAYROLL_ASSIGNMENT_IDおよびCALC_BREAKDOWN_IDのコンテキストが必要です。通常、これらの文は「Oracle Payroll」タイプのFormulaで使用します。

関数コールがない

コンパイラは関数コールを認識していません。戻りタイプ、関数名およびパラメータ・タイプの組合せが、いずれの使用可能な関数とも一致しません。

演算子の使用方法が間違っている

Formulaの演算子を使用しているインスタンスが、その演算子の許可される使用方法と一致していません。

たとえば、+演算子には2つの使用方法が許可されています。オペランドのデータ型は、両方ともNUMBERであるか、両方ともTEXTです。

データ型の使用方法が整合していない

Formulaで複数のデータ型のFormula変数が使用されています。あるいは、間違ったデータ型のデータベース・アイテムまたはコンテキストがFormulaで使用されています。

たとえば、Formulaの開始部分で変数AにNUMBERの値が割り当てられているのに、後からTEXT値が割り当てられている場合などです。

EXIT文がWHILEループ内にない

最終的にfalseになるか、ループを抜けるためのEXITコールが存在しない条件。

コンテキストの使用方法が間違っている

コンテキストとしての変数、または変数としてのコンテキストがFormulaで使用されています。

たとえば、FormulaでAREA1に通常の変数としての値が割り当てられているのに、後からGET_CONTEXTコール内でコンテキストとしてAREA1が使用されている場合などです。

FastFormula実行エラーは、Formulaの実行中に問題が生じたときに発生します。通常、Formulaまたはアプリケーション・データベースでデータ関連の問題があると、このようなエラーが発生します。

Formula実行エラー

Formula実行エラーをいくつか次に示します。

Formula実行エラー 説明

変数が初期化されていない

変数またはコンテキストが初期化されているかどうかをFormulaコンパイラが完全には判断できない場合、変数が初期化されているかどうかをテストするコードが生成されます。

Formulaの実行時に、変数またはコンテキストが初期化されていないと、このコードによりエラーが表示されます。

ゼロで除算

数値がゼロで除算された場合に発生します。

データが見つからない

非配列型のデータベース・アイテムが予期せずデータの戻しに失敗した場合に発生します。データベース・アイテムがデータを戻せない場合は、デフォルト値を提供する必要があります。

DEFAULT文を使用してデフォルト値を指定できます。Formula関数コードに問題がある場合も、このエラー・メッセージが表示されます。

行が多すぎる

非配列型のデータベース・アイテムが予期せず複数のデータ行を返した場合に発生します。原因は、データへのアクセスの状況に関する前提が間違っていることです。

また、Formula関数コードにエラーがある場合も、このエラー・メッセージが表示されることがあります。

NULLデータが見つからない

データベース・アイテムが予期せずNULLデータ値を返した場合に発生します。データベース・アイテムがNULL値を返すことができる場合は、デフォルト値を提供します。

ノート: NULL値を返せないデータベース・アイテムもあります。データベース・アイテムがNULL値を返すことができる場合は、そのデータベース・アイテムのデフォルト値を指定できます。

値が許容範囲を超えている

文字列の最大許容長を超えているなど、様々な理由で発生します。

無効な数値

Formulaが数値以外の文字列を数値に変換しようとした場合に発生します。

ユーザー定義関数エラー

Formula関数内で発生します。このエラー・メッセージ・テキストは、Formulaエラー・メッセージの一部として提供されます。

外部関数コール・エラー

Formula関数がエラーを返しますが、Formulaコードに追加情報を提供しません。関数が実行コードのロギング先にエラー情報を送信している可能性があります。

関数がNULL値を返した

Formula関数がNULL値を返します。

反復が多すぎる

単一のWHILEループ、またはWHILEループの組合せが、許可される最大反復数を超えています。このエラーは、終了できないループを終了するために発生します。終了できないループは、Formula内のプログラミング・エラーを示しています。

配列データ値が設定されていない

Formulaがデータ値のない配列索引へのアクセスを試みています。このエラーはFormulaコード内で発生します。

WSA_EXISTSの無効なタイプ・パラメータ

WSA_EXISTSコールで無効なデータ型を指定しています。

格納済アイテムのデータ型が間違っている

WSA_GETを使用してアイテムを取得する際に、実際のデータ型が格納済アイテムのデータ型と一致していません。このエラーは、コール元のFormula内で発生します。

コールされた式が見つからない

FormulaからFormulaをコールしようとしたときに、コールされたFormulaが見つかりません。このエラーは、コール元Formulaの問題またはインストールの問題によって発生する可能性があります。

再帰Formulaコール

Formula内からそのFormulaを呼び出そうとしました。この呼出しは直接行われる場合も、呼び出された別のFormulaから間接的に行われる場合もあります。再帰的な方法でFormulaをコールすることは許可されていません。

コール先Formulaとコール元Formula内の入力データの型が異なる

FormulaからFormulaをコールする際に、コール先のFormula内の入力データ型がコール元Formulaで指定されているデータ型と一致しません。

コール先Formulaとコール元Formula内の出力の型が異なる

FormulaからFormulaをコールする際に、コール先のFormula内の出力データ型がコール元Formulaで指定されているデータ型と一致しません。

Formulaコールが多すぎる

Formulaがそのテキスト内で別のFormulaをコールしたために、階層になった場合。許可される階層の深さは最大で10個です。

「評価およびレポート」作業領域の「Formula」タブでは、福利厚生Formulaがサンプル加入者に対して目的どおりに機能するかどうかをテストできます。

このトピックでは、次のことについて説明します。

  • Formulaの作成

  • 制限

  • 利用可能なコンテキスト

  • Formulaの結果

ノート: Formula評価ツールでは、Formulaのテスト時にデータを変更することはありません。

Formulaの作成

FastFormulaの作成は、「給与管理」作業領域の「FastFormulaの管理」ページを使用して行います。

制限

データベースに保存されていないデータに対して動作するよう設計されたFormulaをテストすることはできません。たとえば、次のFormulaタイプはテストできません。

  • 個人変更連携ライフ・イベント

  • 選択後編集

実行時にコールするプロセスから受け取る入力値に対して動作するよう設計されたFormulaをテストすることはできません。たとえば、「レート期間区分」Formulaタイプはテストできません。ただし、コードで使用可能な固定の入力値を含むバージョンを作成すると、このツールでこのようなFormulaをテストできます。

利用可能なコンテキスト

福利厚生Formulaをテストするには、次のコンテキストに対する値を指定する必要があります。

  • 有効日

  • 個人名

  • 福利厚生関係

また、Formulaタイプによっては、次のコンテキストにも値を指定できます。

  • ライフ・イベント名

  • プログラム名

  • プラン名

  • オプション名

Formulaの結果

「Formula」タブには、直近5件のFormula送信の結果が表示されます。「結果」ウィンドウには、Formulaで定義された戻り変数の名前とその値が表示されます。生成されたログ・ファイルをダウンロードすれば、詳細を確認できます。

Formulaに関するFAQ

複数のFastFormulaを同時に作成または更新する場合、「プロセスまたはレポートの送信」ページで「Formulaのコンパイル」プロセスを実行します。

コンパイル・エラーは、Formulaをコンパイルするときに「FastFormula」ページで発生します。エラー・メッセージにはエラーの性質に関する説明が含まれます。一般的なコンパイル・エラーは、タイプミスによる構文エラーです。エラー・メッセージはダッシュボードで確認できるほか、プロセスの実行後にメッセージ・タブに移動して確認できます。

実行エラーは、Formulaの実行中に問題が生じることで発生します。通常、Formulaまたはアプリケーション・データベースでデータ関連の問題があると、このようなエラーが発生します。