update fm
update fm需要在属性中勾选“更新模块”
然后在程序中使用 call function in update task调用,此时不会立即执行函数,在执行到commit work时触发执行(注:debug隐式提交不会触发)。
update task不在当前dialog work process中执行,会在update work process中异步执行。dialog work process把修改数据写入簇表VBLOG中,update work process从表VBLOG中读取,把修改传入数据库。更新数据库成功后,update work process会在最后一步数据库修改操作完成后触发一次数据库commit,把vblog中的数据删掉;如果更新失败,会触发一次rollback,保留vblog中的数据,发送一条消息给sap用户。
注意:
在update task里不能使用commit work,否则会dump。
使用update task可以控制出错时多个update module同时回滚。
在update module中打断点是不会进去的,dump了也不会报出来,会把错误发到用户的收件箱。
查看错误的数据,使用tcode sm13查看update请求,双击进入error的项目,把光标定位在module上,点击"dsplay uodate data"可以看到具体错误的数据。
用户登录组根据SMLG组分配用户登录的服务器,update 和 rfc请求会根据RZ12(rfc group)和 sm14(update group)的配置分配到不同服务器。所以其中一台服务器挂了都可能会会导致RFC或update 失败
分步异步更新:先执行V1,再执行V2。可以在update work process不够用的情况下,优先执行V1
debug
CALL FUNCTION IN UPDATE TASK
有可能写了perform on commit在 update function里面的
SET UPDATE TASK LOCAL
执行了这句之后,call function in update task就不会提交到update work process,会在diaog work process执行(不管是否wait都会在当前session同步执行)。依旧在commit时触发,断点不再需要debug update就可以进入,如果是commit and wait ,那么执行完了就表示update function全部执行完了。
此时会保留update task的解锁功能
注:SET UPDATE TASK LOCAL只对一个luw起作用,且必须在第一个update task注册之前申明,即如果多次调用commit,就需要每次都在第一个update task之前申明SET UPDATE TASK LOCAL