ServiceNowスクリプト事始め】クライアントスクリプト(その3)

onSubmit

 今回はonSubmitタイプを解説します。このタイフはフォームの送信時に実行されるスクリプトロジックで、これによりフィールドの値を検証するものでしたね。
 

 クライアントスクリプトの新規作成画面の[Type]フィールドで[onSubmit]を選択すると、スクリプトエディタに下図のような関数が表示されますので、開発者はここにコードを書いていきます。

 それではサンプルコードとしてインシデントテーブル(incident)に関するスクリプト[(BP) Close Mandatory on Close or Resolve]を見ていきましょう。
 Submit(送信)をクリックした際に、state(状況)がResolved(解決)またはClosed(クローズ)の場合は、Resolution Code(解決コード)とResolution notes(メモ)が必須項目になる。というスクリプトになります。
 

 それではスクリプトを詳しく見ていきましょう。

 最初にglide_formクラスのgetActionNameメソッドUIアクション(クリックされたアクション)を拾い、[close_incident] か [resolve_incident] でなければスクリプトを抜けます。
 UIアクションはUIアクションテーブル(sys_ui_action)で各テーブルごとに管理されており、getActionNameメソッドはUIアクションのsys_idを返します
 次にhasFieldメソッドでResolution Code(解決コード)とResolution notes(メモ)がフォーム上にフィールドとして存在しているかどうかを確認し、それらのどちらかが存在しなければ、スクリプトを抜けます。

 次に変数[state]の値を決めます。この変数はフィールド[state](状況)の値となります。初期値は[Resoluved] =6(解決済)で、UIアクションが[close_incident]の場合は、[Closed] = 7(クローズ)を代入します。

  最後に次のような操作をします。
  ・SetValueメソッドで[incident_state]フィールおよび[state]フィールドに変数stateの値をセットする
  ・SetDispalyメソッドで[incident_state]フィールおよび[state]フィールドを表示フィールドにする
  ・SetMandatoryメソッドで[incident_state]フィールおよび[state]フィールドを必須フィールドにする
  ・[close_code]フィールドまたは[close_note]フィールドのいずれかが空白であれば、SubmitできないようにFalseを返す

つまりこのスクリプトは

というスクリプトになります。