ドラフトと送信コンポーネントとデータベースの統合のサンプル sample-for-integrating-drafts-submissions-component-with-database

サンプルの概要 sample-overview

AEM Forms ポータルのドラフトと送信コンポーネントにより、ユーザーはフォームをドラフトとして保存し、任意のデバイスから後で送信できます。また、ユーザーは、ポータルで送信済みのフォームを表示できます。この機能を有効にするために、AEM Forms では、ユーザーによってフォームに入力されたデータ、ドラフトと送信済みフォームに関連するフォームメタデータを保存する、データおよびメタデータサービスを提供します。このデータは、デフォルトで CRX レポジトリに格納されます。ただし、ユーザーが AEM のパブリッシュインスタンスを通じてフォームとやり取りを行うのは通常企業のファイアウォールの外側であるため、組織によっては、よりセキュアで信頼性のあるデータストレージが必要となる場合もあります。

このドキュメントで取り上げるサンプルは、ドラフトと送信コンポーネントをデータベースに統合するカスタマイズされたデータサービスおよびメタデータサービスのリファレンス実装です。サンプル実装で使用されるデータベースは MySQL 5.6.24 です。ただし、ドラフトと送信コンポーネントは、あらゆるデータベースに統合できます。

NOTE
  • このドキュメントで説明される例および設定は、MySQL 5.6.24 に基づいているため、お使いのデータベースシステムに合わせてそれらを適切に置き換える必要があります。
  • 最新バージョンの AEM Forms のアドオンパッケージをインストールしていることを確認します。使用可能なパッケージのリストについて詳しくは、AEM Forms リリースの記事を参照してください。
  • サンプルパッケージは、アダプティブフォーム送信アクションでのみ機能します。

サンプルのセットアップおよび設定 set-up-and-configure-the-sample

すべてのオーサーインスタンスとパブリッシュインスタンスで、次の手順を実行し、サンプルをインストールして設定します。

  1. パッケージ aem-fp-db-integration-sample-pkg-6.1.2.zip をファイルシステムにダウンロードします。

    データベース統合のサンプルパッケージ

ファイルを入手

  1. AEM パッケージマネージャー(https://[host]:[port]/crx/packmgr/)に移動します。

  2. パッケージをアップロード」をクリックします。

  3. パッケージ aem-fp-db-integration-sample-pkg-6.1.2.zip を参照して選択し、「OK」をクリックします。

  4. パッケージの隣にある「インストール」をクリックし、パッケージをインストールします。

  5. AEM web コンソール設定
    ページ(https://[host]:[port]/system/console/configMgr)に移動します。

  6. Forms Portal Draft and Submission Configuration をクリックし、編集モードで開きます。

  7. 次の表の説明に従って、プロパティの値を指定します。

    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
    テーブル名を変更する場合は、テーブル名をフォームポータル設定に入力してください。
  8. 他の設定はそのままにし、「保存」をクリックします。

  9. データベース接続は、Apache Sling Connection Pooled Data Source 経由で実行できます。

  10. Apache Sling 接続の場合は、web コンソール設定で「Apache Sling Connection Pooled DataSource」を見つけてクリックし、編集モードで開きます。次の表の説明に従って、プロパティの値を指定します。

プロパティ
データソース名

データソースプールからドライバーをフィルターするためのデータソース名

メモ:サンプル実装では、データソース名として「FormsPortal」を使用します。

JDBC ドライバークラス
com.mysql.jdbc.Driver
JDBC 接続 URI
jdbc//[host]:[port]/[schema_name]
ユーザー名
データベース表でのアクションを認証・実行するためのユーザー名
パスワード
ユーザー名に関連するパスワード
トランザクションの分離
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
NOTE
  • MySQL 向けの JDBC ドライバーは、サンプルでは提供されていません。これに対してのプロビジョニングを行い、JDBC 接続プールの設定に必要な情報を提供します。
  • オーサーインスタンスとパブリッシュインスタンスで同じデータベースを使用するよう指定します。JDBC 接続の URI フィールドの値は、すべてのオーサーインスタンスとパブリッシュインスタンスで同じである必要があります。
  1. 他の設定はそのままにし、「保存」をクリックします。

  2. データベーススキーマに既にテーブルがある場合は、次の手順に進みます。

    データベーススキーマにテーブルがまだない場合は、次の 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);
    
  3. データベーススキーマにテーブル(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 ファイルをインストールします。

  1. https://'[server]:[port]'/system/console/depfinder にアクセスして com.mysql.jdbc パッケージを検索します。

  2. 「次による書き出し」列で、パッケージがバンドルで書き出されているかどうかを確認します。

    パッケージがバンドルで書き出されていない場合は、先に進みます。

  3. https://'[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 のみ)オペレーティングシステムのシステムファイアウォールをオフにします。

NOTE
「Ctrl + C」コマンドを使用して SDK を再起動することをお勧めします。 別の方法(Java プロセスの停止など)を使用してAEM SDK を再起動すると、AEM開発環境で不整合が生じる場合があります。

フォームポータルデータおよびメタデータサービスのサンプルコード sample-code-for-forms-portal-data-and-metadata-service

次の zip ファイルには、データおよびメタデータサービスインターフェイスの FormsPortalSampleDataServiceImpl および FormsPortalSampleMetadataServiceImpl(実装クラス)が含まれます。また、上記で述べた実装クラスのコンパイルに必要なすべてのクラスが含まれます。

ファイルを入手

ファイル名の長さの検証 verify-length-of-the-file-name

フォームポータルのデータベース実装では、追加のメタデータテーブルを使用します。このテーブルには、テーブルのキーと ID 列に基づいた複合プライマリキーが含まれます。MySQL では、プライマリキーの長さを最大 255 文字にできます。次のクライアントサイドの検証スクリプトを使用して、ファイルウィジェットに添付されたファイル名の長さを検証できます。この検証は、ファイルが添付されているときに実行されます。次の手順で提供されるスクリプトでは、ファイル名が(拡張子を含めて)150 文字を超えるとメッセージが表示されます。スクリプトを変更して、異なる文字数でチェックできます。

次の手順を実行して、クライアントライブラリを作成し、次のスクリプトを使用します。

  1. CRXDE にログインし、/etc/clientlibs/ に移動します。

  2. cq:ClientLibraryFolder タイプのノードを作成して、ノードの名前を指定します。(例:validation)。

    すべて保存」をクリックします。

  3. ノードを右クリックして「新しいファイルを作成」をクリックし、.txt の拡張子を付けてファイルを作成します。例えば、js.txt です。新しく作成した .txt ファイルに次のコードを追加して、「すべて保存」をクリックします。

    code language-javascript
    #base=util
     util.js
    

    上記コードの場合、util はフォルダーの名前で、util.js フォルダーにあるファイルの util 名です。util フォルダーと util.js ファイルはこの後に続く手順で作成されます。

  4. 手順 2 で作成した cq:ClientLibraryFolder ノードを右クリックし、「作成/フォルダーの作成」を選択します。util という名前のフォルダーを作成します。「すべて保存」をクリックします。util フォルダーを右クリックし、「作成/ファイルを作成」を選択します。util.js という名前のファイルを作成します。「すべて保存」をクリックします。

  5. 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
    このスクリプトは、標準の添付ウィジェットコンポーネント用です。 標準の添付ファイルウィジェットをカスタマイズした場合は、上記のスクリプトを変更して、それぞれの変更を取り込みます。
  6. 次のプロパティを手順 2 で作成したフォルダーに追加し、「すべて保存」をクリックします。

    • 名前: categories

    • タイプ: String

    • 値: fp.validation

    • マルチオプション: Enabled

  7. /libs/fd/af/runtime/clientlibs/guideRuntime に移動し、fp.validation 値を embed プロパティに追加します。

  8. /libs/fd/af/runtime/clientlibs/guideRuntimeWithXFA に移動し、fp.validation 値を embed プロパティに追加します。

    note note
    NOTE
    guideRuntime および guideRuntimeWithXfa クライアントライブラリの代わりにカスタムクライアントライブラリを使用している場合、カテゴリ名を使用してこの手順で作成したクライアントライブラリを、実行時にロードしたカスタムライブラリに埋め込みます。
  9. すべて保存」をクリックします。 ここで、ファイル名が拡張子を含めて 150 文字を超えるとメッセージが表示されます。

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2