ServiceNowのサービスポータルで、ユーザーがフォームを送信する際に添付ファイルの有無を確認する機能について考えたことはありますか?
Catalog Client Scriptでは、サーバー側の情報(例えば、レコードのsys_id)を利用できないため、フォーム送信時点での添付ファイル確認は困難です。
この記事では、Record Producerスクリプトを使用して、添付ファイルが正しくアップロードされているかをサーバー側で検証する方法を解説します。
問題点
Service Portalのカタログで、添付ファイルが必須の場合、そのファイルが正しくアップロードされているかを確認したい。しかし、レコードID(sys_id)はフォーム送信の時点ではまだ作成されておらず、クライアント側では確認が難しい。現在の手法では、添付ファイルが欠落している状態でフォームが送信されるリスクを完全には排除できません。
解決方法
この課題を解決するには、サーバー側スクリプトを使用します。具体的には、フォームが送信された後、sys_attachmentテーブルを参照して、添付ファイルの存在を確認します。この確認は、フォームデータがデータベースに保存される直前に実行されるため、送信内容の整合性を確保するのに役立ちます。また、添付ファイルが存在しない場合には、エラーメッセージを表示して送信処理を停止させることが可能です。
以下は、Record Producerスクリプトで添付ファイルを確認するコードの例です。
コードのポイント解説
- GlideRecordを使用した添付ファイル確認
sys_attachmentテーブルを検索し、レコードのsys_idと一致する添付ファイルが存在するかを確認します。これにより、添付ファイルの不足を防ぐことができます。 - エラーメッセージの表示とAbort
添付ファイルが見つからない場合は、gs.addErrorMessage()を使用してエラーメッセージを表示します。同時に、current.setAbortAction(true)を使用することでフォーム送信をキャンセルし、画面を次に進めず同じ画面に留まる処理を行います。
まとめ
Record producerスクリプトを利用すれば、フォーム送信時に添付ファイルの確認をサーバー側で行うことが可能です。この方法により、データの整合性を高め、ユーザーエクスペリエンスを向上させることができます。この記事を参考にして、ぜひ自分のServiceNow環境で試してみてください!