sap BDC 相关简介(以后新的认识之后再追加)

来源:互联网 发布:水晶相册制作软件 编辑:程序博客网 时间:2024/06/03 17:00

********************************** 始める(2013/11/04)****************************************************

BDC这三个英文的意思, 普遍都认同是(Batch Data Communication). 然后下面是一些相关的术语解释:


Batch Input: 批输入, 用于大批量, 非实时性( 对速度要求比较低) 的数据传输 使用BDC_OPEN_GROUP, BDC_INSERT_GROUP, BDC_CLOSE_GROUP这几个function实现批输入会话的操作. 然后通过批输入会话将数据传输到SAP.

Call Transaction: 调用事务, 与批输入的差异主要是在于数据传输过程不生成批输入会话, 数据在程序运行过程中直接通过调用CALL TRANSACTION USING BDC表传输至SAP.

Direct Input: 直接输入, 其主要优点是速度最快, 不生成会话, 数据被直接输入至SAP. 不存在事务屏幕处理过程(批输入和调用事务中均包含该过程), 直接输入的效率较高, 系统负载较小. 使用TCODE BMV0.
但是我们不该把BDC技术只局限于录屏幕, 批输入和调用事务上, 其实以下技术都可以实现BDC, 比如BAPI, IDOC.

BAPI: 业务应用程序接口, SAP作为一个完善的系统, 每个应用中都有包含标准的数据传输接口.

IDOC: 中间文档, ALE和EDI属于系统间数据传输的接口, IDOC中包含数据结构的定义和数据的处理逻辑, 是传输的介质.


一, 调用事务, 主要使用该语句

CALL TRANSACTION '事务代码' USING bdc表 MODE m UPDATE 'S' MESSAGES INTO mssg.

bdc表是参考bdcdata结构定义的内表, 主要存储屏幕处理所需要的关键数据, 其结构如下:

字段名类型长度小数描述PROGRAMCHAR400BDC module poolDYNPRONUMC40BDC Screen numberDYNBEGINCHAR10BDC screen startFNAMCHAR1320Field nameFVALCHAR1320BDC field value

MODE m 是指Processing Mode, 共有4种处理模式:

模式英文描述ADisplay all screensEDisplay errorsNBackground processingPBackground processing; debugging possible

UPDATE 'S'  是指更新模式, 共有3种更新模式,一般使用'S'模式:

模式描述A异步S同步L本地

MESSAGES INTO mssg 的意思是将处理信息导入到一个参考bdcmsgcoll结构的内表, 方便查错.

 

 

关于BDC的同步与异步更新差别的研究:(参照)

做一个transction的bdc, 连续走过3个屏幕, 更新三个DB表, 在前台做, 是可以一个一个表实时更新的, 如果只做了两个表退出来, 系统会更新两个表

在call transaction using bdc却碰到很多问题
1, 如果三个屏幕中有一个出错, 三个表都不更新, 一定要走到最后一个屏幕结束才会同时更新三个表!这是所谓的隐式LUW的原因吗?
2, 如果做一个call trsnaction t-code update 'A'(默认), 是异步更新, call trsnaction t-code update 'S' 是同步更新, 但是试验中完全没看出两者的区别。全是在bdc的最后一个屏幕结束时立刻全更新或者全不更新!
完全不明白啊,同步异步更新在这里怎么用啊?commit work and wait在哪儿写?

以下参考资料
===============================================================
UPDATE 确定批输入的更新模式,有下面几个可选值:
更新模式 作用
"A" 异步更新。被调用程序的更新按照没有指定 COMMIT WORK 语句和 AND WAIT 附加的方式执行。也就是说,数据更新被放到更新队列里,由另一个专门的更新进程执行,主程序一旦提交数据就继续执行,而不管提交的更新是否执行完成。这种方式比较适合于用一个事务码大量更新指定数据,比如维护主数据等。
"S" 同步更新。被调用程序的更新按照指定了 COMMIT WORK 语句和 AND WAIT 附加的方式执行。也就是说,数据更新被放到更新队列里,由专门的更新进程执行,但是主程序会等到数据提交完成,返回结果信息后才继续执行。这种方式比较适合于数据一致性要求比较高,多个不同事务码的连续处理。
"L" 本地更新。被调用程序的更新按照执行 SET UPDATE TASK LOCAL 语句的方式执行。也就是说,数据更新在主程序所在的进程中完成,主程序必定等到被调用事务完成才继续执行。
================================================================