このヘルプ記事では、「入金情報」または「消込結果明細」レコードの取得バッチ実行時に発生する、エラーメッセージ「Attempt to de-reference a null object」のエラー原因を特定し、エラー解消方法を解説いたします。
1. エラー通知メールの内容
「入金情報」または「消込結果明細」を請求管理ロボから取得するバッチが失敗した際に、以下の様なメールが届くことがあります。
メール本文には、「caused by: System.NullPointerException: Attempt to de-reference a null object」と記載されています。
■入金情報
件名:
Developer script exception from 株式会社○○○ : 'KEIRINOMIKATA.CLP_PaymentSearchBatch' for job id '707000000000000' : Attempt to de-reference a null object
■消込結果明細
件名:
Developer script exception from 株式会社○○○ : 'KEIRINOMIKATA.CLP_ClearingDetailSearchBatch' for job id '707000000000000' : Attempt to de-reference a null object
2. エラーの原因
このエラーは、主に請求管理ロボからのデータ差分取得処理において、参照すべき「最終参照日時」の値が取得できなかったために発生します。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2-1. 処理の概要
このバッチは、請求管理ロボに登録・生成されている「入金情報」や「消込結果明細」のデータを、Salesforceが取得するためのものです。
データ取得は、以下の手順で差分取得として行われます。
1. Salesforceの「最終参照日」オブジェクトに自動作成されるレコード(1レコードのみ)を参照します。
2. このレコードにある「入金情報最終参照日時」や「消込結果明細最終参照日時」の項目に登録されている日時以降に、請求管理ロボ側で更新されたレコードが差分取得の対象となります。
3. 差分取得が成功すると、「最終参照日時」項目には、今回取得されたレコードの中で請求管理ロボ側の最新更新日時が最も新しい日時が自動で登録(更新)されます。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2-2. エラーの主な原因
差分取得を実行しようとした際、以下のどちらかの理由で参照すべき日時が取得できず、エラーが発生します。
● 「最終参照日」オブジェクトのレコードが存在しない、または各「最終参照日時」項目に値が登録されていない。
→特に初回実行時にこの状態となりやすく、差分取得の基準となる日時が取得できずにエラーとなります。
● バッチの実行ユーザに「最終参照日」オブジェクトへのアクセス権、または関連する「最終参照日時」項目への編集権限が付与されていない。
→権限がないため、バッチが項目を参照・更新できず、エラーとなります。
3. エラーの解消方法と具体的な手順
エラーの原因に基づき、以下の手順で解消を試みてください。
対処1: 「最終参照日」に値が設定されているか確認・設定する
「最終参照日」オブジェクトのレコードが存在し、かつ「入金情報最終参照日時」「消込結果明細最終参照日時」に値が設定されているかを確認します。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ステップ 3-1-1. 「最終参照日」レコードの確認
1. Salesforceの「請求管理ロボ サポート」タブ等から「最終参照日」オブジェクトを選択し、レコードが存在するか確認します。
2. レコードが存在する場合、詳細画面を開き、「入金情報最終参照日時」および「消込結果明細最終参照日時」の項目に値が設定されているか確認してください。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ステップ 3-1-2. 「最終参照日」レコードが存在しない、または日時が未設定の場合
「最終参照日」レコードが存在しない、または該当の「○○最終参照日時」項目に値が登録されていない場合は、手動でバッチを実行し、日時を登録する必要があります。
【重要】 必ず「入金情報」のボタンから先に実行してください。
1. 「入金情報」オブジェクトのリストビュー画面を開きます。
2. リストビュー上部にある「新規入金情報・最新消込状態の全体取得」ボタンをクリックして、バッチを手動で実行します。
ポイント: この操作により、「最終参照日」レコードが作成され、「入金情報最終参照日時」が設定されます。
3. 次に「消込結果明細」オブジェクトのリストビュー画面を開きます。
4. リストビュー上部にある「新規消込結果明細・最新消込状態の全体取得」ボタンをクリックして、バッチを手動で実行します。
ポイント: この操作により、「消込結果明細最終参照日時」が設定されます。
上記の操作を完了した後、自動実行のApexスケジュールバッチを再実行、またはスケジュール時間まで待機してください。
対処2: 実行ユーザの権限を確認・付与する
バッチ実行ユーザ(通常は自動実行の設定を行ったユーザ)が「最終参照日」オブジェクトを参照・編集する権限を持っているかを確認します。
【プロファイルの権限設定】
1. [設定](歯車アイコン)から、[設定]を開きます。
2. クイック検索で「プロファイル」と入力し、[プロファイル]に移動します。
3. バッチ実行ユーザに割り当てられている対象のプロファイルを選択します。
4. 「アプリケーションの設定」セクションの[オブジェクト設定]を探し、[最終参照日時]をクリックします。
5. このオブジェクトに対する「参照」および「編集」の権限が有効になっていることを確認し、有効になっていない場合はチェックを入れて保存します。
【項目の権限設定】
1. [設定](歯車アイコン)から、[設定]を開きます。
2. [オブジェクトマネージャー]に移動し、「最終参照日」オブジェクトを検索して開きます。
3. 左側のメニューから[項目とリレーション]を選択し、「入金情報最終参照日時」または「消込結果明細最終参照日時」の対象項目名をクリックします。
4. 対象項目の詳細画面が開いたら、[項目レベルセキュリティの設定]ボタンをクリックします。
5. 表示された画面で、バッチ実行ユーザに割り当てられているプロファイルまたは権限セットに対して、対象項目の「参照可能」および「編集可能」の権限にチェックが入っていることを確認し、必要に応じてチェックを入れ、設定を保存してください。