1, 总览
众所周知, 在SAP中, 关于Form的设计迄今为止有三种工具, 现列出这三种工具,并对它们做一些简单的评论:
1. Script Form
这是最早期Form开发的工具, 也是本人最先使用的Form开发工具, 对其印象颇为深刻, 最深有感触的就是一直在身边放一把尺子, 然后根据需求一点点量出来. 在程序设计上没有任何难度, 但是做这种开发确实十分浪费时间和精力.
这个工具目前最多使用的情况大概有以下几种:
l 以前的老系统, 现在有很多企业还是使用46C,甚至以前的版本, 那么在做维护的操作的时候, 有很多的Form都是使用Script Form
l 顾问需求, 因为SAP Script Form有很多的模板, 那么对于一些比较资深(接触SAP时间较长)顾问, 非常熟悉这些模板, 在这些模板的基础上做些许修改非常节省开发时间
l 财务模块Form打印, 原因也是SAP Script Form的各种现成的模板
2. Smart Form
到SAP 4.7, ECC5开始, Smart Form的天下来临, 当时本人做对日项目开发,发现其大多数使用的Form工具都是Smart Form, 该工具对Form Painter支持非常好, 节省了很多画Form的时间(Script的画线都是写出来的), 同时, 个人认为从设计上也方便很多,比如可以在smart form里面写代码, template以及table控件的引入等等.
目前绝大多数的Form程序的开发, 都是使用Smart Form,所以这个是我们做ABAP开发人员来说必须熟练掌握的工具.因为网上有很多资料,所以本人也在考虑是否需要再详细写个Smart Form系列的文章. 如果各位读者认为有必要,请给我留言, 我会视情况做决定.
3. Interactive Form
ERP2004(ECC5)开始试行, ERP2005(ECC6, NetWeaver 2004s)开始普及,ERP6我理解应该会全面支持这个工具.
关于ERP2004的使用限制,参考Note: 735050
关于ERP2005的使用限制,参考 Note: 852235
在设计Interactive Form时,主要涉及到以下三种工具:
1. Interface:
在这里面可以定义Form的接口,包括import, export, tables以及exceptions, 有点像Function Module的定义, 当然在里面也可以定义一些全局变量, 以及可以写些初始化代码以及sub routine
2. Context:
在这里定义使用Interface中定义的内容, 可以有选择的使用(原因是interface你可以设计为可重用的对象), 这非常符合针对接口编程而不针对实现编程的理念. 在context中也可以自己添加一些文本模块或者图像.
3. Layout:
使用Adobe LiveCycle Designer, 包括静态元素(写死的一些文本)以及动态元素(引用自context).
Adobe Interactive Form的调用原理其实很简单, 因为它只不过是一些web service对象, 在SAP中要做的就是些代码去调用这些web service. 这些web service就是我们知道的Adobe Document Service(ADS), ADS是J2EE Engine的一部分, 也就是说, 如果你想使用Interactive Form开发工具, 必须安装J2EE Engine.
写了这么多, 在列举一下个人认为Interactive Form相对于Script Form和Smart Form的优势(SAP自然会列举很多,本人只列出自己认为的):
l 让Form程序的开发设计更简单
l Adobe LiveCycle直接集成在SAP中,画Form更方便
l 图片处理更方便(SE78边上玩去吧)
l Layout元素可以重用
l 可以导入现成PDF或者Word
l 字体支持更加强大
l Barcode之类的使用更加方便
2, 实例
咳咳, 不知不觉竟然写了这么多, 大家可能也看的云里雾里, 写的再多不如直接上个简单的程序,这样更加直观, 更加容易理解. 按照惯例,先上Hello World的Interactive Form的打印程序.
设计, 本例设计输入一个参数, 然后把这个输入参数的值通过Form打印出来, 嗯….为了做广告, 加个Logo的打印, Logo的图片是翱翔云天.
1. 创建Interface
1.1 进入事务代码: SFP
1.2 输入Interface名字,点击创建
1.3 在弹出窗口中选择接口类型,输入描述,点击保存按钮
1.4 在我们这个例子中,就是通过一个text加上Hello World, 为了更加多的用到一些接口方面的东西,我们加一个传入参数:
1.5 保存并且激活接口
2. 创建Form
2.1 事务代码:SFP
2.2 在Form中输入要创建的form名字,点创建
2.3 在弹出窗口中输入form的描述,同时选定Form用到的接口名字,点保存:
2.4 在context tab中,我们需要把输入的参数加入到context中,这个就是一个拖拽的动作:
2.5 在Layout tab中,设计Form的显示,我们这个简单的例子只要加一个显示hello world的文本控件:
动作很简单,把IM_String拖到form设计器上就可以了:
我们来关注一下它的简单属性:
2.5.1 外观:
2.5.2 值
2.5.3 数据绑定
2.6 添加一个图片
选中Image控件,拖到form设计器中
然后指定这个图片的链接:
2.7 保存,激活
3, 编写程序代码
最后一步,也就是写程序调用我们已经做好的form,关于这个程序该如何写,请参考下面的程序,里面的注释比较清楚的介绍这种程序的写法。
例子程序如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
*&---------------------------------------------------------------------* *& Report ZBOBO_PDF_DEMO_001 *& *&---------------------------------------------------------------------* *& 作者:翱翔云天 *& 描述:这是个Interactive form打印程序的demo版本 *&---------------------------------------------------------------------* REPORT ZBOBO_PDF_DEMO_001. *定义Form的名字 data: lv_form_name type fpwbformname. *定义得到的函数名字,这个函数就是form的接口 data: lv_fm_name type rs38l_fnam. *定义打印参数 data: lwa_fp_params type SFPOUTPUTPARAMS. *定义处理结果 data: lv_result type sfpjoboutput. START-OF-SELECTION. *取得函数的名字 lv_form_name = 'ZBOBO_PDF_DEMO_HELLOWORLD'. CALL FUNCTION 'FP_FUNCTION_MODULE_NAME' EXPORTING I_NAME = lv_form_name IMPORTING E_FUNCNAME = lv_fm_name. * 这个是RFC的名字 lwa_fp_params-connection = 'ADS'. * 打开一个打印job CALL FUNCTION 'FP_JOB_OPEN' CHANGING IE_OUTPUTPARAMS = lwa_fp_params EXCEPTIONS CANCEL = 1 USAGE_ERROR = 2 SYSTEM_ERROR = 3 INTERNAL_ERROR = 4 OTHERS = 5. IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. *调用真正的form接口函数 CALL FUNCTION lv_fm_name EXPORTING im_string = 'Hello World!'. * 关闭打印job CALL FUNCTION 'FP_JOB_CLOSE' IMPORTING E_RESULT = lv_result EXCEPTIONS USAGE_ERROR = 1 SYSTEM_ERROR = 2 INTERNAL_ERROR = 3 OTHERS = 4. IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. |
以上。
发表评论