AEM ワークフローを使用してアダプティブフォームをデータベースに統合 submit-forms-to-database-using-forms-portal

自動フォーム変換サービスを使用すると、非対話型 PDF フォーム、AcroForms、XFA ベース PDF フォームをアダプティブフォームに変換することができます。 変換サービスを実行する際に、データバインディングを持つアダプティブフォームを生成するのか、データバインディングのないアダプティブフォームを生成するのかを指定することができます。

データバインディングがないアダプティブフォームを生成する場合は、変換処理の完了後に、フォームデータモデル、XML スキーマ、または JSON スキーマに、変換後のアダプティブフォームを統合することができます。 フォームデータモデルの場合、アダプティブフォームの各フィールドを、手動でフォームデータモデルにバインドする必要があります。 ただし、データバインディングを持つアダプティブフォームを生成すると、アダプティブフォームが自動的に JSON スキーマに関連付けられ、アダプティブフォームと JSON スキーマのフィールド間でデータバインディングが作成されます。 その後、任意のデータベースにアダプティブフォームを統合し、フォーム内のフィールドに値を設定して、データベースにフォームを送信することができます。 同様に、データベースとの統合後に、データベースから値を取得してアダプティブフォームフィールドにその値が事前に入力されるように、変換後のアダプティブフォームフィールドを設定することができます。

以下の図は、変換後のアダプティブフォームをデータベースに統合する手順をステージ別に示しています。

データベースとの統合手順

この記事では、これらの統合ステージを正しく実行するための手順について説明します。

前提条件 pre-requisites

  • バージョン 6.4 および 6.5 の AEM オーサーインスタンスのセットアップ
  • AEM インスタンスの最新のサービスパックをインストールする
  • 最新バージョンの AEM Forms アドオンパッケージ
  • 自動フォーム変換サービスの設定
  • データベースを設定します。 サンプルの実装環境では MySQL 5.6.24 データベースを使用しますが、変換後のアダプティブフォームは任意のデータベースに統合することができます。

サンプルのアダプティブフォーム sample-adaptive-form

AEM ワークフローを使用してこのユースケースを実行し、変換後のアダプティブフォームをデータベースに統合するには、以下のサンプル PDF ファイルが必要になります。

以下のリンクから、サンプルの「Contact Us」フォームをダウンロードしてください。

ファイルを入手

この PDF ファイルは、自動フォーム変換サービスの入力データとして機能します。 自動フォーム変換サービスを実行すると、このファイルがアダプティブフォームに変換されます。 以下の画像は、PDF 形式のサンプルの「Contact Us」フォームを示しています。

サンプルの連絡先フォーム

mysql-connector-java-5.1.39-bin.jar ファイルをインストール install-mysql-connector-java-file

すべてのオーサーインスタンスとパブリッシュインスタンスで、次の手順を実行し、mysql-connector-java-5.1.39-bin.jar ファイルをインストールします。

  1. http://server:port/system/console/depfinder にアクセスして com.mysql.jdbc パッケージを検索します。
  2. 「次による書き出し」列で、パッケージがバンドルで書き出されているかどうかを確認します。パッケージがバンドルで書き出されていない場合は、先に進みます。
  3. http://server:port/system/console/bundles に移動して「Install/Update」をクリックします。
  4. ファイルを選択」をクリックし、mysql-connector-java-5.1.39-bin.jar を探して選択します。また、「Start Bundle」チェックボックスと「Refresh Packages」チェックボックスを選択します。
  5. Install」または「Update」をクリックします。完了したら、サーバーを再起動します。
  6. (Windows のみ)オペレーティングシステムのシステムファイアウォールをオフにします。

フォームモデルのデータを準備 prepare-data-for-form-model

AEM Forms のデータ統合機能により、複数の異なるデータソースを設定して接続することができます。変換サービスを使用してアダプティブフォームを生成したら、使用するデータモデル(XSD スキーマまたは JSON スキーマ)に応じてフォームモデルを定義します。 データベース、Microsoft Dynamics、またはその他のサードパーティ製サービスを使用して、フォームデータモデルを作成することができます。

このチュートリアルでは、MySQL データベースをデータソースとして使用してフォームデータモデルを作成します。 アダプティブフォーム内の有効なフィールドに基づいて、データベース内にスキーマを作成し、このスキーマに contactus というテーブルを追加します。

サンプルの mysql データ

以下の DDL ステートメントを使用して、データベース内に contactus というテーブルを作成します。

CREATE TABLE `contactus` (
   `name` varchar(45) NOT NULL,
   `email` varchar(45) NOT NULL,
   `phonenumber` varchar(10) DEFAULT NULL,
   `issuedesc` varchar(1000) DEFAULT NULL,
   PRIMARY KEY (`email`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8

AEM インスタンスとデータベース間の接続を設定 configure-connection-between-aem-instance-and-database

AEM インスタンスと MYSQL データベース間の接続を作成するには、以下の手順を実行します。

  1. AEM Web コンソールの設定ページ(http://server:port/system/console/configMgr)に移動します。

  2. Web コンソールの設定ページで、「Apache Sling Connection Pooled DataSource」をクリックして編集モードで開きます。次の表の説明に従って、プロパティの値を指定します。

    table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 5-row-2 6-row-2 7-row-2 8-row-2 9-row-2 10-row-2 11-row-2 12-row-2 13-row-2 14-row-2 15-row-2 html-authored
    プロパティ
    データソース名 データソースプールからドライバーをフィルターするためのデータソース名。
    JDBC ドライバークラス com.mysql.jdbc.Driver
    JDBC 接続 URI jdbc//[host]:[port]/[schema_name]
    ユーザー名 データベース表でのアクションを認証・実行するためのユーザー名
    パスワード ユーザー名に関連するパスワード
    トランザクションの分離 READ_COMMITTED
    最大アクティブ接続数 1000
    最大アイドル接続数 100
    最小アイドル接続数 10
    初期サイズ 10
    最大待機時間 100000
    Test on Borrow チェック
    Test while Idle チェック
    検証クエリ 値の例:SELECT 1(mySQL)、select 1 from dual(Oracle)、SELECT 1(MS SQL Server)(validationQuery)
    検証クエリタイムアウト 10000

フォームデータモデルを作成 create-form-data-model

MYSQL をデータソースとして設定したら、以下の手順を実行してフォームデータモデルを作成します。

  1. AEM オーサーインスタンスで、フォームデータ統合 ​に移動します。

  2. 作成フォームデータモデル ​の順にタップします。

  3. フォームデータモデル作成 ​ウィザードで、フォームデータモデルの名前として「workflow_submit」と入力します。 「次へ」をタップします。

  4. 前のセクションで設定した MYSQL データソースを選択して「作成」をタップします。

  5. 編集」をタップして左側のウィンドウのデータソースを展開し、contactus テーブル、get サービス、insert サービスを選択して「選択項目を追加」をタップします。

    サンプルの mysql データ

  6. 右側のウィンドウでデータモデルオブジェクトを選択して「プロパティの編集」をタップします。 「読み取りサービス」ドロップダウンリストと「書き込みサービス」ドロップダウンリストで get サービスと insert サービスを選択します。 読み取りサービスの引数を指定して「完了」をタップします。

  7. サービス」タブで get サービスを選択して「プロパティの編集」をタップします。 「出力モデルオブジェクト」を選択し、「配列を返す」の切り替えを無効にして「完了」をタップします。

  8. Insert サービスを選択して「プロパティの編集」をタップします。「入力モデルオブジェクト」を選択して「完了」をタップします。

  9. 保存」をタップして、フォームデータモデルを保存します。

以下のリンクから、サンプルのフォームデータモジュールをダウンロードしてください。

ファイルを入手

JSON バインディングを持つアダプティブフォームを生成 generate-adaptive-forms-with-json-binding

自動フォーム変換サービスを使用して、「Contact Us」フォームを、データバインディングを持つアダプティブフォームに変換します。 アダプティブフォームを生成する際に、「データバインディングがないアダプティブフォームを生成」チェックボックスが無効になっていることを確認してください。

JSON バインディングを持つアダプティブフォーム

変換後の​ 「Contact Us」フォーム ​を「フォームとドキュメント」の output フォルダーで選択して「編集」をタップします。 次に「プレビュー」をタップし、アダプティブフォームフィールドに値を入力して「送信」をタップします。

crx-repository にログインして /content/forms/fp/admin/submit/data に移動し、JSON 形式で送信された値を表示します。 変換後の「Contact Us」アダプティブフォームを送信すると、サンプルデータが以下のような JSON 形式になります。

{
  "afData": {
    "afUnboundData": {
      "data": {}
    },
    "afBoundData": {
      "data": {
        "name1": "Gloria",
        "email": "abc@xyz.com",
        "phone_number": "2346578965",
        "issue_description": "Test message"
      }
    },
    "afSubmissionInfo": {
      "computedMetaInfo": {},
      "stateOverrides": {},
      "signers": {},
      "afPath": "/content/dam/formsanddocuments/docs_conversion/output/sample_form_json",
      "afSubmissionTime": "20191204014007"
    }
  }
}

このデータを処理するためのワークフローモデルを作成し、このワークフローモデルを、前のセクションで作成したフォームデータモデルを使用して MYSQL データベースに送信する必要があります。

JSON データを処理するためのワークフローモデルを作成 create-workflow-model

アダプティブフォームデータをデータベースに送信するためのワークフローモデルを作成するには、以下の手順を実行します。

  1. ワークフローモデルコンソールを開きます。デフォルトの URL は https://server:port/libs/cq/workflow/admin/console/content/models.html/etc/workflow/models です。

  2. 作成」を選択してから、「モデルを作成」を選択します。ワークフローモデルを追加 ​ダイアログが表示されます。

  3. タイトル」と「名前」(オプション)を入力します。例えば、「workflow_json_submit」などを入力します。 「完了」をタップしてモデルを作成します。

  4. ワークフローモデルを選択して「編集を」タップします。選択したモデルが編集モードで開きます。 「+」をタップし、「フォームデータモデルサービスを起動」ステップをワークフローモデルに追加します。

  5. フォームデータモデルサービスを起動」ステップをタップして「 設定 」をタップします。

  6. フォームデータモデル」タブで、「フォームデータモデルのパス」フィールドで作成したフォームデータモデルを選択し、「サービス」ドロップダウンリストで insert サービスを選択します。

  7. サービスの入力」タブのドロップダウンリストで「リテラル、変数またはワークフローメタデータ、および JSON ファイルを使用して入力データを指定」を選択し、「入力 JSON からのマップ入力フィールド」チェックボックスを選択して「ペイロードを基準とする」を選択します。次に、「次を使用して入力 JSON ドキュメントを選択」フィールドの値として「data.xml」を入力します。

  8. サービス引数」セクションで、フォームデータモデル引数の値として以下のように入力します。

    「フォームデータモデルサービスを起動」ステップ

    「contactus.name」などのフォームデータモデルフィールドは、afData.afBoundData.data.name1 変数にマップされます。この変数は、送信されたアダプティブフォームの JSON スキーマバインディングを参照します。

アダプティブフォームの送信を設定 configure-adaptive-form-submission

前のセクションで作成したワークフローモデルにアダプティブフォームを送信するには、以下の手順を実行します。

  1. 変換後の「Contact Us」フォームを「フォームとドキュメント」の output フォルダーで選択して「編集」をタップします。

  2. フォームコンテナ 設定 の順にタップしてアダプティブフォームのプロパティを開きます。

  3. 送信」セクションの​ 送信アクション」ドロップダウンリストで「AEM ワークフローを起動」を選択し、前のセクションで作成したワークフローモデルを選択して、「データファイルのパス」フィールドに「data.xml」を入力します。

  4. 保存 」をタップして、プロパティを保存します。

  5. 次に「プレビュー」をタップし、アダプティブフォームフィールドに値を入力して「送信」をタップします。 送信された値が、crx-repository ではなく、MYSQL データベーステーブルに表示されます。

データベースの値が事前に入力されるようにアダプティブフォームを設定する

テーブル内で定義されたプライマリーキー(この場合はメールアドレス)に基づいて、MYSQL データベースの値が事前に入力されるようにアダプティブフォームを設定するには、以下の手順を実行します。

  1. アダプティブフォームの「メール」フィールドをタップして「 ルールを編集 」をタップします。

  2. 作成」をタップし、「When」セクションの「状態の選択」ドロップダウンリストで「変更済み」を選択します。

  3. Then」セクションで「サービスを起動」を選択し、前のセクションで作成したフォームデータモデルのサービスとして「get」を選択します。

  4. 入力」セクションで「メール」を選択し、「出力」セクションで、フォームデータモデルの残り 3 つのフィールド(「名前」、「電話番号」、「問題の説明」)を選択します。 「完了」をタップして、設定を保存します。

    メールの事前入力設定

    これで、MYSQL データベース内の既存のメールエントリーに基づき、アダプティブフォームの「プレビュー」モードで、残り 3 つのフィールドの値を事前に入力することができます。 例えば、「メール」フィールドで「aya.tan@xyz.com」と入力し(「フォームモデルのデータを準備する」セクションの画像を参照)、Tab キーを使用してそのフィールドから離れると、残り 3 つのフィールド(「名前」、「電話番号」、「問題の説明」)がアダプティブフォームに自動的に表示されます。

以下のリンクから、サンプルの変換済みアダプティブフォームをダウンロードしてください。

ファイルを入手

recommendation-more-help
c40c2ccf-3d1b-4b47-b158-c4646051b46c