バージョンはXanaduです。
案件で本番リリース後に、リリース前に起票されたレコードの項目に特定の値を設定するデータパッチを実施しました。
今回は安全のため、ServiceNow標準で用意されているバッチ更新ジョブ機能を採用しました。
バッチ更新ジョブ
レコードを安全に更新する
ノーコードでトランザクションデータを更新できる機能です。
今回はインシデントの2万件のレコードを更新します。
-
バッチ更新ジョブを作成する。
①:対象のトランザクションテーブルを選択
②:[プレビュー]をクリックするとデータパッチ対象のレコードを自動でカウントしてくれる
③:データパッチ対象とするレコードの条件をフィルタ条件で指定
④:どの項目にどんな値を設定するか、フィルタ条件で指定
⑤:Trueに設定すると、データパッチで「更新者」などの項目が自動で更新される。今すぐ実行すると実行ボタンを押したユーザーで、日時指定で実行すると「System」で更新される
⑥:Trueに設定するとレコード更新をトリガーとするビジネスルールやフローが動く。PJで実行した際はFalseに設定しました -
[続行]ボタンをクリック
関連リンクから[今すぐ実行]するか、実行場所[run_at](実行時間)を設定して、データパッチをスケジュールする。夜間データパッチを実施するときなどは後者が良い
※参考までに、2万件のレコードの更新に40分掛かりました。
注意
- 作成されたバッチレコードは一度だけ実行可能です。定期的にデータを更新したいなどの目的には合いません。
- テストとしてあえてまったく同じ時刻に複数のバッチをスケジュールして実行しようとしたところ、指定した時刻にデータパッチが実行されないエラーが起きました。複数のデータパッチを実行する場合は1時間ほど時間をずらしてスケジュールするのがよさそうです。
余談
はじめはバックグラウンドスクリプトで数千件ずつ更新するかな...と考えていましたが、ちょうど本番リリース前に他の案件でバックグラウンドスクリプトから大量のレコードを更新しようとして原因不明のエラーになったという話を聞いて、より安全な方法はないかと探してみたところ発見しました。
リリース作業でデータパッチを実施することは多いので、公式が提供する安全な方法として今後も採用したいです。