ドラフトと送信コンポーネントとデータベースの統合のサンプル sample-for-integrating-drafts-submissions-component-with-database
サンプルの概要 sample-overview
AEM Forms Portal のドラフトと送信コンポーネントを使用すると、ユーザーはフォームをドラフトとして保存し、任意のデバイスから後で送信できます。 また、ユーザーは、ポータル上で送信済みのフォームを表示することもできます。 この機能を有効にするために、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 プロパティ 説明 値 Forms Portal Draft Data Service ドラフトデータサービスの識別子 formsportal.sampledataservice Forms Portal Draft Metadata Service ドラフトメタデータサービスの識別子 formsportal.samplemetadataservice Forms Portal データ送信サービス 送信データサービスの識別子 formsportal.sampledataservice Forms Portal 送信メタデータサービス 送信メタデータサービスの識別子 formsportal.samplemetadataservice Forms Portal 保留中の署名データサービス 保留中署名データサービスの識別子 formsportal.sampledataservice Forms Portal 保留中の署名メタデータサービス 保留中署名メタデータサービスの識別子 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 接続の場合は、を探してクリックし、を開きます。 Apache Sling 接続プールに入れられたデータソース Web コンソール設定の編集モード 次の表の説明に従って、プロパティの値を指定します。
- 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)がある場合は、次の altertable クエリを実行します。
データテーブルを変更する 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
Forms Portal のデータベース実装では、追加のメタデータテーブルを使用します。 このテーブルには、テーブルのキーと id 列に基づく複合プライマリキーが含まれます。 MySQL では、255 文字までのプライマリキーを使用できます。 次のクライアント側検証スクリプトを使用して、ファイルウィジェットに添付されるファイル名の長さを検証できます。 検証は、ファイルが添付されると実行されます。 次の手順で指定したスクリプトは、ファイル名が 150(拡張子を含む)より大きい場合に、メッセージを表示します。 スクリプトを変更して、異なる文字数でチェックできます。
次の手順を実行して、 クライアントライブラリ スクリプトを使用します。
-
CRXDE にログインし、 /etc/clientlibs/に移動します。
-
タイプのノードの作成 cq:ClientLibraryFolder ノード名を指定します。 (例:
validation
)。「すべて保存」をクリックします。
-
ノードを右クリックして「新しいファイルを作成」をクリックし、.txt の拡張子を付けてファイルを作成します。例えば、
js.txt
です。新しく作成した .txt ファイルに次のコードを追加して、「すべて保存」をクリックします。code language-none #base=util util.js
上記コードの場合、
util
はフォルダーの名前で、util.js
フォルダーにあるファイルのutil
名です。util
フォルダーとutil.js
ファイルはこの後に続く手順で作成されます。 -
手順 2 で作成した
cq:ClientLibraryFolder
ノードを右クリックし、「作成/フォルダーの作成」を選択します。util
という名前のフォルダーを作成します。「すべて保存」をクリックします。util
フォルダーを右クリックし、「作成/ファイルを作成」を選択します。util.js
という名前のファイルを作成します。「すべて保存」をクリックします。 -
util.js ファイルに次のコードを追加して、「すべて保存」をクリックします。このコードでファイル名の長さを検証します。
code language-none /* * 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 このスクリプトは、標準 (OOTB) 添付ウィジェットコンポーネント用です。 OOTB 添付ウィジェットをカスタマイズした場合は、上記のスクリプトを変更して、それぞれの変更を組み込みます。 -
手順 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 文字を超えるとメッセージが表示されます。