自動フォーム変換サービスを使用すると、非対話型 PDF フォーム、AcroForms、XFA ベース PDF フォームをアダプティブフォームに変換することができます。 変換サービスを実行する際に、データバインディングを持つアダプティブフォームを生成するのか、データバインディングのないアダプティブフォームを生成するのかを指定することができます。
データバインディングがないアダプティブフォームを生成する場合は、変換処理の完了後に、フォームデータモデル、XML スキーマ、または JSON スキーマに、変換後のアダプティブフォームを統合することができます。 フォームデータモデルの場合、アダプティブフォームの各フィールドを、手動でフォームデータモデルにバインドする必要があります。 ただし、データバインディングを持つアダプティブフォームを生成すると、アダプティブフォームが自動的に JSON スキーマに関連付けられ、アダプティブフォームと JSON スキーマのフィールド間でデータバインディングが作成されます。 その後、任意のデータベースにアダプティブフォームを統合し、フォーム内のフィールドに値を設定して、データベースにフォームを送信することができます。 同様に、データベースとの統合後に、データベースから値を取得してアダプティブフォームフィールドにその値が事前に入力されるように、変換後のアダプティブフォームフィールドを設定することができます。
以下の図は、変換後のアダプティブフォームをデータベースに統合する手順をステージ別に示しています。
この記事では、これらの統合ステージを正しく実行するための手順について説明します。
AEM ワークフローを使用してこのユースケースを実行し、変換後のアダプティブフォームをデータベースに統合するには、以下のサンプル PDF ファイルが必要になります。
以下のリンクから、サンプルの「Contact Us」フォームをダウンロードしてください。
この PDF ファイルは、自動フォーム変換サービスの入力データとして機能します。 自動フォーム変換サービスを実行すると、このファイルがアダプティブフォームに変換されます。 以下の画像は、PDF 形式のサンプルの「Contact Us」フォームを示しています。
すべてのオーサーインスタンスとパブリッシュインスタンスで、次の手順を実行し、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」をクリックします。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 インスタンスと MYSQL データベース間の接続を作成するには、以下の手順を実行します。
AEM Web コンソールの設定ページ(http://server:port/system/console/configMgr
)に移動します。
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 をデータソースとして設定したら、以下の手順を実行してフォームデータモデルを作成します。
AEM オーサーインスタンスで、フォーム/データ統合に移動します。
作成/フォームデータモデルの順にタップします。
フォームデータモデル作成ウィザードで、フォームデータモデルの名前として「workflow_submit」と入力します。 「次へ」をタップします。
前のセクションで設定した MYSQL データソースを選択して「作成」をタップします。
「編集」をタップして左側のウィンドウのデータソースを展開し、contactus テーブル、get サービス、insert サービスを選択して「選択項目を追加」をタップします。
右側のウィンドウでデータモデルオブジェクトを選択して「プロパティの編集」をタップします。 「読み取りサービス」ドロップダウンリストと「書き込みサービス」ドロップダウンリストで get サービスと insert サービスを選択します。 読み取りサービスの引数を指定して「完了」をタップします。
「サービス」タブで get サービスを選択して「プロパティの編集」をタップします。 「出力モデルオブジェクト」を選択し、「配列を返す」の切り替えを無効にして「完了」をタップします。
Insert サービスを選択して「プロパティの編集」をタップします。「入力モデルオブジェクト」を選択して「完了」をタップします。
「保存」をタップして、フォームデータモデルを保存します。
以下のリンクから、サンプルのフォームデータモジュールをダウンロードしてください。
自動フォーム変換サービスを使用して、「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 データベースに送信する必要があります。
アダプティブフォームデータをデータベースに送信するためのワークフローモデルを作成するには、以下の手順を実行します。
ワークフローモデルコンソールを開きます。デフォルトの 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 つのフィールド(「名前」、「電話番号」、「問題の説明」)がアダプティブフォームに自動的に表示されます。
以下のリンクから、サンプルの変換済みアダプティブフォームをダウンロードしてください。