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

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

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

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

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

给大家简要说说,核心就是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是个什么东东?

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

接口 IF_COIS_DISP_LIST

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

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

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

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

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

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

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

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

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

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

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

上述代码是 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的代码如下图:

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

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ᝰ随心ꦿེএ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值