(我是菜鸟,知道的少)
1.有HTML页面代码的,可以编辑
<%@page language="abap" %> <%@extension name="thtmlb" prefix="thtmlb" %> <%@extension name="chtmlb" prefix="chtmlb" %> <%@extension name="bsp" prefix="bsp" %> <%--<thtmlb:toolbar buttons = "<%= controller->IF_BSP_WD_DYN_BTN_CONTROL~GET_LOCAL_TOOLBAR_BUTTONS( ) %>" id = "toolbar" maxButtonNumber = "<%= controller->IF_BSP_WD_DYN_BTN_CONTROL~GET_NO_OF_VISIBLE_TOOLBAR_BTNS( ) %>" />--%> <%--<chtmlb:config displayMode = " " mode = "RUNTIME" xml = "<%= controller->configuration_descr->get_config_data( ) %>" />--%> <chtmlb:configGrid columnSize="16" rowSize="3" width="100%"> <chtmlb:configGridCell colSpan="5" columnIndex="1" rowIndex="1" rowSpan="1" > <thtmlb:label id = "upload_label" for = "upload" design = "LABELRIGHT" text = "<%= page->otr_trim( 'CRM_UIU_GS_CM/UPLOAD_DOC' ) %>" tooltip = "<%= page->otr_trim( 'CRM_UIU_GS_CM/UPLOAD_DOC' ) %>" width = "100%"/> </chtmlb:configGridCell> <chtmlb:configGridCell colSpan="11" columnIndex="6" rowIndex="1" rowSpan="1" > <thtmlb:fileUpload id = "upload" size = "45" /> </chtmlb:configGridCell> <chtmlb:configGridCell colSpan="16" columnIndex="1" rowIndex="3" rowSpan="1" > <thtmlb:button id = "attach" onClick = "ATTACH" enabled = "TRUE" text = "<%=otr(CRM_UIU_GS_CM/UPLOAD)%>" /> <thtmlb:button id = "cancel" onClick = "cancel" enabled = "TRUE" text = "<%=otr(CRM_UIU_GS_CM/CANCEL)%>" /> </chtmlb:configGridCell> </chtmlb:configGrid>
这种是在页面对应位置加按钮,并把按钮对应到相应事件,然后在事件中实现按钮功能
2.普通的页面可以在工具栏相关方法GET_BUTTONS中
METHOD IF_BSP_WD_TOOLBAR_CALLBACK~GET_BUTTONS. DATA: LS_BUTTON TYPE CRMT_THTMLB_BUTTON_EXT. DATA: LV_URL TYPE STRING, LV_URL2 TYPE STRING, LV_OBJECT_ID TYPE CRMT_OBJECT_ID, LV_SRV_TYPE TYPE ZDTEL00003Y, LV_SMARTFORM_NAME TYPE TDSFNAME. DATA: LR_ENTITY TYPE REF TO CL_CRM_BOL_ENTITY, LR_COLL TYPE REF TO IF_BOL_ENTITY_COL, LR_CURRENT TYPE REF TO IF_BOL_BO_PROPERTY_ACCESS, LR_ENTITY_ORG TYPE REF TO CL_CRM_BOL_ENTITY, LV_PROCESS_TYPE TYPE STRING, LS_ORGSET_BTIL TYPE CRMST_ORGSET_BTIL. FIELD-SYMBOLS: <FS_OBJECT_ID> TYPE CRMT_OBJECT_ID. CALL METHOD SUPER->IF_BSP_WD_TOOLBAR_CALLBACK~GET_BUTTONS RECEIVING RT_BUTTONS = RT_BUTTONS. DELETE RT_BUTTONS WHERE ON_CLICK = 'OUTPUT'. DELETE RT_BUTTONS WHERE ON_CLICK = 'PRINT_PREVIEW'. LR_ENTITY ?= ME->ZTYPED_CONTEXT->BTADMINH->COLLECTION_WRAPPER->GET_CURRENT( ). IF LR_ENTITY IS BOUND. TRY. LV_PROCESS_TYPE = LR_ENTITY->GET_PROPERTY_AS_STRING( IV_ATTR_NAME = 'PROCESS_TYPE'). CALL METHOD LR_ENTITY->IF_BOL_BO_PROPERTY_ACCESS~GET_PROPERTY_AS_VALUE EXPORTING IV_ATTR_NAME = 'OBJECT_ID' IMPORTING EV_RESULT = LV_OBJECT_ID. LR_COLL = LR_ENTITY->GET_RELATED_ENTITIES( IV_RELATION_NAME = 'BTHeaderOrgmanSet' ). " LR_CURRENT = LR_COLL->GET_CURRENT( ). IF LR_CURRENT IS BOUND. LR_ENTITY_ORG ?= LR_CURRENT. LR_ENTITY_ORG->IF_BOL_BO_PROPERTY_ACCESS~GET_PROPERTIES( IMPORTING ES_ATTRIBUTES = LS_ORGSET_BTIL ). ENDIF. CATCH CX_CRM_CIC_PARAMETER_ERROR. ENDTRY. ENDIF. CHECK LV_OBJECT_ID IS NOT INITIAL. CHECK LV_PROCESS_TYPE = 'ZSR2' OR LV_PROCESS_TYPE = 'ZSR3' OR LV_PROCESS_TYPE = 'ZSV1' OR LV_PROCESS_TYPE = 'ZSV2' OR LV_PROCESS_TYPE = 'ZSV3' OR LV_PROCESS_TYPE = 'ZWO4'. CASE LV_PROCESS_TYPE. WHEN 'ZSR2'. LV_SMARTFORM_NAME = 'ZEXCH'. CONCATENATE 'javascript:window.open( "/sap/bc/webdynpro/sap/ZCRM_PRINT' '?object_id=' LV_OBJECT_ID '&smartform_name=' LV_SMARTFORM_NAME '");' INTO LV_URL. WHEN 'ZSR3'. LV_SMARTFORM_NAME = 'ZREFUND'. CONCATENATE 'javascript:window.open( "/sap/bc/webdynpro/sap/ZCRM_PRINT' '?object_id=' LV_OBJECT_ID '&smartform_name=' LV_SMARTFORM_NAME '");' INTO LV_URL. WHEN 'ZSV1'. IF LS_ORGSET_BTIL-SALES_ORG = 'O 50000178'. LV_SMARTFORM_NAME = 'ZSRV_ORD'. ELSEIF LS_ORGSET_BTIL-SALES_ORG = 'O 50000192' OR LS_ORGSET_BTIL-SALES_ORG = 'O 50000194'. LV_SMARTFORM_NAME = 'ZSRV_ORD_ZA'. ELSE. LV_SMARTFORM_NAME = 'ZSRV_ORD_N'. ENDIF. * lv_smartform_name = 'ZSERVICE_ORD'. CONCATENATE 'javascript:window.open( "/sap/bc/webdynpro/sap/ZCRM_PRINT' '?object_id=' LV_OBJECT_ID '&smartform_name=' LV_SMARTFORM_NAME '");' INTO LV_URL. * lv_smartform_name = 'ZSRV_ORD_N'. * CONCATENATE 'javascript:window.open( "/sap/bc/webdynpro/sap/ZCRM_PRINT' '?object_id=' lv_object_id '&smartform_name=' lv_smartform_name '");' INTO lv_url2. WHEN 'ZSV2'. IF LS_ORGSET_BTIL-SALES_ORG = 'O 50000192' OR LS_ORGSET_BTIL-SALES_ORG = 'O 50000194'. LV_SMARTFORM_NAME = 'ZSERVICE_ORD_ZA'. ELSE. LV_SMARTFORM_NAME = 'ZSERVICE_ORD'. ENDIF. CONCATENATE 'javascript:window.open( "/sap/bc/webdynpro/sap/ZCRM_PRINT' '?object_id=' LV_OBJECT_ID '&smartform_name=' LV_SMARTFORM_NAME '");' INTO LV_URL. WHEN 'ZSV3'. IF LS_ORGSET_BTIL-SALES_ORG = 'O 50000131'. LV_SMARTFORM_NAME = 'ZSERVICE_ORD_AU'. ELSEIF LS_ORGSET_BTIL-SALES_ORG = 'O 50000192' OR LS_ORGSET_BTIL-SALES_ORG = 'O 50000194'. LV_SMARTFORM_NAME = 'ZSERVICE_ORD_ZA'. ELSE. LV_SMARTFORM_NAME = 'ZSERVICE_ORD'. ENDIF. CONCATENATE 'javascript:window.open( "/sap/bc/webdynpro/sap/ZCRM_PRINT' '?object_id=' LV_OBJECT_ID '&smartform_name=' LV_SMARTFORM_NAME '");' INTO LV_URL. WHEN 'ZWO4'. LV_SMARTFORM_NAME = 'ZSERVICE_ORD'. CONCATENATE 'javascript:window.open( "/sap/bc/webdynpro/sap/ZCRM_PRINT' '?object_id=' LV_OBJECT_ID '&smartform_name=' LV_SMARTFORM_NAME '");' INTO LV_URL. WHEN OTHERS. ENDCASE. * CONCATENATE 'javascript:window.open( "/sap/bc/webdynpro/sap/ZCRM_PRINT' '?object_id=' lv_object_id '&smartform_name=' lv_smartform_name '");' INTO lv_url. * CLEAR LS_BUTTON. LS_BUTTON-TEXT = CL_WD_UTILITIES=>GET_OTR_TEXT_BY_ALIAS( 'ZCRM/PDFPRINT' ). "#EC NOTEXT LS_BUTTON-ON_CLIENT_CLICK = LV_URL. LS_BUTTON-ENABLED = ABAP_TRUE. "#EC NOTEXT INSERT LS_BUTTON INTO RT_BUTTONS INDEX 10. CALL METHOD LR_ENTITY->IF_BOL_BO_PROPERTY_ACCESS~GET_PROPERTY_AS_VALUE EXPORTING IV_ATTR_NAME = 'ZZFLD00000N' IMPORTING EV_RESULT = LV_SRV_TYPE. CLEAR:LV_URL,LS_BUTTON. LV_SMARTFORM_NAME = 'ZREPAIR_REP01'. CONCATENATE 'javascript:window.open( "/sap/bc/webdynpro/sap/ZCRM_PRINT' '?object_id=' LV_OBJECT_ID '&smartform_name=' LV_SMARTFORM_NAME '");' INTO LV_URL. LS_BUTTON-TEXT = 'Repair Rep Print'. "#EC NOTEXT LS_BUTTON-ON_CLIENT_CLICK = LV_URL. LS_BUTTON-ENABLED = ABAP_TRUE. "#EC NOTEXT INSERT LS_BUTTON INTO RT_BUTTONS INDEX 11. IF LV_PROCESS_TYPE = 'ZSV1'. CLEAR:LV_URL,LS_BUTTON. LV_SMARTFORM_NAME = 'ZCRM_SERVICE_01'. CONCATENATE 'javascript:window.open( "/sap/bc/webdynpro/sap/ZCRM_PRINT' '?object_id=' LV_OBJECT_ID '&smartform_name=' LV_SMARTFORM_NAME '");' INTO LV_URL. LS_BUTTON-TEXT = 'Repair Follow Print'. "#EC NOTEXT LS_BUTTON-ON_CLIENT_CLICK = LV_URL. LS_BUTTON-ENABLED = ABAP_TRUE. "#EC NOTEXT INSERT LS_BUTTON INTO RT_BUTTONS INDEX 12. ENDIF. * CLEAR ls_button. * ls_button-text = cl_wd_utilities=>get_otr_text_by_alias( 'ZCRM/DELIVPRT' ). "#EC NOTEXT * ls_button-on_client_click = lv_url2. * ls_button-enabled = abap_true. "#EC NOTEXT * INSERT ls_button INTO rt_buttons INDEX 10. ENDMETHOD.
这个就相当与DIALOG中的SET_PF_STATUS
3.申请处理的DO_PREPARE_OUTPUT方法,这个相当于PBO
METHOD do_prepare_output. CALL METHOD super->do_prepare_output EXPORTING iv_first_time = abap_false. *初始化按钮-Begin do_init_button( ). *初始化按钮-End ENDMETHOD.
METHOD do_init_button. DATA: lv_enabled TYPE abap_bool, ls_button TYPE crmt_thtmlb_button, lv_script TYPE string, lv_true_false TYPE string, lv_smartform_name TYPE tdsfname VALUE 'ZCRM_SERVICE_02', lv_zserialno TYPE zserialno, lv_zstatus TYPE zsrve_status, lv_object TYPE crmt_object_id_db, lv_url TYPE string, lv_index TYPE i VALUE 11. DATA:lv_bol TYPE REF TO if_bol_bo_col, lv_access TYPE REF TO if_bol_bo_property_access. * 导入 CLEAR:ls_button . READ TABLE gt_button INTO ls_button WITH KEY on_click = 'ZUPLOAD'. IF sy-subrc <> 0. CLEAR ls_button. ls_button-type = cl_thtmlb_util=>gc_icon_new. ls_button-tooltip = cl_wd_utilities=>get_otr_text_by_alias( 'CRM_UIU_MKTRRG/IMPORT' ). ls_button-text = cl_wd_utilities=>get_otr_text_by_alias( 'CRM_UIU_MKTRRG/IMPORT' ). ls_button-on_click = 'ZUPLOAD' . "#EC NOTEXT ls_button-enabled = abap_true . APPEND ls_button TO gt_button . ENDIF. * 下载模板 CLEAR:ls_button . READ TABLE gt_button INTO ls_button WITH KEY on_click = 'DOWNLOAD'. IF sy-subrc <> 0. CLEAR : lv_url, lv_script,ls_button . lv_url = '../../sap/ZCRM_EXCEL_IMP/ZSRVS_QUERY_002_RESULT_UI.xlsx' . * CONCATENATE `thtmlbExcelExportGen('` CONCATENATE `javascript:window.open('` lv_url `',` 'false' `)` INTO lv_script . ***模版下载另类处理方式 CONCATENATE `javascript:window.open('` ls_button-type = cl_thtmlb_util=>gc_icon_file_spreadsheet. ls_button-tooltip = text-002 . ls_button-text = text-002 . ls_button-on_click = 'DOWNLOAD' . "#EC NOTEXT ls_button-on_client_click = lv_script . ls_button-enabled = abap_true . APPEND ls_button TO gt_button . ENDIF. "ADD BY LY 20170220 FRO PRINT lv_bol = me->typed_context->searchresultnode->collection_wrapper->get_marked( ). IF lv_bol IS BOUND. lv_access = lv_bol->get_current( ). IF lv_access IS BOUND. lv_access->get_property_as_value( EXPORTING iv_attr_name = 'ZSTATUS' IMPORTING ev_result = lv_zstatus ). IF lv_zstatus = '30'. lv_access->get_property_as_value( EXPORTING iv_attr_name = 'ZSERIALNO' IMPORTING ev_result = lv_zserialno ). ENDIF. ENDIF. ENDIF. CLEAR:ls_button . READ TABLE gt_button INTO ls_button WITH KEY id = 'PRNT'. IF sy-subrc <> 0. CLEAR : lv_url, lv_script,ls_button . CONCATENATE 'javascript:window.open( "/sap/bc/webdynpro/sap/ZCRM_PRINT' '?object_id=' lv_object '&smartform_name=' lv_smartform_name '&zserialno=' lv_zserialno '");' INTO lv_url. ls_button-id = 'PRNT'. ls_button-text = text-003. ls_button-on_client_click = lv_url . ls_button-enabled = abap_false . APPEND ls_button TO gt_button. ELSE. lv_index = sy-tabix. CLEAR:lv_script,ls_button . IF lv_zstatus = '30'. CONCATENATE 'javascript:window.open( "/sap/bc/webdynpro/sap/ZCRM_PRINT' '?object_id=' lv_object '&smartform_name=' lv_smartform_name '&zserialno=' lv_zserialno '");' INTO lv_url. ls_button-enabled = abap_true . ELSE. ls_button-enabled = abap_false . ENDIF. ls_button-on_client_click = lv_url . MODIFY gt_button FROM ls_button INDEX lv_index TRANSPORTING on_client_click enabled . ENDIF. ENDMETHOD.