ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:134.48KB ,
资源ID:5726763      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5726763.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ABAP4的BDC开发.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ABAP4的BDC开发.docx

1、ABAP4的BDC开发ABAP4的BDC开发首先简单解释一下BDC(Batch Data Conversion): 在SAP系统里,由于某种原因,可能需要重复输入数据,(数据不同,但是操作是相同的,典型的情形就是切换系统的时候,旧系统的数据需要导入SAP),大致过程不外乎是这样: 输入一个t-code,进入一个某个屏幕,然后输入一个值(有时还要加上一些附加的checkbox选项等),点执行或者确定按钮,进入另一个屏幕,在某些字段输入值(也可能是标注checkbox选中或者不选中)或者修改这些字段里的值。然后按“Eneter”最后按“SAVE”,一条记录完成了,继续下一条,如此循环。上面所述的情

2、形,如果让一个“人”来做的话,可能是真是受不了的。但是对于计算机来说,就很简单了。SAP通过一个特殊的程序(T-code:SHDB)把用户的一次业务操作的所有过程记录下来。从用户输入transaction code(事务代码),点下“Start Recording”开始,对于用户的来说是一次普通的业务操作,但是SAP却在记录:1 光标放到哪个字段,(在程序中不用改变)2 填入了什么值,(变量,循环中的Internal Table 某个字段)3 点击了什么按钮(在程序中不用改变)本次操作的作为一个“代表”,是一个“模板”,告诉SAP系统以怎样的方式来执行程序,也就是用计算机的语言来描述如果手工操

3、作的话应该是怎样的一个过程。 用BDC技术编程时,有以下几个步骤:1把外部的数据源(Txt,Excel等)用读进internal table或者用do enddo循环。2在循环里,把用SHDB记录的步骤重复执行N次,(N = Dialog屏幕数量)这时实际上并没行完成数据的入,系统只是在“填表”,填一个叫做“BDCData”的Internal Table。填完bdcdata以后,用call transaction XXXX using bdc这个命令来真正的commit动作或者call function BDC_INSERT在建立一个session。并把执行的结果返回给messtab这个Int

4、ernal Table现在假想一种情境,来做一个演示的BDC程序。由于业务上的需要,某公司打算将某些物料的描述都在后面加上指定的文本Group X,所以需要修改已经存在的物料数据,用T-code:MM02,外部数据是TXT文本,记录有N条,如下:Material NO. Description6000-00001 XXXXXXX(Group A)2098-00001 fdfladsfladfl(Group B )2059-00009 dfdsfreddfalfasfa(Group A)2003-00003 iadfdafdf,adfasf(Group D)下面是“录”操作的过程,在命令栏里输入

5、T-code :SHDB,进入如下屏幕: 点New Recodring,出现如下屏幕:其中Recording 的名字是任意给的。MM02是需要录的事务代码。按下“Start Recording”,就会进入“Change Material”,这时,以下的操作对于用户来说是一次普通修改物料描述操作,尽管系统在记录所有的操作。输入一个物料后,点击“Select View(s)”假设我们只选“Basic Data 1”和“Basic Data 1”然后点击绿色的小勾“Enter”我们在该物料后面添加一个“Group A”,描述改为:然后点“SAVE”,保存这次修改。现在SAP回到了SHDB,先点“SA

6、VE”,保存Recording :Ztest,然后点”Back”,返回SHDB的第一屏。选中“Ztest”,然后点击“Program”,由SAP自动生成一个程序。在上面的对话框中输入程序的名字(注意SAP的命名规范,Y或者Z开头),确认输入再输入一些程序的属性信息如下:点击“Source Code”,指定“Develop Class”等后,就可以进入ABAP Editor,产生如下代码:report ZBDCTEST no standard page heading line-size 255.include bdcrecx1.parameters: dataset(132) lower ca

7、se.* DO NOT CHANGE - the generated data section - DO NOT CHANGE * If it is nessesary to change the data section use the rules:* 1.) Each definition of a field exists of two lines* 2.) The first line shows exactly the comment* * data element: followed with the data element* which describes the field.

8、* If you dont have a data element use the* comment without a data element name* 3.) The second line shows the fieldname of the* structure, the fieldname must consist of* a fieldname and optional the character _ and* three numbers and the field length in brackets* 4.) Each field must be type C.* Gene

9、rated data section with specific formatting - DO NOT CHANGE *data: begin of record,* data element: MATNR MATNR_001(018),* data element: XFELD KZSEL_01_002(001),* data element: XFELD KZSEL_02_003(001),* data element: MAKTX MAKTX_004(040),* data element: MEINS MEINS_005(003),* data element: MTPOS_MARA

10、 MTPOS_MARA_006(004),* data element: GEWEI GEWEI_007(003), end of record.* End generated data section *start-of-selection.perform open_dataset using dataset.perform open_group.do.read dataset dataset into record.if sy-subrc 0. exit. endif.perform bdc_dynpro using SAPLMGMM 0060.perform bdc_field usin

11、g BDC_CURSOR RMMG1-MATNR.perform bdc_field using BDC_OKCODE =AUSW.perform bdc_field using RMMG1-MATNR record-MATNR_001.perform bdc_dynpro using SAPLMGMM 0070.perform bdc_field using BDC_CURSOR MSICHTAUSW-DYTXT(02).perform bdc_field using BDC_OKCODE =ENTR.perform bdc_field using MSICHTAUSW-KZSEL(01)

12、record-KZSEL_01_002.perform bdc_field using MSICHTAUSW-KZSEL(02) record-KZSEL_02_003.perform bdc_dynpro using SAPLMGMM 4004.perform bdc_field using BDC_OKCODE =BU.perform bdc_field using BDC_CURSOR MAKT-MAKTX.perform bdc_field using MAKT-MAKTX record-MAKTX_004.perform bdc_field using MARA-MEINS reco

13、rd-MEINS_005.perform bdc_field using MARA-MTPOS_MARA record-MTPOS_MARA_006.perform bdc_field using MARA-GEWEI record-GEWEI_007.perform bdc_transaction using MM02.enddo.perform close_group.perform close_dataset using dataset.上面的程序的主要逻辑为:open dataset “读取外部数据源do.“循环 perform 填充BDCDATA子程序 perform bdc_tra

14、nscationendo.Close dataset.注意上面的Include程序里有两个重要的form.*-* Start new screen *-*form bdc_dynpro using program dynpro. clear bdcdata. bdcdata-program = program. bdcdata-dynpro = dynpro. bdcdata-dynbegin = X. append bdcdata.endform.*-* Insert field *-*form bdc_field using fnam fval. if fval nodata. clear

15、 bdcdata. bdcdata-fnam = fnam. bdcdata-fval = fval. append bdcdata. endif.endform.另外还有两个重要的internal table声明。bdcdata及messtab* Batchinputdata of single transactiondata: bdcdata like bdcdata occurs 0 with header line.* messages of call transactiondata: messtab like bdcmsgcoll occurs 0 with header line.

16、选取部分最关键(典型)的代码如下:do.read dataset dataset into record.“逐行读出txt文本中的记录,请参:read datasetif sy-subrc 0. exit. endif. “如出错就退出以下执行子程序(粗斜体部分)屏幕A、指定bdc_dynpro的实参,告知系统dialog程序名称:SAPLMGMM,及screen number:0060perform bdc_dynpro using SAPLMGMM 0060.B、指定bdc_field的实参,告知系统把光标放在哪个字段,这里是“RMMG1-MATNR,物料”perform bdc_fiel

17、d using BDC_CURSORRMMG1-MATNR.C、告知系统ok_code是什么,也可以认为是去点哪个按钮,这里是左上角的“Select View(s)”perform bdc_field using BDC_OKCODE =AUSW.这里是通过read dataset 读取的外部的文件中的记录,record是一个用于临时保存数据的仅有一行的work area。程序在运行进,record-matnr_001应该是一个具体的物料代码。perform bdc_field using RMMG1-MATNRrecord-MATNR_001.屏幕是类似的perform bdc_dynpro

18、 using SAPLMGMM 0070.perform bdc_field using BDC_CURSOR MSICHTAUSW-DYTXT(02).perform bdc_field using BDC_OKCODE =ENTR.perform bdc_field using MSICHTAUSW-KZSEL(01) record-KZSEL_01_002.perform bdc_field using MSICHTAUSW-KZSEL(02)record-KZSEL_02_003.同样先指定程序名称及屏幕号,然后指定光标位置,值,OK_Codeperform bdc_dynpro us

19、ing SAPLMGMM 4004.perform bdc_field using BDC_OKCODE =BU.perform bdc_field using BDC_CURSOR MAKT-MAKTX.perform bdc_field using MAKT-MAKTX record-MAKTX_004.perform bdc_field using MARA-MEINS record-MEINS_005.perform bdc_field using MARA-MTPOS_MARA record-MTPOS_MARA_006.perform bdc_field using MARA-GE

20、WEIrecord-GEWEI_007.以上的步骤实际上在一个叫做bdcdata的internal table中填入了一些关于调用哪个程序(包括屏幕号码),在哪些字段中,填入什么值,点击什么按钮等信息。下面的一个步骤才真正的向系统写入数据call function BDC_INSERT,建立session,一般是后台运行,能给出Log信息或call transaction不建立session,直接执行。执行后返回的消息保存在messtab中。perform bdc_transaction using MM02.enddo.perform close_group.perform close_da

21、taset using dataset.再给一个简明的非SAP自动生成的程序如下(旧版SAP31I),这个程序略去了读取外部数据的程序,没有用循环,只是用Matnr从屏幕上接收用户输入的一个物料。REPORT ZBDC1 .TABLES:MARA.DATA:BEGIN OF BDCDATA OCCURS 0. INCLUDE STRUCTURE BDCDATA.DATA:END OF BDCDATA.PARAMETERS:MATNR LIKE MARA-MATNR.PARAMETERS:P_MODE TYPE C DEFAULT N.START-OF-SELECTION. PERFORM PR

22、OCESS_CC02. PERFORM PROCESS_CC03. PERFORM PROCESS_CC04. PERFORM PROCESS_CC05. CALL TRANSACTION MM02 USING BDCDATA MODE P_MODE UPDATE S.END-OF-SELECTION.FORM PROCESS_CC02. PERFORM BDC_DYNPRO USING SAPLMGMM 0060. PERFORM BDC_FIELD USING BDC_OKCODE /00. PERFORM BDC_FIELD USING RMMG1-MATNR MATNR.ENDFORM

23、. process_cc02FORM PROCESS_CC03. PERFORM BDC_DYNPRO USING SAPLMGMM 0070. PERFORM BDC_FIELD USING BDC_OKCODE ENTR. PERFORM BDC_FIELD USING MSICHTAUSW-KZSEL(11) X.ENDFORM. process_cc03FORM PROCESS_CC04. PERFORM BDC_DYNPRO USING SAPLMGMM 0080. PERFORM BDC_FIELD USING BDC_OKCODE ENTR. PERFORM BDC_FIELD

24、USING RMMG1-WERKS TH10.ENDFORM. process_cc04FORM PROCESS_CC05. PERFORM BDC_DYNPRO USING SAPLMGMM 3000. PERFORM BDC_FIELD USING BDC_OKCODE BU.ENDFORM. process_cc05FORM BDC_DYNPRO USING PROGRAM DYNPRO. CLEAR BDCDATA. BDCDATA-PROGRAM = PROGRAM. BDCDATA-DYNPRO = DYNPRO. BDCDATA-DYNBEGIN = X. APPEND BDCD

25、ATA.ENDFORM.FORM BDC_FIELD USING FNAM FVAL. CLEAR BDCDATA. BDCDATA-FNAM = FNAM. BDCDATA-FVAL = FVAL. APPEND BDCDATA.ENDFORM.总结一下:对于一个BDC程序来说,有两个固定的internal table 需要声明:bdcdata和messtab,名称可以变,但是声明时一定要* Batchinputdata of single transactiondata: abc like bdcdata occurs 0 with header line.* messages of ca

26、ll transactiondata: def like bdcmsgcoll occurs 0 with header line.Like 后面的table type(这里是一个structure)是不能改变的。有两个固定功能的form:bdc_dynapro和 bdc_field名称同样是任意的,但是程序代码应该是相同的,(强烈建议不要改动,因为会给自己添加麻烦)另个还有一个Internal Table或者work area是用来放从外部读进来的数据的,结构应该和你的外部文件的有相关的字段结构。一次读进全部的记录然后循环处理 loop at internal table processen

27、dloop。或者一条一条读进并处理,然后循环读下一条 do process enddo。其中Process 分为两个部分:1.填充bdcdata表。 2.Call transaction or Call Function BDC_Inser返回消息放入Messtab.另外有一个经验之谈:1、录“操作”的时候,不要有“多余”的操作,(什么是多余的操作?自己思考吧)如果有,就重新录吧,不然这些操作也被记录下来,程序每次都要做一些不必要的动作。2、尽量用鼠标去点击按钮,而不要只是敲“Enter”。3、光标的位置一般也可以不指定,也就是perform bdc_field using BDC_CURSOR XXXX-XXXX通常可以不用写。不过,据说有时候去了也会出问题,加上去就没了,这个我就不知道了。呵

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1