SAP SE24维护类、接口interface(如何看懂CO03事务码对应的abap代码)

想读懂CO03这个事务码的代码。

也不是全都读懂,只要读懂其中一小部分就可以了。如下图: 记入文档的货物移动。

现在已经大概知道了这种SAP系统自带事务码的代码结构,因为我想看懂的部分,毕竟是其中最简单的部分-----ALV,如下图:

SAP SE24维护类、接口interface(如何看懂CO03事务码对应的abap代码)_第1张图片

这个报表,生产订单和物料凭证之间的关系在abap编程中,怎么找到(不要跟我说什么RESB\MARD\MSEG之间的关系了,我早就知道),我就想知道CO03这个事务码对应的系统自带的abap代码,究竟他妈怎么写出来的。

SAP SE24维护类、接口interface(如何看懂CO03事务码对应的abap代码)_第2张图片

给大家简要说说,核心就是Function pool和function group 。一个事务码对应一个function pool 也就是program name

然后这个function pool下面挂了很多function module,这些function module应该是都归属于某一个function group

代码的结构 入口处 就是一堆INCLUDE statement,顺序执行,自己用SE80去看就行了。

既然我们要看的代码的重点在于CO03的ALV部分,根据以往的经验,显示ALV肯定要创建普通屏幕,准备数据,然后ALV_DISPLAY方法来显示就完了。

找到对应代码,发现还是挺复杂的:

直接给大家一个坐标:

functionpool : SAPLCOISOUTPUT ----LCOISOUTPUTUXX ---- LCOISOUTPUTU02 ---- CALL SCREEN 100 ---- MODULE pbo_0100 ----  

-list->set_table_for_first_display( -container ).

就是上述语句了

现在需要搞清楚的是:

1.这个set_table_for_first_display()方法是怎么定义的?

2.参数-container是个什么东东?

SAP SE24维护类、接口interface(如何看懂CO03事务码对应的abap代码)_第3张图片

我们今天查看的interface名字是:IF_COIS_DISP_LIST

接口 IF_COIS_DISP_LIST

SAP SE24维护类、接口interface(如何看懂CO03事务码对应的abap代码)_第4张图片

因为今天的主角是上面这个方法SET_TABLE_FOR_FIRST_DISPLAY 这个名字我们很熟悉,这是abap编程中常常用到的显示alv的方法

但是过去使用的方法和这个还是有本质的区别,过去我们一直在使用CL_GUI_ALV_GRID 类 中定义的该方法,而这一次我们是用的代码是IF_COIS_DISP_LIST接口 中定义的该方法。

如下图和上图,看到同样一个名字的方法,定义在 IF_COIS_DISP_LIST 接口 和 CL_GUI_ALV_GRID 类中的区别。

SAP SE24维护类、接口interface(如何看懂CO03事务码对应的abap代码)_第5张图片

上面两个图,都是使用事务码SE24打开的。

接口IF_COIS_DISP_LIST 只是一个接口,接口的意思就是,它不是实现类,下面我们来看看这个接口的其中一个实现类:CL_COIS_DISP_LIST

SAP SE24维护类、接口interface(如何看懂CO03事务码对应的abap代码)_第6张图片

看上图,毫无疑问 类 CL_COIS_DISP_LIST是接口IF_COIS_DISP_LIST的一个实现类。你肯定要问,你怎么发现接口和类之间的关系的呢?

是这样,我在进行调试的时候,双击 下图中 set_table_for_first_display()方法 因为这是一个接口的方法,因此,系统弹出一个窗体,让我选择,具体的实现类

SAP SE24维护类、接口interface(如何看懂CO03事务码对应的abap代码)_第7张图片

但是,上图看到,很显然,该接口的实现类,不只有一个,点开右侧的按钮,看看:

SAP SE24维护类、接口interface(如何看懂CO03事务码对应的abap代码)_第8张图片

确实有两个实现类,而下面看到的代码就是由CL_COIS_DISP_LIST类实现的接口IF_COIS_DISP_LIST

SAP SE24维护类、接口interface(如何看懂CO03事务码对应的abap代码)_第9张图片

上图是静态代码,下面是我调试时候的看到的代码,看一模一样把?

看看下面的图片吧,这是我调试一个代码的时候的截图:下面才是我写这篇博文的目的

上述代码是 IF_COIS_DISP_LIST 接口  的方法SET_TABLE_FOR_FIRST_DISPLAY的一个 实现,其中的关键是 使用FIELD-SYMBOLS 和ASSIGN进行赋值

现在我们找到了 所调试的代码中调用的SET_TABLE_FOR_FIRST_DISPLAY方法的来源:CL_COIS_DISP_LIST类的方法,而不是我们自己写代码时候运用的CL_GUI_ALV_GRID类的方法。那么事实果真如此吗?

我们继续看IF_COIS_DISP_LIST 接口  的方法SET_TABLE_FOR_FIRST_DISPLAY的代码如下图:

SAP SE24维护类、接口interface(如何看懂CO03事务码对应的abap代码)_第10张图片

双击mo_grid,发现它是CL_COIS_DISP_LIST的一个成员对象,而这个成员对象的类型,如下图,恰恰是CL_GUI_ALV_GRID类

SAP SE24维护类、接口interface(如何看懂CO03事务码对应的abap代码)_第11张图片

也就是说,我们自己写的abap代码中常常使用的SET_TABLE_FOR_FIRST_DISPLAY方法和 所调试代码中使用的SET_TABLE_FOR_FIRST_DISPLAY方法,虽然是不同类下的方法,但是归根结底,都是CL_GUI_ALV_GRID类的方法,只是我们所调试的代码,创建了另一个接口,并实现,实现类封装了原来的方法。

SAP SE24维护类、接口interface(如何看懂CO03事务码对应的abap代码)_第12张图片

SAP SE24维护类、接口interface(如何看懂CO03事务码对应的abap代码)_第13张图片 

你可能感兴趣的:(SAP,ABAP,SAP,ABAP,SAP,CLASS)