アダプティブフォーム送信アクション

送信アクションは、ユーザーがアダプティブフォームの「送信」ボタンをクリックしたするときにトリガーされます。アダプティブフォームには、すぐに使用できる送信アクションがいくつか用意されています。すぐに使用できる送信アクションを以下に示します。

デフォルトの送信アクションを拡張して、独自の送信アクションを作成することもできます。

サイドバーにあるアダプティブフォームコンテナプロパティの「送信」セクションで、送信アクションを設定できます。

送信アクションの設定

REST エンドポイントへの送信

REST エンドポイントへの送信​アクションを使用して、送信されたデータを REST URL に POST できます。URL は、内部(フォームがレンダリングされるサーバー)または外部サーバーのどちらのものでも使用できます。

内部サーバーにデータを POST 送信するには、リソースのパスを指定します。データは、リソースのパスに POST されます。例えば、/content/restEndPoint です。このような POST リクエストには、送信リクエストの認証情報が使用されます。

外部サーバーにデータを POST 送信するには、URL を指定します。URL の形式は、https://host:port/path_to_rest_end_point です。POST リクエストを匿名で処理するためのパスを設定してください。

「ありがとうございます」ページのパラメーターとして渡されたフィールド値のマッピング

上の例で、ユーザーが textbox に入力した情報は、パラメーター param1 を使用して取得されます。param1 を使用して取得されるデータを POST するための構文を以下に示します。

String data=request.getParameter("param1");

同様に、XML データと添付ファイルの POST に使用するパラメーターは、dataXml および attachments です。

例えば、この 2 つのパラメーターをスクリプト中で使用して、REST エンドポイントに送信されたデータを解析できます。データを格納および解析するための構文を以下に示します。

String data=request.getParameter("dataXml");
String att=request.getParameter("attachments");

この例では、data が XML データを格納し、att が添付ファイルデータを格納します。

REST エンドポイントへの送信​送信アクションでは、フォームに入力されたデータを HTTP GET リクエストの一部として設定済みの確認ページに送信します。リクエストにフィールド名を追加できます。リクエストのフォーマットを以下に示します。

{fieldName}={request parameter name}

以下の画像に示されているように、param1 および param2 が、textbox フィールドおよび numericbox フィールドからコピーされた値を持つパラメーターとして、次のアクションに向けて渡されます。

REST エンドポイント送信アクションの設定

POST リクエストを有効にする​ことで、リクエストを POST する URL を指定することもできます。フォームをホストする AEM サーバーにデータを送信するには、AEM サーバーのルートパスに対応する相対パスを使用します。例えば、/content/forms/af/SampleForm.html のようになります。他のサーバーにデータを送信するには、絶対パスを使用します。

メモ

フィールドを REST URL 内のパラメーターとして渡すためには、すべてのフィールドが異なる要素名を持っている必要があります。これは、異なるパネルに置かれているフィールドにも適用されます。

電子メールを送信

電子メールを送信」送信アクションでは、フォームの送信が完了すると同時に、1 人または複数の受信者に電子メールが送信されます。生成される電子メールには、事前に定義された形式のフォームデータを含めることができます。例えば、以下のテンプレートでは、顧客名、配送先住所、州名、郵便番号が、送信されたフォームデータから取得されます。

```

こんにちは ${customer_Name} さん、

以下がデフォルトの配送先住所として設定されています。
${customer_Name}、
${customer_Shipping_Address}、
${customer_State}、
${customer_ZIPCode}

よろしくお願いいたします。
WKND

```
メモ
  • フィールドがアダプティブフォームの異なるパネルに配置されている場合でも、すべてのフォームフィールドは異なる要素名を持っている必要があります。
  • AEM as a Cloud Service では、送信メールを暗号化する必要があります。デフォルトでは、送信電子メールは無効になっています。有効にするには、アクセスのリクエストにサポートチケットを送信します。

電子メールには、添付ファイルとレコードのドキュメント(DoR)を含めることもできます。「レコードのドキュメントを添付」オプションを有効にするには、レコードのドキュメント(DoR)を生成するようにアダプティブフォームを設定します。このオプションを有効にして、アダプティブフォームのプロパティからレコードのドキュメントを生成できます。

フォームデータモデルを使用して送信

フォームデータモデルを使用して送信」送信アクションでは、フォームデータモデルの特定のデータモデルオブジェクトで送信したアダプティブフォームデータをデータソースに書き込みます。送信アクションの設定時に、データソースに書き戻す送信済みデータを持つデータモデルオブジェクトを選択できます。

さらに、フォームデータモデルとレコードのドキュメント(DoR)を使用して、フォームの添付ファイルをデータソースに送信できます。フォームデータモデルについて詳しくは、AEM Forms のデータ統合機能を参照してください。

AEM ワークフローを起動

AEM ワークフローを起動」送信アクションは、アダプティブフォームを AEM ワークフローと関連付けます。フォームが送信されると、関連するワークフローがオーサーインスタンスで自動的に起動します。データファイル、添付ファイル、レコードのドキュメントは、ワークフローのペイロードの場所または変数に保存できます。ワークフローが外部データストレージ用にマークされ、外部データストレージ用に設定されている場合、変数オプションのみを使用できます。ワークフローモデルで使用できる変数のリストから選択できます。ワークフローの作成時ではなく、後の段階で外部データストレージの対象としてワークフローがマークされている場合は、必要な変数設定が適切に行われていることを確認します。

送信アクションは、ワークフローのペイロードの場所、またはワークフローが外部データストレージ用にマークされている場合は変数に、以下を配置します。

  • データファイル:アダプティブフォームに送信されたデータを含みます。「データファイルパス」オプションを使用して、ファイル名とペイロードを基準とするファイルのパスを指定できます。例えば、/addresschange/data.xml パスは、addresschange という名前のフォルダーを作成し、ペイロードを基準に配置します。フォルダー階層を作成せずに、data.xml のみを指定して、送信されたデータのみを送信することもできます。ワークフローが外部データストレージ用にマークされている場合は、「変数」オプションを使用し、ワークフローモデルで使用可能な変数のリストから変数を選択します。

  • 添付ファイル:「添付ファイルのパス」オプションを使用して、アダプティブフォームにアップロードされた添付ファイルの保存先となるフォルダー名を指定できます。フォルダーがペイロードを基準に作成されます。ワークフローが外部データストレージ用にマークされている場合は、「変数」オプションを使用し、ワークフローモデルで使用可能な変数のリストから変数を選択します。

  • レコードのドキュメント:アダプティブフォーム用に生成されたレコードのドキュメントを含みます。「レコードのドキュメントパス」オプションを使用して、レコードのドキュメントファイル名と、ペイロードを基準にファイルのパスを指定できます。例えば、/addresschange/DoR.pdf パスは、ペイロードを基準に addresschange という名前のフォルダーを作成し、ペイロードを基準に DoR.pdf を配置します。DoR.pdf のみを指定して、フォルダー階層を作成せずに、レコードのドキュメントのみを保存することもできます。ワークフローが外部データストレージ用にマークされている場合は、「変数」オプションを使用し、ワークフローモデルで使用可能な変数のリストから変数を選択します。

AEM ワークフローを起動」送信アクションを使用する前に、AEM DS 設定サービス​の設定に対して、以下の設定を行います。

  • 処理サーバー URL:処理サーバーは、Forms または AEM ワークフローがトリガーされるサーバーです。これは、AEM オーサーインスタンスまたは別のサーバーの URL と同じです。

  • 処理サーバーのユーザー名:ワークフローユーザーのユーザー名

  • 処理サーバーのパスワード:ワークフローユーザーのパスワード

設定の値をセットするには、AEM SDK を使用して OSGi 設定を生成し、Cloud Service インスタンスに設定をデプロイします。

同期または非同期送信の使用

送信アクションは、同期または非同期の送信を使用できます。

同期送信:これまでの Web フォームは、同期送信用に設定されていました。同期送信では、ユーザーがフォームを送信すると、確認ページ、ありがとうページ、または送信に失敗した場合はエラーページにリダイレクトされます。「非同期送信を使用」オプションを選択して、ユーザーを Web ページにリダイレクトしたり、送信時にメッセージを表示したりできます。

送信アクションの設定

非同期送信:単一ページアプリケーションなどの最新の Web エクスペリエンスが広く使用されるようになっています。こうしたアプリケーションでは、バックグラウンドでクライアントとサーバー間の通信が実行されている間、Web ページが静的な状態のままになります。非同期送信を設定することにより、アダプティブフォームでこうしたエクスペリエンスを実現できます。

アダプティブフォームでのサーバーサイドの再検証

通常、どのようなオンラインデータ取得システムでも、ビジネスルールを適用するために、開発者はクライアントサイドに何らかの JavaScript 検証を配置します。しかし、最新のブラウザーでは、エンドユーザーが Web Browser DevTools Console などの様々な手法を使用してこれらの検証を回避し、手動で送信を行える方法が存在します。このような手法は、アダプティブフォームにも有効です。フォーム開発者は、多様な検証ロジックを作成できますが、エンドユーザーは、これらの検証ロジックを回避し、無効なデータをサーバーに送信できます。無効なデータは、フォーム作成者が適用したビジネスルールを破ることになります。

サーバーサイドの再検証機能は、アダプティブフォーム作成者がアダプティブフォームのデザイン中に指定した検証を、サーバー上でも実行するための機能です。これは、フォームの検証で表されるデータ送信の漏洩やビジネスルール違反の可能性を阻止します。

サーバーで検証されるもの

サーバーで再実行される、アダプティブフォームのすぐに使用できる(OOTB)すべてのフィールド検証を以下に示します。

  • 必須
  • 検証パターン形式文字列
  • 検証式

サーバーサイド検証の有効化

サイドバーにある「アダプティブフォームコンテナ」の「サーバー側で再検証」を使用して、現在のフォームのサーバーサイド検証を有効または無効にします。

サーバーサイド検証の有効化

サーバーサイド検証の有効化

エンドユーザーがこれらの検証を回避してフォームを送信した場合、サーバーが再度検証を行います。サーバーサイドでの検証が失敗した場合、送信処理が中止されます。エンドユーザーには、元のフォームが再度表示されます。取得されたデータおよび送信されたデータは、エラーとしてユーザーに表示されます。

メモ

サーバーサイド検証により、フォームモデルが検証されます。検証のために別個のクライアントライブラリを作成し、1 つのクライアントライブラリに HTML のスタイルや DOM 操作を混在させないことをお勧めします。

検証式でのカスタム関数のサポート

複雑な検証ルール​がある場合、正確な検証スクリプトがカスタム関数の中に存在し、作成者がこれらのカスタム関数をフィールド検証式から呼び出すことがあります。このカスタム関数ライブラリをサーバーサイド検証中に認識させ、利用可能にするために、フォーム作成者は、「アダプティブフォームコンテナ」プロパティの「基本」タブで、AEM クライアントライブラリの名前を設定できます(下記画像を参照)。

検証式でのカスタム関数のサポート

検証式でのカスタム関数のサポート

作成者は、アダプティブフォームごとにカスタム JavaScript ライブラリを設定できます。ライブラリには、jQuery および underscore.js サードパーティライブラリに依存する、再利用可能な関数のみを保持します。

送信アクションに対するエラー処理

AEM セキュリティおよび堅牢化ガイドラインの一環として、400.jsp、404.jsp、500.jsp などのカスタムエラーページを設定します。これらのハンドラーは、フォーム送信時に 400、404 または 500 エラーが表示される場合に呼び出されます。また、これらのハンドラーは、公開ノードでこれらのエラーコードがトリガーされる場合にも呼び出されます。他の HTTP エラーコード用の JSP ページを作成することもできます。

フォームデータモデルに事前入力したり、<afData><afBoundData> および </afUnboundData> タグを含まないデータであるスキーマに対する XML または JSON データの苦情を含むスキーマベースのアダプティブフォームに事前入力すると、アダプティブフォームの境界なしのフィールドのデータは失われます。このスキーマは、XML スキーマ、JSON スキーマまたはフォームデータモデルのいずれかです。境界なしのフィールドは、bindref プロパティを持たないアダプティブフォームフィールドです。

このページ