`
guanhuaing
  • 浏览: 1198075 次
文章分类
社区版块
存档分类
最新评论

ABAP--SAP是如何回写CL_GUI_ALV_GRID_BASE的MT_MODIFIED_CELLS的

 
阅读更多

CL_GUI_ALV_GRID_BASE->MT_MODIFIED_CELLS在网格控件中是个非常重要的属性,sap是如何将客户端的编辑数据自动回写到该内表的,这对希望增强网格控件的 ABAPER兄弟会有很多作用。我现在就将我的理解写下来,供大家参考。

1)在创建CL_GUI_ALV_GRID_BASE的对象,会调用SET_INFO_TABLE方法为MT_MODIFIED_CELLS创建一个CL_GUI_DATAPONDEMAND对象,并把MT_MODIFIED_CELLS的地址传递到CL_GUI_DATAPONDEMAND的M_DATAPTR属性;
2)调用CL_GUI_DATAPONDEMAND->control_assign_prop进行注册全局静态内表“M_RUNNINGOBJECTS”,该内表包含下列字段
begin of runningdataobjs,
handle type i,"CL_GUI_DATAPONDEMAND的唯一ID号,系统每建一个会自动加一
obj type ref to cl_gui_datapondemand,"刚创建的CL_GUI_DATAPONDEMAND对象的地址
Is_Killed(1) type C, "Y6BK003062    "是否Kill
end of runningdataobjs ,
到这,系统就已经为未来回传数据准备好了信息。

在AS得到回传的XML数据,经过对应的LCL_MYXMLConsumer的子类进行处理回写控件的属性和内表。那么CL_GUI_ALV_GRID_BASE->MT_MODIFIED_CELLS又是怎么写回去的呢?
1)AS会分析客户端回传的XML数据,根据XML的项目首先会为'DATACHANGES'创建LCL_MYTABDATACHANGECONSUMER的对象;
2)(CL_GUI_DATAPONDEMAND的唯一ID号)调用call method ('CL_GUI_DATAPONDEMAND')=>('GET_WRITE_ACCESS')从全局静态内表“M_RUNNINGOBJECTS”获得对应控件数据的CL_GUI_DATAPONDEMAND对象赋值给LCL_MYTABDATACHANGECONSUMER的对象的m_dataaccess属性。
3)在LCL_MYTABDATACHANGECONSUMER的对象的OnExecute将通过m_dataaccess属性调用CL_GUI_DATAPONDEMAND对象的On_Modify,On_Remove等方法回写数据。
这样数据就会写到了MT_MODIFIED_CELLS的内表中。

请大家补充指正!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics