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 make use of calculations and scripts to provide a richer user experience. Calculations and scripts can be added to most form fields and objects. You must 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:
GetLoanForm
.GetLoanForm
servlet renders a loan form. This form contains a script, interactive fields, a calculate button, and a submit button.CalculateData
Java Servlet where the script is executed. The form is sent back to the user with the calculation results displayed in the form.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.
Step |
Description |
---|---|
1 |
The |
2 |
The |
3 |
The user enters data into interactive fields and clicks the Calculate button. The form is sent to the |
4 |
The form is rendered back to the web browser with the calculation results displayed in the form. |
5 |
The user clicks the Submit button when the values are satisfactory. The form is sent to another Java Servlet named |
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 located 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 located 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.
For information about creating a form design script, see Forms Designer.
For more information about the Forms service, see Services Reference for AEM Forms.
To calculate form data, perform the following tasks:
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
Forms Service API Quick Starts
Rendering Interactive PDF Forms
Creating Web Applications that Renders Forms
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
ServiceClientFactory
object that contains connection properties.FormsServiceClient
object by using its constructor and passing the ServiceClientFactory
object.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 the javax.servlet.http.HttpServletResponse
object’s getInputStream
method from within the constructor.
Invoke the FormsServiceClient
object’s processFormSubmission
method and pass the following values:
com.adobe.idp.Document
object that contains the form data.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
HTTP_USER_AGENT
header value; for example, Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
.RenderOptionsSpec
object that stores run-time options.The processFormSubmission
method returns a FormsResult
object containing the results of the form submission.
Verify that the processing state associated with a submitted form is 1
by invoking the FormsResult
object’s getAction
method. If this method returns the value 1
, 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
javax.servlet.ServletOutputStream
object used to send a form data stream to the client web browser.com.adobe.idp.Document
object by invoking the FormsResult
object ‘s getOutputContent
method.java.io.InputStream
object by invoking the com.adobe.idp.Document
object’s getInputStream
method.InputStream
object’s read
method and passing the byte array as an argument.javax.servlet.ServletOutputStream
object’s write
method to send the form data stream to the client web browser. Pass the byte array to the write
method.See also
Including AEM Forms Java library files
Calculate form data by using the Forms API (web service):
Include project files
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 the javax.servlet.http.HttpServletResponse
object’s getInputStream
method.
Create a java.io.ByteArrayOutputStream
object by using its constructor and passing the length of the java.io.InputStream
object.
Copy the contents of the java.io.InputStream
object into the java.io.ByteArrayOutputStream
object.
Create a byte array by invoking the java.io.ByteArrayOutputStream
object’s toByteArray
method.
Populate the BLOB
object by invoking its setBinaryData
method and passing the byte array as an argument.
Create a RenderOptionsSpec
object by using its constructor. Set the locale value by invoking the RenderOptionsSpec
object’s setLocale
method and passing a string value that specifies the locale value.
Invoke the FormsServiceClient
object’s processFormSubmission
method and pass the following values:
BLOB
object that contains the form data.HTTP_REFERER=referrer&HTTP_CONNECTION=keep-alive&CONTENT_TYPE=application/xml
HTTP_USER_AGENT
header value; for example, Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
.RenderOptionsSpec
object that stores run-time options. For more information, .BLOBHolder
object that is populated by the method.javax.xml.rpc.holders.StringHolder
object that is populated by the method.BLOBHolder
object that is populated by the method.BLOBHolder
object that is populated by the method.javax.xml.rpc.holders.ShortHolder
object that is populated by the method.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.FormsResultHolder
object that is populated by the method with the form that is submitted.The processFormSubmission
method populates the FormsResultHolder
parameter with the results of the form submission. The processFormSubmission
method returns a FormsResult
object containing the results of the form submission.
Verify that the processing state associated with a submitted form is 1
by invoking the FormsResult
object’s getAction
method. If this method returns the value 1
, 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
javax.servlet.ServletOutputStream
object used to send a form data stream to the client web browser.BLOB
object that contains form data by invoking the FormsResult
object’s getOutputContent
method.BLOB
object’s getBinaryData
method. This task assigns the content of the FormsResult
object to the byte array.javax.servlet.http.HttpServletResponse
object’s write
method to send the form data stream to the client web browser. Pass the byte array to the write
method.See also
Invoking AEM Forms using Base64 encoding