点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
前言
如果你和我一样, 还不知道SAP FPM 是什么东西, 那就和我一起来学习一下吧. 这篇文章是转载以前项目中的一位同事的, 多谢他给了我们这个学习的机会. 后面的文章在转载的基础上补充了一些内容. 方便初学者理解内容. 为了区别: 所有调整原文的位置我都会标记一下 .
调整部分:
1.FPM支持的几种UI配置界面接口:
Object Instance Floorplan (OIF)
Overview Page Floorplan (OVP)
Guided Activity Floorplan (GAF)
Quality Activity Floorplan (QAF)
2.FPM可配置的区域:
Identification Region (IDR)
Message Region (MR)
Context Navigation Region (CNR)
Roadmap Element
3.UIBBs:UI building blocks (IF_FPM_UI_BUILDING_BLOCK)
文中没有说明的部分:
控件之间的数据怎么传递(这部分我也没太弄清楚, 如果你知道的话,请不吝指点一下): 大概有两种交互方式 :一种是通过自定义的函数组全局变量或者类全局变量通讯. 另一种应该是WEB DYNPRO 程序的自身通讯机制-有待了解
列表对象定义部分参数的结构必须是内表结构. 否则系统会报错
通过框架生成的对象,可以从事务代码:SICF 中查询并获取到调用链接地址.
生成的对象可以通过 配置工具->编辑平面布置管理器的配置工具修改
FPM工作原理类似于我们调用ALV函数时填写的回调参数(告诉ALV函数特定部分执行指定程序的FORM). FRM框架中配置的回调类就是开发编写业务逻辑的部分. 开发只需要了解回调类怎么和界面对象交互数据以及各回调类之间怎么通讯就可以了.
我使用的系统无法用谷歌浏览器, 只能使用IE浏览器配置与测试. 如果你知道原因也请赐教一下 系统版本 S4 HANA 1709
一个了解回调类的方法的途径是在回调类中添加外部断点, 通过执行页面功能时,断点的中断顺序及中断时的变量来理解FPM界面与回调类的工作逻辑
引用的正文部分
FPM作为SAP完善的WEB框架,对传统的WDA进行了封装,使得开发过程简单稳定且标准化。
常见的框架有OVP, OIF, GAF几种,对概念感兴趣的朋友可以研读专业的介绍文档,我们这里只介绍较为常用的OVP的简单创建流程。
本文将要画出一个基于FPM的页面,并成功展示出想展示的数据,如下图:
接下来我们看下详细的创建过程:
1.在SAP中,启动事务码: FPM_WB 进到配置界面,如下图
2.点击这里进行创建
3.填上应用的名字和描述并选上我们文初说到的,OVP-概览页面
4.点击下一步,分配包,传输请求之后,我们就可以进一步编辑配置了
5.这里可以配置第一个页面的页面标识,标题以及各种常规设置
常规设置中,可以对很多内容进行配置
6.接下来就到了UIBB的介绍了
6.1.UIBB如何理解呢,可以理解为一个控件,或一个'块' block的概念,如下图中,搜索框是一个UIBB,而查询到的结果表则是另一个UIBB
6.2.SAP内置了大量的标准接口来实现代码的标准化,我们在创建UIBB的时候,只需要将对应的接口实现,作为FeederClass,再将FeederClass绑定即可
常见的标准控件如下:
7.添加搜索UIBB
7.1.我们依据具体的业务场景选择合适的UIBB,先选择搜索组件
7.2.配置config ID,填标题等
7.3.选中添加的UIBB,点击配置UIBB
7.4.按照提示一步一步的保存即可进入下一配置界面
7.5.当系统提示需要绑定FeederClass的时候,我们就知道需要创建一个对应的FeederClass了
每一个UIBB都需要绑定一个对应的FeederClass,而这个FeederClass需要我们在系统中建出来
7.6.创建FeederClass
7.6.1.SAP中通过事务码 SE24 进入类的创建
7.6.2.写入标准接口
回车后会自动带出
7.6.3.接下来我们只需要实现所需要的方法就可以了;FPM的事件就不在本文中介绍了
7.6.4.IF_FPM_GUIBB_SEARCH~GET_DEFINITION 定义的方法
参考创建好的结构定义
7.6.5.IF_FPM_GUIBB~INITIALIZE 负责初始化的逻辑
IF_FPM_GUIBB_SEARCH~GET_DATA 负责写入一些默认值的逻辑
7.6.6.接下来回到绑定FeederClass的界面,将刚刚创建的类绑定
7.6.7.再之后,我们就可以添加选择条件了,可以看到这些可供选择的搜索条件事实上就是刚刚我们创建的结构中的字段,结构通过GET_DEFINITION的绑定,就可以再配置页面添加了
7.6.8.完成以上的步骤,保存之后,一个难看的页面就产生了,美观上大家在具体工作时自由发挥哈
8.添加关联的列表UIBB
8.1.搜索UIBB添加完后,我们开始添加列表UIBB,这样点击查询后,就可以查出来数据展示了。多说一句,FPM的UIBB都是可以复用的,如果有一些通用组件,我们直接在其他想使用的地方添加configID即可
8.2.依照上面同样的方式,创建LIST UIBB需绑定的的FeederClass
8.3.GET_DEFINITION方法,定义部分,我们在这里定义出列表要展示的字段
8.4.回到配置,在LIST UIBB中绑定刚刚创建的FeederClass,
8.5.在这里可以选择想展示的列字段
8.6.这里也可以修改一些字段描述,当然这个步骤同样可以用代码动态实现
8.7.这里额外提一句,上面的LIST是在SEARCH组件中添加的,正常情况来讲我们同样可以在下图的位置添加想使用的任何UIBB
9.这个时候我们的页面就变成了这个样子,接下来我们写点代码简单加一些数据
9.1.在GET_DATA中填充一点数据
10.最后来看一下效果
注: 以上仅仅作为一个最基础的demo,便于对FPM一无所知的朋友做一些简单的了解和入门,在熟悉并了解FPM之后,大家就可以根据自己的习惯、方式、项目的要求来做分层,封装了;因网上现在FPM的中文资料太少了,所以发布了此文,后续也会陆续发一些技巧及细节的文章。