Forms服务可以计算用户在表单中输入的值并显示结果。 要计算表单数据,必须执行两项任务。 首先,创建用于计算表单数据的表单设计脚本。 表单设计支持三种类型的脚本。 一种脚本类型在客户端上运行,另一种脚本类型在服务器上运行,第三种脚本类型在服务器和客户端上都运行。 本主题中讨论的脚本类型在服务器上运行。 HTML、PDF和表单指南(已弃用)转换支持服务器端计算。
在表单设计过程中,您可以利用计算和脚本来提供更丰富的用户体验。 计算和脚本可以添加到大多数表单字段和对象中。 您必须创建一个表单设计脚本,以对用户输入到交互式表单中的数据执行计算操作。
用户在表单中输入值并单击“计算”按钮以查看结果。 以下过程描述了一个允许用户计算数据的示例应用程序:
GetLoanForm
的Java Servlet。GetLoanForm
servlet会呈现贷款表单。 此表单包含脚本、交互字段、计算按钮和提交按钮。CalculateData
Java Servlet。 表单会发送回用户,并且计算结果会显示在表单中。ProcessForm
的Java Servlet,该Java Servlet负责检索已提交的数据。 (请参阅处理已提交的Forms。)下图显示了应用程序的逻辑流程。
下表介绍了此图中的步骤。
步骤 |
描述 |
---|---|
1 |
从HTML开始页调用 |
2 |
|
3 |
用户将数据输入到交互字段中并单击“计算”按钮。 表单会发送到 |
4 |
表单会呈现回Web浏览器,并且计算结果会显示在表单中。 |
5 |
当值满意时,用户单击“提交”按钮。 表单将被发送到名为 |
通常,作为PDF内容提交的表单包含在客户端上执行的脚本。 但是,也可以执行服务器端计算。 “提交”按钮不能用于计算脚本。 在这种情况下,不会执行计算,因为Forms服务认为交互已完成。
为了说明表单设计脚本的用法,本节将检查一个简单的交互式表单,该表单包含一个配置为在服务器上运行的脚本。 下图显示了一个表单设计,其中包含一个脚本,该脚本可添加用户在前两个字段中输入的值,并在第三个字段中显示结果。
A. 名为NumericField1的 字段B. 名为NumericField2的字 段C. A名为NumericField3的字段
位于此表单设计中的脚本的语法如下所示:
NumericField3 = NumericField2 + NumericField1
在此表单设计中,“计算”按钮是一个命令按钮,脚本位于此按钮的Click
事件中。 当用户在前两个字段(NumericField1和NumericField2)中输入值并单击“计算”按钮时,表单将被发送到Forms服务,并在该服务中执行脚本。 Forms服务将表单呈现回客户端设备,其计算结果显示在NumericField3字段中。
有关创建表单设计脚本的信息,请参阅Forms Designer。
有关Forms服务的更多信息,请参阅AEM Forms的服务参考。
要计算表单数据,请执行以下任务:
包含项目文件
在开发项目中包含必需的文件。 如果您使用Java创建客户端应用程序,请包含必需的JAR文件。 如果您使用的是Web服务,请确保包含代理文件。
创建Forms客户端API对象
您必须先创建Forms服务客户端,然后才能以编程方式执行Forms服务客户端API操作。 如果您使用的是Java API,请创建一个FormsServiceClient
对象。 如果您使用的是Forms Web服务API,请创建一个FormsServiceService
对象。
检索包含计算脚本的表单
您可以使用Forms服务客户端API创建应用程序逻辑,以处理包含配置为在服务器上运行的脚本的表单。 该过程与处理提交的表单类似。 (请参阅处理已提交的Forms。)
验证与提交的表单关联的处理状态是1
(Calculate)
,这表示Forms服务正在对表单数据执行计算操作,结果必须写回给用户。 在这种情况下,将自动执行配置为在服务器上运行的脚本。
将表单数据流写回客户端Web浏览器
验证与提交的表单关联的处理状态为1
后,必须将结果写回客户端Web浏览器。 显示表单时,计算值将显示在相应的字段中。
另请参阅
使用Forms API(Java)计算表单数据:
包含项目文件
将客户端JAR文件(如Java项目的类路径中的adobe-forms-client.jar)包含在内。
创建Forms客户端API对象
ServiceClientFactory
对象。FormsServiceClient
对象,并传递ServiceClientFactory
对象。检索包含计算脚本的表单
要检索包含计算脚本的表单数据,请使用其构造函数创建com.adobe.idp.Document
对象,并从构造函数中调用javax.servlet.http.HttpServletResponse
对象的getInputStream
方法。
调用FormsServiceClient
对象的processFormSubmission
方法并传递以下值:
com.adobe.idp.Document
对象。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浏览器。
将表单数据流写回客户端Web浏览器
javax.servlet.ServletOutputStream
对象,用于将表单数据流发送到客户端Web浏览器。FormsResult
对象“s getOutputContent
”方法创建com.adobe.idp.Document
对象。com.adobe.idp.Document
对象的getInputStream
方法创建java.io.InputStream
对象。InputStream
对象的read
方法并将字节数组作为参数传递,创建一个字节数组并用表单数据流填充该数组。javax.servlet.ServletOutputStream
对象的write
方法,将表单数据流发送到客户端Web浏览器。 将字节数组传递到write
方法。另请参阅
使用Forms API(Web服务)计算表单数据:
包含项目文件
创建Forms客户端API对象
创建FormsService
对象并设置身份验证值。
检索包含计算脚本的表单
要检索发布到Java Servlet的表单数据,请使用其构造函数创建BLOB
对象。
使用javax.servlet.http.HttpServletResponse
对象的getInputStream
方法创建java.io.InputStream
对象。
使用java.io.ByteArrayOutputStream
对象的构造函数并传递java.io.InputStream
对象的长度,以创建该对象。
将java.io.InputStream
对象的内容复制到java.io.ByteArrayOutputStream
对象中。
通过调用java.io.ByteArrayOutputStream
对象的toByteArray
方法创建字节数组。
通过调用setBinaryData
方法并将字节数组作为参数进行传递来填充BLOB
对象。
使用RenderOptionsSpec
对象的构造函数创建对象。 通过调用RenderOptionsSpec
对象的setLocale
方法并传递指定区域设置值的字符串值来设置区域设置值。
调用FormsServiceClient
对象的processFormSubmission
方法并传递以下值:
BLOB
对象。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浏览器。
将表单数据流写回客户端Web浏览器
javax.servlet.ServletOutputStream
对象,用于将表单数据流发送到客户端Web浏览器。FormsResult
对象的getOutputContent
方法,创建包含表单数据的BLOB
对象。BLOB
对象的getBinaryData
方法来填充该数组。 此任务将FormsResult
对象的内容分配给字节数组。javax.servlet.http.HttpServletResponse
对象的write
方法,将表单数据流发送到客户端Web浏览器。 将字节数组传递到write
方法。另请参阅