SAP的Update Module函数

发布时间:2018-07-01 18:18:03   来源:文档文库   
字号:

Update Module函数功能简介

1. 功能简介

SAP函数存在三种类型:普通函数,RFC函数和Update Module函数三类。前面两类比较常见,但Update Module函数比较少用。

Update Module函数(又称为更新函数)主要用于对话或报表中实现同步和异步更新数据库的功能。

2. 实现方案简介

在自定义对话程序、远程调用目标服务、报表设计过程中,存在需要单独调用函数实现更新数据库表;但又要求对程序的运行不产生影响(即更新成功与否不影响主程序的正常执行)。此时可以通过更新任务(Update Module函数)实现该功能。

3. 详细实现方案

3.1 更新函数概念

Update Module函数(又称为更新函数)主要用于对话或报表中实现同步和异步更新数据库的功能。

更新任务中运行的功能模块必须在函数库中注册,即在函数属性设置页卡中设定函数类型为 Update Module

根据更新函数执行的先后顺序,将更新函数分为V1V2两类;区别如下

立即开始更新

在共享更新事务(SAP LUW)中运行的高优先级(“V1”)功能设置该选项;出现错误时更新任务可以重新启动这些功能。

立即开始更新,不能重启

在共享更新事务中运行的高优先级(“V1”)功能设置该选项;不能由更新任务重新启动这些功能。

延迟启动更新

为在自身更新事务中运行的低优先级(“V2”)功能设置该选项;出现错误时更新任务可以重新启动这些功能。

3.2 更新函数的参数设置

更新函数在参数设置上有特定的要求:

1. 因为更新任务功能模块不能报告其结果,因此不允许结果参数(EXPORTINGCHANGING)或例外(EXCEPTIONS)

2. 必须指定输入参数(IMPORTING)和带有ABAP/4词典中所定义的参考字段和参考结构的表格(TABLES)

3.2.1 传入参数设置

在更新函数中传入参数只允许使用值传递(IMPORTING)方式;对应的参数须使用参照字段进行定义。

如果创建传出参数和指针传递参数(CHANGING)参数,程序将提醒并不允许保存。

3.2.2 传出参数设置

更新函数只允许有TABLE参数,并且该表格需要对应的参考结构。

一般使用TABLE参数用于获取更新执行成功与否的反馈消息(RETURN表格);或者传入用于查询数据的参考内表(尽量不更改传入内表的数据)

3.3 调用更新函数方式

将函数设置为更新模式后;调用时既可以将该函数定义到更新任务中,也可以作为普通函数进行调用。

3.3.1 作为普通函数调用

如果需要调用该函数时作为普通函数执行,不作为更新函数。则在调用该函数时,直接只用CALL FUNCTION的方式实现即可。

CALL FUNCTION 'YYWANGT_UPDATAMODULE'

EXPORTING

zcarrid = 'AZ'

zconnid = zconnid.

3.3.2 作为更新函数调用

如果需要将该函数设定为更新函数,则需要在调用该函数时注明 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 WORKROLL BACK处才会被执行。而一般调用事务内部,在完成一个SAP LUW时都有一个隐式的COMMIT WORK功能,故不用再明确提交;而在报表事务中,需要显式使用COMMIT WORK功能进行更新函数的提交。

3.4 更新函数的调试

三类函数的调试存在很大的区别。普通函数需要通过内部断点( )进行调试,RFC函数需要登录链接账户(华中账户为CCGCRFC)通过外部断点( )进行调试。

更新函数需要开启一个特殊功能后才能调试,现将具体调试方法分为三步进行说明。

3.4.1 开启Update debugging功能

更新函数测试需要开启Update debugging功能后才能实现。

首先设置断点进入Debugging功能界面,选择Setting – display/change debugging Settings

勾选 Update debugging 复选框,并点击保存’( ) 按钮。(如果勾选提交按钮,只会在本次登录中有效。如果勾选保存按钮,下次登录后该调试功能依旧有效。)

3.4.2 测试更新函数

运行主函数,程序处理完COMMIT WORK语句后,自动进入更新任务表。以学习机程序 YYWANGT_UPDATAMODULE为例。

1. 程序运行到更新函数处

2. 直接跳过更新函数,执行’COMMIT WORK’

3. 执行’COMMIT WORK’后,进入更新任务表中更新函数

3.4.3 SM13监控更新任务

事务码SM13进入更新任务监控。选择’TO BE UPDATED’显示当前还未执行的更新列表;选择’ALL’显示当前尚未执行的更新列表和存在报错的更新列表。

点击执行后存在两个更新任务。第一行的STATUSINITIAL表明程序还未执行;第二行的STATUS为黄色,表明程序执行过程有错误。

点击第一行可进入更新函数列表,其中包含两个更新函数:

YYWANGT_UPDATAMODULE V2类型的更新函数;

YYWANGT_UPDATAMODULE2:为V1类型的更新函数。

根据V1V2类型的区别(优先执行V1,待全部执行后再执行V2)。程序首先执行V1类型的更新函数;V1函数执行成功后,更新函数列表如图所示:

程序继续执行V2类型的更新函数;执行成功后,在更新任务列表中该记录消失。

针对存在错误的更新函数,我们可通过点击更新任务列表详细查看报错的函数。

双击弹出提示框,可点击ABAP SHORT DUMP( )按钮查看详细报错信息。同样我们也可通过ST22查看报错记录。

4. 结束语

更新函数的使用范围是很广泛的,尤其在ERP与其他系统的接口功能设计时使用很方便。

举一个代表性的例子:当我们需要获取用户刚创建的固定资产信息,但是提供的增强(EXIT_SAPLAISA_001)所传入的数据可能并不完全满足字段需要。此时我们就可以在增强中添加一个V2类型的更新函数。因为系统先执行其自带的V1V2类型的更新函数,然后再执行自定义的V2类型更新函数;所以我们可以直接通过函数在透明表中取值即可。

详细代码可见函数:ZFI_GK_GDZC

本文来源:https://www.2haoxitong.net/k/doc/81ce505d0508763230121209.html

《SAP的Update Module函数.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式