连续2个事务代码BDC录拼锁住的问题

来源:互联网 发布:require once php 编辑:程序博客网 时间:2024/04/28 01:51

今天刚好群里突然说到博客的问题,才发现自己已经有个把年没写博客了~~~~汗啊,真懒,刚好今天公司开晚会,不需要工作,所以整理写之前开发遇到的问题。

做供应商开发的那个项目,使用xk05和xk06对同一个供应商做处理的时候发现的。

连续的2个不同事务代码做bdc录屏的时候,有时候会发第一个事务码执行完之后做第二个事务会发生锁住的情况。

解决方法:在调用bdc的时候

  call transaction 'XK05'  using bdcdata1 mode ztype update 'S' messages into msgtab1.

update 'S'这个就是关键点,同步跟新。

自己查到的链接

链接http://www.itpub.net/thread-1540646-1-1.html

这里加上update的值为S,代表是同步执行的,经常用于多个事务录屏的情况,第一个事务执行完之后,返回消息之后,才执行第二个事务

做一个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 语句的方式执行。也就是说,数据更新在主程序所在的进程中完成,主程序必定等到被调用事务完成才继续执行。

原创粉丝点击