Update Module函数功能简介
SAP函数存在三种类型:普通函数,RFC函数和Update Module函数三类。前面两类比较常见,但Update Module函数比较少用。
Update Module函数(又称为更新函数)主要用于对话或报表中实现同步和异步更新数据库的功能。
在自定义对话程序、远程调用目标服务、报表设计过程中,存在需要单独调用函数实现更新数据库表;但又要求对程序的运行不产生影响(即更新成功与否不影响主程序的正常执行)。此时可以通过更新任务(Update Module函数)实现该功能。
Update Module函数(又称为更新函数)主要用于对话或报表中实现同步和异步更新数据库的功能。
更新任务中运行的功能模块必须在函数库中注册,即在函数’属性’设置页卡中设定函数类型为’ Update Module’ 。
根据更新函数执行的先后顺序,将更新函数分为V1和V2两类;区别如下:
立即开始更新
在共享更新事务(SAP LUW)中运行的高优先级(“V1”)功能设置该选项;出现错误时更新任务可以重新启动这些功能。
立即开始更新,不能重启
在共享更新事务中运行的高优先级(“V1”)功能设置该选项;不能由更新任务重新启动这些功能。
延迟启动更新
为在自身更新事务中运行的低优先级(“V2”)功能设置该选项;出现错误时更新任务可以重新启动这些功能。
更新函数在参数设置上有特定的要求:
1. 因为更新任务功能模块不能报告其结果,因此不允许结果参数(EXPORTING,CHANGING)或例外(EXCEPTIONS);
2. 必须指定输入参数(IMPORTING)和带有ABAP/4词典中所定义的参考字段和参考结构的表格(TABLES)。
在更新函数中传入参数只允许使用值传递(IMPORTING)方式;对应的参数须使用参照字段进行定义。
如果创建传出参数和指针传递参数(CHANGING)参数,程序将提醒并不允许保存。
更新函数只允许有TABLE参数,并且该表格需要对应的参考结构。
一般使用TABLE参数用于获取更新执行成功与否的反馈消息(RETURN表格);或者传入用于查询数据的参考内表(尽量不更改传入内表的数据)。
将函数设置为更新模式后;调用时既可以将该函数定义到更新任务中,也可以作为普通函数进行调用。
如果需要调用该函数时作为普通函数执行,不作为更新函数。则在调用该函数时,直接只用CALL FUNCTION的方式实现即可。
CALL FUNCTION 'YYWANGT_UPDATAMODULE'
EXPORTING
zcarrid = 'AZ'
zconnid = zconnid.
如果需要将该函数设定为更新函数,则需要在调用该函数时注明 IN UPDATE TASK。将该函数写入LOG TABLE。当一个SAP LUW执行到COMMIT WORK处时,系统统一执行LOG TABLE中的更新函数。
CALL FUNCTION 'YYWANGT_UPDATAMODULE' IN UPDATE TASK
EXPORTING
zcarrid = 'AZ'
zconnid = zconnid.
下面用一个图形详细描述普通函数和更新函数的执行顺序:
要有效地编程异步更新 ,必须了解 R/3 系统中更新任务如何工作。典型的 SAP 系统配置包括对话任务和更新任务 。对话任务处理所有与其它联机用户的交互会话。更新任务专用于执行数据库更新。
更新函数用于在对话任务和更新任务中执行更新。对话任务更新是同步更新。更新任务更新是异步更新。(例外:用 COMMIT WORK AND WAIT触发更新任务功能时,它是同步更新)
在事务内部,对于每条COMMIT WORK语句可以调用一个或多个更新任务功能模块。在报表中,调用更新任务的地方,也可以通过COMMIT WORK语句显式提交更新任务功能模块。
简单来说,更新函数只能在COMMIT WORK或ROLL BACK处才会被执行。而一般调用事务内部,在完成一个SAP LUW时都有一个隐式的COMMIT WORK功能,故不用再明确提交;而在报表事务中,需要显式使用COMMIT WORK功能进行更新函数的提交。
三类函数的调试存在很大的区别。普通函数需要通过内部断点( )进行调试,RFC函数需要登录链接账户(华中账户为CCGCRFC)通过外部断点( )进行调试。
更新函数需要开启一个特殊功能后才能调试,现将具体调试方法分为三步进行说明。
更新函数测试需要开启Update debugging功能后才能实现。
首先设置断点进入Debugging功能界面,选择Setting – display/change debugging Settings
勾选 Update debugging 复选框,并点击’保存’( ) 按钮。(如果勾选’提交’按钮,只会在本次登录中有效。如果勾选’保存’按钮,下次登录后该调试功能依旧有效。)
运行主函数,程序处理完COMMIT WORK语句后,自动进入更新任务表。以学习机程序’ YYWANGT_UPDATAMODULE’为例。
1. 程序运行到更新函数处
2. 直接跳过更新函数,执行’COMMIT WORK’
3. 执行’COMMIT WORK’后,进入更新任务表中更新函数
事务码SM13进入更新任务监控。选择’TO BE UPDATED’显示当前还未执行的更新列表;选择’ALL’显示当前尚未执行的更新列表和存在报错的更新列表。
点击执行后存在两个更新任务。第一行的STATUS为INITIAL表明程序还未执行;第二行的STATUS为黄色,表明程序执行过程有错误。
点击第一行可进入更新函数列表,其中包含两个更新函数:
YYWANGT_UPDATAMODULE: 为V2类型的更新函数;
YYWANGT_UPDATAMODULE2:为V1类型的更新函数。
根据V1,V2类型的区别(优先执行V1,待全部执行后再执行V2)。程序首先执行V1类型的更新函数;V1函数执行成功后,更新函数列表如图所示:
程序继续执行V2类型的更新函数;执行成功后,在更新任务列表中该记录消失。
针对存在错误的更新函数,我们可通过点击更新任务列表详细查看报错的函数。
双击弹出提示框,可点击ABAP SHORT DUMP( )按钮查看详细报错信息。同样我们也可通过ST22查看报错记录。
更新函数的使用范围是很广泛的,尤其在ERP与其他系统的接口功能设计时使用很方便。
举一个代表性的例子:当我们需要获取用户刚创建的固定资产信息,但是提供的增强(EXIT_SAPLAISA_001)所传入的数据可能并不完全满足字段需要。此时我们就可以在增强中添加一个V2类型的更新函数。因为系统先执行其自带的V1和V2类型的更新函数,然后再执行自定义的V2类型更新函数;所以我们可以直接通过函数在透明表中取值即可。
详细代码可见函数:ZFI_GK_GDZC。
本文来源:https://www.2haoxitong.net/k/doc/81ce505d0508763230121209.html
文档为doc格式