SY-REPID和SY-CPROG的区别

本文介绍了ABAP环境中两个重要的系统变量:sy-repid 和 sy-cprog。sy-repid 用于标识当前执行的程序名称,通常对应于Function Module所在的Function Pool名称;而sy-cprog 则记录了调用该Function Module的报告程序名。需要注意的是,sy-repid 不可被人为修改,而 sy-cprog 则可以进行修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. sy-repid is the name of the current program.
sy-cprog is the name of the calling program.
比如在一个Function里面设置断点,sy-repid的这个FM所在FunctionPool的名字,sy-cprog是调用这个FM的Report的程序名。
2. sy-repid 不可以人为更改,sy-cprog可以
### 如何在 ABAP ALV 中隐藏按钮 #### 使用 `REUSE_ALV_GRID_DISPLAY_LVC` 函数模块隐藏按钮 通过自定义工具栏状态来实现按钮的隐藏。具体来说,在调用 `REUSE_ALV_GRID_DISPLAY_LVC` 后,可以通过设置回调函数 `i_callback_pf_status_set` 来控制工具栏的状态。 ```abap CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-repid i_callback_user_command = 'FRM_SET_COMMAND' i_callback_pf_status_set= 'FRM_SET_STATUS' it_fieldcat_lvc = gt_fieldcat is_layout_lvc = ls_layout i_save = 'A' TABLES t_outtab = gt_disp. ``` 为了隐藏特定按钮,可以在 FORM `FRM_SET_STATUS` 中修改工具栏条目: ```abap FORM frm_set_status USING rs_selfield TYPE slis_selfield. DATA: lt_toolbar TYPE STANDARD TABLE OF stb_button, ls_toolbar LIKE LINE OF lt_toolbar. " 获取当前工具栏配置 CALL FUNCTION 'SET_PF_STATUS' EXPORTING program = sy-cprog setpfstatus = 'ZMYSTATUS'. " 排除不需要显示的按钮 LOOP AT gt_exclude INTO wa_exclude. APPEND wa_exclude TO lt_toolbar. ENDLOOP. SET PARAMETER ID 'TBL' FIELD space. CLEAR rs_selfield. ENDFORM. ``` 此方法适用于传统方式创建的 ALV 报表[^1]。 #### 使用 Object-Oriented (OO) ALV 方法隐藏按钮 对于基于对象的 ALV 实现,则可以利用类接口提供的功能更方便地管理工具栏项。这通常涉及到传递一个内表给 `set_table_for_first_display` 的参数 `it_toolbar_excluding`,其中包含了要屏蔽掉的功能键码。 ```abap DATA: go_grid TYPE REF TO cl_gui_alv_grid, gs_container TYPE scrfname VALUE 'CONTAINER', gt_toolbar TYPE lvc_t_sttb. CREATE OBJECT go_grid EXPORTING container_name = gs_container. gs_alv->set_table_for_first_display( CHANGING it_outtab = gt_data it_fieldcatalog = gt_fldcat it_toolbar_excluding = gt_toolbar ). ``` 这里的关键在于填充好 `gt_toolbar` 表格,它应该包含所有想要移除或禁用的动作命令[^2]。 #### 动态调整按钮可见性 如果希望根据某些条件动态改变按钮的可见性,比如当某个字段等于特定值时才显示/隐藏按钮,那么可以在事件处理程序里加入逻辑判断并相应更新界面元素。 ```abap IF p_col_id = 'AMATNR'. CLEAR: t_spfli, lt_edit. REFRESH lt_edit. READ TABLE t_spfli INDEX p_row_no-row_id. IF sy-subrc = 0 AND t_spfli-amatnr = '+'. strtabix = p_row_no-row_id. " 显示隐藏的数据或其他操作... ELSE. " 可能会执行其他动作,如保持原样或是进一步检查 ENDIF. ENDIF. ``` 这段代码展示了如何依据列ID行位置决定是否展示额外的信息;同样原理可用于控制按钮的显隐[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值