如何在ABAP中打开事务码BP时直接进入Sales(销售)视图
ABAP代码启动事务码BP直接进入Sales(Vertrieb)视图的解决方案
希望通过ABAP代码启动事务码BP时直接进入“Sales”(Vertrieb)视图,但当前代码仅打开默认起始页面。请问是否需要子标题ID?若是,该如何查找?若否,还有其他解决方法吗?
当前使用的代码:
METHOD open_bupa. DATA(request) = NEW cl_bupa_navigation_request( ). request->set_partner_number( i_bupa ). request->set_bupa_activity( request->gc_activity_display ). request->set_maintenance_id( request->gc_maintenance_id_partner ). request->set_bupa_partner_role( VALUE #( role = 'ZDEB' bpview = 'ZDEB' ) ). DATA(options) = NEW cl_bupa_dialog_joel_options( ). options->set_locator_visible( abap_false ). SET PARAMETER ID: 'VKO' FIELD i_current_row-sales_org, 'VTW' FIELD i_current_row-distribution_channel, 'SPA' FIELD i_current_row-sector. cl_bupa_dialog_joel=>start_with_navigation( EXPORTING iv_request = request iv_options = options iv_in_new_internal_mode = abap_false iv_in_new_window = abap_false EXCEPTIONS already_started = 1 not_allowed = 2 OTHERS = 3 ). IF sy-subrc = 2. MESSAGE i011. ENDIF. ENDMETHOD.
一、是否需要子标题ID?
是,必须指定**视图ID(子屏幕ID)**才能直接跳转到Sales视图,默认启动BP只会打开主概览页面。
二、如何查找Sales视图对应的ID?
有两种可靠方式:
- 手动查询(推荐):
- 正常打开事务码BP,输入目标合作伙伴编号,切换到Sales(Vertrieb)视图
- 点击菜单「系统→状态」,在弹出窗口的「屏幕数据」区域找到「子屏幕」字段,对应的数值就是该视图的ID(例如常见的Sales视图ID为
0008,但不同角色/系统可能有差异,以实际值为准)
- SE80查询:
- 打开SE80,输入BP的主程序
SAPLBU_PARTNER - 展开「屏幕」节点,查找名称包含「Sales」或「Vertrieb」的子屏幕,记录对应的编号
- 打开SE80,输入BP的主程序
三、修改代码实现直接跳转
基于你的现有代码,有两种修改方式:
方式1:使用cl_bupa_navigation_request的set_view_id方法
在创建request对象后添加一行代码,指定视图ID:
request->set_view_id( '0008' ). " 替换为你实际查到的Sales视图ID
方式2:补充设置参数ID BPA
在SET PARAMETER ID块中添加对BPA的设置,作为补充(部分场景下单独用方式1可能不生效):
SET PARAMETER ID: 'VKO' FIELD i_current_row-sales_org, 'VTW' FIELD i_current_row-distribution_channel, 'SPA' FIELD i_current_row-sector, 'BPA' FIELD '0008'. " 替换为实际视图ID
完整修改后的代码示例
METHOD open_bupa. DATA(request) = NEW cl_bupa_navigation_request( ). request->set_partner_number( i_bupa ). request->set_bupa_activity( request->gc_activity_display ). request->set_maintenance_id( request->gc_maintenance_id_partner ). request->set_bupa_partner_role( VALUE #( role = 'ZDEB' bpview = 'ZDEB' ) ). request->set_view_id( '0008' ). " 指向Sales视图的ID DATA(options) = NEW cl_bupa_dialog_joel_options( ). options->set_locator_visible( abap_false ). SET PARAMETER ID: 'VKO' FIELD i_current_row-sales_org, 'VTW' FIELD i_current_row-distribution_channel, 'SPA' FIELD i_current_row-sector, 'BPA' FIELD '0008'. " 补充参数设置 cl_bupa_dialog_joel=>start_with_navigation( EXPORTING iv_request = request iv_options = options iv_in_new_internal_mode = abap_false iv_in_new_window = abap_false EXCEPTIONS already_started = 1 not_allowed = 2 OTHERS = 3 ). IF sy-subrc = 2. MESSAGE i011. ENDIF. ENDMETHOD.
四、备选方案(如果上述方法无效)
如果通过cl_bupa_dialog_joel的方式仍无法跳转,可以直接使用CALL TRANSACTION命令并跳过初始屏幕:
METHOD open_bupa. SET PARAMETER ID 'BUT' FIELD i_bupa. SET PARAMETER ID 'VKO' FIELD i_current_row-sales_org. SET PARAMETER ID 'VTW' FIELD i_current_row-distribution_channel. SET PARAMETER ID 'SPA' FIELD i_current_row-sector. SET PARAMETER ID 'BPA' FIELD '0008'. " 替换为实际视图ID CALL TRANSACTION 'BP' AND SKIP FIRST SCREEN. ENDMETHOD.
内容的提问来源于stack exchange,提问作者Schesam
相关产品推荐
相关产品推荐

