AEM ワークフローを使用してアダプティブフォームをデータベースに統合
- トピック:
- アダプティブフォーム
作成対象:
- 初心者
- 中級
- 管理者
- 開発者
自動フォーム変換サービス(AFCS)を使用すると、非インタラクティブ 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 ファイルは、自動フォーム変換サービス(AFCS)への入力として機能します。自動フォーム変換サービスを実行すると、このファイルがアダプティブフォームに変換されます。 以下の画像は、PDF 形式のサンプルの「Contact Us」フォームを示しています。
mysql-connector-java-5.1.39-bin.jar ファイルをインストール
すべてのオーサーインスタンスとパブリッシュインスタンスで、次の手順を実行し、mysql-connector-java-5.1.39-bin.jar ファイルをインストールします。
http://server:port/system/console/depfinder
にアクセスして com.mysql.jdbc パッケージを検索します。- 「次による書き出し」列で、パッケージがバンドルで書き出されているかどうかを確認します。パッケージがバンドルで書き出されていない場合は、先に進みます。
http://server:port/system/console/bundles
に移動して「Install/Update」をクリックします。- 「ファイルを選択」をクリックし、mysql-connector-java-5.1.39-bin.jar を探して選択します。また、「Start Bundle」チェックボックスと「Refresh Packages」チェックボックスを選択します。
- 「Install」または「Update」をクリックします。完了したら、サーバーを再起動します。
- (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 データベース間の接続を作成するには、以下の手順を実行します。
-
AEM Web コンソールの設定ページ(
http://server:port/system/console/configMgr
)に移動します。 -
Web コンソールの設定ページで、「Apache Sling Connection Pooled DataSource」をクリックして編集モードで開きます。次の表の説明に従って、プロパティの値を指定します。
プロパティ値データソース名データソースプールからドライバーをフィルターするためのデータソース名。JDBC ドライバークラスcom.mysql.jdbc.DriverJDBC 接続 URIjdbc//[host]:[port]/[schema_name]
ユーザー名データベース表でのアクションを認証・実行するためのユーザー名パスワードユーザー名に関連するパスワードトランザクションの分離READ_COMMITTED最大アクティブ接続数1000最大アイドル接続数100最小アイドル接続数10初期サイズ10最大待機時間100000Test on BorrowチェックTest while Idleチェック検証クエリ値の例:SELECT 1(mySQL)、select 1 from dual(Oracle)、SELECT 1(MS SQL Server)(validationQuery)検証クエリタイムアウト10000
フォームデータモデルを作成
MYSQL をデータソースとして設定したら、以下の手順を実行してフォームデータモデルを作成します。
-
AEM オーサーインスタンスで、フォーム/データ統合 に移動します。
-
作成/フォームデータモデル の順にタップします。
-
フォームデータモデル作成 ウィザードで、フォームデータモデルの名前として「workflow_submit」と入力します。 「次へ」をタップします。
-
前のセクションで設定した MYSQL データソースを選択して「作成」をタップします。
-
「編集」をタップして左側のウィンドウのデータソースを展開し、contactus テーブル、get サービス、insert サービスを選択して「選択項目を追加」をタップします。
-
右側のウィンドウでデータモデルオブジェクトを選択して「プロパティの編集」をタップします。 「読み取りサービス」ドロップダウンリストと「書き込みサービス」ドロップダウンリストで get サービスと insert サービスを選択します。 読み取りサービスの引数を指定して「完了」をタップします。
-
「サービス」タブで get サービスを選択して「プロパティの編集」をタップします。 「出力モデルオブジェクト」を選択し、「配列を返す」の切り替えを無効にして「完了」をタップします。
-
Insert サービスを選択して「プロパティの編集」をタップします。「入力モデルオブジェクト」を選択して「完了」をタップします。
-
「保存」をタップして、フォームデータモデルを保存します。
以下のリンクから、サンプルのフォームデータモジュールをダウンロードしてください。
JSON バインディングを持つアダプティブフォームを生成
自動フォーム変換サービス(AFCS)を使用して、お問い合わせフォームをデータバインディング付きのアダプティブフォームに変換します。アダプティブフォームを生成する際に、「データバインディングがないアダプティブフォームを生成」チェックボックスが無効になっていることを確認してください。
変換後の 「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 データを処理するためのワークフローモデルを作成
アダプティブフォームデータをデータベースに送信するためのワークフローモデルを作成するには、以下の手順を実行します。
-
ワークフローモデルコンソールを開きます。デフォルトの URL は
https://server:port/libs/cq/workflow/admin/console/content/models.html/etc/workflow/models
です。 -
「作成」を選択してから、「モデルを作成」を選択します。ワークフローモデルを追加 ダイアログが表示されます。
-
「タイトル」と「名前」(オプション)を入力します。例えば、「workflow_json_submit」などを入力します。 「完了」をタップしてモデルを作成します。
-
ワークフローモデルを選択して「編集を」タップします。選択したモデルが編集モードで開きます。 「+」をタップし、「フォームデータモデルサービスを起動」ステップをワークフローモデルに追加します。
-
「フォームデータモデルサービスを起動」ステップをタップして「
-
「フォームデータモデル」タブで、「フォームデータモデルのパス」フィールドで作成したフォームデータモデルを選択し、「サービス」ドロップダウンリストで insert サービスを選択します。
-
「サービスの入力」タブのドロップダウンリストで「リテラル、変数またはワークフローメタデータ、および JSON ファイルを使用して入力データを指定」を選択し、「入力 JSON からのマップ入力フィールド」チェックボックスを選択して「ペイロードを基準とする」を選択します。次に、「次を使用して入力 JSON ドキュメントを選択」フィールドの値として「data.xml」を入力します。
-
「サービス引数」セクションで、フォームデータモデル引数の値として以下のように入力します。
「contactus.name」などのフォームデータモデルフィールドは、afData.afBoundData.data.name1 変数にマップされます。この変数は、送信されたアダプティブフォームの JSON スキーマバインディングを参照します。
アダプティブフォームの送信を設定
前のセクションで作成したワークフローモデルにアダプティブフォームを送信するには、以下の手順を実行します。
-
変換後の「Contact Us」フォームを「フォームとドキュメント」の output フォルダーで選択して「編集」をタップします。
-
フォームコンテナ/
-
「送信」セクションの 送信アクション」ドロップダウンリストで「AEM ワークフローを起動」を選択し、前のセクションで作成したワークフローモデルを選択して、「データファイルのパス」フィールドに「data.xml」を入力します。
-
「
-
次に「プレビュー」をタップし、アダプティブフォームフィールドに値を入力して「送信」をタップします。 送信された値が、crx-repository ではなく、MYSQL データベーステーブルに表示されます。
データベースの値が事前に入力されるようにアダプティブフォームを設定する
テーブル内で定義されたプライマリーキー(この場合はメールアドレス)に基づいて、MYSQL データベースの値が事前に入力されるようにアダプティブフォームを設定するには、以下の手順を実行します。
-
アダプティブフォームの「メール」フィールドをタップして「
-
「作成」をタップし、「When」セクションの「状態の選択」ドロップダウンリストで「変更済み」を選択します。
-
「Then」セクションで「サービスを起動」を選択し、前のセクションで作成したフォームデータモデルのサービスとして「get」を選択します。
-
「入力」セクションで「メール」を選択し、「出力」セクションで、フォームデータモデルの残り 3 つのフィールド(「名前」、「電話番号」、「問題の説明」)を選択します。 「完了」をタップして、設定を保存します。
これで、MYSQL データベース内の既存のメールエントリーに基づき、アダプティブフォームの「プレビュー」モードで、残り 3 つのフィールドの値を事前に入力することができます。 例えば、「メール」フィールドで「aya.tan@xyz.com」と入力し(「フォームモデルのデータを準備する」セクションの画像を参照)、Tab キーを使用してそのフィールドから離れると、残り 3 つのフィールド(「名前」、「電話番号」、「問題の説明」)がアダプティブフォームに自動的に表示されます。
以下のリンクから、サンプルの変換済みアダプティブフォームをダウンロードしてください。