ABAP创建FUNC实现标准tcode功能将标准程序生成FUNCTION.docx
- 文档编号:13648544
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:16
- 大小:630.68KB
ABAP创建FUNC实现标准tcode功能将标准程序生成FUNCTION.docx
《ABAP创建FUNC实现标准tcode功能将标准程序生成FUNCTION.docx》由会员分享,可在线阅读,更多相关《ABAP创建FUNC实现标准tcode功能将标准程序生成FUNCTION.docx(16页珍藏版)》请在冰点文库上搜索。
ABAP创建FUNC实现标准tcode功能将标准程序生成FUNCTION
1、创建FUNCTION实现标准T-CODE功能
目的:
为了在自定义程序中实现标准程序的功能。
处理逻辑:
通过T-CODE(SHDB)将标准程序生成自定义FUNCTION,并在自定义程序中调用该FUNCTION来实现。
1.1SHDB创建信息记录
1、T-CODE:
SHDB,点击“新建记录”(如果有错误提示,根据提示完善输入),如图1.1-1:
图1.1-1
2、图1.1-1中点击“新建记录”后弹出创建记录窗口,如图1.1-2:
图1.1-2
3、图1.1-2中输入记录号,事务代码,然后点击“开始记录”,进入到对应T-CODE的业务操作界面,如图1.1-3:
图1.1-3
4、图1.1-3中进行业务操作,输入必要字段,具体根据业务操作而定,本练习就“创建转储单”进行操作,输入完图中的数据后敲回车键,进入转储单创建界面,如图1.1.-4:
图1.1-4
5、图1.1-4中输入移动数据的源仓位信息、目标仓位信息,然后回车,完成记录的录入,进入到记录处理界面,如图1.1-5:
图1.1-5
6、图1.1-5中检查数据,然后点击“处理”进行转储单生成,如图1.1.-6:
图1.1-6
7、图1.1-6中点击“执行”,进入到创建转储单的自动处理界面,如图1.1-7:
图1.1-7
说明:
a、创建记录的过程中,自动完成执行操作的OK-Code为“/00”。
8、图1.1-7中在弹出OK-Code确认界面是点击“执行”,直到完成记录的处理,弹出处理后的信息,如图1.1-8:
图1.1-8
如图1.1-8中可见,生成了转储单0000000299。
即完成了记录的创建,该记录号为:
12-QID。
1.2SHDB创建新程序
1、T-CODE:
SHDB,查询1.1中创建的记录(12),如图1.2-1:
图1.2-1
2、图1.2-1中选中记录12(因为记录可重复,所以需要检查后面的创建者、日期、时间等信息,确保正确选择记录),然后点击“程序”,如图1.2-2:
图1.2-2
3、在弹出的程序创建界面输入程序名称,然后点击“执行”,如图1.2-3:
图1.2-3
4、选择程序类型,然后回车,如图1.2-4:
图1.2-4
5、如图1.2-4,完成了程序的创建后,点击图中的“源代码”按钮,显示新建程序的代码,如下:
report Z_BAPI_LT01
no standard page heading line-size 255.
include bdcrecx1."因为在后面创建函数时不需要用到该包含文件,所以其中的代码不展示
parameters:
dataset(132) lower case.
*** DO NOT CHANGE - the generated data section - DO NOT CHANGE ***
*
* If it is nessesary to change the data section use the rules:
* 1.) Each definition of a field exists of two lines
* 2.) The first line shows exactly the comment
* '* data element:
' followed with the data element
* which describes the field.
* If you don't have a data element use the
* comment without a data element name
* 3.) The second line shows the fieldname of the
* structure, the fieldname must consist of
* a fieldname and optional the character '_' and
* three numbers and the field length in brackets
* 4.) Each field must be type C.
*
*** Generated data section with specific formatting - DO NOT CHANGE ***
data:
begin of record,
* data element:
LGNUM
LGNUM_001(003),
* data element:
BWLVS
BWLVS_002(003),
* data element:
MATNR
MATNR_003(018),
* data element:
RL03TANFME
ANFME_004(017),
* data element:
WERKS_D
WERKS_005(004),
* data element:
LGORT_D
LGORT_006(004),
* data element:
CHARG_D
CHARG_007(010),
* data element:
RL03TANFME
ANFME_008(017),
* data element:
LRMEI
ALTME_009(003),
* data element:
RL03TSQUIT
SQUIT_010(001),
* data element:
LTAP_VLTYP
VLTYP_011(003),
* data element:
LTAP_VLBER
VLBER_012(003),
* data element:
LTAP_VLPLA
VLPLA_013(010),
* data element:
LTAP_NLTYP
NLTYP_014(003),
* data element:
LTAP_NLBER
NLBER_015(003),
* data element:
LTAP_NLPLA
NLPLA_016(010),
end of record.
*** End generated data section ***
start-of-selection.
"------------如下部分为在创建函数时做参考BEGIIN
perform open_dataset using dataset.
perform open_group.
do.
read dataset dataset into record.
if sy-subrc <> 0. exit. endif.
perform bdc_dynpro using 'SAPML03T' '0101'.
perform bdc_field using 'BDC_CURSOR'
'LTAP-CHARG'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'LTAK-LGNUM'
record-LGNUM_001.
perform bdc_field using 'LTAK-BWLVS'
record-BWLVS_002.
perform bdc_field using 'LTAP-MATNR'
record-MATNR_003.
perform bdc_field using 'RL03T-ANFME'
record-ANFME_004.
perform bdc_field using 'LTAP-WERKS'
record-WERKS_005.
perform bdc_field using 'LTAP-LGORT'
record-LGORT_006.
perform bdc_field using 'LTAP-CHARG'
record-CHARG_007.
perform bdc_dynpro using 'SAPML03T' '0102'.
perform bdc_field using 'BDC_CURSOR'
'LTAP-NLPLA'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'RL03T-ANFME'
record-ANFME_008.
perform bdc_field using 'LTAP-ALTME'
record-ALTME_009.
perform bdc_field using 'RL03T-SQUIT'
record-SQUIT_010.
perform bdc_field using 'LTAP-VLTYP'
record-VLTYP_011.
perform bdc_field using 'LTAP-VLBER'
record-VLBER_012.
perform bdc_field using 'LTAP-VLPLA'
record-VLPLA_013.
perform bdc_field using 'LTAP-NLTYP'
record-NLTYP_014.
perform bdc_field using 'LTAP-NLBER'
record-NLBER_015.
perform bdc_field using 'LTAP-NLPLA'
record-NLPLA_016.
perform bdc_transaction using 'LT01'.
enddo.
perform close_group.
perform close_dataset using dataset.
"------------如下部分为在创建函数时做参考END
1.3SE37创建FUNCTION
1、T-CODE:
SE37,创建函数“Z_BAPI_LT01”,如图1.3-1和1.3-2:
图1.3-1
图1.3-2
2、图1.3-2中点击“保存”,进入函数构建器界面,在导入页签中,添加传入的参数,如图1.3-3:
图1.3-3
注意:
a、缺省值部分在正式使用前需要清空,这里填上是为了测试方便;
b、图1.3-3中的字段为LT01业务操作锁需要的字段,具体根据实际业务进行定义。
3、图1.3-3中定义完自定义参数后,需要定义几个标准的参数,并维护缺省值,这些参数会在函数的代码部分使用到,具体参数如图1.3-4:
图1.3-4
注意:
a、缺省值部分需要按图中显示进行设置,否则会出错。
4、配置完导入参数后进行”表“页签的参数配置,这里配置两个备用参数(可不定义,根据实际需要):
IT_OUT_ALV(可用于返回业务数据的处理结果)、MESSTAB(可用于返回消息内容),如图1.3-5:
图1.3-5
5、接下来配置”导出“页签中参数,这里只需要配置一个MESSAGE,用于返回调用完函数后返回的转储单号信息,如图1.3-6:
图1.3-6
6、配置完了导入、导出、表三个页签的中的参数后,就开始参照1.2中的程序中的执行操作进行函数代码编写,如下:
FUNCTION Z_BAPI_LT01.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(LGNUM) TYPE LGNUM DEFAULT '105'
*" VALUE(WERKS) TYPE WERKS_D DEFAULT '2105'
*" VALUE(LGORT) TYPE LGORT_D DEFAULT '1062'
*" VALUE(MATNR) TYPE MATNR DEFAULT '4000000060'
*" VALUE(CHARG) TYPE CHARG_D DEFAULT '141015-002'
*" VALUE(LGTYPF) TYPE LGTYP DEFAULT 'A10'
*" VALUE(LGPLAF) TYPE LGPLA DEFAULT '010101'
*" VALUE(LGTYPT) TYPE LGTYP DEFAULT '916'
*" VALUE(LGPLAT) TYPE LGPLA DEFAULT '0000000000'
*" VALUE(VERMET) TYPE LQUA_VERME DEFAULT '0.001'
*" VALUE(MEINS) TYPE MEINS DEFAULT 'EA'
*" VALUE(CTU) LIKE APQI-PUTACTIVE DEFAULT 'X'
*" VALUE(MODE) LIKE APQI-PUTACTIVE DEFAULT 'N'
*" VALUE(UPDATE) LIKE APQI-PUTACTIVE DEFAULT 'L'
*" VALUE(GROUP) LIKE APQI-GROUPID OPTIONAL
*" VALUE(USER) LIKE APQI-USERID OPTIONAL
*" VALUE(KEEP) LIKE APQI-QERASE OPTIONAL
*" VALUE(HOLDDATE) LIKE APQI-STARTDATE OPTIONAL
*" VALUE(NODATA) LIKE APQI-PUTACTIVE DEFAULT '/'
*" EXPORTING
*" VALUE(MESSAGE) TYPE BAPI_MSG
*" TABLES
*" IT_OUT_ALV STRUCTURE LQUA OPTIONAL
*" MESSTAB STRUCTURE BDCMSGCOLL OPTIONAL
*"----------------------------------------------------------------------
*----------------------------------------------------------------------*
* data definition
*----------------------------------------------------------------------*
* Batchinputdata of single transaction
DATA:
BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
* messages of call transaction
* DATA:
MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA subrc like SYST-SUBRC VALUE 0.
data:
l_flag.
DATA:
message_flag_error.
DATA:
message_flag_success.
DATA:
tempstr TYPE string.
CLEAR tempstr.
clear bdcdata[].
clear bdcdata.
clear messtab[].
clear messtab.
tempstr = VERMET.
CONDENSE tempstr.
perform bdc_nodata using nodata.
perform open_group using group user keep holddate ctu.
"---------------------------------------------参考SHDB生成程序 BEGIN
perform bdc_dynpro using 'SAPML03T' '0101'.
perform bdc_field using 'BDC_CURSOR'
'LTAP-CHARG'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'LTAK-LGNUM'
LGNUM."传入参数
perform bdc_field using 'LTAK-BWLVS'
'999'.
perform bdc_field using 'LTAP-MATNR'
MATNR."传入参数
perform bdc_field using 'RL03T-ANFME'
tempstr."传入参数
perform bdc_field using 'LTAP-WERKS'
WERKS."传入参数
perform bdc_field using 'LTAP-LGORT'
LGORT."传入参数
perform bdc_field using 'LTAP-CHARG'
CHARG."传入参数
perform bdc_dynpro using 'SAPML03T' '0102'.
perform bdc_field using 'BDC_CURSOR'
'LTAP-NLPLA'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'RL03T-ANFME'
tempstr."传入参数
perform bdc_field using 'LTAP-ALTME'
MEINS."传入参数
perform bdc_field using 'RL03T-SQUIT'
'X'.
perform bdc_field using 'LTAP-VLTYP'
LGTYPF."传入参数
perform bdc_field using 'LTAP-VLBER'
'001'.
perform bdc_field using 'LTAP-VLPLA'
LGPLAF."传入参数
perform bdc_field using 'LTAP-NLTYP'
LGTYPT."传入参数
perform bdc_field using 'LTAP-NLBER'
'001'.
perform bdc_field using 'LTAP-NLPLA'
LGPLAT."传入参数
perform bdc_transaction tables messtab
using 'LT01'
ctu
mode
update.
"---------------------------------------------参考SHDB生成程序 END
if subrc = 0 .
perform close_group using ctu.
read table messtab with key msgtyp ='S' msgid = 'L3' msgnr = '016'.
if messtab is not initial.
MESSAGE = messtab-msgv1.
CONCATENATE '生成转储单号' MESSAGE INTO MESSAGE.
message_flag_success = 'X'.
endif.
endif.
ENDFUNCTION.
说明:
a、函数的代码逻辑取于1.2中通过信息记录生成的程序中的逻辑;
b、代码的总体逻辑就是通过调用方法bdc_field来实现传入的参数的值存储,并通过方法bdc_transaction来实现转储单的生成。
到这里,具有标准T-CODE(LT01)功能的函数就创建好了。
然后在自定义的程序中直接调用就可以了。
这里就不讲述了,只进行如下1.4的测试。
1.4SE37测试FUNCTION
1、T-CODE:
SE37,激活函数Z_BAPI_LT01后,点击”测试/执行“按钮,进行函数功能的测试,如图1.4-1:
图1.4-1
2、因为1.3中在”导入“页签中对传入的参数都设置了缺省值,所以测试时就能直接带出,不需要进行手工输入了,检查完毕后点击”执行“,如图1.4-2:
图1.4-2
说明:
a、检查界面中的数据,需要确保在LX02库存中能够查询都库存,否则无法生成转储单。
3、执行结果如图1.4-3:
图1.4-3
说明:
a、图1.4-3中显示生成了转储单,在库存中查询也会看到库存发生了变化;
b、在测试完毕后需要在1.3中对函数的导入页签中的传入参数的自定义部分进行缺省值清空,然后重新激活函数。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ABAP 创建 FUNC 实现 标准 tcode 功能 程序 生成 FUNCTION