SAP Adobe Form 教程六 FormCalc和JavaScript的实践
前文:
SAP Adobe Form 教程三 日期,时间,floating field
在本文中,我们将演示在FormCalc中使用SUM,然后在SAP Adobe forms中使用JavaScript动态更改文本样式。
使用脚本的主要优点是,我们可以改进功能,并且可以在运行期间动态地控制表单。
SAP Adobe Form 支持2种脚本语言:
- FormCalc
- JavaScript
这两种脚本语言各有优缺点,可以根据需要决定使用哪种。本文将提供两种脚本语言的一些常见业务场景。
注意,之前已经有一篇涉及Javascript的文章,可以参考:SAP Adobe Form 教程四 动态隐藏和显示字段
本文链接:https://www.cnblogs.com/hhelibeb/p/15522710.html
原文标题:SAP Adobe Form Tutorial. Part XVI. Practical Use Case of FormCalc and JavaScript
前提
- SAP Adobe Form的table相关的基础知识
- 对JavaScript和FormCalc基本功能的了解
- ABAP编码能力
业务需求
1. 在发送给客户的详细报表中,我们希望在所有行项目末尾显示总金额和总单位小计。
2. 在语句的描述部分,我们希望以粗体和不同的样式显示层次结构的标题产品,以便很容易在整个语句中识别标题产品。
解决方案
我们需要创建一个Adobe Form和与全局数据的interface。我们将在interface的“code initialization”中的全局数据内表中添加一些测试数据,然后将这些全局内表与adobe form layout中的UI表绑定。
另外,我们还可以通过在驱动程序中编写处理逻辑并将所需的内部表作为adobe form的导入参数传递来实现这一点。因为这个博客更多的是关于脚本的使用,所以没有考虑数据处理的最佳方法。
步骤
1,在事务代码SFP创建interface ZPB_TEST_SCRIPTS。

2,创建2个全局变量内表,details和descriptions。

3,表类型ZPB_TEST_DESCR、ZPB_TEST_DETAILS的结构如下,


4,前往code initialization,为内表填入测试数据,


5,前往事务SFP,创建新form,添加interface ZPB_TEST_SCRIPTS。
6,拖放全局变量到context。

7,前往Layout用这两个全局变量创建表格。
a, 前往Data View,

b,选择GT_DETAILS,拖放到Layout的Detail页,

c,你会看到表格自动创建,并绑定了GT_DETAILS。


d,为小计创建页脚行。前往Hierarchy,展开GT_DETAILS,在DATA后创建一个新的行。前往新行的Object,变更行类型为Footer。

请注意,如果我们使用“表格助手”创建表格,则会自动创建页脚。因为前往是通过Data View创建的表格,所以必须手动创建页脚。
下一步是写Formcalc脚本的步骤。
8, 在“NET_UNITS”下的页脚中选择文本字段,然后转到脚本编辑器,

9,现在转到“Show Events”下拉列表,你会发现所有事件都显示为灰色。为什么?

这是因为对于少数UI元素类型,不允许编写脚本,这就是为什么所有事件都仅处于显示模式。要启用事件并编写脚本逻辑,我们需要将UI元素的类型从“Text”更改为“Text Field”。
10,修改NET UNITS和TOTAL ROYALTIES的页脚字段为“Text Field”。

可以注意到,对于上面高亮显示的字段,边框颜色已更改为红色,而对于其他字段,边框颜色仍为蓝色。颜色是标识文本用户界面或文本字段用户界面的指示器
接着,重复步骤8和9,选择合适的事件来编写脚本。
需求是求和、显示小计。
11,选择Calculate事件,语言选择为Formcalc。

写入SUM代码。sum (DATA[*].NET_UNITS)

12,创建一个测试驱动程序以生成结果pdf(请参阅以前的博客以创建用于测试Adobe forms的驱动程序),并生成一个包含小计的pdf:

通过使用FormCalc本的一个求和函数,我们可以在Adobe forms中计算表中行项目的和,不需要使用任何ABAP逻辑。
FormCalc文档:https://helpx.adobe.com/pdf/aem-forms/6-2/formcalc-reference.pdf
JS的使用例子
13,重复步骤7的a-c部分,在Data View为description创建另一个表,使用全局变量GT_DESCRIPTION。

还记得另一个业务需求吗?我们需要在运行期间根据粗体/斜体设置将描述字段中的标题产品设置为粗体,并使用不同的文本样式和项目设置为斜体。
14,在Hierarchy中选择GT_DESCRIPTION的DATA行,前往脚本编辑器。

15,选择“form : ready”事件,语言为Javascript,写入代码,

代码如下,

输出结果,

SAP Adobe Form 教程六 FormCalc和JavaScript的实践的更多相关文章
- 无废话ExtJs 入门教程六[按钮:Button]
无废话ExtJs 入门教程六[按钮:Button] extjs技术交流,欢迎加群(201926085) 继上一节内容,我们在表单里加了个两个按钮“提交”与重置.如下所示代码区的第68行位置, butt ...
- adobe form
Call Adobe Form through ABAP Program 2015-04-24 0个评论 来源:ChampaignWolf的专栏 收藏 我要投稿 Scenar ...
- Laravel教程 六:表单 Forms
Laravel教程 六:表单 Forms 此文章为原创文章,未经同意,禁止转载. Form laravel 5.2 之后请使用 laravelcollective/html 替换 illuminate ...
- CRL快速开发框架系列教程六(分布式缓存解决方案)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 前端学习 第六弹: javascript中的函数与闭包
前端学习 第六弹: javascript中的函数与闭包 当function里嵌套function时,内部的function可以访问外部function里的变量 function foo(x) { ...
- C#微信公众号开发系列教程六(被动回复与上传下载多媒体文件)
微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...
- [转]Android Studio系列教程六--Gradle多渠道打包
转自:http://www.stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ Android Studio系列教程六--Grad ...
- Android Studio系列教程六--Gradle多渠道打包
Android Studio系列教程六--Gradle多渠道打包 2015 年 01 月 15 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://stormzh ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(六) Security Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(六) Security Application Block 开发人员经常编写需要安全功能的应用程序.这些应用程序 ...
- Swift中文教程(六)--枚举和结构
原文:Swift中文教程(六)--枚举和结构 Enumerations 枚举 使用 enum 来创建一个枚举.跟Classes(类)和其他类型的命名方式一样,枚举也可以有Method(方法). enu ...
随机推荐
- salesforce零基础学习(一百三十五)项目中的零碎知识点小总结(七)
本篇参考: https://trailhead.salesforce.com/content/learn/modules/flow-implementation-2/debug-flows-as-an ...
- KingbaseES 中的xmin,xmax等系统字段说明
在KingbaseES中,当我们创建一个数据表时,数据库会隐式增加几个系统字段.这些字段由系统进行维护,用户一般不会感知它们的存在. 例如,以下语句创建了一个简单的表: create table te ...
- KingbaseES 查询优化消除SubPlan
说明: 日常业务系统在使用SQL语句进行查询时,开发人员容易将sql查询的子查询放到select语句中进行使用,会造成sql性能的下降. 数据准备: test=# test=# select coun ...
- OGNL表达式注入分析
OGNL基础 依赖 <dependency> <groupId>ognl</groupId> <artifactId>ognl</artifact ...
- 使用OHOS SDK构建libpng
参照OHOS IDE和SDK的安装方法配置好开发环境. 从github下载源码. 执行如下命令: git clone --depth=1 https://github.com/glennrp/libp ...
- 一种基于DeltaE(CIE 1976)的找色算法Cuda实现
书接上文 一种基于DeltaE(CIE 1976)的找色算法 Delta E 是评估色彩准确度的重要测量指标.摄影师.影片编辑和平面设计师等创意专业人士都应重视这项标准,因其是选择专业级显示器的重要考 ...
- Java 包和 API 深度解析:组织代码,避免命名冲突
Java 包和 API Java 中的包 用于将相关的类分组在一起.可以将其视为文件目录中的一个文件夹.我们使用包来避免名称冲突,并编写更易于维护的代码. 包分为两类: 内置包(来自 Java API ...
- C# DevExpress下GridControl控件的增删查改
DevExpress的GridControl控件可以从任何数据源绑定数据并进行增删查改等操作,和VS自带的dataGridView控件对比,GridControl控件可以实现更多自定义的功能,界面UI ...
- 使用 bat 注册 ocx 控件
注册 新建 reg.bat cd /d %~dp0 regsvr32 ./xxx.ocx 反注册 新建 unreg.bat cd /d %~dp0 regsvr32 /u ./xxx.ocx
- Python3学习--正则表达式
import rer = re.match("Chen\d+","Chen123ronghua123")r = re.match(".+", ...