將草稿和提交元件與資料庫整合的範例 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發行版本文章。
  • 範例套件僅適用於Adaptive Forms提交動作。

設定範例 set-up-and-configure-the-sample

在所有作者和發佈執行個體上執行以下步驟,以安裝和設定範例:

  1. 將下列​ aem-fp-db-integration-sample-pkg-6.1.2.zip ​封裝下載至您的檔案系統。

    資料庫整合的範例套件

取得檔案

  1. 移至https://[host]:[連線埠]/crx/packmgr/的AEM封裝管理員。

  2. 按一下​ 上傳封裝

  3. 瀏覽以選取​ aem-fp-db-integration-sample-pkg-6.1.2.zip ​封裝,然後按一下​ 確定

  4. 按一下封裝旁的​ 安裝 ​以安裝封裝。

  5. 移至​ AEM Web主控台組態
    頁面位於https://[host]:[連線埠]/system/console/configMgr。

  6. 按一下以在編輯模式中開啟​ Forms入口網站草稿和提交設定

  7. 指定特性值,如下表所述:

    table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 5-row-3 6-row-3
    屬性 說明
    Forms入口網站草稿資料服務 草稿資料服務的識別碼 formsportal.sampledataservice
    Forms入口網站草稿中繼資料服務 草稿中繼資料服務的識別碼 formsportal.samplemetadataservice
    Forms入口網站提交資料服務 用於提交資料服務的識別碼 formsportal.sampledataservice
    Forms入口網站提交中繼資料服務 用於提交中繼資料服務的識別碼 formsportal.samplemetadataservice
    Forms入口網站等待簽署的資料服務 擱置簽署資料服務的識別碼 formsportal.sampledataservice
    Forms入口網站等待簽署中繼資料服務 擱置簽署中繼資料服務的識別碼 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中繼資料服務實作範例。 您可以變更資料來源、中繼資料/其他中繼資料表格名稱的值。

    為資料表格提供不同的名稱:

    • 在Web主控台設定中,尋找並按一下Forms Portal Data Service實作範例。 您可以變更資料來源和資料表格名稱的值。
    note note
    NOTE
    如果您變更表格名稱,請在Form Portal設定中提供它們。
  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//[主機]:[連線埠]/[結構描述名稱]
使用者名稱
用於驗證資料庫表格並執行動作的使用者名稱
密碼
與使用者名稱關聯的密碼
交易隔離
READ_COMMITTED
最大使用中連線
1000
最大閒置連線
100
最小閒置連線
10
初始大小
10
等待上限
100000
借入時測試
已核取
閒置時測試
已核取
驗證查詢
範例值為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;
    

    適用於additionalmetadatatable 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. 如果您在資料庫綱要中已經有表格(資料、中繼資料和additionalmetadatable),請執行以下變更表格查詢:

    變更資料表的​ 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中繼資料新增查詢,且表格中有marketforDeletion欄,則該查詢會失敗。
    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;
    

    用於變更additionalmetadatable資料表的​ 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並按一下​ 安裝/更新

  4. 按一下​ 選擇檔案 ​並瀏覽以選取mysql-connector-java-5.1.39-bin.jar檔案。 此外,選取​ 開始套件 ​和​ 重新整理套件 ​核取方塊。

  5. 按一下​ 安裝或更新。 完成後,請重新啟動伺服器。

  6. 僅限Windows)關閉作業系統的系統防火牆。

NOTE
建議您使用'Ctrl + C'命令重新啟動SDK。 使用替代方法重新啟動AEM SDK (例如停止Java程式)可能會導致AEM開發環境不一致。

表單入口網站資料和中繼資料服務的範常式式碼 sample-code-for-forms-portal-data-and-metadata-service

下列zip包含資料和中繼資料服務介面的FormsPortalSampleDataServiceImplFormsPortalSampleMetadataServiceImpl (實作類別)。 此外,它包含編譯上述實作類別所需的所有類別。

取得檔案

驗證檔案名稱的長度 verify-length-of-the-file-name

Forms Portal的資料庫實作會使用其他中繼資料表格。 表格具有以表格的「索引鍵」和ID欄為基礎的複合主索引鍵。 MySQL允許主鍵長度不超過255個字元。 您可以使用以下使用者端驗證指令碼來驗證附加至檔案Widget的檔案名稱長度。 驗證會在附加檔案時執行。 當檔案名稱大於150 (包括副檔名)時,下列程式中提供的指令碼會顯示訊息。 您可以修改指令碼以檢查是否有不同的字元數。

執行以下步驟來建立使用者端程式庫並使用指令碼:

  1. 登入CRXDE並導覽至/etc/clientlibs/

  2. 建立​ cq:ClientLibraryFolder ​型別的節點,並提供節點的名稱。 例如,validation

    按一下​ 「儲存全部」

  3. 以滑鼠右鍵按一下節點,按一下​ 建立新檔案,然後建立副檔名為.txt的檔案。 例如,js.txt將下列程式碼新增至新建立的.txt檔案,然後按一下​ 全部儲存

    code language-javascript
    #base=util
     util.js
    

    在上述程式碼中,util是資料夾的名稱和util資料夾中檔案的util.js名稱。 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
    此指令碼適用於現成可用的附件Widget元件。 如果您已自訂立即可用的附件Widget,請變更上述指令碼以納入個別變更。
  6. 將下列屬性新增至步驟2中建立的資料夾,然後按一下[儲存全部]。

    • 名稱: ​類別

    • 型別: ​字串

    • 值: fp.validation

    • 多重選項: ​已啟用

  7. 導覽至/libs/fd/af/runtime/clientlibs/guideRuntime並將fp.validation值附加至內嵌屬性。

  8. 導覽至/libs/fd/af/runtime/clientlibs/guideRuntimeWithXFA並將fp.validation值附加至內嵌屬性。

    note note
    NOTE
    如果您使用自訂使用者端程式庫,而不是guideRuntime和guideRuntimeWithXfa使用者端程式庫,請使用類別名稱,將在此程式中建立的使用者端程式庫內嵌到在執行階段載入的自訂程式庫中。
  9. 按一下「儲存全部」。 ​現在,當檔案名稱大於150 (包括副檔名)字元時,會顯示訊息。

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