計算表單資料

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

Forms服務可以計算用戶在表單中輸入的值並顯示結果。 若要計算表單資料,您必須執行兩項工作。 首先,您建立可計算表單資料的表單設計指令碼。 表單設計支援三種類型的指令碼。 一種指令碼類型在客戶端上運行,另一種指令碼類型在伺服器上運行,第三種指令碼類型在伺服器和客戶端上運行。 本主題中討論的指令碼類型在伺服器上運行。 HTML、PDF和表單指南(已過時)轉換支援伺服器端計算。

在表單設計流程中,您可以運用計算和指令碼來提供更豐富的使用者體驗。 計算和指令碼可新增至大部分的表格欄位和物件。 您必須建立表單設計指令碼,以對使用者輸入互動式表單的資料執行計算作業。

用戶在表單中輸入值,然後按一下「計算」按鈕查看結果。 下列程式說明可讓使用者計算資料的範例應用程式:

  • 使用者存取名為StartLoan.html的HTML頁面,該頁面可當成網頁應用程式的開始頁面。 此頁調用名為GetLoanForm的Java Servlet。
  • GetLoanForm servlet將呈現貸款表單。 此表單包含指令碼、互動式欄位、計算按鈕和送出按鈕。
  • 使用者在表單欄位中輸入值,然後按一下「計算」按鈕。 表單會傳送至執行指令碼的CalculateData Java Servlet。 表單會傳回給使用者,其計算結果會顯示在表單中。
  • 用戶繼續輸入和計算值,直到顯示滿意的結果。 當使用者滿意時,會按一下「提交」按鈕以處理表單。 表單會傳送至另一個名為ProcessForm的Java Servlet,負責擷取已提交的資料。 (請參閱處理已提交的Forms)。

下圖顯示應用程式的邏輯流程。

cf_cf_finsrv_loancalcapp_v1

下表說明此圖中的步驟。

步驟

說明

1

GetLoanForm Java Servlet是從HTML開始頁調用的。

2

GetLoanForm Java Servlet使用Forms服務客戶端API向客戶端Web瀏覽器呈現貸款表單。 呈現包含配置為在伺服器上運行的指令碼的表單和呈現不包含指令碼的表單之間的區別在於,您必須指定用於執行指令碼的目標位置。 如果未指定目標位置,則不會執行配置為在伺服器上運行的指令碼。 例如,請考慮本節中介紹的應用程式。 CalculateData Java Servlet是執行指令碼的目標位置。

3

使用者將資料輸入互動欄位,然後按一下「計算」按鈕。 表單會傳送至執行指令碼的CalculateData Java Servlet。

4

表單會轉譯回網頁瀏覽器,其計算結果會顯示在表單中。

5

當值滿意時,使用者會按一下「提交」按鈕。 表單會傳送至另一個名為ProcessForm的Java Servlet。

通常,提交為PDF內容的表單包含在用戶端上執行的指令碼。 不過,伺服器端的計算也可以執行。 「提交」按鈕不能用於計算指令碼。 在這種情況下,不執行計算,因為Forms服務認為交互是完成的。

為了說明表單設計指令碼的使用,本節將檢查一個簡單的互動式表單,其中包含已設定為可在伺服器上執行的指令碼。 下圖顯示的表單設計包含一個指令碼,該指令碼將用戶輸入到前兩個欄位中的值添加到第三個欄位中,並在第三個欄位中顯示結果。

cf_cf_caldata

A. A欄位,名為NumericField1 B. A欄位,名為NumericField2 C. A欄位,名為NumericField3

位於此表單設計中的指令碼語法如下:

     NumericField3 = NumericField2 + NumericField1

在此表單設計中,「計算」按鈕是命令按鈕,而指令檔位於此按鈕的Click事件中。 當使用者在前兩個欄位(NumericField1和NumericField2)中輸入值,然後按一下「計算」按鈕時,表格會傳送至Forms服務,並在該服務中執行指令碼。 Forms服務會將表單轉譯回用戶端裝置,計算結果會顯示在NumericField3欄位中。

注意

有關建立表單設計指令碼的資訊,請參閱Forms設計器

注意

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

步驟摘要

要計算表單資料,請執行以下任務:

  1. 包含專案檔案。
  2. 建立Forms用戶端API物件。
  3. 檢索包含計算指令碼的表單。
  4. 將表單資料流寫回用戶端網頁瀏覽器

包含專案檔案

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

建立Forms用戶端API物件

在以寫程式方式執行Forms服務客戶端API操作之前,必須建立Forms服務客戶端。 如果您使用Java API,請建立FormsServiceClient物件。 如果您使用Forms網站服務API,請建立FormsServiceService物件。

檢索包含計算指令碼的表單

您使用Forms服務客戶端API來建立應用程式邏輯,該邏輯處理的表單包含配置為在伺服器上運行的指令碼。 此程式類似於處理提交的表單。 (請參閱處理已提交的Forms)。

驗證與提交的表單相關聯的處理狀態為1 (Calculate),這表示Forms服務正在對表單資料執行計算操作,且結果必須寫回用戶。 在這種情況下,將自動執行配置為在伺服器上運行的指令碼。

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

在驗證與提交的表單相關聯的處理狀態為1後,您必須將結果寫回客戶端Web瀏覽器。 當顯示表單時,計算值會出現在適當的欄位中。

另請參閱

包含AEM FormsJava庫
檔案使用Java
APIC計算表單資料使用web service
🔗
🔗
🔗
APISetting connection propertiesForms Service API快速啟動轉譯互動式PDF表單建立使Forms轉譯的Web應用程式

使用Java API計算表單資料

使用FormsAPI(Java)計算表單資料:

  1. 包含專案檔案

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

  2. 建立Forms用戶端API物件

    • 建立包含連接屬性的ServiceClientFactory對象。
    • 使用其建構子並傳遞ServiceClientFactory對象,建立FormsServiceClient對象。
  3. 檢索包含計算指令碼的表單

    • 若要擷取包含計算指令碼的表單資料,請使用其建構函式建立com.adobe.idp.Document物件,並從建構函式中叫用javax.servlet.http.HttpServletResponse物件的getInputStream方法。

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

      • 包含表單資料的com.adobe.idp.Document物件。
      • 一個字串值,它指定包括所有相關HTTP標題的環境變數。 必須通過為CONTENT_TYPE環境變數指定一個或多個值來指定要處理的內容類型。 例如,若要處理XML和PDF資料,請為此參數指定下列字串值:CONTENT_TYPE=application/xml&CONTENT_TYPE=application/pdf
      • 指定HTTP_USER_AGENT標題值的字串值;例如,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
      • 儲存運行時選項的RenderOptionsSpec對象。

      processFormSubmission方法返回包含表單提交結果的FormsResult對象。

    • 呼叫FormsResult物件的getAction方法,確認與提交表單相關的處理狀態為1。 如果此方法返回值1,則會執行計算並將資料寫回客戶端Web瀏覽器。

  4. 將表單資料流寫回用戶端網頁瀏覽器

    • 建立javax.servlet.ServletOutputStream物件,用來傳送表單資料流至用戶端網頁瀏覽器。
    • 通過調用FormsResult對象「s getOutputContent」方法建立com.adobe.idp.Document對象。
    • 調用com.adobe.idp.Document物件的getInputStream方法,以建立java.io.InputStream物件。
    • 建立位元組陣列,並以InputStream物件的read方法來填入表單資料流,並將位元組陣列傳入為引數。
    • 叫用javax.servlet.ServletOutputStream物件的write方法,將表單資料串流傳送至用戶端網頁瀏覽器。 將位元組陣列傳遞到write方法。

另請參閱

包括AEM FormsJava庫文
件設定連接屬性

使用web service API計算表單資料

使用FormsAPI(web service)計算表單資料:

  1. 包含專案檔案

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

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

  3. 檢索包含計算指令碼的表單

    • 要檢索張貼到Java Servlet的表單資料,請使用其建構子建立BLOB對象。

    • 使用javax.servlet.http.HttpServletResponse物件的getInputStream方法建立java.io.InputStream物件。

    • 使用其建構子並傳遞java.io.InputStream對象的長度,建立java.io.ByteArrayOutputStream對象。

    • java.io.InputStream對象的內容複製到java.io.ByteArrayOutputStream對象中。

    • 通過調用java.io.ByteArrayOutputStream對象的toByteArray方法建立位元組陣列。

    • 調用setBinaryData方法並將位元組陣列作為參數傳遞,以填充BLOB對象。

    • 使用其建構子建立RenderOptionsSpec對象。 調用RenderOptionsSpec物件的setLocale方法並傳遞指定地區值的字串值,以設定地區值。

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

      • 包含表單資料的BLOB物件。
      • 指定環境變數的字串值包括所有相關的HTTP標頭。 例如,您可以指定下列字串值:HTTP_REFERER=referrer&HTTP_CONNECTION=keep-alive&CONTENT_TYPE=application/xml
      • 指定HTTP_USER_AGENT標題值的字串值;例如,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
      • 儲存運行時選項的RenderOptionsSpec對象。 如需詳細資訊,請造訪。
      • 由方法填充的空BLOBHolder對象。
      • 由方法填充的空javax.xml.rpc.holders.StringHolder對象。
      • 由方法填充的空BLOBHolder對象。
      • 由方法填充的空BLOBHolder對象。
      • 由方法填充的空javax.xml.rpc.holders.ShortHolder對象。
      • 由方法填充的空MyArrayOf_xsd_anyTypeHolder對象。 此參數用於儲存隨表單一起提交的檔案附件。
      • 由方法填入的空FormsResultHolder對象,其表單為已提交。

      processFormSubmission方法會以表單提交的結果填入FormsResultHolder參數。 processFormSubmission方法返回包含表單提交結果的FormsResult對象。

    • 呼叫FormsResult物件的getAction方法,確認與提交表單相關的處理狀態為1。 如果此方法返回值1,則會執行計算並將資料寫回客戶端Web瀏覽器。

  4. 將表單資料流寫回用戶端網頁瀏覽器

    • 建立javax.servlet.ServletOutputStream物件,用來傳送表單資料流至用戶端網頁瀏覽器。
    • 呼叫FormsResult物件的getOutputContent方法,建立包含表單資料的BLOB物件。
    • 建立位元組陣列,並呼叫BLOB物件的getBinaryData方法以填入它。 此任務將FormsResult對象的內容分配給位元組陣列。
    • 叫用javax.servlet.http.HttpServletResponse物件的write方法,將表單資料串流傳送至用戶端網頁瀏覽器。 將位元組陣列傳遞到write方法。

另請參
閱使用Base64編碼叫用AEM Forms

本頁內容

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