SAP_BDC精华版教材.docx
BDC技术介绍首先筋单解释一下BDC(BatchDataConversion):在SAP系统里.由于某种原因,可能要宣JUt入敷帚,数据不同,但是黑件是相同的,典型的情形就是切排累腕的H候,旧累优的数据要呼入SAP).大致过程不外乎建这样:输入一个I-COdC.进入一个某个屏幕,然后输入一个值(右时迁要加上一些附加的CheCkboX选项等),点执行或者确定按钮,进入另一个屏幕,在某些字段输入值(也可能是标注CheCkbOX选中或者不选中)或者修改这些字段里的值.然后按“Eneter”最后按“SAVE”.一条记录完成了,继续下一条,如此循环.上面所述的情形,如果让一个“人”来做的话,可能是真是受不了的。但是对于计算机来说,就很简隼了。SAP过一个轿殊的程序(T-Code=SHDB)把用户的一次业务施作的所有过程记录下来.从用户脩入transactioncode(事务代码).点下“StartRecording”开始.对于用户的来说是一次省通的业务操作,但是SAp却在记录:1 .光标放到寿个字段,(在履序中不用改变)2 .填入了什么值.(变量,循环中的IntenUdTab1.e某个字段)3 .点击了什么按钮(在看序中不用改变)本次操作的作为一个“代表.是一个“模板”,告诉SAP系统以怎样的方式来执行程序,也就是用计算机的话育来描述如果手工操作的话应该是怎样的一个过程。用BDC技术揭程时,有以下几个步骤:1 .把外部的It据源(Txt.Exce1.)用读Jtinterna1.SbIeJt者用doenddo循环.2 .在环里耙用SHDB记录的步*重兔执行N次,(N=DiaIog界*数量)这片实际上并没行完成数据的入,第诜只是在«*,*一个叫做-BDCDatar的InteEnTab1.e.*兆bdcdata以后.Aca1.1.transaction/XXXX,usingbdc这个令来宾正的coadt动作或<ca1.1.function'BDC_INSERT'在建立一个session.并把执行的结果返回给BeSStab这个Interna1.Tab1.e.奥在I1.i1.一肿情境,耒做一个演示的BDC也序.由于业务上的昊.某公中打算将某些料的排述郭在后面加上指定的文本GroupX所以要修改EJK存在的物料数据,用T-code:W02,外部数据是TXT文本,记录布N条,如下:Materia1.NO.6000-000012098OOOO1.2059-000092003-00003DescriptionXXXXXXX(GroupA)fdfIadsf1.adf1.(GroupB)dfdsfreddfa1fasfa(Group)iadfdafdf.adfasf(GroupD)下面是“来”操作的过程.在命令栏里输入T-COdC:SHDB,进入如下屏幕:点NCWRcsdring,出现如下屏幕:其中ReCOrding的名字是任意给的。MM2是需要浓的事务代码。按下“StartReCording*.就会进入“ChangeMateria1.",这时,以下的操作对于用户来说是一次普通修改物料插述操作,尽管系统有记录所有的操作。、&Se1.ectv1ev(5)Ocaixaton>1.Ieve1.eData输入一个物料后,点击°Se1.ectView(三)*BasicData1BwicData2Sa1.es:Sa1.esOxcData1Sa1.es:Sa1.esOxc.Data2Sa1.es:Genera1.ZP1.antDataForeignTrade:ExportDataSa1.esTextMRP*,假设我们只选"BasicRata1*和uBasicData然后点击绿色的小勾"EntcreMateria1.6000-00001autonaticXep1.enishnentnatexia1.H“辞Basicdata11.豺Basicdata21.Sa1.es:sa1.esoc*11.Sa1.es:5a1.esorc2我们在读物料后面添加一个*,GroupA",描述改为:Basicdata115B&sicdata2jSa1.es:sa1.esoxg.11Sa1.es:sa1.esorgRateria1.6000"00001autA3txcXep1.emshnentnatea1.(GxoupA)然后点-SAVE',保存这次修改.现在SAP回观了SHDB.DO三QQB先点“SAVE*,保存ReCOrding:ZteSt.然后点*Back*.返回SHDB的第一屏。选中“Ztest”,然后点击“PrograiT.SSAP臼动生成一个程序。在上面的花话框中输入程序的名字注意SRP的命名标准.丫或者Z开头).确认给人再输入一些程序的属性信忠如下:点击aSourceCode”,指定wDeveiopC1.ass"等后,就可以进入ABAPEditor,产生如下代码:rej>rtZBDCTHSTnostandardpageheading1.ine-size255.inc1.udebdcrecx1.parameters:dataset(132)1.owercase.DONOTCHANGE-thegenerateddatasection-DONOTCHANGE* Ifitisnessesarytochangethedatasectionusetheru1.es:* 1.)Eachdefinitionofafie1.dexistsoftwo1.ines* 2.)Thefirst1.ineshowsexact1.ytheCOnmen1.* ,*datae1.ement:'fo1.1.owedwiththedatae1.ement* whichdescribesthefie1.d.* Ifyoudon'thaveadatae1.ementusethe* commentwithoutadatae1.ementname* 3.)Thesecond1.ineshowsthefie1.dnameofthe* structure,thefie1.dnamemustconsistof* afie1.dnameandoptiona1.thecharacterand* threenumbersandthefie1.d1.engthinbrackets* 4.)Eachfie1.dmustbetypeC.* *Generateddatasectionwithspecificformatting-DONOTCHANGEdata:beginofrecord.* datae1.ement:MTNRMATNRJ)O1.(018),* datae1.ement:XFE1.DKZSE1.01.002(001),* datae1.ement:XFE1.DKZSE1.j)2J)O3(00D,* datae1.ement:MKTXMAKTX004(040).* datae1.ement:MEINSME1.NSJ)O5(003)、* datae1.ement:MTPOS_MARAMTPOSMARA006(004),* datae1.ement:GEWEIGEWEI_007(003).endofrecord.* *Endgenerateddatasection*start-of-se1ection.performopendatasetusingdataset,performopen_group.do.readdatasetdatasetintorecord.ifsy-subreO0.exit,endif.performbdcdynproperformbdc_fie1.dusing'Sap1.mgmm,ooeo'.using'BDC,CIRSOR,RMMG1-MATNR,.performbdc_fie1.dusing'bdjokcode',=AUSW,.performbdc_fie1.tiusing,RMMG1.-KWTNR,record-MATNR001.performbdc_dynprousing'SAP1.MGMMr'0070'.perforinbdc_fie1.dusing'bdjcursor',msiChtausw-Dytxt(02)'performbdcfie1.dusing'BDCOKCODE''=ENTR,.perforinbdc_fie1.dusing'Msichtausw-Kzse1.(OI)'record-KZSE1._01.002.performbdcfie1.dusing,MSICItTAUSW-KZSE1.(02)'record-KZSE1._02003.performbdc_dynprousing'Sap1.mgmm''4004'.performbdc_fie1.dusing'bdjokcode',=BU,.performbdc_fie1.dusing,BDCC1.iRSOR'MAKT-MAKTX'.performbdc_fie1.dUSing,MKT-MKTX'record-MAKTX004.performbdc_fie1.dusing'MARA-MEINS'record-MEINS_005.performbdc_fie1.dusing,MR-MTK)SMRA'record-MTPOSMARA006.performbdc_fie1.dusing'mrayewei'record-GEWE1._007.performbdc_transactiorusing'MM02'.enddo.performc1.ose_group.performc1.osedatasetusingdataset.上面的程序的主旻逻辑为:opendataset”读取外部覆揖源do.“循环perform填充BDCDTA子程序performbdc_transcationendo.C1.osedataset.注去上面的InCIUde程序里有两个要的form* Startnewscreenformbdc_dynprousingprogramdynpro.c1.earbdc<1.ata.bdcdata-program=program.bdcdata-dynpro=dynpro.bdcdata-dynbegin='X'.appendbdcdata.endform.Insertfie1.dformbdc-fi1.dusingfnamfva1.iffva1.Onodata.c1.earbdcdata.bdcdata-fnam=fnam.bdcdata-fva1.=fva1.appendbdcdata.endif.endform.另外还有两个重要的interna1.tab1.e声明bdcdata及oesstab* Batchinputdataofsing1.etransaction