SAP Adobe Form 教程三 日期,时间,floating field
前文:
原文标题:SAP Adobe Interactive Form Tutorial. Part III. Date Time and Floating Fields
本文链接:https://www.cnblogs.com/hhelibeb/p/15501044.html
准备
首先依然还是创建interface和form。细节见前文。
得到form如下,把参数NAME拖放到context,
将 DATE 和 TIME 字段拖放到 Context。 这些是系统生成的变量,
接着在Layout区域工作。
如何使用floating field?
floating field,即根据绑定打印的字段,具体打印内容取决于运行期间绑定的字段。
前往Layout,
插入标准文本字段,
展开/拉伸(如在ms paint中所做的)文本字段边界,以便在其中写文本。
输入下面的文本或任何所需的行。但选择一个你想保留为floating field的单词。floating field意味着,它可以打印任何绑定的字段。
My name is NAME, I am SAP Technical consultant. Thank you SAP Yard.
对于本示例,我们希望NAME是动态的。 选择文本(NAME),右键单击它并选择它作为floating field, NAME一词更改为 {TextField}。
将floating field与我们拖到上下文区域的NAME字段绑定,
字段{Text Field}将具有动态长度(从上下文到绑定NAME字段的最大长度)。它将根据输入进行扩展和压缩。名称“Ram”只有3个字符,但名称“Wolfeschlegelsteinhausenbergerdorff”有30多个字符,但{TextField}仍会接受它。毕竟,这是一个floating field。
如何使用日期和时间?
前往Data view,
将日期和时间字段拖放到Layout中,
通过在选择类型下选择日期模式来更改日期格式,
可以在区域设置下通过选择所需的国家/地区来选择基于国家/地区的模式。
我们还可以使用上述针对日期字段的相同步骤来格式化时间。
Adobe Form中存在以下系统字段,
检查,保存和激活。
按F8运行,传入NAME值。
接着继续运行,
会得到日期时间和包含输入的NAME的文本,
通过驱动程序调用的话,可以使用以下代码,
1 *======================================================================* 2 *YRAM_ADOBE_FORM_PROGRAM3 * 3 *======================================================================* 4 *Project : SAP Adobe Forms Tutorial * 5 *Author : Ramanjula Naidu DARURU (www.SAPYard.com) * 6 *Description : Driver Program for Printing Floating Field, Date & Time * 7 *======================================================================* 8 REPORTyram_adobe_form_program3.9 10 *Selection Screen 11 PARAMETERS: p_name TYPEname1.12 13 **&&~~ Data Objects 14 DATA: gv_fm_name TYPE rs38l_fnam, "FM Name 15 gs_fp_docparams TYPEsfpdocparams,16 gs_fp_outputparams TYPEsfpoutputparams.17 18 CONSTANTS : gv_form_name TYPE fpname VALUE 'YRAM_ADOBE_FORM3'.19 20 *======================================================================* 21 *START of Calling the Form 22 *======================================================================* 23 *&---------------------------------------------------------------------* 24 **&&~~ Form Processing: Call Form - Open 25 *26 CALL FUNCTION 'FP_JOB_OPEN' 27 CHANGING 28 ie_outputparams =gs_fp_outputparams29 EXCEPTIONS 30 cancel = 1 31 usage_error = 2 32 system_error = 3 33 internal_error = 4 34 OTHERS = 5.35 IF sy-subrc <> 0.36 "Suitable Error Handling 37 ENDIF.38 *&---------------------------------------------------------------------* 39 **&&~~ Get the Function module name based on Form Name 40 *41 CALL FUNCTION 'FP_FUNCTION_MODULE_NAME' 42 EXPORTING 43 i_name =gv_form_name44 IMPORTING 45 e_funcname =gv_fm_name.46 IF sy-subrc <> 0.47 "Suitable Error Handling 48 ENDIF.49 *&---------------------------------------------------------------------* 50 **&&~~ Take the FM name by execuing the form - by using Pattern- 51 **&&~~ call that FM and replace the FM Name by gv_fm_name 52 **&&~~ Call the Generated FM 53 CALL FUNCTION gv_fm_name "'/1BCDWB/SM00000176' 54 EXPORTING 55 /1bcdwb/docparams =gs_fp_docparams56 name =p_name57 EXCEPTIONS 58 usage_error = 1 59 system_error = 2 60 internal_error = 3 61 OTHERS = 4.62 IF sy-subrc <> 0.63 *Implement suitable error handling here 64 ENDIF.65 *&---------------------------------------------------------------------* 66 67 *&---------------------------------------------------------------------* 68 *&---- Close the spool job 69 CALL FUNCTION 'FP_JOB_CLOSE' 70 EXCEPTIONS 71 usage_error = 1 72 system_error = 2 73 internal_error = 3 74 OTHERS = 4.75 IF sy-subrc <> 0.76 *<error handling> 77 ENDIF.
SAP Adobe Form 教程四 动态隐藏和显示字段
前文:
SAP Adobe Form 教程三 日期,时间,floating field
本文链接:https://www.cnblogs.com/hhelibeb/p/15503859.html
条件(IF-ENDIF、CASE、WHILE 等)是常见的程序组成部分。
例如,客户的所有员工都必须在他们从办公室打印的表单签名中将时区打印为GMT–6。 因此,98% 的客户将使用 GMT–6 小时作为他们的时间,但会有2%的用户居住在另一个州,他们将时间作为 GMT–7小时。 所以对于那些特定的用户,你需要放置特殊的逻辑,让他们的签名显示 GMT – 7。这里你必须处理条件并根据条件打印值。
(译注:严格来说,逻辑处理和输出混合在一起是不合适的,但这里我们只关注实现的过程)
假设,在您的驱动程序中,您已经确定了员工所在的时区,并且根据他们的工作地点设置了标志 v_regular_employee = ‘X’ 或空白。
IF v_regular_employee =abap_true.
v_time_sign= 'GMT - 6'.ELSEIF v_regular_employee =abap_false.
v_time_sign= 'GMT - 7'.ENDIF.
SAP Adobe Form 教程五 图片
前文:
SAP Adobe Form 教程三 日期,时间,floating field
原文标题:SAP Adobe Interactive Form Tutorial. Part V. Images, Graphics and Logo in Adobe Forms
本文链接:https://www.cnblogs.com/hhelibeb/p/15512978.html
前提:需要通过SE78上传图片。
上传完成后,请检查确认图片已经在系统中存在,
创建interface。
事务代码SFP,
在interface中添加一个IV_LOGO参数,类型为XSTRING,
创建form,
拖放参数IV_LOGO到Context,
在Context的YRAM_ADOBE_FORM5右击,并且选择create->graphic.
下一步很重要:把Graphic type从Graphic Reference改为Graphic content。
输入字段名IV_LOGO,选择MIME TYPE为‘IMAGE/BMP’.
保存,并前往Layout的Data View标签页。拖放Graphic到layout。
可以根据需要拉伸或压缩图片。可能需要删除图片标题,即默认图像字段文本。
出于演示目的,我在图片下方添加了另一个文本元素。
检查、保存和激活。
带有图形和表单界面的Layout已经完成。 注意到了吗,我们的Layout中有两个元素。图片字段和图形内容。 相当于变量名和实际内容。
调用adobe form的驱动程序,
1 *&---------------------------------------------------------------------* 2 *======================================================================* 3 *YRAM_ADOBE_FORM_PROGRAM5 * 4 *======================================================================* 5 *Project : SAP Adobe Forms Tutorial * 6 *Author : Ramanjula Naidu DARURU (www.SAPYard.com) * 7 *Description : Printing a logo in the adobe form * 8 *======================================================================* 9 REPORTyram_adobe_form_program5.10 11 *======================================================================* 12 *Selection Screen 13 *======================================================================* 14 PARAMETERS : p_logo TYPE rstxt-tdname.15 *======================================================================* 16 *Data Objects 17 *======================================================================* 18 19 DATA: gv_fm_name TYPE rs38l_fnam, "FM Name 20 gs_fp_docparams TYPEsfpdocparams,21 gs_fp_outputparams TYPEsfpoutputparams,22 gv_name TYPEtdobname,23 gv_logo TYPExstring ,24 gv_bmp TYPExstring.25 *======================================================================* 26 *Constants 27 *======================================================================* 28 CONSTANTS : gc_btype TYPE tdbtype VALUE 'BCOL',29 gc_id TYPE tdidgr VALUE 'BMAP',30 gc_object TYPE tdobjectgr VALUE 'GRAPHICS',31 gv_form_name TYPE fpname VALUE 'YRAM_ADOBE_FORM5'.32 33 *======================================================================* 34 *START of Calling the Form 35 *======================================================================* 36 *&---------------------------------------------------------------------* 37 **&&~~ Form Processing: Call Form - Open 38 *39 CALL FUNCTION 'FP_JOB_OPEN' 40 CHANGING 41 ie_outputparams =gs_fp_outputparams42 EXCEPTIONS 43 cancel = 1 44 usage_error = 2 45 system_error = 3 46 internal_error = 4 47 OTHERS = 5.48 IF sy-subrc <> 0.49 "Suitable Error Handling 50 ENDIF.51 *&---------------------------------------------------------------------* 52 **&&~~ Get the Function module name based on Form Name 53 *54 CALL FUNCTION 'FP_FUNCTION_MODULE_NAME' 55 EXPORTING 56 i_name =gv_form_name57 IMPORTING 58 e_funcname =gv_fm_name.59 IF sy-subrc <> 0.60 "Suitable Error Handling 61 ENDIF.62 63 *Passing the logo name 64 gv_name =p_logo.65 66 *Get the image/logo graphic information 67 CALL METHOD cl_ssf_xsf_utilities=>get_bds_graphic_as_bmp68 EXPORTING 69 p_object = gc_object "GRAPHICS 70 p_name = gv_name "Name of the Logo 71 p_id = gc_id "BMAP 72 p_btype = gc_btype "BCOL for color, 'BMON' for Black & White 73 RECEIVING74 p_bmp =gv_bmp75 EXCEPTIONS 76 not_found = 1 77 internal_error = 2 78 OTHERS = 3.79 80 gv_logo =gv_bmp.81 82 *&---------------------------------------------------------------------* 83 **&&~~ Take the FM name by execuing the form - by using Pattern- 84 **&&~~ call that FM and replace the FM Name by gv_fm_name 85 **&&~~ Call the Generated FM 86 CALL FUNCTIONgv_fm_name87 EXPORTING 88 /1bcdwb/docparams =gs_fp_docparams89 *iv_name = p_name 90 *iv_flag = p_flag 91 iv_logo =gv_logo92 EXCEPTIONS 93 usage_error = 1 94 system_error = 2 95 internal_error = 3 96 OTHERS = 4.97 IF sy-subrc <> 0.98 *Implement suitable error handling here 99 ENDIF.100 *&---------------------------------------------------------------------* 101 102 *&---------------------------------------------------------------------* 103 *&---- Close the spool job 104 CALL FUNCTION 'FP_JOB_CLOSE' 105 EXCEPTIONS 106 usage_error = 1 107 system_error = 2 108 internal_error = 3 109 OTHERS = 4.110 IF sy-subrc <> 0.666666 *<error handling> 112 ENDIF.
SAP Adobe Form 几种文本类型
前文:
SAP Adobe Form 教程三 日期,时间,floating field
Adobe Form中可选的文本类型分为3种,如下图,
1. Text Module
可以在事务Smartforms中创建Text Module。它是全局文本。我们可以在Smartform和Adobe Form中使用它。
2. Include text
又叫Standard Texts,通过事务代码SO10创建,它也是全局文本,可以在Smartform和Adobe Form中使用。和Text Module的区别在于,Text Module只能用于Smartform和Adobe Form,Include text还可以在script中使用。
3. Dynamic text
Dynamic text支持输出类型为TSFTEXT的内表,它的结构包含TDFORMAT和TDLINE这两个字段。处理过长文本的话应该会对它很熟悉,
本文链接:https://www.cnblogs.com/hhelibeb/p/15516120.html
参考:
SAP Adobe Interactive Form Tutorial. Part IX. Displaying Dynamic Text in Adobe Forms
the difference between Standard Text and text module
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,写入代码,
代码如下,
输出结果,