【ABAP】 从无到有 新建一个Webdynpro程序

、新建WDA 可从SE80在web dynpro 组件下 创建 并按例以下操作

2、插入窗口

3、相关功能

3-1、展示消息

bash 复制代码
DATA:lo_api_controller  TYPE REF TO if_wd_controller,

       lo_message_handler TYPE REF TO if_wd_message_manager.

  lo_api_controller ?= wd_this->wd_get_api( ).

  lo_message_handler = lo_api_controller->get_message_manager( ).



  LOOP AT it_return INTO DATA(lw_return).

    CALL METHOD lo_message_handler->report_t100_message

      EXPORTING

        msgid = lw_return-id

        msgno = lw_return-number

        msgty = lw_return-type

        p1    = lw_return-message_v1

        p2    = lw_return-message_v2

        p3    = lw_return-message_v3

        p4    = lw_return-message_v4.

  ENDLOOP.

  IF iv_msg IS NOT INITIAL.

    CALL METHOD lo_message_handler->report_t100_message

      EXPORTING

        msgid = '00'

        msgno = '398'

        msgty = iv_msgty

        p1    = CONV syst_msgv( iv_msg ).

  ENDIF.

3-2弹窗

bash 复制代码
DATA lo_window_manager TYPE REF TO if_wd_window_manager.

lo_window_manager = wd_this->wd_get_api( )->get_window_manager( ).
  wd_this->go_pop_win = lo_window_manager->create_window(
                       window_name            = iv_window_name
                       message_display_mode   = if_wd_window=>co_msg_display_mode_all
                       message_type           = if_wd_window=>co_msg_type_none
                       default_button         = if_wd_window=>co_button_none
                       close_in_any_case      = abap_false
                        ).

IFiv_width IS NOT INITIAL ANDiv_height IS NOT INITIAL.
    wd_this->go_pop_win->set_window_size( width = iv_width height = iv_height ).
  ENDIF.

wd_this->go_pop_win->set_window_title( iv_title ).
  wd_this->go_pop_win->open( ).

4、可编辑或只读等的操作

bash 复制代码
  DATA lo_nd_available TYPE REF TO if_wd_context_node.
  DATA lo_el_available TYPE REF TO if_wd_context_element.
  DATA ls_available TYPE wd_this->element_available.
  DATA lo_button TYPE REF TO cl_wd_toolbar_button.
  DATA view      TYPE REF TO if_wd_view.
  DATA lo_nd_detail TYPE REF TO if_wd_context_node.
  DATA lo_el_detail TYPE REF TO if_wd_context_element.
  DATA ls_detail TYPE wd_this->element_fpo_alv.
  DATA lv_text TYPE string.

****
**      edit (绑定选择屏幕文本)    ''X'.   "可编辑
**      on1  (绑定删除)            'X'.   "可使用
**      on2  (绑定编辑/保存/提交)  'X'.   "可使用
**      on3  (绑定过账)            'X'.   "可使用
****

lo_nd_detail = wd_context->get_child_node( name = wd_this->wdctx_fpo_alv ).
  lo_el_detail = lo_nd_detail->get_element( ).

view ?= wd_this->wd_get_api( ).
  lo_button ?= view->get_element( id = 'BTN_EDIT').

lo_nd_available = wd_context->get_child_node( name = wd_this->wdctx_available ).
  lo_el_available = lo_nd_available->get_element( ).
  CASEl_way .
    WHEN '01'."第一次进入屏幕
      IF wd_comp_controller->gv_ztype = 'C'."新建
        ls_available-edit = ''.
        ls_available-on1 = 'X'.
        ls_available-on2 = 'X'.
        ls_available-on3 = ' '.
      ELSE.
        CASEwd_comp_controller->gw_zsmm0332-ztjzt.
          WHEN 'A'."新建
            ls_available-edit = 'X'.
            ls_available-on1 = 'X'.
            ls_available-on2 = 'X'.
            ls_available-on3 = ' '.
          WHEN 'B'."提交
            ls_available-edit = 'X'.
            ls_available-on1 = ' '.
            ls_available-on2 = ' '.
            ls_available-on3 = ' '.
          WHEN 'C'."过账关闭
            ls_available-edit = 'X'.
            ls_available-on1 = ' '.
            ls_available-on2 = ' '.
            ls_available-on3 = 'X'.
          WHEN OTHERS.
        ENDCASE.
      ENDIF.
      wd_comp_controller->gv_read = 'X'.

WHEN '02' ."编辑按钮
      IFwd_comp_controller->gv_read = 'X'.
        lo_button->set_image_source('~Icon/Edit').
        lo_button->set_text( wd_assist->if_wd_component_assistance~get_text( key = 'A02') ).
        lo_button->set_tooltip( wd_assist->if_wd_component_assistance~get_text( key = 'A02') ).
        CASEwd_comp_controller->gw_zsmm0332-ztjzt.
          WHEN 'A'."新建
            ls_available-edit = ' '.
            ls_available-on1 = 'X'.
            ls_available-on2 = 'X'.
            ls_available-on3 = ' '.
          WHEN 'B'."提交
            ls_available-edit = 'X'.
            ls_available-on1 = ' '.
            ls_available-on2 = ' '.
            ls_available-on3 = ' '.
          WHEN 'C'."过账关闭
            ls_available-edit = ' '.
            ls_available-on1 = ' '.
            ls_available-on2 = ' '.
            ls_available-on3 = 'X'.
          WHEN OTHERS.
            ls_available-edit = 'X'.
            ls_available-on1 = ' '.
            ls_available-on2 = 'X'.
            ls_available-on3 = ' '.
        ENDCASE.
        wd_comp_controller->gv_read = ' '.
      ELSE.
        lo_button->set_image_source('~Icon/Display').
        lo_button->set_text( wd_assist->if_wd_component_assistance~get_text( key = 'A01' ) ).
        lo_button->set_tooltip( wd_assist->if_wd_component_assistance~get_text( key = 'A01' ) ).
        CASE wd_comp_controller->gw_zsmm0332-ztjzt.
          WHEN 'A'.
            ls_available-edit = 'X'.
            ls_available-on1 = 'X'.
            ls_available-on2 = 'X'.
            ls_available-on3 = ' '.
          WHEN 'B'.
            ls_available-edit = 'X'.
            ls_available-on1 = ' '.
            ls_available-on2 = ' '.
            ls_available-on3 = ' '.
          WHEN 'C'.
            ls_available-edit = ' '.
            ls_available-on1 = ' '.
            ls_available-on2 = ' '.
            ls_available-on3 = 'X'.
          WHEN OTHERS.
            ls_available-edit = ' '.
            ls_available-on1 = 'X'.
            ls_available-on2 = 'X'.
            ls_available-on3 = ' '.
        ENDCASE.
        wd_comp_controller->gv_read = 'X'.
      ENDIF.

WHEN '03' ."保存
      ls_available-edit = 'X'.
      ls_available-on1 = 'X'.
      ls_available-on2 = 'X'.
      ls_available-on3 = ' '.
      wd_comp_controller->gv_read = 'X'.
    WHEN '04'."提交
      ls_available-edit = 'X'.
      ls_available-on1 = ' '.
      ls_available-on2 = ' '.
      ls_available-on3 = ' '.
      wd_comp_controller->gv_read = 'X'.
    WHEN '05'. "过账
      ls_available-edit = 'X'.
      ls_available-on1 = ' '.
      ls_available-on2 = ' '.
      ls_available-on3 = ' '.
      wd_comp_controller->gv_read = 'X'.
    WHEN OTHERS.
  ENDCASE.

lo_el_available->set_static_attributes( static_attributes = ls_available ).
bash 复制代码
1、搜索帮助
1、搜索帮助
***<!----------------------------------- F4输入结构
  TYPES:BEGIN OF lty_stru_input,
          werks TYPE werks_d,
          lgort TYPE lgort_d,
          matnr TYPE matnr,
          lifnr TYPE lifnr,
*          charg  TYPE charg_d,
*          field1 TYPE string,
        END OF lty_stru_input.
*        ls_search_input TYPE lty_stru_input.
***<!----------------------------------- F4输出结构
  TYPES: BEGIN OF lty_stru_list,
           werks TYPE werks_d,
           lgort TYPE lgort_d,
           matnr TYPE matnr,
           lifnr TYPE lifnr,
           charg TYPE charg_d,
           clabs TYPE zremnum,
*           column1 TYPE string,
         END OF lty_stru_list.
*         lt_select_list TYPE STANDARD TABLE OF lty_stru_list.
***<!------------------------------------批次返回结构
  DATA:BEGIN OF lw_batch,
         werks TYPE werks_d,
         lgort TYPE lgort_d,
         matnr TYPE matnr,
         charg TYPE charg_d,
         clabs TYPE zremnum,
       END OF lw_batch,
       lt_batch LIKE TABLE OF lw_batch.
DATA:lv_msg  TYPE bapi_msg,
       lv_type TYPE    bapi_mtype.
***<!----------------------------------- F4所需结构
  DATA: ls_text         TYPE wdr_name_value,
        lt_label_texts  TYPE wdr_name_value_list,
        lt_column_texts TYPE wdr_name_value_list,
        lv_window_title TYPE string,
        lv_table_header TYPE string,
        ls_search_input TYPE lty_stru_input,
        lw_select_list  TYPE lty_stru_list,
        lt_select_list  TYPE STANDARD TABLE OF lty_stru_list..
FIELD-SYMBOLS: <ls_query_params> TYPE lty_stru_input,
                 <ls_selection>    TYPE lty_stru_list.
DATA:lo_nd_fpo_alv TYPE REF TO if_wd_context_node,
       lo_el_fpo_alv TYPE REF TO if_wd_context_element.
DATA:lo_nd_fpo_sel TYPE REF TO if_wd_context_node,
       lo_el_fpo_sel TYPE REF TO if_wd_context_element.
  DATA lt_select_ovs TYPE wd_this->elements_charg_f4.
  DATA ls_fpo_sel TYPE wd_this->element_fpo_sel.
DATA:ls_alv TYPE wd_this->element_fpo_alv,
       lt_alv TYPE wd_this->elements_fpo_alv.
DATA:lv_lifnr TYPE wd_this->element_fpo_sel-lifnr,
       lv_lgort TYPE wd_this->element_fpo_sel-lgort,
       lv_werks TYPE wd_this->element_fpo_sel-werks.
lo_nd_fpo_alv = wd_context->get_child_node( name = wd_this->wdctx_fpo_alv ).
  lo_nd_fpo_alv->get_static_attributes_table( IMPORTING table = lt_alv ).
lo_nd_fpo_sel = wd_context->get_child_node( name = wd_this->wdctx_fpo_sel ).
  lo_el_fpo_sel = lo_nd_fpo_sel->get_element( ).
CLEAR:lv_lifnr,lv_werks,lv_lgort.
  lo_el_fpo_sel->get_attribute( EXPORTING name = `LIFNR` IMPORTING value = lv_lifnr ).
  lo_el_fpo_sel->get_attribute( EXPORTING name = `LGORT` IMPORTING value = lv_lgort ).
  lo_el_fpo_sel->get_attribute( EXPORTING name = `WERKS` IMPORTING value = lv_werks ).
CASEovs_callback_object->phase_indicator.
WHEN if_wd_ovs=>co_phase_0.     "实例化F4窗口
      lt_label_texts[]  = VALUE #( ( name = 'WERKS' value = wd_assist->if_wd_component_assistance~get_text( key = 'M06' ) )
                                   ( name = 'LGORT' value = wd_assist->if_wd_component_assistance~get_text( key = 'M10' ) )
                                   ( name = 'MATNR' value = wd_assist->if_wd_component_assistance~get_text( key = 'M03' ) )
                                   ( name = 'LIFNR' value = wd_assist->if_wd_component_assistance~get_text( key = 'V01' ) )
                                 ).
      lt_column_texts[] = VALUE #( ( name = 'WERKS' value = wd_assist->if_wd_component_assistance~get_text( key = 'M06' ) )
                                   ( name = 'LGORT' value = wd_assist->if_wd_component_assistance~get_text( key = 'M10' ) )
                                   ( name = 'MATNR' value = wd_assist->if_wd_component_assistance~get_text( key = 'M03' ) )
                                   ( name = 'LIFNR' value = wd_assist->if_wd_component_assistance~get_text( key = 'V01' ) )
                                   ( name = 'CHARG' value = wd_assist->if_wd_component_assistance~get_text( key = 'Y07' ) )
                                   ( name = 'CLABS' value = wd_assist->if_wd_component_assistance~get_text( key = '017' ) )
                                 ).
ovs_callback_object->set_configuration( label_texts  = lt_label_texts
                                              column_texts = lt_column_texts
                                              window_title = lv_window_title
                                              table_header = lv_table_header
                                            ).
WHEN if_wd_ovs=>co_phase_1.    "实例化搜索框
*      ovs_callback_object->context_element->get_static_attributes( IMPORTING static_attributes = ls_search_input ).
*      ovs_callback_object->set_input_structure( input = ls_search_input ).
WHEN if_wd_ovs=>co_phase_2.    "实例化取值
DATA(lv_index) = ovs_callback_object->context_element->get_index( ).
*   获取 RFC 名字
      SELECT SINGLE * INTO @DATA(lw_zrfc) FROM zrfc WHERE to_system = 'ERP' AND function  = ''.
READ TABLE lt_alv INTO DATA(lw_alv) INDEX lv_index.
      IF sy-subrc = 0.
CALL FUNCTION 'ZRFC_SNC_ERP_RTV_GET_CHARG' DESTINATION lw_zrfc-rfc_name
          EXPORTING
            i_werks            = lv_werks
            i_lgort            = lv_lgort
            i_matnr            = lw_alv-matnr
            i_lifnr            = lv_lifnr
          IMPORTING
            e_msg              = lv_msg
            e_type             = lv_type
          TABLES
            t_batch            = lt_batch
          EXCEPTIONS
            rfc_external_abort = 1
            OTHERS             = 2.
        LOOP AT lt_batch INTO lw_batch.
          MOVE-CORRESPONDING lw_batch TO lw_select_list.
          lw_select_list-lifnr = lv_lifnr.
          APPEND lw_select_list TO lt_select_list.
          CLEAR:lw_batch,lw_select_list."lv_lifnr,lv_werks,lv_lgort.
        ENDLOOP.
ENDIF.
ovs_callback_object->set_output_table( output = lt_select_list ).
WHEN if_wd_ovs=>co_phase_3."将值塞入ALV中
*   apply result
IF ovs_callback_object->selection IS NOT BOUND.
******** TODO exception handling
      ENDIF.
ASSIGN ovs_callback_object->selection->* TO <ls_selection>.
      IF <ls_selection> IS ASSIGNED.
        ovs_callback_object->context_element->set_attribute(
                                       name  = `CHARG`
                                       value = <ls_selection>-charg  ).
*        ovs_callback_object->context_element->set_attribute(
*                               name  = `LGOBE`
*                               value = <ls_selection>-lgobe ).
ENDIF.
  ENDCASE.
2、ALV相关
*<!-----组件
  DATA: lo_cmp_usage           TYPE REF TO if_wd_component_usage,
        lo_interfacecontroller TYPE REF TO iwci_salv_wd_table,
        lo_nd_alv              TYPE REF TO if_wd_context_node,
        lo_config_table        TYPE REF TO cl_salv_wd_config_table,
        lo_column_settings     TYPE REF TO if_salv_wd_column_settings,
        lo_field_settings      TYPE REF TO if_salv_wd_field_settings,
        lo_functions_set       TYPE REF TO if_salv_wd_function_settings.
DATA:lr_dorpdown TYPE REF TO cl_salv_wd_uie_dropdown_by_key.
lo_cmp_usage =   wd_this->wd_cpuse_main_alv( ).
  IFlo_cmp_usage->has_active_component( ) IS INITIAL.
    lo_cmp_usage->create_component( ).
  ENDIF.
*<!-----界面
  lo_interfacecontroller =   wd_this->wd_cpifc_main_alv( ).
*<!-----获取node
  lo_nd_alv = wd_context->get_child_node( name = wd_this->wdctx_main_alv ).
*<!-----alv与node绑定
  lo_interfacecontroller->set_data( r_node_data = lo_nd_alv ).
*<!-----获取节点组
  lo_config_table = lo_interfacecontroller->get_model( ).
*<!-----隐藏打印版本
  lo_config_table->if_salv_wd_std_functions~set_pdf_allowed( '').
*<!-----所有字段100%显示
*  lo_config_table->if_salv_wd_table_settings~set_grid_mode( '00').
*  lo_config_table->if_salv_wd_table_settings~set_visible_row_count( 20).
*  lo_config_table->if_salv_wd_table_settings~set_scrollable_col_count( '10')."滚动列
*  lo_config_table->if_salv_wd_table_settings~set_width( '100%' )."设置宽度
*  lo_config_table->if_salv_wd_table_settings~set_selection_mode( value = cl_wd_table=>e_selection_mode-multi_no_lead ).
*  lo_config_table->if_salv_wd_table_settings~set_cell_action_event_enabled( value = abap_true ).
*<!-----设置行样式
  lo_column_settings ?= lo_config_table.
  lo_field_settings ?= lo_config_table.
  lo_functions_set ?= lo_config_table.
lo_config_table->if_salv_wd_table_settings~set_read_only( abap_false ).
  lo_config_table->if_salv_wd_table_settings~set_cell_action_event_enabled( abap_true ).
*
*  lo_config_table->if_salv_wd_table_settings~set_selection_mode( '08').
*  lo_config_table->if_salv_wd_table_settings~set_scrollable_col_count( '15').
*  lo_config_table->if_salv_wd_table_settings~set_visible_row_count( '10').
lo_config_table->if_salv_wd_std_functions~set_edit_check_available( abap_false ).
  lo_config_table->if_salv_wd_std_functions~set_edit_append_row_allowed( abap_false ).
  lo_config_table->if_salv_wd_std_functions~set_edit_insert_row_allowed( abap_false ).
  lo_config_table->if_salv_wd_std_functions~set_edit_delete_row_allowed( abap_false ).
*<!-----Alv列设置
  DATA: lt_columns       TYPE salv_wd_t_column_ref,
        lr_column_header TYPE REF TO cl_salv_wd_column_header,
        lr_link          TYPE REF TO cl_salv_wd_uie_link_to_action,
        lr_drop_bykey    TYPE REF TO cl_salv_wd_uie_dropdown_by_key,
        lr_function      TYPE REF TO cl_salv_wd_function,
        lr_button        TYPE REF TO cl_salv_wd_fe_button,
        lo_input         TYPE REF TO cl_salv_wd_uie_input_field.
lt_columns = lo_column_settings->get_columns( ).
  LOOP AT lt_columns INTO DATA(ls_column).
    lr_column_header = ls_column-r_column->get_header( ).
    lr_column_header->set_ddic_binding_field( if_salv_wd_c_column_settings=>ddic_bind_none ).
CREATE OBJECTlo_input EXPORTING value_fieldname = ls_column-id.
CASEls_column-id.
      WHEN 'ZREFN'.
        lr_column_header->set_text( value = wd_assist->if_wd_component_assistance~get_text('M01') ).
CREATE OBJECTlo_input EXPORTING value_fieldname = ls_column-id.
        lr_link = NEW#( ).CREATE OBJECTlr_link.
        lr_link->set_text_fieldname( ls_column-id ).
        ls_column-r_column->set_cell_editor( lr_link ).
WHEN 'ZREPO'.
        lr_column_header->set_text( value = wd_assist->if_wd_component_assistance~get_text('M02') ).
        lo_input->set_read_only( abap_false ).
      WHEN 'MATNR'.
        lr_column_header->set_text( value = wd_assist->if_wd_component_assistance~get_text('M03') ).
      WHEN 'MENGE'.
        lr_column_header->set_text( value = wd_assist->if_wd_component_assistance~get_text('M04') ).
        lo_input->set_length( 4).
      WHEN 'WERKS'.
        lr_column_header->set_text( value = wd_assist->if_wd_component_assistance~get_text('M06') ).
      WHEN 'NAME1'.
        lr_column_header->set_text( value = wd_assist->if_wd_component_assistance~get_text('M07') ).
      WHEN 'YCK_MENGE'.
        lr_column_header->set_text( value = wd_assist->if_wd_component_assistance~get_text('M08') ).
        lo_input->set_length( 4).
      WHEN 'ZCDATE'.
        lr_column_header->set_text( value = wd_assist->if_wd_component_assistance~get_text('M09') ).
      WHEN 'LGORT'.
        lr_column_header->set_text( value = wd_assist->if_wd_component_assistance~get_text('M10') ).
      WHEN 'CHARG'.
        lr_column_header->set_text( value = wd_assist->if_wd_component_assistance~get_text('M11') ).
      WHEN 'ZTJZT'.
        lr_column_header->set_text( value = wd_assist->if_wd_component_assistance~get_text('M12') ).
      WHEN 'ZRVTYY'.
        lr_column_header->set_text( value = wd_assist->if_wd_component_assistance~get_text('M13') ).
        lo_input->set_length( 8).
      WHEN 'ZRTVYY_N'.
        lr_column_header->set_text( value = wd_assist->if_wd_component_assistance~get_text('M14') ).
        lo_input->set_length( 8).
      WHEN 'ZCNAME'.
        lr_column_header->set_text( value = wd_assist->if_wd_component_assistance~get_text('M15') ).
      WHEN 'TELENUM'.
        lr_column_header->set_text( value = wd_assist->if_wd_component_assistance~get_text('M16') ).
      WHEN 'ZBEIZH'.
        lr_column_header->set_text( value = wd_assist->if_wd_component_assistance~get_text('M17') ).
      WHEN OTHERS.
        lo_column_settings->delete_column( ls_column-id ).
    ENDCASE.
ENDLOOP.
*<!-----设置按钮
  lo_functions_set ?= lo_config_table.
  lr_function = lo_functions_set->create_function( 'SEARCH').
  CREATE OBJECTlr_button.
  lr_button->set_text( value = wd_assist->if_wd_component_assistance~get_text('B10') )."查询
  lr_function->set_editor( lr_button ).
lo_functions_set ?= lo_config_table.
  lr_function = lo_functions_set->create_function( 'ZADD' ).
  CREATE OBJECT lr_button.
  lr_button->set_text( value = wd_assist->if_wd_component_assistance~get_text('B11') )."新建退货
  lr_function->set_editor( lr_button ).
3、绑定搜索帮助
  DATA: lo_cp_usage  TYPE REF TO if_wd_component_usage,
        lo_select_op TYPE REF TO iwci_wdr_select_options,
        lt_rangtable TYPE REF TO data.
  DATA: lt_range_table TYPE REF TO data.
  DATA: lr_s1 TYPE RANGE OF bu_partner  .
  DATA  lw_s1 LIKE LINE OF lr_s1.
  DATA: ev_cp_partner  TYPE bu_partner.
  DATA: ev_partner  TYPE bu_partner.
  DATA: ev_partner_guid   TYPE bu_partner_guid.
  FIELD-SYMBOLS <fs_data> TYPE table.
  DATA: lt_value_set TYPE wdy_key_value_table.
lo_cp_usage = wd_this->wd_cpuse_sel_opt( ).
  IFlo_cp_usage->has_active_component( ) IS INITIAL.
    lo_cp_usage->create_component( ).
  ENDIF.
lo_select_op = wd_this->wd_cpifc_sel_opt( ).
* 设定到全局参数
  wd_this->go_handler = lo_select_op->init_selection_screen( ).
  wd_this->go_handler->set_global_options(
      i_display_btn_cancel  = abap_false
      i_display_btn_check   = abap_false
      i_display_btn_reset   = abap_false
      i_display_btn_execute = abap_false ).
DEFINE set_opt.
lt_rangtable = wd_this->go_handler->create_range_table( i_typename = &1).
    wd_this->go_handler->add_selection_field(
      i_id              = &2it_result         = lt_rangtable
      i_read_only       = &3"只读
      i_as_dropdown     = &4   "下拉框
      i_description     = &5"描述
      i_obligatory      = &6   "必填
      i_no_extension    = &7"sel_opt -no_extension
      i_no_intervals    = &7   "sel-opt -no_intervals
      i_value_help_type = &8"F4类型
      i_value_help_id   = &9   "F4ID
    ).
END-OF-DEFINITION.
DATA: lv_text TYPE string.
  lv_text = wd_assist->if_wd_component_assistance~get_text( 'M15')."创建人
  set_opt 'LIFNR'     'S_1'   'X'   ' '   lv_text    'X'   'X'   ' '   ' '.
lv_text = wd_assist->if_wd_component_assistance~get_text( 'M06' )."工厂
  set_opt 'WERKS_D''S_2'' '' 'lv_text    'X'' ''OVR''ON_OVS'." .
lv_text = wd_assist->if_wd_component_assistance~get_text( 'M01' )."退货申请单号
  set_opt 'ZEREFN''S_3'' '' 'lv_text    ' '' '' '' '.
lv_text = wd_assist->if_wd_component_assistance~get_text( 'M03')."物料
  set_opt 'MATNR'     'S_4'   ' '   ' '   lv_text    ' '   ' '   ' '   ' '.
lv_text = wd_assist->if_wd_component_assistance~get_text( 'M09' )."创建日期
  set_opt 'ERDAT''S_5'' '' 'lv_text    ' '' '' '' '." ."' '' '.
**--------------------------------------------------------------------*
**` 默认值
**--------------------------------------------------------------------*
  FIELD-SYMBOLS: <it_range_table> TYPE STANDARD TABLE.
lt_range_table = wd_this->go_handler->get_range_table_of_sel_field( i_id =  'S_1').
  ASSIGN lt_range_table->* TO <it_range_table> .
  CLEAR <it_range_table>.
**--------------------------------------------------------------------*
**   初始供应商
**--------------------------------------------------------------------*
  "获取登录帐号所对应的供应商编号
  CALL FUNCTION 'ZBUPA_NUMBERS_GET'
    EXPORTING
      iv_uname         = sy-uname
    IMPORTING
      ev_cp_partner    = ev_cp_partner
      ev_partner       = ev_partner
      ev_partner_guid  = ev_partner_guid
    EXCEPTIONS
      no_cp_username   = 1
      no_business_part = 2.
IF ev_partner IS NOT INITIAL.
    lt_range_table = wd_this->go_handler->get_range_table_of_sel_field( i_id =  'S_1' ).
    ASSIGN lt_range_table->* TO <it_range_table> .
    CLEAR <it_range_table>.
    lw_s1-sign   = 'I' .
    lw_s1-option = 'EQ' .
    lw_s1-low    = ev_partner.
    APPEND lw_s1 TO <it_range_table> .
    wd_this->go_handler->set_range_table_of_sel_field(
    i_id = 'S_1'
    it_range_table = lt_range_table
    ).
  ENDIF.
*
4、获取选择屏幕的值 查询并绑定
  DATA:lo_range TYPE REFTOdata.
  FIELD-SYMBOLS: <fs_range>TYPE table.
DATA: lt_alv    TYPE wd_this->elements_main_alv,
        lw_alv    TYPE wd_this->element_main_alv,
        lo_nd_alv TYPE REFTOif_wd_context_node.
*报错误消息的方法定义
  DATA: lo_current_controller TYPE REFTOif_wd_controller,
        lo_message_manager    TYPE REFTOif_wd_message_manager.
DATA:lt_lifnr TYPE TABLEOFzranges,
       lt_werks TYPE TABLEOFzranges,
       lt_zrefn TYPE TABLEOFzranges,
       lt_matnr TYPE TABLEOFzranges,
       lt_erdat TYPE TABLEOFzranges,
       lv_text  TYPE string.
lo_range =wd_this->go_handler->get_range_table_of_sel_field( i_id ='S_1')."取当前供应商
  ASSIGN lo_range->* TO <fs_range>.
  MOVE-CORRESPONDING <fs_range> TO lt_lifnr.
lo_range = wd_this->go_handler->get_range_table_of_sel_field( i_id = 'S_2' )."取当前工厂
  ASSIGN lo_range->*TO<fs_range>.
  MOVE-CORRESPONDING<fs_range>TOlt_werks .
lo_range =wd_this->go_handler->get_range_table_of_sel_field( i_id ='S_3')."取退货申请号
  ASSIGN lo_range->* TO <fs_range>.
  MOVE-CORRESPONDING <fs_range> TO lt_zrefn .
lo_range = wd_this->go_handler->get_range_table_of_sel_field( i_id = 'S_4' )."取物料
  ASSIGN lo_range->*TO<fs_range>.
  MOVE-CORRESPONDING<fs_range>TOlt_matnr .
lo_range =wd_this->go_handler->get_range_table_of_sel_field( i_id ='S_5')."取当前创建日期
  ASSIGN lo_range->* TO <fs_range>.
  MOVE-CORRESPONDING <fs_range> TO lt_erdat.
IF lt_werks  IS INITIAL OR lt_lifnr  IS INITIAL.
    lv_text = wd_assist->if_wd_component_assistance~get_text( 'E03' ).         "'请检查 工厂/供应商 字段必填!!
    wd_comp_controller->show_message( iv_msgty = 'E' iv_msg = lv_text ).
  ELSE.
*   获取 RFC 名字
    SELECT SINGLE * INTO @DATA(lw_zrfc) FROM zrfc WHERE to_system = 'ERP' AND function  = ''.
CALL FUNCTION 'ZRFC_SNC_ERP_HANDLE_RTV_SEARCH' DESTINATION lw_zrfc-rfc_name
      EXPORTING
        iv_langu  = sy-langu
      TABLES
        ir_zafnam = lt_lifnr
        ir_werks  = lt_werks
        ir_zrefn  = lt_zrefn
        ir_matnr  = lt_matnr
        ir_zcdate = lt_erdat
        et_data   = lt_alv.
SORT lt_alv BY zrefn DESCENDING.
*    LOOP AT lt_alv assigning field-symbol(lv).
*
*    ENDLOOP.
IF lt_alv IS NOT INITIAL.
      lo_nd_alv = wd_context->get_child_node( name = wd_this->wdctx_main_alv ).  "'查询成功'.
      lo_nd_alv->bind_table( new_items = lt_alv set_initial_elements = abap_true ).
    ELSE.
      lv_text = wd_assist->if_wd_component_assistance~get_text( 'E01' ).         "'查询失败:当前无符合条件的数据'.
      wd_comp_controller->show_message( iv_msgty = 'E' iv_msg = lv_text ).
    ENDIF.
  ENDIF.
5、获取选择的行
复制  DATA:lo_nd_receiver TYPE REF TO if_wd_context_node,
       lo_el_receiver TYPE REF TO if_wd_context_element.
  DATA:lt_rows   TYPE wdr_context_element_set,
       lo_nd_alv TYPE REF TO if_wd_context_node,
       lt_alv    TYPE wd_this->elements_fpo_alv, "ALV的内表
       lw_alv    LIKE LINE OF lt_alv.
DATA:lv_tabix TYPE sy-tabix.
***<!---------------------获取整个内表
  lo_nd_receiver = wd_context->get_child_node( name = wd_this->wdctx_fpo_alv ).
  lo_nd_receiver->get_static_attributes_table( IMPORTING table = lt_alv ).
***<!---------------------获取选中行数据
  lo_nd_alv = wd_context->get_child_node( name = wd_this->wdctx_fpo_alv ).
  lt_rows   = lo_nd_alv->get_selected_elements( including_lead_selection = abap_true ).
LOOP AT lt_rows INTO DATA(lw_rows).
    lv_tabix = sy-tabix.
    CALL METHOD lw_rows->get_static_attributes( IMPORTING static_attributes = lw_alv ).
DELETE lt_alv WHERE zrefn = lw_alv-zrefn AND zrepo = lw_alv-zrepo.
*    lo_nd_receiver = wd_context->get_child_node( name = wd_this->wdctx_fpo_alv ).
*    lo_el_receiver = lo_nd_receiver->get_element( lo_nd_receiver->get_lead_selection_index( ) ).
*    lo_nd_receiver->remove_element( lo_el_receiver ).
ENDLOOP.
***<!-----------------重新绑定
  lo_nd_receiver = wd_context->get_child_node( name = wd_this->wdctx_fpo_alv ).  "'查询成功'.
  lo_nd_receiver->bind_table( new_items = lt_alv set_initial_elements = abap_true ).
*  lo_nd_receiver = wd_context->get_child_node( name = wd_this->wdctx_fpo_alv ).
*  lo_el_receiver = lo_nd_receiver->get_element( lo_nd_receiver->get_lead_selection_index( ) ).
*  lo_nd_receiver->remove_element( lo_el_receiver ).

来自 <https://www.showdoc.com.cn/2061732476156924/10264315363757174> 
相关推荐
rzl024 分钟前
java web5(黑马)
java·开发语言·前端
Amy.Wang6 分钟前
前端如何实现电子签名
前端·javascript·html5
海天胜景8 分钟前
vue3 el-table 行筛选 设置为单选
javascript·vue.js·elementui
今天又在摸鱼8 分钟前
Vue3-组件化-Vue核心思想之一
前端·javascript·vue.js
蓝婷儿10 分钟前
每天一个前端小知识 Day 21 - 浏览器兼容性与 Polyfill 策略
前端
百锦再12 分钟前
Vue中对象赋值问题:对象引用被保留,仅部分属性被覆盖
前端·javascript·vue.js·vue·web·reactive·ref
jingling55517 分钟前
面试版-前端开发核心知识
开发语言·前端·javascript·vue.js·面试·前端框架
拾光拾趣录22 分钟前
CSS 深入解析:提升网页样式技巧与常见问题解决方案
前端·css
莫空000023 分钟前
深入理解JavaScript属性描述符:从数据属性到存取器属性
前端·面试
guojl23 分钟前
深度剖析Kafka读写机制
前端