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

最終更新日: 2024-02-28

サンプルの概要

AEM Forms Portal のドラフトと送信コンポーネントを使用すると、ユーザーはフォームをドラフトとして保存し、任意のデバイスから後で送信できます。 また、ユーザーは、ポータル上で送信済みのフォームを表示することもできます。 この機能を有効にするために、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 接続の場合は、を探してクリックし、を開きます。 Apache Sling 接続プールに入れられたデータソース Web コンソール設定の編集モード。 次の表の説明に従って、プロパティの値を指定します。

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

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

注意: このサンプル実装環境では、データソース名として 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)がある場合は、次の altertable クエリを実行します。

    データテーブルを変更する 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 のみ)オペレーティングシステムのシステムファイアウォールをオフにします。

メモ

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

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

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

ファイルを入手

ファイル名の長さを検証

Forms Portal のデータベース実装では、追加のメタデータテーブルを使用します。 このテーブルには、テーブルのキーと 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 文字を超えるとメッセージが表示されます。

このページ