Calculating Form Data calculating-form-data
Samples and examples in this document are only for AEM Forms on JEE environment.
The Forms service can calculate the values that a user enters into a form and display the results. To calculate form data, you must perform two tasks. First, you create a form design script that calculates form data. A form design supports three types of scripts. One script type runs on the client, another runs on the server, and the third type runs on both the server and the client. The script type discussed in this topic runs on the server. Server-side calculations are supported for HTML, PDF, and form Guide (deprecated) transformations.
As part of the form design process, you can use calculations and scripts to provide a richer user experience. Calculations and scripts can be added to most form fields and objects. Create a form design script to perform calculation operations on data that a user enters into an interactive form.
The user enters values into the form and clicks the Calculate button to view the results. The following process describes an example application that enables a user to calculate data:
- The user accesses an HTML page named StartLoan.html that acts as the web application’s start page. This page invokes a Java Servlet named
GetLoanForm
. - The
GetLoanForm
servlet renders a loan form. This form contains a script, interactive fields, a calculate button, and a submit button. - The user enters values into the form’s fields and clicks the Calculate button. The form is sent to the
CalculateData
Java Servlet where the script is executed. The form is sent back to the user with the calculation results displayed in the form. - The user continues entering and calculating values until a satisfactory result is displayed. When satisfied, the user clicks the Submit button to process the form. The form is sent to another Java Servlet named
ProcessForm
that is responsible for retrieving submitted data. (See Handling Submitted Forms.)
The following diagram shows the application’s logic flow.
The following table describes the steps in this diagram.
GetLoanForm
Java Servlet is invoked from the HTML start page.GetLoanForm
Java Servlet uses the Forms service Client API to render the loan form to the client web browser. The difference between rendering a form that contains a script configured to run on the server and rendering a form that does not contain a script is that you must specify the target location used to execute the script. If a target location is not specified, a script that is configured to run on the server is not executed. For example, consider the application introduced in this section. The CalculateData
Java Servlet is the target location where the script is executed.CalculateData
Java Servlet, where the script is executed.ProcessForm
.Typically, a form that is submitted as PDF content contains scripts that are executed on the client. However, server-side calculations can also be executed. A Submit button cannot be used to calculate scripts. In this situation, calculations are not executed because the Forms service considers the interaction to be complete.
To illustrate the usage of a form design script, this section examines a simple interactive form that contains a script that is configured to run on the server. The following diagram shows a form design containing a script that adds values that a user enters into the first two fields and displays the result in the third field.
A. A field named NumericField1 B. A field named NumericField2 C. A field named NumericField3
The syntax of the script in this form design is as follows:
NumericField3 = NumericField2 + NumericField1
In this form design, the Calculate button is a command button, and the script is in this button’s Click
event. When a user enters values into the first two fields (NumericField1 and NumericField2) and clicks the Calculate button, the form is sent to the Forms service, where the script is executed. The Forms service renders the form back to the client device with the results of the calculation displayed in the NumericField3 field.
Summary of steps summary-of-steps
To calculate form data, perform the following tasks:
- Include project files.
- Create a Forms Client API object.
- Retrieve a form containing a calculation script.
- Write the form data stream back to the client web browser
Include project files
Include necessary files into your development project. If you are creating a client application using Java, include the necessary JAR files. If you are using web services, ensure that you include the proxy files.
Create a Forms Client API object
Before you can programmatically perform a Forms service Client API operation, you must create a Forms service client. If you are using the Java API, create a FormsServiceClient
object. If you are using the Forms web service API, create a FormsServiceService
object.
Retrieve a form containing a calculation script
You use the Forms service Client API to create application logic that handles a form that contains a script configured to run on the server. The process is similar to handling a submitted form. (See Handling Submitted Forms.)
Verify that the processing state associated with the submitted form is 1
(Calculate)
, which means that the Forms service is performing a calculation operation on the form data and the results must be written back to the user. In this situation, a script configured to run on the server is automatically executed.
Write the form data stream back to the client web browser
After you verify the processing state associated with a submitted form is 1
, you must write the results back to the client web browser. When the form is displayed, the calculated value will appear in the appropriate field(s).
See also
Including AEM Forms Java library files
Calculate form data using the Java API
Calculate form data using the web service API
Setting connection properties
Forms Service API Quick Starts
Rendering Interactive PDF Forms
Creating Web Applications that Renders Forms
Calculate form data using the Java API calculate-form-data-using-the-java-api
Calculate form data by using the Forms API (Java):
-
Include project files
Include client JAR files, such as adobe-forms-client.jar in your Java project’s class path.
-
Create a Forms Client API object
- Create a
ServiceClientFactory
object that contains connection properties. - Create an
FormsServiceClient
object by using its constructor and passing theServiceClientFactory
object.
- Create a
-
Retrieve a form containing a calculation script
-
To retrieve form data that contains a calculation script, create a
com.adobe.idp.Document
object by using its constructor and invoking thejavax.servlet.http.HttpServletResponse
object’sgetInputStream
method from within the constructor. -
Invoke the
FormsServiceClient
object’sprocessFormSubmission
method and pass the following values:- The
com.adobe.idp.Document
object that contains the form data. - A string value that specifies environment variables including all relevant HTTP headers. Specify the content type to handle by specifying one or more values for the
CONTENT_TYPE
environment variable. For example, to handle XML and PDF data, specify the following string value for this parameter:CONTENT_TYPE=application/xml&CONTENT_TYPE=application/pdf
- A string value that specifies the
HTTP_USER_AGENT
header value; for example,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
. - A
RenderOptionsSpec
object that stores run-time options.
The
processFormSubmission
method returns aFormsResult
object containing the results of the form submission. - The
-
Verify that the processing state associated with a submitted form is
1
by invoking theFormsResult
object’sgetAction
method. If this method returns the value1
, the calculation was performed and the data can be written back to the client web browser.
-
-
Write the form data stream back to the client web browser
- Create a
javax.servlet.ServletOutputStream
object used to send a form data stream to the client web browser. - Create a
com.adobe.idp.Document
object by invoking theFormsResult
object 'sgetOutputContent
method. - Create a
java.io.InputStream
object by invoking thecom.adobe.idp.Document
object’sgetInputStream
method. - Create a byte array and populate it with the form data stream by invoking the
InputStream
object’sread
method and passing the byte array as an argument. - Invoke the
javax.servlet.ServletOutputStream
object’swrite
method to send the form data stream to the client web browser. Pass the byte array to thewrite
method.
- Create a
See also
Including AEM Forms Java library files
Setting connection properties
Calculate form data using the web service API calculate-form-data-using-the-web-service-api
Calculate form data by using the Forms API (web service):
-
Include project files
- Create Java proxy classes that consume the Forms service WSDL.
- Include the Java proxy classes into your class path.
-
Create a Forms Client API object
Create a
FormsService
object and set authentication values. -
Retrieve a form containing a calculation script
-
To retrieve form data that was posted to a Java Servlet, create a
BLOB
object by using its constructor. -
Create a
java.io.InputStream
object by using thejavax.servlet.http.HttpServletResponse
object’sgetInputStream
method. -
Create a
java.io.ByteArrayOutputStream
object by using its constructor and passing the length of thejava.io.InputStream
object. -
Copy the contents of the
java.io.InputStream
object into thejava.io.ByteArrayOutputStream
object. -
Create a byte array by invoking the
java.io.ByteArrayOutputStream
object’stoByteArray
method. -
Populate the
BLOB
object by invoking itssetBinaryData
method and passing the byte array as an argument. -
Create a
RenderOptionsSpec
object by using its constructor. Set the locale value by invoking theRenderOptionsSpec
object’ssetLocale
method and passing a string value that specifies the locale value. -
Invoke the
FormsServiceClient
object’sprocessFormSubmission
method and pass the following values:- The
BLOB
object that contains the form data. - A string value that specifies environment variables included all relevant HTTP headers. For example, you can specify the following string value:
HTTP_REFERER=referrer&HTTP_CONNECTION=keep-alive&CONTENT_TYPE=application/xml
- A string value that specifies the
HTTP_USER_AGENT
header value; for example,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
. - A
RenderOptionsSpec
object that stores run-time options. For more information, . - An empty
BLOBHolder
object that is populated by the method. - An empty
javax.xml.rpc.holders.StringHolder
object that is populated by the method. - An empty
BLOBHolder
object that is populated by the method. - An empty
BLOBHolder
object that is populated by the method. - An empty
javax.xml.rpc.holders.ShortHolder
object that is populated by the method. - An empty
MyArrayOf_xsd_anyTypeHolder
object that is populated by the method. This parameter is used to store file attachments that are submitted along with the form. - An empty
FormsResultHolder
object that is populated by the method with the form that is submitted.
The
processFormSubmission
method populates theFormsResultHolder
parameter with the results of the form submission. TheprocessFormSubmission
method returns aFormsResult
object containing the results of the form submission. - The
-
Verify that the processing state associated with a submitted form is
1
by invoking theFormsResult
object’sgetAction
method. If this method returns the value1
, the calculation was performed and the data can be written back to the client web browser.
-
-
Write the form data stream back to the client web browser
- Create a
javax.servlet.ServletOutputStream
object used to send a form data stream to the client web browser. - Create a
BLOB
object that contains form data by invoking theFormsResult
object’sgetOutputContent
method. - Create a byte array and populate it by invoking the
BLOB
object’sgetBinaryData
method. This task assigns the content of theFormsResult
object to the byte array. - Invoke the
javax.servlet.http.HttpServletResponse
object’swrite
method to send the form data stream to the client web browser. Pass the byte array to thewrite
method.
- Create a
See also
Invoking AEM Forms using Base64 encoding