ドラフトと送信コンポーネントとデータベースの統合のサンプル sample-for-integrating-drafts-submissions-component-with-database
サンプルの概要 sample-overview
AEM Forms ポータルのドラフトと送信コンポーネントにより、ユーザーはフォームをドラフトとして保存し、任意のデバイスから後で送信できます。また、ユーザーは、ポータルで送信済みのフォームを表示できます。この機能を有効にするために、AEM Forms では、ユーザーによってフォームに入力されたデータ、ドラフトと送信済みフォームに関連するフォームメタデータを保存する、データおよびメタデータサービスを提供します。このデータは、デフォルトで CRX レポジトリに格納されます。ただし、ユーザーが AEM のパブリッシュインスタンスを通じてフォームとやり取りを行うのは通常企業のファイアウォールの外側であるため、組織によっては、よりセキュアで信頼性のあるデータストレージが必要となる場合もあります。
このドキュメントで取り上げるサンプルは、ドラフトと送信コンポーネントをデータベースに統合するカスタマイズされたデータサービスおよびメタデータサービスのリファレンス実装です。サンプル実装で使用されるデータベースは MySQL 5.6.24 です。ただし、ドラフトと送信コンポーネントは、あらゆるデータベースに統合できます。
- このドキュメントで説明される例および設定は、MySQL 5.6.24 に基づいているため、お使いのデータベースシステムに合わせてそれらを適切に置き換える必要があります。
- 最新バージョンの AEM Forms のアドオンパッケージをインストールしていることを確認します。使用可能なパッケージのリストについて詳しくは、AEM Forms リリースの記事を参照してください。
- サンプルパッケージは、アダプティブフォーム送信アクションでのみ機能します。
サンプルのセットアップおよび設定 set-up-and-configure-the-sample
すべてのオーサーインスタンスとパブリッシュインスタンスで、次の手順を実行し、サンプルをインストールして設定します。
-
パッケージ aem-fp-db-integration-sample-pkg-6.1.2.zip をファイルシステムにダウンロードします。
データベース統合のサンプルパッケージ
-
AEM パッケージマネージャー(https://[host]:[port]/crx/packmgr/)に移動します。
-
「パッケージをアップロード」をクリックします。
-
パッケージ aem-fp-db-integration-sample-pkg-6.1.2.zip を参照して選択し、「OK」をクリックします。
-
パッケージの隣にある「インストール」をクリックし、パッケージをインストールします。
-
AEM web コンソール設定
ページ(https://[host]:[port]/system/console/configMgr)に移動します。 -
Forms Portal Draft and Submission Configuration をクリックし、編集モードで開きます。
-
次の表の説明に従って、プロパティの値を指定します。
table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 5-row-3 6-row-3 プロパティ 説明 値 フォームポータル ドラフトデータサービス ドラフトデータサービスの識別子 formsportal.sampledataservice フォームポータルドラフトメタデータサービス ドラフトメタデータサービスの識別子 formsportal.samplemetadataservice フォームポータル送信データサービス 送信データサービスの識別子 formsportal.sampledataservice フォームポータル送信メタデータサービス 送信メタデータサービスの識別子 formsportal.samplemetadataservice フォームポータル保留中署名データサービス 保留中署名データサービスの識別子 formsportal.sampledataservice フォームポータル保留中署名メタデータサービス 保留中署名メタデータサービスの識別子 formsportal.samplemetadataservice note note NOTE サービスは、 aem.formsportal.impl.prop
キーの値として以下に記述されている名前によって解決されます。code language-java @Service(value = {SubmitDataService.class, DraftDataService.class}) @Property(name = "aem.formsportal.impl.prop", value = "formsportal.sampledataservice") @Service(value = { SubmitMetadataService.class, DraftMetadataService.class }) @Property(name = "aem.formsportal.impl.prop", value = "formsportal.samplemetadataservice")
データテーブルとメタデータテーブルの名前を変更できます。
メタデータテーブルに別の名前を付けるには、次の手順を実行します。
- Web コンソール設定で、「Forms Portal Metadata Service Sample Implementation」を見つけてクリックします。データソースと、メタデータ/追加メタデータテーブル名の値を変更できます。
データテーブルに別の名前を付けるには、次の手順を実行します。
- Web コンソール設定で、「Forms Portal Data Service Sample Implementation」を見つけてクリックします。データソースとデータテーブル名の値を変更できます。
note note NOTE テーブル名を変更する場合は、テーブル名をフォームポータル設定に入力してください。 -
他の設定はそのままにし、「保存」をクリックします。
-
データベース接続は、Apache Sling Connection Pooled Data Source 経由で実行できます。
-
Apache Sling 接続の場合は、web コンソール設定で「Apache Sling Connection Pooled DataSource」を見つけてクリックし、編集モードで開きます。次の表の説明に従って、プロパティの値を指定します。
- MySQL 向けの JDBC ドライバーは、サンプルでは提供されていません。これに対してのプロビジョニングを行い、JDBC 接続プールの設定に必要な情報を提供します。
- オーサーインスタンスとパブリッシュインスタンスで同じデータベースを使用するよう指定します。JDBC 接続の URI フィールドの値は、すべてのオーサーインスタンスとパブリッシュインスタンスで同じである必要があります。
-
他の設定はそのままにし、「保存」をクリックします。
-
データベーススキーマに既にテーブルがある場合は、次の手順に進みます。
データベーススキーマにテーブルがまだない場合は、次の SQL ステートメントを実行し、データベーススキーマ内にデータ、メタデータおよび追加メタデータ用に別々のテーブルを作成します。
note note NOTE オーサーインスタンスとパブリッシュインスタンスで異なるデータベースは必要はありません。すべてのオーサーインスタンスとパブリッシュインスタンスで同じデータベースを使用します。 データ表用の SQL ステートメント
code language-sql CREATE TABLE `data` ( `owner` varchar(255) DEFAULT NULL, `data` longblob, `metadataId` varchar(45) DEFAULT NULL, `id` varchar(45) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
メタデータ表用の SQL ステートメント
code language-sql CREATE TABLE `metadata` ( `formPath` varchar(1000) DEFAULT NULL, `formType` varchar(100) DEFAULT NULL, `description` text, `formName` varchar(255) DEFAULT NULL, `owner` varchar(255) DEFAULT NULL, `enableAnonymousSave` varchar(45) DEFAULT NULL, `renderPath` varchar(1000) DEFAULT NULL, `nodeType` varchar(45) DEFAULT NULL, `charset` varchar(45) DEFAULT NULL, `userdataID` varchar(45) DEFAULT NULL, `status` varchar(45) DEFAULT NULL, `formmodel` varchar(45) DEFAULT NULL, `markedForDeletion` varchar(45) DEFAULT NULL, `showDorClass` varchar(255) DEFAULT NULL, `sling:resourceType` varchar(1000) DEFAULT NULL, `attachmentList` longtext, `draftID` varchar(45) DEFAULT NULL, `submitID` varchar(45) DEFAULT NULL, `id` varchar(60) NOT NULL, `profile` varchar(255) DEFAULT NULL, `submitUrl` varchar(1000) DEFAULT NULL, `xdpRef` varchar(1000) DEFAULT NULL, `agreementId` varchar(255) DEFAULT NULL, `nextSigners` varchar(255) DEFAULT NULL, `eSignStatus` varchar(45) DEFAULT NULL, `pendingSignID` varchar(45) DEFAULT NULL, `agreementDataId` varchar(255) DEFAULT NULL, `enablePortalSubmit` varchar(45) DEFAULT NULL, `submitType` varchar(45) DEFAULT NULL, `dataType` varchar(45) DEFAULT NULL, `jcr:lastModified` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `ID_UNIQUE` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
追加メタデータテーブル用の SQL ステートメント
code language-sql CREATE TABLE `additionalmetadatatable` ( `value` text, `key` varchar(255) NOT NULL, `id` varchar(60) NOT NULL, PRIMARY KEY (`id`,`key`), CONSTRAINT 'additionalmetadatatable_fk' FOREIGN KEY (`id`) REFERENCES `metadata` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
コメントテーブル用の SQL ステートメント
code language-sql CREATE TABLE `commenttable` ( `commentId` varchar(255) DEFAULT NULL, `comment` text DEFAULT NULL, `ID` varchar(255) DEFAULT NULL, `commentowner` varchar(255) DEFAULT NULL, `time` varchar(255) DEFAULT NULL);
-
データベーススキーマにテーブル(data、metadata、および additionalmetadatatable)が既にある場合は、次の alter table クエリを実行します。
データテーブルを変更する SQL ステートメント
code language-sql ALTER TABLE `data` CHANGE `owner` `owner` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
メタデータテーブルを変更する SQL ステートメント
code language-sql ALTER TABLE metadata add markedForDeletion varchar(45) DEFAULT NULL
note note NOTE ALTER TABLE metadata add クエリがすでに実行済みで、markedfordeletion 列がテーブルにある場合は、このクエリを実行すると失敗します。 code language-sql ALTER TABLE metadata add agreementId varchar(255) DEFAULT NULL, add nextSigners varchar(255) DEFAULT NULL, add eSignStatus varchar(45) DEFAULT NULL, add pendingSignID varchar(45) DEFAULT NULL, add agreementDataId varchar(255) DEFAULT NULL, add enablePortalSubmit varchar(45) DEFAULT NULL, add submitType varchar(45) DEFAULT NULL, add dataType varchar(45) DEFAULT NULL;
code language-sql ALTER TABLE `metadata` CHANGE `formPath` `formPath` VARCHAR(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `formType` `formType` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `description` `description` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `formName` `formName` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `owner` `owner` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `renderPath` `renderPath` VARCHAR(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `showDorClass` `showDorClass` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `sling:resourceType` `sling:resourceType` VARCHAR(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `profile` `profile` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `submitUrl` `submitUrl` VARCHAR(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `xdpRef` `xdpRef` VARCHAR(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
additionalmetadatatable テーブルを変更する SQL ステートメント
code language-sql ALTER TABLE `additionalmetadatatable` CHANGE `value` `value` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `key` `key` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;
データおよびメタデータをデータベースに保存しながら、ドラフトと送信をリスト表示する際に使用できるサンプル実装が設定されました。サンプルにおいて、データサービスとメタデータサービスがどのように設定されているかを説明します。
mysql-connector-java-5.1.39-bin.jar ファイルをインストールする install-mysql-connector-java-bin-jar-file
すべてのオーサーインスタンスとパブリッシュインスタンスで、次の手順を実行し、mysql-connector-java-5.1.39-bin.jar ファイルをインストールします。
-
https://'[server]:[port]'/system/console/depfinder
にアクセスして com.mysql.jdbc パッケージを検索します。 -
「次による書き出し」列で、パッケージがバンドルで書き出されているかどうかを確認します。
パッケージがバンドルで書き出されていない場合は、先に進みます。
-
https://'[server]:[port]'/system/console/bundles
に移動して「Install/Update」をクリックします。 -
「ファイルを選択」をクリックし、mysql-connector-java-5.1.39-bin.jar を探して選択します。また、「Start Bundle」チェックボックスと「Refresh Packages」チェックボックスを選択します。
-
「Install」または「Update」をクリックします。完了したら、サーバーを再起動します。
-
(Windows のみ)オペレーティングシステムのシステムファイアウォールをオフにします。
フォームポータルデータおよびメタデータサービスのサンプルコード sample-code-for-forms-portal-data-and-metadata-service
次の zip ファイルには、データおよびメタデータサービスインターフェイスの FormsPortalSampleDataServiceImpl
および FormsPortalSampleMetadataServiceImpl
(実装クラス)が含まれます。また、上記で述べた実装クラスのコンパイルに必要なすべてのクラスが含まれます。
ファイル名の長さの検証 verify-length-of-the-file-name
フォームポータルのデータベース実装では、追加のメタデータテーブルを使用します。このテーブルには、テーブルのキーと ID 列に基づいた複合プライマリキーが含まれます。MySQL では、プライマリキーの長さを最大 255 文字にできます。次のクライアントサイドの検証スクリプトを使用して、ファイルウィジェットに添付されたファイル名の長さを検証できます。この検証は、ファイルが添付されているときに実行されます。次の手順で提供されるスクリプトでは、ファイル名が(拡張子を含めて)150 文字を超えるとメッセージが表示されます。スクリプトを変更して、異なる文字数でチェックできます。
次の手順を実行して、クライアントライブラリを作成し、次のスクリプトを使用します。
-
CRXDE にログインし、/etc/clientlibs/ に移動します。
-
cq:ClientLibraryFolder タイプのノードを作成して、ノードの名前を指定します。(例:
validation
)。「すべて保存」をクリックします。
-
ノードを右クリックして「新しいファイルを作成」をクリックし、.txt の拡張子を付けてファイルを作成します。例えば、
js.txt
です。新しく作成した .txt ファイルに次のコードを追加して、「すべて保存」をクリックします。code language-javascript #base=util util.js
上記コードの場合、
util
はフォルダーの名前で、util.js
フォルダーにあるファイルのutil
名です。util
フォルダーとutil.js
ファイルはこの後に続く手順で作成されます。 -
手順 2 で作成した
cq:ClientLibraryFolder
ノードを右クリックし、「作成/フォルダーの作成」を選択します。util
という名前のフォルダーを作成します。「すべて保存」をクリックします。util
フォルダーを右クリックし、「作成/ファイルを作成」を選択します。util.js
という名前のファイルを作成します。「すべて保存」をクリックします。 -
util.js ファイルに次のコードを追加して、「すべて保存」をクリックします。このコードでファイル名の長さを検証します。
code language-javascript /* * ADOBE CONFIDENTIAL * ___________________ * * Copyright 2016 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and may be covered by U.S. and Foreign Patents, * patents in process, and are protected by trade secret or copyright law. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. * */ (function () { var connectWithGuideBridge = function (gb) { gb.connect(function () { //For first time load window.guideBridge.on("elementValueChanged" , function(event, payload) { var component = payload.target; // Field whose value has changed if(component.name == 'fileAttachment' && component.parent) { var fileItems = $('#'+payload.target.parent.id).find(".guide-fu-fileItem"); for (i = 0;i<fileItems.length;i++) { var filename = $(fileItems[i]).find(".guide-fu-fileName").text(); //check whether it is previously attached file or a newly attached one if(filename.length > 150 && filename.indexOf("fp.attach.jsp") < 0) { window.alert("filename is larger than 150 : "+filename); $(fileItems[i]).find(".guide-fu-fileClose.close").click(); } } } }); }); }; if (window.guideBridge) { connectWithGuideBridge(window.guideBridge); } else { window.addEventListener("bridgeInitializeStart", function (event) { connectWithGuideBridge(event.detail.guideBridge); }); } })();
note note NOTE スクリプトは、標準の添付ウィジェットコンポーネントです。カスタマイズした標準の添付ウィジェットがある場合は、上記のスクリプトを変更してそれぞれの変更を組み込みます。 -
次のプロパティを手順 2 で作成したフォルダーに追加し、「すべて保存」をクリックします。
-
名前: categories
-
タイプ: String
-
値: fp.validation
-
マルチオプション: Enabled
-
-
/libs/fd/af/runtime/clientlibs/guideRuntime
に移動し、fp.validation
値を embed プロパティに追加します。 -
/libs/fd/af/runtime/clientlibs/guideRuntimeWithXFA に移動し、
fp.validation
値を embed プロパティに追加します。note note NOTE guideRuntime および guideRuntimeWithXfa クライアントライブラリの代わりにカスタムクライアントライブラリを使用している場合、カテゴリ名を使用してこの手順で作成したクライアントライブラリを、実行時にロードしたカスタムライブラリに埋め込みます。 -
「すべて保存」をクリックします。 ここで、ファイル名が拡張子を含めて 150 文字を超えるとメッセージが表示されます。