2022年9月

前文:

SAP Adobe Form 教程一 简单示例

SAP Adobe Form 教程二 表

SAP Adobe Form 教程三 日期,时间,floating field

 

本文链接:https://www.cnblogs.com/hhelibeb/p/15503859.html

原文标题:SAP Adobe Interactive Form Tutorial. Part IV. Dynamically Hide and Display Fields using Javascript in Adobe Form Based on Conditions

 

条件(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 教程二 表

SAP Adobe Form 教程三 日期,时间,floating field

SAP Adobe Form 教程四 动态隐藏和显示字段

 

原文标题: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 教程二 表

SAP Adobe Form 教程三 日期,时间,floating field

SAP Adobe Form 教程四 动态隐藏和显示字段

SAP Adobe Form 教程五 图片

 

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 教程一 简单示例

SAP Adobe Form 教程二 表

SAP Adobe Form 教程三 日期,时间,floating field

SAP Adobe Form 教程四 动态隐藏和显示字段

SAP Adobe Form 教程五 图片

SAP Adobe Form 几种文本类型

 

在本文中,我们将演示在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,写入代码,

 

 代码如下,

 

输出结果,

 

因为需要,我们需要搭建多层代理服务用于消息转发,同时也方便通过跳板机2进行访问互联网,话不多说,上主菜。




0x1 代理选择

现在的代理服务器非常多,如何选择也是一门学问,作者在写这篇文档之前已经尝试过三种代理软件,最终才实现相关需求。


谈到代理,大家首先会想到nginx这一经典的代理服务器,但是很不好的是,它的upstream配置一直不生效,导致没办法实现多层代理(当然也许是我菜~);


tinyproxy,在踩坑nginx之后,我们又想到了tinyproxy,过程很顺利,tinyproxy实现了,我们所需要的需求,不过事情没那么简单,虽然实现了https的转发,但是当主机存在CA证书的时候tinyproxy又不行了,通过查阅相关issue发现tinyproxy只是支持http代理,不支持https代理,故又GG。。


squid这属于一个小插曲,同样也因为无法实现二层代理而告终。


最后,我们的主角出场gost。


0x2 Gost

其功能十分强大,支持TCP,UDP,HTTP/HTTPS等多种协议转发,看到这个简介我都心动不已。


GOST


0x2.1 快速开始

我选择的是通过git + go build的方式手动编译,不过这里有些坑需要我们注意,gost项目对于go的版本是有要求的,小于1.8大于1.3,最佳版本1.73。




源码编译:


git clone <https://github.com/ginuerzh/gost.git>

cd gost/cmd/gost

go build

1

2

3

最后可以得到一个gost的二进制文件。




0x2.2 配置代理

http代理:


./gost -L=账号:密码@0.0.0.0:port

1

https代理:


https代理,我们需要CA证书,可以选择自己申请,或者通过第三方平台生成都行。我这里是自己通过脚本生成的。




./gost -L=https://账号:密码@0.0.0.0:port?probe_resist=code:400\&knock

=your-secret-link.localhost\&cert=证书.crt\&key=证书.key

-F=账号:密码@跳板机2:port

1

2

3

配置完成,出现如下,即为运行成功。




然后,我们可以通过curl命令进行验证是否代理成功。


curl -s -v <http://myip.ipip.net> -x <https://账号:密码@ip>:port

1

出现日志如下。




代理成功(第一台机器是腾讯云的,第二台是阿里云的)。

————————————————

版权声明:本文为CSDN博主「幻丶城」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_26584917/article/details/123630800