27福利厚生のFormula作成およびエラー処理
この章の内容は次のとおりです。
福利厚生Formulaの概要
Formulaを使用して、自社の要件に合わせてプラン設計を構成します。Formulaは柔軟性が高く、次の用途で提供されるビジネス・ルールのかわりに使用できます。
-
次に示すような、日付計算。
-
登録の開始日および終了日
-
レートまたは補償の開始日および終了日
-
待機期間および登録期間
-
処理項目期日
-
-
レート額と補償範囲額、最小値と最大値、または上限と下限の計算
-
証明要件
-
不完全月と按分の計算
-
適格性および加入の評価
たとえば、福利厚生の適格性を計算するFormulaを作成し、提供された適格性基準では満たせない自社の要件に対応できます。
福利厚生Fast Formulaリファレンス・ガイド
福利厚生Fast Formulaリファレンス・ガイドには、よく使用される福利厚生Formulaタイプについての説明があります。このガイドで説明するFormulaタイプにはすべて、サンプル・コード、コンテキスト、データベース・アイテム、入力変数および戻り変数が含まれています。詳細は、My Oracle Support (https://support.oracle.com)にある福利厚生Fast Formulaリファレンス・ガイド(1456985.1)を参照してください。
Formulaの使用の概要
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を記述できます。
報酬の構成の定義
Formulaを使用して変更でき、既存の報酬プラン構成に柔軟性を追加できるものを次に示します。
-
個別報酬プランの報酬割付の開始日と終了日
-
ワークフォース報酬プランの個人選択、階層決定、列のデフォルト値および通貨選択
-
総合報酬文書に表示される項目のソース
勤怠管理用のルール・テンプレートを作成するためのFormulaの定義
Formulaを時間リポジトリ・ルール・テンプレートで使用して、ルールを作成します。Formula内には、ルール・パラメータと出力結果の組合せが提供されています。テンプレート構成を変えることにより、1つのFormulaを複数のルール・テンプレートで使用できます。
ルール・テンプレートを作成する際には、Formula名を選択してから、パラメータ・タイプと、パラメータおよび変数の表示名を構成します。どの詳細を変更すると特定の結果を達成できるかを判断するために、Formula文全体を再実行する必要はありません。
Formulaを使用して勤怠管理に適用できる内容は次のとおりです。
-
時間を処理または計算するためのロジック
-
ルールが計算で使用する式に値を渡すことを可能にするパラメータ
-
Formulaが計算結果をルールに返すために使用する出力変数
たとえば、期間最大時間数テンプレートでは、WFM_PERIOD_MAXIMUM_TIME_ENTRY_RULE Formulaを使用して、レポートされた時間カテゴリの時間数を、定義された最大時間数と比較します。
Formulaテキストを使用したFastFormulaの記述の例
この例では、テキスト・エディタを使用してFastFormulaを作成します。
作成するFormulaを決定する際の主な検討事項は次のとおりです。
主な決定事項 | この例の場合 |
---|---|
このFormulaは特定の国別仕様データ・グループに対するFormulaですか。 |
いいえ、これはどの国別仕様データ・グループでも使用できるグローバルFormulaです。 |
このFormulaで使用されるコンテキストはありますか。 |
いいえ |
データベース・アイテムのデフォルトはありますか。 |
はい、PER_ASG_JOB_NAMEです |
入力値のデフォルトはありますか。 |
いいえ |
戻り値は何ですか。 |
MIN_HOURS、MAX_HOURS、FREQUENCY |
テキスト・エディタを使用したFastFormulaの作成によるマネージャの予定時間の決定
-
「自分のクライアント・グループ」で「FastFormula」を検索して選択します。
-
「作成」をクリックします。
-
次のフィールドに入力します。
FastFormulaのフィールド FastFormulaの値 Formula名
マネージャの予定時間数の範囲
Formulaタイプ
予定時間数の範囲
説明
マネージャの時間数の範囲
有効開始日
2010年1月1日
-
「続行」をクリックします。
-
「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
-
「コンパイル」をクリックします。
-
「保存」をクリックします。
Formulaパフォーマンスの向上
様々なアプローチを使用して、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*/
)
データベース・アイテム
この例では、データベース・アイテムを使用すると、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コンパイル・エラー
コンパイル・エラーは、Formulaのコンパイル後に「FastFormula」ページに表示されます。エラーが発生すると、コンパイラはコンパイル・プロセスを停止します。エラー・メッセージには、行番号およびエラー・タイプが表示されます。
一般的なコンパイル・エラー
一般的なFormulaコンパイル・エラーをいくつか次に示します。
Formulaコンパイル・エラー | 説明 |
---|---|
構文エラー |
FormulaのテキストがFormula言語の構文ルールに違反しています。たとえば、 |
文の順序が正しくない |
|
|
次のいずれかの条件が存在する場合に発生します。
CHANGE_CONTEXTS文をFormulaで使用できます。 |
|
|
|
デフォルト値を指定するデータベース・アイテムにはDEFAULT文が必要です。 |
|
DEFAULT文は、入力またはデータベース・アイテム以外の変数に対して指定します。 |
変数が初期化されていない |
コンパイラは使用時に初期化されていない変数を検出します。ただし、コンパイラがこれを必ずしも実行できるとはかぎりません。このエラーが発生するのは主に、Formulaに含まれているデータベース・アイテムがそのFormulaタイプではサポートされないコンテキストを必要とするような場合です。Formulaはデータベース・アイテムをローカル変数として扱います。たとえば、バランス・データベース・アイテムには、PAYROLL_REL_ACTION_ID、PAYROLL_ASSIGNMENT_IDおよびCALC_BREAKDOWN_IDのコンテキストが必要です。通常、これらの文は「Oracle Payroll」タイプのFormulaで使用します。 |
関数コールがない |
コンパイラは関数コールを認識していません。戻りタイプ、関数名およびパラメータ・タイプの組合せが、いずれの使用可能な関数とも一致しません。 |
演算子の使用方法が間違っている |
Formulaの演算子を使用しているインスタンスが、その演算子の許可される使用方法と一致していません。 たとえば、+演算子には2つの使用方法が許可されています。オペランドのデータ型は、両方とも |
データ型の使用方法が整合していない |
Formulaで複数のデータ型のFormula変数が使用されています。あるいは、間違ったデータ型のデータベース・アイテムまたはコンテキストがFormulaで使用されています。 たとえば、Formulaの開始部分で変数Aに |
|
最終的にfalseになるか、ループを抜けるための |
コンテキストの使用方法が間違っている |
コンテキストとしての変数、または変数としてのコンテキストがFormulaで使用されています。 たとえば、Formulaで |
Formula実行エラー
FastFormula実行エラーは、Formulaの実行中に問題が生じたときに発生します。通常、Formulaまたはアプリケーション・データベースでデータ関連の問題があると、このようなエラーが発生します。
Formula実行エラー
Formula実行エラーをいくつか次に示します。
Formula実行エラー | 説明 |
---|---|
変数が初期化されていない |
変数またはコンテキストが初期化されているかどうかをFormulaコンパイラが完全には判断できない場合、変数が初期化されているかどうかをテストするコードが生成されます。 Formulaの実行時に、変数またはコンテキストが初期化されていないと、このコードによりエラーが表示されます。 |
ゼロで除算 |
数値がゼロで除算された場合に発生します。 |
データが見つからない |
非配列型のデータベース・アイテムが予期せずデータの戻しに失敗した場合に発生します。データベース・アイテムがデータを戻せない場合は、デフォルト値を提供する必要があります。
|
行が多すぎる |
非配列型のデータベース・アイテムが予期せず複数のデータ行を返した場合に発生します。原因は、データへのアクセスの状況に関する前提が間違っていることです。 また、Formula関数コードにエラーがある場合も、このエラー・メッセージが表示されることがあります。 |
|
データベース・アイテムが予期せず ノート:
NULL 値を返せないデータベース・アイテムもあります。データベース・アイテムがNULL 値を返すことができる場合は、そのデータベース・アイテムのデフォルト値を指定できます。
|
値が許容範囲を超えている |
文字列の最大許容長を超えているなど、様々な理由で発生します。 |
無効な数値 |
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内の出力の型が異なる |
FormulaからFormulaをコールする際に、コール先のFormula内の出力データ型がコール元Formulaで指定されているデータ型と一致しません。 |
Formulaコールが多すぎる |
Formulaがそのテキスト内で別のFormulaをコールしたために、階層になった場合。許可される階層の深さは最大で10個です。 |
福利厚生Formulaのテストに関するガイドライン
「評価およびレポート」作業領域の「Formula」タブでは、福利厚生Formulaがサンプル加入者に対して目的どおりに機能するかどうかをテストできます。
このトピックでは、次のことについて説明します。
-
Formulaの作成
-
制限
-
利用可能なコンテキスト
-
Formulaの結果
Formulaの作成
FastFormulaの作成は、「給与管理」作業領域の「FastFormulaの管理」ページを使用して行います。
制限
データベースに保存されていないデータに対して動作するよう設計されたFormulaをテストすることはできません。たとえば、次のFormulaタイプはテストできません。
-
個人変更連携ライフ・イベント
-
選択後編集
実行時にコールするプロセスから受け取る入力値に対して動作するよう設計されたFormulaをテストすることはできません。たとえば、「レート期間区分」Formulaタイプはテストできません。ただし、コードで使用可能な固定の入力値を含むバージョンを作成すると、このツールでこのようなFormulaをテストできます。
利用可能なコンテキスト
福利厚生Formulaをテストするには、次のコンテキストに対する値を指定する必要があります。
-
有効日
-
個人名
-
福利厚生関係
また、Formulaタイプによっては、次のコンテキストにも値を指定できます。
-
ライフ・イベント名
-
プログラム名
-
プラン名
-
オプション名
Formulaの結果
「Formula」タブには、直近5件のFormula送信の結果が表示されます。「結果」ウィンドウには、Formulaで定義された戻り変数の名前とその値が表示されます。生成されたログ・ファイルをダウンロードすれば、詳細を確認できます。
Formulaに関するFAQ
「Formulaのコンパイル」プロセスを実行するタイミング
複数のFastFormulaを同時に作成または更新する場合、「プロセスまたはレポートの送信」ページで「Formulaのコンパイル」プロセスを実行します。
Formulaコンパイル・エラーと実行エラーの違いは何ですか。
コンパイル・エラーは、Formulaをコンパイルするときに「FastFormula」ページで発生します。エラー・メッセージにはエラーの性質に関する説明が含まれます。一般的なコンパイル・エラーは、タイプミスによる構文エラーです。エラー・メッセージはダッシュボードで確認できるほか、プロセスの実行後にメッセージ・タブに移動して確認できます。
実行エラーは、Formulaの実行中に問題が生じることで発生します。通常、Formulaまたはアプリケーション・データベースでデータ関連の問題があると、このようなエラーが発生します。