UI界面按钮增强

(我是菜鸟,知道的少)

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.
原文地址:https://www.cnblogs.com/sapSB/p/6422590.html