consentFlow フォームビルダー ライフサイクルイベント一覧

consentFlow フォームビルダーで利用可能なライフサイクルイベント一覧

logic のトリガーや form.on() で利用できるイベントの一覧です。
以下のイベント名は内部的に定義している特別なライフサイクルイベント

イベント発火タイミング備考
initializedコンポーネントの初期化完了時Formio が内部的に保証する特別なライフサイクルイベント。customDefaultValue の評価後に発火するため、初期値を利用した処理に最適。
changeフィールドの値が変更された時consentFlow では change イベントを起点に serializeData() が実行され SearchFieldJson に書き込まれる。
blurフォーカスが外れた時入力完了後のバリデーションや補完処理に使用する。
focusフォーカスが当たった時関連フィールドの表示切り替えや入力補助の表示に活用できる。
submitフォームの送信時consentFlow では XPages 側でフォーム送信を制御しているため通常使用しない。
errorバリデーションエラー発生時カスタムエラーメッセージの表示やエラー箇所へのスクロール処理に使用できる。
renderフォームの描画完了時DOM 操作が必要な処理に使用する。initialized より後に発火する。
prevPage / nextPageウィザード形式のページ遷移時Wizard 形式のフォーム専用。通常の検索フォームでは使用しない。

initialized イベントについて

initialized は内部的に定義している特別なライフサイクルイベントです。 任意の文字列(カスタムイベント)とは異なり、開発者が form.emit() で手動発火しなくても フォームが必ず発火を保証します。 customDefaultValue の評価が完了した後に発火するため、初期値を前提とした処理を安全に記述できます。

logic JSON の例

{
  "name": "onInitialized",
  "trigger": {
    "type": "event",
    "event": "initialized"
  },
  "actions": [
    {
      "name": "doSomething",
      "type": "customAction",
      "customAction": "/* data には初期値が既にセット済み */"
    }
  ]
}

consentFlow での注意点

consentFlowではAjax処理(XPagesの部分更新)発生すると WEBフォームが再描画され、initialized が再発火します。 ボタンクリックなど一度だけ実行したい処理には window._formioInitialized フラグなどによるガードが必須です。

if (!window._formioInitialized) {
  window._formioInitialized = true;

  // SearchFieldJson に初期データを書き込む
  var hidden = document.querySelector('input[id$="SearchFieldJson"]');
  if (hidden) {
    hidden.value = JSON.stringify(data); // data は customAction コンテキスト変数
  }

  // 300ms 後に検索ボタンをクリック
  setTimeout(function() {
    var btn = document.querySelector('button[id$="buttonWebFormSearch"]');
    if (btn) btn.click();
  }, 300);
}

customAction で使えるコンテキスト変数

logic の customAction 内で自動的に利用可能な変数の一覧です。

変数内容
dataフォーム全体の現在のデータオブジェクト。初期値・入力値ともに含む。form.submission.data と異なり、customAction コンテキストでは常に安全に参照できる。
instanceロジックが定義されているコンポーネントのインスタンス。instance.getValue() / instance.setValue() で操作可能。
formFormio フォームのインスタンス。form.getComponent('key') で他コンポーネントを取得できる。form.submission は初期化タイミングによって未定義になる場合があるため注意。
component対象コンポーネントの JSON 定義オブジェクト(スキーマ)。
rowDataGrid や EditGrid 内のコンポーネントの場合、現在の行データ。通常の検索フォームでは使用しない。

カスタムイベントの手動発火

form.emit() を使うと任意のイベントを手動発火できます。コンポーネント間を直接参照せずに連携させたい場合に有効です。

// 発火側
form.emit('myCustomEvent');

受け取り側は別コンポーネントの logic に以下のように定義します。

{
  "trigger": {
    "type": "event",
    "event": "myCustomEvent"
  }
}