您的位置:首页 > 产品设计 > UI/UE

从自建页面跳转到标准订单或者BP页面的例子

2016-05-11 11:31 411 查看
以一个Table中跳转为例。首先是在P函数中增加事件。

METHOD get_p_object_id.

DATA: current TYPE REF TO if_bol_bo_property_access.
DATA sstr TYPE string .

current = collection_wrapper->get_current( ).
CALL METHOD current->get_property_as_string
EXPORTING
iv_attr_name = 'OBJECT_ID'
RECEIVING
rv_result    = sstr.

IF sstr IS NOT INITIAL.

CASE iv_property.
WHEN if_bsp_wd_model_setter_getter=>fp_fieldtype.
rv_value = cl_bsp_dlc_view_descriptor=>field_type_event_link.
WHEN if_bsp_wd_model_setter_getter=>fp_onclick.
*        rv_value = 'LINKTODISPLAY'.                         "弹出屏幕
rv_value = 'NAV' .                                  "跳转
ENDCASE.

ENDIF.

ENDMETHOD.


事件代码如下:

method EH_ONNAV.

DATA: lv_index  TYPE i,
lv_column TYPE string,
lr_col    TYPE REF TO if_bol_bo_col,
lr_core   TYPE REF TO cl_crm_bol_core,
lr_entity TYPE REF TO if_bol_bo_property_access,
lr_root   TYPE REF TO cl_crm_bol_entity,
lr_window TYPE REF TO cl_bsp_wd_window,
lr_ent    TYPE REF TO cl_crm_bol_entity.

cl_thtmlb_util=>get_event_info(
EXPORTING iv_event = htmlb_event_ex
IMPORTING ev_index = lv_index
ev_column = lv_column ).

CHECK lv_index IS NOT INITIAL.

*****可以把当前行的信息存入全局变量
*  CLEAR gv_selected_line.    "GV_SELECTED_LINE  Instance Attribute  Public  Type  STRING
*  gv_selected_line = lv_index.

*****根据行号获取这一行的实体
lr_entity ?= typed_context->result->collection_wrapper->find( iv_index = lv_index ).

CHECK lr_entity IS BOUND.

******从实体中获取订单的guid
DATA lv_guid TYPE crmt_object_guid.
lv_guid = lr_entity->get_property_as_string( iv_attr_name = 'GUID' ).

***获取当前实例进程
lr_core = cl_crm_bol_core=>get_instance( ).

*--加载组件集,调用订单页面使用
CALL METHOD lr_core->load_component_set
EXPORTING
iv_component_set_name = 'ONEORDER'.

lr_ent = lr_core->get_root_entity( iv_object_name = 'BTOrder'
iv_object_guid = lv_guid ).

***上面这两步的动作产生了一个订单页面的实例 传入参数就是guid
***下面的代码为创建一个实体,这个实体里面放入了订单页面实例
***然后我们用op的形式跳转过去 op带的参数就是这个实体 即实现了跳转到订单页面

CREATE OBJECT lr_col TYPE cl_crm_bol_bo_col.
lr_col->add( iv_entity = lr_ent  iv_set_focus = abap_true ).

*--这句话的作用是使调用订单界面后,点击返回时可以返回到原报表界面
*  RAISE EVENT history_trigger .
op_singleselection( lr_col ).

***上面的跳转必须在UI里面进行,注意这里的跳转只是View级别的跳转,还没有从当前的页面到订单页面

****实现页面跳转的另一种形式
*  lr_window = me->view_manager->get_window_controller( ).
*  lr_window->call_outbound_plug( iv_outbound_plug   = 'SINGLESELECTION'
*                                 iv_data_collection = lr_col ).


View的OP代码:

METHOD op_singleselection.
"#EC NEEDED
* Added by wizard: Outbound plug 'SINGLESELECTION'
DATA: lr_window TYPE REF TO cl_bsp_wd_window.
lr_window = me->view_manager->get_window_controller( ).
lr_window->call_outbound_plug( iv_outbound_plug   = 'SINGLESELECTION'
iv_data_collection = iv_data_collection ).
****这里的代码指调用window级op,实现跳转到其他window,比如订单window
ENDMETHOD.

Window的OP代码:

METHOD op_singleselection.

CALL METHOD cl_crm_uiu_bt_navigate=>prepare_col_for_navigate
EXPORTING
ir_collection              = iv_data_collection
iv_ui_action               = 'B'
EXCEPTIONS
no_nav_descriptor_inserted = 1
OTHERS                     = 99.
CHECK sy-subrc = 0.

DATA lr_nav TYPE REF TO if_crm_ui_navigation_service.
lr_nav = cl_crm_ui_navigation_service=>get_instance( me ).
*  navigate to target component
lr_nav->navigate_dynamically( iv_data_collection  ).

me->fire_outbound_plug( iv_outbound_plug   = 'SINGLESELECTION'
iv_data_collection = iv_data_collection ).
*
RAISE EVENT history_trigger.

ENDMETHOD.

如果是跳转到BP页面,有标准函数,可以简单点。

METHOD op_bp.

DATA lr_core TYPE REF TO cl_crm_bol_core.
lr_core = cl_crm_bol_core=>get_instance( ).

*--加载组件集
CALL METHOD lr_core->load_component_set
EXPORTING
iv_component_set_name = 'ONEORDER'.

DATA lv_bpid TYPE bu_partner .
lv_bpid = '1234567890'.
CALL METHOD cl_crm_uiu_bp_tools=>navigate_with_id_or_guid
EXPORTING
iv_partner_id = lv_bpid
* iv_partner_guid =
* iv_account_id =
* iv_entity_name =
.

ENDMETHOD.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SAP CRM UI View 跳转