基於片段呈現Forms

本文中的範例和範例僅適用於AEM Forms的JEE環境。

基於片段呈現Forms

Forms服務可以根據您使用Designer建立的片段來轉換表單。 fragment​是表單中可重複使用的部分,並儲存為可插入多個表單設計的個別XDP檔案。 例如,片段可以包含地址塊或合法文字。

使用片段可簡化並加速建立和維護大量表單。 建立新表單時,插入對所需片段的引用,該片段將出現在表單中。 片段參考包含指向物理XDP檔案的子表單。 如需建立以片段為基礎的表單設計的詳細資訊,請參閱Forms設計人員

片段可以包括多個子表單,這些子表單被包裝在選擇子表單集中。 選擇子表單集基於來自資料連接的資料流來控制子表單的顯示。 您使用條件陳述式來判斷傳送的表單中會出現該集合中的哪些子表單。 例如,集合中的每個子表單可以包括特定地理位置的資訊,而顯示的子表單可以基於用戶的位置來確定。

指令碼片段​包含可重複使用的JavaScript函式或值,這些函式或值與任何特定物件(例如日期剖析器或web service呼叫)分開儲存。 這些片段包含單一指令碼物件,在「階層」浮動視窗中會顯示為變數的子系。 無法從屬於其他物件屬性的指令碼建立片段,例如驗證、計算或初始化等事件指令碼。

以下是使用片段的優點:

  • 內容重複使用:您可以使用片段,在多個表單設計中重複使用內容。當您需要在多個表單中使用某些相同的內容時,使用片段比複製或重新建立內容更快更簡單。 使用片段也可確保表格設計中常用的部分在所有參照表格中具有一致的內容和外觀。
  • 全域更新:您可以使用片段,在單一檔案中僅對多個表單進行一次全域變更。您可以變更片段中的內容、指令碼物件、資料系結、版面或樣式,而所有參照片段的XDP表單都會反映變更。
  • 例如,許多表單中的共同元素可能是包含國家/地區下拉式清單物件的位址區塊。 如果您需要更新下拉式清單物件的值,您必須開啟許多表單才能進行變更。 如果將地址塊包含在片段中,則只需開啟一個片段檔案即可進行更改。
  • 若要更新PDF表單中的片段,您必須在Designer中儲存表單。
  • 共用表單建立:您可以使用片段,在多個資源間共用表單建立。具備指令碼專業知識的開發人員或Designer其他進階功能的表單,可開發並共用可運用指令碼和動態屬性的片段。 表單設計人員可以使用這些片段來配置表單設計版面,並確保表單的所有部分在由多人設計的多個表單中具有一致的外觀和功能。

使用片段組合表單設計

您可以組合表單設計,以根據多個片段傳遞至Forms服務。 要組合多個片段,請使用Assembler服務。 如要查看使用Assemble服務建立由其他Forms服務(Output服務)使用的表單設計的示例,請參閱使用片段建立PDF文檔。 您可以使用Forms服務來執行相同的工作流程,而不是使用輸出服務。

使用Assembler服務時,將傳遞使用片段組合的表單設計。 建立的表單設計不會參照其他片段。 相反地,本主題討論將參照其他片段的表單設計傳遞至Forms服務。 但是,表單設計並非由Assembler裝配。 它是在Designer中建立的。

注意

有關Forms服務的詳細資訊,請參閱AEM Forms服務參考

注意

如需建立以Web為基礎的應用程式,並根據片段轉譯表單的詳細資訊,請參閱建立轉譯Forms的Web應用程式。

步驟摘要

若要根據片段來轉換表單,請執行下列工作:

  1. 包含專案檔案。
  2. 建立Forms用戶端API物件。
  3. 指定URI值。
  4. 演算表格。
  5. 將表單資料流寫入用戶端網頁瀏覽器。

包含專案檔案

將必要的檔案加入您的開發專案中。 如果要使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用web services,請確定您包含proxy檔案。

建立Forms用戶端API物件

在以寫程式方式執行Forms服務客戶端API操作之前,必須建立Forms服務客戶端。

指定URI值

要成功地基於片段來呈現表單,您必須確保Forms服務能夠找到表單設計參考的表單和片段(XDP檔案)。 例如,假設表單名為PO.xdp,且此表單使用兩個名為FooterUS.xdp和FooterCanada.xdp的片段。 在這種情況下,Forms服務必須能夠找到所有三個XDP檔案。

您可以將表單放在某個位置,將片段放在另一個位置,以組織表單及其片段,或將所有XDP檔案放在同一位置。 就本節而言,假設所有XDP檔案都位於AEM Forms儲存庫中。 有關將XDP檔案放在AEM Forms儲存庫中的資訊,請參見寫入資源

在根據片段呈現表格時,您只能參考表格本身,而不參考片段。 例如,您必須參考PO.xdp,而非FooterUS.xdp或FooterCanada.xdp。 請確定您將片段放置在Forms服務可以找到的位置。

轉譯表單

基於片段的表單可以與非碎片表單相同的方式呈現。 也就是說,您可以將表單轉譯為PDF、HTML或表單參考線(已過時)。 本節中的範例會根據片段將表單轉譯為互動式PDF表單。 (請參閱演算互動式PDF forms。)

將表單資料串流寫入用戶端網頁瀏覽器

當Forms服務轉換表單時,它會傳回您必須寫入用戶端網頁瀏覽器的表單資料流。 當寫入用戶端網頁瀏覽器時,使用者會看到表單。

另請參閱

使用Java API根據片段演算表單

使用web service API,根據片段來轉換表單

包含AEM FormsJava庫檔案

設定連接屬性

Forms服務API快速入門

轉換互動式PDF forms

建立轉譯Forms的Web應用程式

使用Java API根據片段來轉換表單

使用FormsAPI(Java),根據片段來轉換表單:

  1. 包含專案檔案

    在Java專案的類別路徑中包含用戶端JAR檔案,例如adobe-forms-client.jar。

  2. 建立Forms用戶端API物件

    • 建立包含連接屬性的ServiceClientFactory對象。
    • 使用其建構子並傳遞ServiceClientFactory對象,建立FormsServiceClient對象。
  3. 指定URI值

    • 使用URLSpec的建構函式建立儲存URI值的物件。
    • 叫用URLSpec物件的setApplicationWebRoot方法,並傳遞代表應用程式Web根目錄的字串值。
    • 叫用URLSpec物件的setContentRootURI方法,並傳遞指定內容根URI值的字串值。 請確定表單設計和片段位於內容根URI中。 如果沒有,Forms服務會提出例外。 要引用儲存庫,請指定repository://
    • 叫用URLSpec物件的setTargetURL方法,並傳遞字串值,指定表單資料張貼到的目標URL值。 如果您在表單設計中定義目標URL,則可以傳遞空字串。 您也可以指定表單傳送至的URL,以便執行計算。
  4. 轉譯表單

    叫用FormsServiceClient物件的renderPDFForm方法並傳遞下列值:

    • 指定表單設計名稱的字串值,包括檔案副檔名。 如果您參考屬於Forms應用程式的表單設計,請確定您指定完整路徑,例如Applications/FormsApplication/1.0/FormsFolder/Loan.xdp
    • com.adobe.idp.Document物件,包含要與表單合併的資料。 如果您不想合併資料,請傳遞空白的com.adobe.idp.Document物件。
    • 儲存運行時選項的PDFFormRenderSpec對象。
    • URLSpec物件,包含Forms服務根據片段來呈現表單所需的URI值。
    • 儲存檔案附件的java.util.HashMap對象。 此為可選參數,如果您不想將檔案附加到表單,可以指定null

    renderPDFForm方法返回一個FormsResult對象,該對象包含必須寫入客戶端Web瀏覽器的表單資料流。

  5. 將表單資料串流寫入用戶端網頁瀏覽器

    • 通過調用FormsResult對象「s getOutputContent」方法建立com.adobe.idp.Document對象。
    • 通過調用getContentType方法獲取com.adobe.idp.Document對象的內容類型。
    • 調用setContentType方法並傳遞com.adobe.idp.Document物件的內容類型,以設定javax.servlet.http.HttpServletResponse物件的內容類型。
    • 呼叫javax.servlet.http.HttpServletResponse物件的getOutputStream方法,建立javax.servlet.ServletOutputStream物件,用來將表單資料串流寫入用戶端Web瀏覽器。
    • 調用com.adobe.idp.Document物件的getInputStream方法,以建立java.io.InputStream物件。
    • 通過調用InputStream對象的read方法並將位元組陣列作為引數傳遞,建立以表單資料流填充的位元組陣列。
    • 叫用javax.servlet.ServletOutputStream物件的write方法,將表單資料串流傳送至用戶端網頁瀏覽器。 將位元組陣列傳遞到write方法。

另請參閱

基於片段呈現Forms

快速入門(SOAP模式):使用Java API根據片段轉譯表單

包含AEM FormsJava庫檔案

設定連接屬性

使用web service API根據片段來呈現表單

使用FormsAPI(web service),根據片段來轉換表單:

  1. 包含專案檔案

    • 建立使用Forms服務WSDL的Java代理類。
    • 將Java代理類包含到類路徑中。
  2. 建立Forms用戶端API物件

    建立FormsService對象並設定驗證值。

  3. 指定URI值

    • 使用其建構子建立儲存URI值的URLSpec對象。
    • 叫用URLSpec物件的setApplicationWebRoot方法,並傳遞代表應用程式Web根目錄的字串值。
    • 叫用URLSpec物件的setContentRootURI方法,並傳遞指定內容根URI值的字串值。 請確定表單設計位於內容根URI中。 如果沒有,Forms服務會提出例外。 要引用儲存庫,請指定repository://
    • 叫用URLSpec物件的setTargetURL方法,並傳遞字串值,指定表單資料張貼到的目標URL值。 如果您在表單設計中定義目標URL,則可以傳遞空字串。 您也可以指定表單傳送至的URL,以便執行計算。
  4. 轉譯表單

    叫用FormsService物件的renderPDFForm方法並傳遞下列值:

    • 指定表單設計名稱的字串值,包括檔案副檔名。 如果您參考屬於Forms應用程式的表單設計,請確定您指定完整路徑,例如Applications/FormsApplication/1.0/FormsFolder/Loan.xdp
    • BLOB物件,包含要與表單合併的資料。 如果您不想合併資料,請傳遞null
    • 儲存運行時選項的PDFFormRenderSpec對象。 請注意,如果輸入檔案是PDF檔案,則無法設定標籤的PDF選項。 如果輸入檔案是XDP檔案,則可以設定標籤的PDF選項。
    • URLSpec物件,包含Forms服務所需的URI值。
    • 儲存檔案附件的java.util.HashMap對象。 此為可選參數,如果您不想將檔案附加到表單,可以指定null
    • 由方法填充的空com.adobe.idp.services.holders.BLOBHolder對象。 此參數用於儲存渲染的表單。
    • 由方法填充的空javax.xml.rpc.holders.LongHolder對象。 此引數將儲存表單中的頁數。
    • 由方法填充的空javax.xml.rpc.holders.StringHolder對象。 此引數將儲存地區值。
    • 空的com.adobe.idp.services.holders.FormsResultHolder對象,將包含此操作的結果。

    renderPDFForm方法會以必須寫入用戶端網頁瀏覽器的表單資料流填入作為最後一個參數值傳遞的com.adobe.idp.services.holders.FormsResultHolder物件。

  5. 將表單資料串流寫入用戶端網頁瀏覽器

    • 獲取com.adobe.idp.services.holders.FormsResultHolder對象value資料成員的值,建立FormResult對象。
    • 呼叫FormsResult物件的getOutputContent方法,建立包含表單資料的BLOB物件。
    • 通過調用getContentType方法獲取BLOB對象的內容類型。
    • 調用setContentType方法並傳遞BLOB物件的內容類型,以設定javax.servlet.http.HttpServletResponse物件的內容類型。
    • 呼叫javax.servlet.http.HttpServletResponse物件的getOutputStream方法,建立javax.servlet.ServletOutputStream物件,用來將表單資料串流寫入用戶端Web瀏覽器。
    • 建立位元組陣列,並呼叫BLOB物件的getBinaryData方法以填入它。 此任務將FormsResult對象的內容分配給位元組陣列。
    • 叫用javax.servlet.http.HttpServletResponse物件的write方法,將表單資料串流傳送至用戶端網頁瀏覽器。 將位元組陣列傳遞到write方法。

另請參閱

基於片段呈現Forms

使用Base64編碼叫用AEM Forms

本頁內容

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now