SAPBDC精华版教材文档格式.docx
《SAPBDC精华版教材文档格式.docx》由会员分享,可在线阅读,更多相关《SAPBDC精华版教材文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
1.光标放到哪个字段,(在程序中不用改变)
2.填入了什么值,(变量,循环中的InternalTable某个字段)
3.点击了什么按钮(在程序中不用改变)
本次操作的作为一个“代表”,是一个“模板”,告诉SAP系统以如何样的方式来执行程序,也确实是用计算机的语言来描述假如手工操作的话应该是如何样的一个过程。
用BDC技术编程时,有以下几个步骤:
1.把外部的数据源(Txt,Excel等)用读进internaltable或者用doenddo循环。
2.在循环里,把用SHDB记录的步骤重复执行N次,(N=Dialog屏幕数量)这时实际上并没行完成数据的入,系统只是在“填表”,填一个叫做“BDCData”的InternalTable。
填完bdcdata以后,用calltransaction‘XXXX’usingbdc……那个命令来真正的commit动作或者callfunction'
BDC_INSERT'
在建立一个session。
并把执行的结果返回给messtab那个InternalTable。
现在假想一种情境,来做一个演示的BDC程序。
由于业务上的需要,某公司打算将某些物料的描述都在后面加上指定的文本GroupX,因此需要修改差不多存在的物料数据,用T-code:
MM02,
外部数据是TXT文本,记录有N条,如下:
MaterialNO.Description
6000-00001XXXXXXX(GroupA)
2098-00001fdfladsfladfl(GroupB)
2059-00009dfdsfreddfalfasfa(GroupA)
2003-00003iadfdafdf,adfasf(GroupD)
……
下面是“录”操作的过程,在命令栏里输入T-code:
SHDB,进入如下屏幕:
点NewRecodring,出现如下屏幕:
其中Recording的名字是任意给的。
MM02是需要录的事务代码。
按下“StartRecording”,就会进入“ChangeMaterial”,这时,以下的操作关于用户来讲是一次一般修改物料描述操作,尽管系统在记录所有的操作。
输入一个物料后,点击“SelectView(s)”
假设我们只选“BasicData1”和“BasicData1”
然后点击绿色的小勾“Enter”
我们在该物料后面添加一个“GroupA”,描述改为:
然后点“SAVE”,保存这次修改。
现在SAP回到了SHDB,
先点“SAVE”,保存Recording:
Ztest,然后点”Back”,返回SHDB的第一屏。
选中“Ztest”,然后点击“Program”,由SAP自动生成一个程序。
在上面的对话框中输入程序的名字(注意SAP的命名规范,Y或者Z开头),确认输入
再输入一些程序的属性信息如下:
点击“SourceCode”,指定“DevelopClass”等后,就能够进入ABAPEditor,产生如下代码:
reportZBDCTEST
nostandardpageheadingline-size255.
includebdcrecx1.
parameters:
dataset(132)lowercase.
***DONOTCHANGE-thegenerateddatasection-DONOTCHANGE***
*
*Ifitisnessesarytochangethedatasectionusetherules:
*1.)Eachdefinitionofafieldexistsoftwolines
*2.)Thefirstlineshowsexactlythecomment
*'
*dataelement:
'
followedwiththedataelement
*whichdescribesthefield.
*Ifyoudon'
thaveadataelementusethe
*commentwithoutadataelementname
*3.)Thesecondlineshowsthefieldnameofthe
*structure,thefieldnamemustconsistof
*afieldnameandoptionalthecharacter'
_'
and
*threenumbersandthefieldlengthinbrackets
*4.)EachfieldmustbetypeC.
***Generateddatasectionwithspecificformatting-DONOTCHANGE***
data:
beginofrecord,
MATNR
MATNR_001(018),
XFELD
KZSEL_01_002(001),
KZSEL_02_003(001),
MAKTX
MAKTX_004(040),
MEINS
MEINS_005(003),
MTPOS_MARA
MTPOS_MARA_006(004),
GEWEI
GEWEI_007(003),
endofrecord.
***Endgenerateddatasection***
start-of-selection.
performopen_datasetusingdataset.
performopen_group.
do.
readdatasetdatasetintorecord.
ifsy-subrc<
>
0.exit.endif.
performbdc_dynprousing'
SAPLMGMM'
0060'
.
performbdc_fieldusing'
BDC_CURSOR'
RMMG1-MATNR'
BDC_OKCODE'
=AUSW'
record-MATNR_001.
0070'
MSICHTAUSW-DYTXT(02)'
=ENTR'
MSICHTAUSW-KZSEL(01)'
record-KZSEL_01_002.
MSICHTAUSW-KZSEL(02)'
record-KZSEL_02_003.
4004'
=BU'
MAKT-MAKTX'
record-MAKTX_004.
MARA-MEINS'
record-MEINS_005.
MARA-MTPOS_MARA'
record-MTPOS_MARA_006.
MARA-GEWEI'
record-GEWEI_007.
performbdc_transactionusing'
MM02'
enddo.
performclose_group.
performclose_datasetusingdataset.
上面的程序的要紧逻辑为:
opendataset“读取外部数据源
do.“循环
perform填充BDCDATA子程序
performbdc_transcation
endo.
Closedataset.
注意上面的Include程序里有两个重要的form.
*-------------------------------------------------------------------*
*Startnewscreen*
formbdc_dynprousingprogramdynpro.
clearbdcdata.
bdcdata-program=program.
bdcdata-dynpro=dynpro.
bdcdata-dynbegin='
X'
appendbdcdata.
endform.
*Insertfield
formbdc_fieldusingfnamfval.
iffval<
nodata.
bdcdata-fnam=fnam.
bdcdata-fval=fval.
endif.
另外还有两个重要的inter