天天看點

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的内表中。

請大家補充指正!