例如:我的ALV报表中有SO&STO单号,怎么实现双击跳转至VA03&ME23N界面
一、我的DISPLAY用的是FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC’,如下:我的USER_COMMAND事件在这个函数对应的是 I_CALLBACK_USER_COMMAND
FORM DISPLAY .
PERFORM FCAT_BUILDER.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS' " 自訂icon圖示
IS_LAYOUT_LVC = W_LAYOUT
IT_FIELDCAT_LVC = T_FCAT
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IS_VARIANT = GS_VARIANT
TABLES
T_OUTTAB = GT_DATA.
ENDFORM.
二、双击事件对应的ABAP段如下:
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM " ①
RS_SELFIELD TYPE SLIS_SELFIELD." ②
CASE R_UCOMM. " 触发的功能码
WHEN '&IC1'. " ③
READ TABLE GT_DATA ASSIGNING <FS> INDEX RS_SELFIELD-TABINDEX." ④
PERFORM COMMAND_ACTION USING RS_SELFIELD-FIELDNAME.
WHEN '&SEND'.
PERFORM RELNEW CHANGING RS_SELFIELD-REFRESH. " 取得选项勾選的資料
PERFORM EXE_ACTION.
ENDCASE.
ENDFORM. "USER_COMMAND
FORM COMMAND_ACTION USING FIELDNAME.
TRANSLATE FIELDNAME TO UPPER CASE. "将栏位名称转换为大写
CASE FIELDNAME.
WHEN 'VBELN'."如果是雙擊VBELN的欄位就跳到VA03的程式
SET PARAMETER ID: 'AUN' FIELD <FS>-VBELN. "⑤
IF SY-SUBRC = 0.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN. "跳过第一个屏幕到VA03屏幕
ENDIF.
WHEN 'EBELN'."如果是雙擊VBELN的欄位就跳到VA03的程式
IF <FS>-EBELN IS NOT INITIAL.
SET PARAMETER ID: 'BES' FIELD <FS>-EBELN.
IF SY-SUBRC = 0.
CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
ENDIF.
ENDIF.
ENDCASE.
ENDFORM.
①syst这个structure中有ucomm字段,它是触发PAI的功能代码,SY-UCOMM属于系统字度段,通常我们定义ok_code为sy-ucomm类型,用来记录屏幕操作的功能代码。
②SLIS_SELFIELD 全局类型通用列表构建块,看看它是什么鬼样子
③怎么看功能码呢?如下GUI状态中红色选框都是,&IC1就是这里来的。
④读取内表中你鼠标或者选择行的数据
⑤设置参数INF的值为’AUN’ ,‘AUN’ 怎么查呢?此处我是要跳转到VA03的界面
VA03 光标放于订单框中,F1,看技术信息,参数ID为AUN.
跳转到ME23N同理。