Show Menu
トピック×

AEM ワークフローを使用してアダプティブフォームをデータベースに統合する

自動フォーム変換サービスを使用すると、非対話型 PDF フォーム、AcroForms、XFA ベース PDF フォームをアダプティブフォームに変換することができます。 変換サービスを実行する際に、データバインディングを持つアダプティブフォームを生成するのか、データバインディングのないアダプティブフォームを生成するのかを指定することができます。
データバインディングがないアダプティブフォームを生成する場合は、変換処理の完了後に、フォームデータモデル、XML スキーマ、または JSON スキーマに、変換後のアダプティブフォームを統合することができます。 フォームデータモデルの場合、アダプティブフォームの各フィールドを、手動でフォームデータモデルにバインドする必要があります。 ただし、データバインディングを持つアダプティブフォームを生成すると、アダプティブフォームが自動的に JSON スキーマに関連付けられ、アダプティブフォームと JSON スキーマのフィールド間でデータバインディングが作成されます。 その後、任意のデータベースにアダプティブフォームを統合し、フォーム内のフィールドに値を設定して、データベースにフォームを送信することができます。 同様に、データベースとの統合後に、データベースから値を取得してアダプティブフォームフィールドにその値が事前に入力されるように、変換後のアダプティブフォームフィールドを設定することができます。
以下の図は、変換後のアダプティブフォームをデータベースに統合する手順をステージ別に示しています。
この記事では、これらの統合ステージを正しく実行するための手順について説明します。

前提条件

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

サンプルのアダプティブフォーム

AEM ワークフローを使用してこのユースケースを実行し、変換後のアダプティブフォームをデータベースに統合するには、以下のサンプル PDF ファイルが必要になります。
以下のリンクから、サンプルの「Contact Us」フォームをダウンロードしてください。
この PDF ファイルは、自動フォーム変換サービスの入力データとして機能します。 自動フォーム変換サービスを実行すると、このファイルがアダプティブフォームに変換されます。 以下の画像は、PDF 形式のサンプルの「Contact Us」フォームを示しています。

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

すべてのオーサーインスタンスとパブリッシュインスタンスで、次の手順を実行し、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 のみ)オペレーティングシステムのシステムファイアウォールをオフにします。

フォームモデルのデータを準備する

AEM Forms のデータ統合機能により、複数の異なるデータソースを設定して接続することができます。変換サービスを使用してアダプティブフォームを生成したら、使用するデータモデル(XSD スキーマまたは JSON スキーマ)に応じてフォームモデルを定義します。 データベース、Microsoft Dynamics、またはその他のサードパーティ製サービスを使用して、フォームデータモデルを作成することができます。
このチュートリアルでは、MySQL データベースをデータソースとして使用してフォームデータモデルを作成します。 アダプティブフォーム内の有効なフィールドに基づいて、データベース内にスキーマを作成し、このスキーマに contactus というテーブルを追加します。
以下の 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 インスタンスとデータベース間の接続を設定する

AEM インスタンスと MYSQL データベース間の接続を作成するには、以下の手順を実行します。
  1. AEM Web コンソールの設定ページ( http://server:port/system/console/configMgr )に移動します。
  2. Web コンソールの設定ページで、「 Apache Sling Connection Pooled DataSource 」をクリックして編集モードで開きます。次の表の説明に従って、プロパティの値を指定します。
    プロパティ
    データソース名
    データソースプールからドライバーをフィルターするためのデータソース名。
    JDBC ドライバークラス
    com.mysql.jdbc.Driver
    JDBC 接続 URI
    jdbc:mysql://[ホスト]:[ポート]/[スキーマ名]
    ユーザー名
    データベース表でのアクションを認証・実行するためのユーザー名
    パスワード
    ユーザー名に関連するパスワード
    トランザクションの分離
    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

フォームデータモデルを作成する

MYSQL をデータソースとして設定したら、以下の手順を実行してフォームデータモデルを作成します。
  1. AEM オーサーインスタンスで、 フォーム データ統合 ​に移動します。
  2. 作成 フォームデータモデル ​の順にタップします。
  3. フォームデータモデル作成 ​ウィザードで、フォームデータモデルの名前として「 workflow_submit 」と入力します。 「 次へ 」をタップします。
  4. 前のセクションで設定した MYSQL データソースを選択して「 作成 」をタップします。
  5. 編集 」をタップして左側のウィンドウのデータソースを展開し、 contactus テーブル、 get サービス、 insert サービスを選択して「 選択項目を追加 」をタップします。
  6. 右側のウィンドウでデータモデルオブジェクトを選択して「 プロパティの編集 」をタップします。 「 読み取りサービス 」ドロップダウンリストと「 書き込みサービス 」ドロップダウンリストで get サービスと insert サービスを選択します。 読み取りサービスの引数を指定して「 完了 」をタップします。
  7. サービス 」タブで get サービスを選択して「 プロパティの編集 」をタップします。 「 出力モデルオブジェクト 」を選択し、「 配列を返す 」の切り替えを無効にして「 完了 」をタップします。
  8. Insert サービスを選択して「 プロパティの編集 」をタップします。「 入力モデルオブジェクト 」を選択して「 完了 」をタップします。
  9. 保存 」をタップして、フォームデータモデルを保存します。
以下のリンクから、サンプルのフォームデータモジュールをダウンロードしてください。

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

自動フォーム変換サービス を使用して、 「Contact Us」フォーム を、データバインディングを持つアダプティブフォームに変換します。 アダプティブフォームを生成する際に、「 データバインディングがないアダプティブフォームを生成 」チェックボックスが無効になっていることを確認してください。
変換後の​ 「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 データを処理するためのワークフローモデルを作成する

アダプティブフォームデータをデータベースに送信するためのワークフローモデルを作成するには、以下の手順を実行します。
  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 スキーマバインディングを参照します。

アダプティブフォームの送信設定

前のセクションで作成したワークフローモデルにアダプティブフォームを送信するには、以下の手順を実行します。
  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 つのフィールド(「 名前 」、「 電話番号 」、「 問題の説明 」)がアダプティブフォームに自動的に表示されます。
以下のリンクから、サンプルの変換済みアダプティブフォームをダウンロードしてください。