1.常用
https://www.cnblogs.com/jiangzhengjun/p/4292545.html
https://blog.csdn.net/jy00873757/article/details/8517426
parameter ID
这样很方便一些客户用特定的数据,那如何去找parameter ID呢?
第一种方法,大家都很熟悉的就是用F1,直接可以看到这个数据元素的PARAMETER ID
第二种方法,直接到表里去找,表名是DD04L
但是这两种办法都是只能找到数据元素定义了parameter id的
如果parameter id没有和数据元素挂钩,那就找不到了
例如做会计清帐的时候,F-04里面有一个字段VAUSK,它的数据元素是VARNR_021
通过F1是找不到parameter id的,那就要用下面的两种办法了
第三种办法,通过表TPARA去找,所有的parameter id都能找到,但是只有描述,也很难找到
第四种办法,通过程序RPR_ABAP_SOURCE_SCAN去找 这个程序可以查找程序、屏幕等等
例如程序名我们输入SAPMF05O(清帐的标准程序),屏幕输入1101(标准屏幕)
字段输入VAUSK,运行,就可以找到parameter id 是LLK了
源代码是get parameter id 'LLK' field rfcu4-vausk. " Ausgleichsv. Kreditor。
程序跳转时的传参
REPORT ZTXYY_11114.
GET PARAMETER ID 'ZTXYY_11113' FIELD DATA(lv_flag).
WRITE lv_flag.
**************************************************
REPORT ZTXYY_11115.
SET PARAMETER ID 'ZTXYY_11113' FIELD abap_true.
SUBMIT ZTXYY_11114.
执行ZTXYY_11115结果:
其中的PARAMETER ID 'ZTXYY_11113'这个ZTXYY_11113是随意定义的名称
该种方法缺陷在于无法用FREE MEMORY.或者FREE MEMORY ID 'ZTXYY_11113'.来清空缓存
PC = 'Z'.
EXPORT P1 = PC TO MEMORY ID 'ZTXYY'.
DATA PC.
IMPORT P1 = PC FROM MEMORY ID 'ZTXYY'.
1.CALL TRANSACTION
1.CALL TRANSACTION ta WITH|WITHOUT AUTHORITY-CHECK [AND SKIP FIRST SCREEN].
其中ta为事务码tcode使用时要打单引号(')
2. CALL TRANSACTION ta WITH|WITHOUT AUTHORITY-CHECK
USING bdc_tab {
{
[MODE mode] [UPDATE upd]}
| [OPTIONS FROM opt] }
[MESSAGES INTO itab].
其中ta为事务码tcode使用时要打单引号(')
CALL TRANSACTION T-CODE WITH|WITHOUT AUTHORITY-CHECK
USING bdc_tab [OPTIONS FROM opt].
代码使用
SET PARAMETER ID 'AAT' FIELD 'RK'.
SET PARAMETER ID 'SPA' FIELD p_shar."这后面可以接变量(选择屏幕变量)
SET PARAMETER ID 'VTW' FIELD '10'."要传几个参数值就写几行
CALL TRANSACTION 'VA01'." AND SKIP FIRST SCREEN .
*++++++++++++++++++++++++++++++++++++++++++++++++++++++*
CALL TRANSACTION 'VA01' AND SKIP FIRST SCREEN .
"加上AND SKIP FIRST SCREEN会在传值之后直接执行或者回车
GET PARAMETER ID 'AAT' FIELD STR."获取值
*FREE MEMORY ID 'AAT'."memory id清除memory id
其中AND SKIP FIRST SCREEN表示根据输入的参数直接跳转到相关操作页面
BDC传参
DATA bdcdata_tab TYPE TABLE OF bdcdata.
DATA opt TYPE ctu_params.
bdcdata_tab = VALUE #(
( program = 'SAPLSEOD' dynpro = '1000' dynbegin = 'X' )
( fnam = 'BDC_CURSOR' fval = 'SEOCLASS-CLSNAME' )
( fnam = 'SEOCLASS-CLSNAME' fval = class_name )
( fnam = 'BDC_OKCODE' fval = '=WB_DISPLAY' ) ).
opt-dismode = 'E'.
opt-defsize = 'X'.
TRY.
CALL TRANSACTION 'SE24' WITH AUTHORITY-CHECK
USING bdcdata_tab OPTIONS FROM opt.
CATCH cx_sy_authorization_error ##NO_HANDLER.
ENDTRY.
WITH AUTHORITY-CHECK.
TRY.
CALL TRANSACTION 'F-02' WITH AUTHORITY-CHECK.
CATCH cx_sy_authorization_error.
MESSAGE s001(00) WITH '无此事务代码操作权限,请检查' DISPLAY LIKE 'E'.
RETURN.
ENDTRY.
*如果程序没有上述权限异常控制,当权限不够时,可能会导致当前程序dump
其中的多值传递范例
DATA STR TYPE C LENGTH 25.
GET PARAMETER ID 'VKO' FIELD STR."获取SET ID的值
1.方法1
REPORT ZTXYY_1141.
TABLES:VBRK.
DATA STR TYPE C LENGTH 25.
SELECT-OPTIONS s_matnr FOR VBRK-VKORG ."MEMORY ID ZDEMO.
FREE MEMORY ID 'ZDEMO'."清除MEMORY ID
EXPORT s_matnr FROM s_matnr TO MEMORY ID 'ZDEMO'."传入MEMORY ID
*SET PARAMETER ID 'VKO' FIELD STR."实现单值输入
CALL TRANSACTION 'ZTXYY_1142' ."AND SKIP FIRST SCREEN.
程序ztxyy_1142定义了一个同名的tcode.
REPORT ztxyy_1142.
TABLES:vbrk.
DATA str1 TYPE c LENGTH 25.
SELECT-OPTIONS s_matnr FOR vbrk-vkorg.
SELECT-OPTIONS s_matnr2 FOR vbrk-vkorg.
INITIALIZATION.
* GET PARAMETER ID 'VKO' FIELD str1."获取SET ID的值
IMPORT s_matnr TO s_matnr FROM MEMORY ID 'ZDEMO'."读取MEMORY ID
FREE MEMORY ID 'ZDEMO'."清除MEMORY ID
ABAP程序间跳转CALL TRANSACTION-CSDN博客
2.通过 BDC的方式传入多参数值
ABAP程序中SUBMIT Program时、BDC CALL Transaction时填充参数的代码模板_abap submit-CSDN博客
Call Transaction也即直接调用一个事务代码,其语法如下:
CALL TRANSACTION ta WITH|WITHOUT AUTHORITY-CHECK
… … … … … … … … USING bdc_tab { {[MODE mode] [UPDATE upd]}
… … … … … … … … | [OPTIONS FROM opt] }
… … … … … … … … [MESSAGES INTO itab].
具体的关键字用法,可查看ABAP的帮助文档。在CALL transaction时,其难点在于BDC字段的填充。
注:BDC - Batch Data Input是SAP非常经典一种批量导入技术,可以通过录制屏幕(Tx: SHDB)操作,生成代码。
在编程过程中,如果遇到类似的需求,也可以用 宏 DEFINE 快速实现,具体可参考下面的模板。
下例中,填充BDC包含了两种复杂操作,一种是填充selection-option, 另一种是通过剪切板中的内容来填充selection option,因此调用到了 cl_gui_frontend_services=>clipboard_expor()这个服务。
模版
DATA:
lt_clipdata TYPE STANDARD TABLE OF char120,
lv_rc TYPE i,
ls_bdc TYPE bdcdata,
lt_bdc TYPE STANDARD TABLE OF bdcdata WITH DEFAULT KEY.
FIELD-SYMBOLS:
<ls_msgguid> LIKE LINE OF it_msgguid.
DEFINE bdc_dynpro.
CLEAR ls_bdc.
ls_bdc-program = &1.
ls_bdc-dynpro = &2.
ls_bdc-dynbegin = 'X'.
INSERT ls_bdc INTO TABLE lt_bdc.
END-OF-DEFINITION. "BDC_DYNPRO
DEFINE bdc_field.
CLEAR ls_bdc.
ls_bdc-fnam = &1.
ls_bdc-fval = &2.
INSERT ls_bdc INTO TABLE lt_bdc.
END-OF-DEFINITION. "BDC_DYNPRO
CLEAR es_msg.
CHECK it_msgguid IS NOT INITIAL.
LOOP AT it_msgguid ASSIGNING <ls_msgguid>.
INSERT CONV #( <ls_msgguid>-msgguid ) INTO TABLE lt_clipdata.
ENDLOOP.
IF sy-subrc = 0.
DATA(lv_msgguid) = it_msgguid[ 1 ]-msgguid.
* Put into clipboard
cl_gui

最低0.47元/天 解锁文章
545

被折叠的 条评论
为什么被折叠?



