ドラフトと送信コンポーネントとデータベースの統合のサンプル

サンプルの概要

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

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

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

サンプルのセットアップおよび設定

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

  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. 次の表の説明に従って、プロパティの値を指定します。

    プロパティ 説明
    フォームポータル ドラフトデータサービス ドラフトデータサービスの識別子 formsportal.sampledataservice
    フォームポータル ドラフトメタデータサービス ドラフトメタデータサービスの識別子 formsportal.samplemetadataservice
    フォームポータル 送信データサービス 送信データサービスの識別子 formsportal.sampledataservice
    フォームポータル 送信メタデータサービス 送信メタデータサービスの識別子 formsportal.samplemetadataservice
    フォームポータル 保留中署名データサービス 保留中署名データサービスの識別子 formsportal.sampledataservice
    フォームポータル 保留中署名メタデータサービス 保留中署名メタデータサービスの識別子 formsportal.samplemetadataservice
    メモ

    サービスは、aem.formsportal.impl.prop キーの値として以下に記述されている名前によって解決されます。

    @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」を見つけてクリックします。データソースおよびデータテーブル名の値は変更できます。
    メモ

    テーブル名を変更する場合は、テーブル名をフォームポータル設定に入力してください。

  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:mysql://[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
メモ
  • MySQL 向けの JDBC ドライバーは、サンプルでは提供されていません。これに対してのプロビジョニングを行い、JDBC 接続プールの設定に必要な情報を提供してください。
  • オーサーインスタンスとパブリッシュインスタンスで同じデータベースを使用するよう指定します。JDBC 接続の URI フィールドの値は、すべてのオーサーインスタンスとパブリッシュインスタンスで同じである必要があります。
  1. 他の設定はそのままにし、「保存」をクリックします。

  2. データベーススキーマにすでにテーブルがある場合は、次のステップに進んでください。

    データベーススキーマにテーブルがまだない場合は、次の SQL ステートメントを実行し、データベーススキーマ内にデータ、メタデータ、および追加メタデータ用に別々のテーブルを作成します。

    メモ

    オーサーインスタンスとパブリッシュインスタンスで異なるデータベースは必要はありません。すべてのオーサーインスタンスとパブリッシュインスタンスで同じデータベースを使用します。

    データ表用の 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 ステートメント

    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 ステートメント

    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 ステートメント

    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)がすでにある場合は、テーブルクエリーの後に次を実行します。

    データテーブルを変更する SQL ステートメント

    ALTER TABLE `data` CHANGE `owner` `owner` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
    

    メタデータテーブルを変更する SQL ステートメント

    ALTER TABLE metadata add markedForDeletion varchar(45) DEFAULT NULL
    
    メモ

    ALTER TABLE metadata add クエリがすでに実行済みで、markedfordeletion 列がテーブルにある場合は、このクエリを実行すると失敗します。

    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;
    
    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 ステートメント

    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 ファイルをインストールする

すべてのオーサーインスタンスとパブリッシュインスタンスで、次の手順を実行し、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 のみ)オペレーティングシステムのシステムファイアウォールをオフにします。

フォームポータルデータおよびメタデータサービスのサンプルコード

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

ファイルを入手

ファイル名の長さの検証

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

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

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

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

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

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

    #base=util
     util.js
    

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

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

  5. util.js ファイルに次のコードを追加して、「すべて保存」をクリックします。このコードでファイル名の長さを検証します。

    /*
     * 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);
            });
        }
    })();
    
    メモ

    スクリプトは、初期設定済み(OOTB)の添付ウィジェットコンポーネントです。カスタマイズした OOTB 添付ウィジェットがある場合は、上記のスクリプトを変更して個々の変更を組み込みます。

  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 プロパティに追加します。

    メモ

    guideRuntime および guideRuntimeWithXfa クライアントライブラリの代わりにカスタムクライアントライブラリを使用している場合、カテゴリ名を使用してこの手順で作成したクライアントライブラリを、実行時にロードしたカスタムライブラリに埋め込みます。

  9. すべて保存」をクリックします。 ここで、ファイル名が拡張子を含めて 150 文字を超えるとメッセージが表示されます。

このページ