在使用BDC批量输入数据的时候,有两个系统结构是要经常使用的,一个是BDCDATA和BDCMSGCOLL。今天查了一些资料,先了解一下第一个结构BDCDATA。
在SE11里看到BDCDATA包含五个字段,分别为:PROGRAM(BDC module pool) DYNPRO(BDC Screen number) DYNBEGIN(BDC screen start) FNAM(Field name) FVAL(BDC field value)。这五个字段代表的意思在括号里面。
我们在通过SM35录好屏幕之后,系统会字段产生一个包括五列若干行的表格。这里的五列就分别对应BDCDATA中的五个字段。bdc的工作原理,就是通过sm35记录的每个屏幕上输入的字段来实现批处理(批处理时,将变量赋值给FVAL,随着变量的改变,实现批处理)。
通过sm35产生的那个表格其实相当于一个内部表,我们要做的就是把通过录屏产生的这些内容加到程序中的内部表中:定义内部表 data it_bdcdata type standard table of bdcdata.
定义工作区域 data wa_bdcdata type bdcdata.
因为要加入到内表中的值很多,所以建子程序。代码如下
perform p_bdcdata using:'' '' '' '' '',
'' '' '' '' '',
'' '' '' '' ''.
将录屏产生的内部表中每一行的值填入到对应的''中取(有关鼠标位置的可以不管)
form p_bdcdata using P_PROGRAM P_DYNPRO P_DYNBEGIN P_FNAM P_FVAL.
clear wa_bdcdata.
wa_bdcdata-program = P_PROGRAM.
wa_bdcdata-dynpro = P_DYNPRO.
wa_bdcdata-dynbegin = P_DYNBEGIN.
wa_bdcdata-fnam = P_FNAM.
wa_bdcdata-fval = P_FVAL.
append wa_bdcdata into it_bdcdata.
endform.
call transaction ‘TCODE’ USING it_bdcdata mode ‘A’.
进过上面这个字程序,录屏所产生的字段和ok-code,全部加到了内表it_bdcdata中。如果说我们要进行批处理的数据已经上传到了另外一个内表中,那么我只要loop这个内表,在loop中perform,将工作区域的值赋值给form中wa_bdcdata-fval 。这样就实现了一个简单的bdc处理。