click 的个人资料Click's Blog照片日志列表更多 工具 帮助
9月29日

用OO方法开发ALV(已实现DropdownList,纵向alv head,double_click、top_of_page事件,不断完善中)

*其他操作:
*1.建立屏幕100,在100上画一个custom control命名为cont1
*2.定义一个status命名为stu_0100
REPORT zctest13.
CLASS cl_events DEFINITION DEFERRED.
TABLES: kna1.
DATA: save_ok TYPE sy-ucomm,
      ok_code TYPE sy-ucomm,
      w_fname TYPE scrfname VALUE 'CONT1',
      w_grid  TYPE REF TO cl_gui_alv_grid,
      w_cont  TYPE REF TO cl_gui_custom_container,
      it_fieldcat TYPE lvc_t_fcat,
      iw_layout TYPE lvc_s_layo,
      w_receiver TYPE REF TO cl_events,
      it_exclude TYPE ui_functions.
DATA: w_doc TYPE REF TO cl_dd_document,
      w_splitter TYPE REF TO cl_gui_splitter_container,
      w_viewer TYPE REF TO cl_gui_html_viewer,
      w_head TYPE REF TO cl_gui_container,
      w_body TYPE REF TO cl_gui_container.
DATA: it_kna1 TYPE TABLE OF kna1,
      iw_kna1 TYPE kna1.
*----------------------------------------------------------------------*
*       CLASS cl_events DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cl_events DEFINITION.
  PUBLIC SECTION.
    METHODS handle_double_click FOR EVENT double_click
      OF cl_gui_alv_grid IMPORTING e_row e_column.
    METHODS handle_top_of_page FOR EVENT top_of_page
      OF cl_gui_alv_grid IMPORTING e_dyndoc_id.
ENDCLASS.                    "cl_events DEFINITION
*----------------------------------------------------------------------*
*       CLASS cl_events IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_events IMPLEMENTATION.
  METHOD handle_double_click.
    PERFORM f_double_click USING e_row.
  ENDMETHOD.                    "handle_double_click
  METHOD handle_top_of_page.
    PERFORM f_top_of_page  USING e_dyndoc_id.
  ENDMETHOD.                    "handle_top_of_page
ENDCLASS.                    "cl_events DEFINITION
SELECT-OPTIONS s_kunnr FOR kna1-kunnr.
START-OF-SELECTION.
  SELECT *
    INTO CORRESPONDING FIELDS OF TABLE it_kna1
    FROM kna1
   WHERE kunnr IN s_kunnr.
  CALL SCREEN 0100.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STU_0100'.
  IF w_cont IS INITIAL.
    PERFORM f_create_alv.
  ENDIF.
ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  save_ok = ok_code.
  CLEAR ok_code.
  CASE save_ok.
    WHEN 'SAVE'.
      CALL METHOD w_grid->check_changed_data.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*&      Module  CANCEL  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE cancel INPUT.
  LEAVE TO SCREEN 0.
ENDMODULE.                 " CANCEL  INPUT
*&---------------------------------------------------------------------*
*&      Form  f_create_alv
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f_create_alv .
  DATA: lw_line TYPE i,
        liw_fieldcat TYPE lvc_s_fcat.
  CREATE OBJECT w_cont
    EXPORTING
      container_name = w_fname.
  CREATE OBJECT w_doc.
*    EXPORTING
*      style = 'ALV_GRID'.
  CREATE OBJECT w_splitter
    EXPORTING
      parent  = w_cont
      rows    = 1
      columns = 2.
* 分配容器
  CALL METHOD w_splitter->get_container
    EXPORTING
      row       = 1
      column    = 1
    RECEIVING
      container = w_head.
  CALL METHOD w_splitter->get_container
    EXPORTING
      row       = 1
      column    = 2
    RECEIVING
      container = w_body.
* 设定左边容器初始宽度
  CALL METHOD w_splitter->set_column_width
    EXPORTING
      id    = 1
      width = 45.
  CREATE OBJECT w_grid
    EXPORTING
      i_parent = w_body.
*  CALL METHOD w_grid->register_edit_event
*    EXPORTING
*      i_event_id = cl_gui_alv_grid=>mc_evt_enter.
  CREATE OBJECT w_receiver.
  SET HANDLER w_receiver->handle_double_click FOR w_grid.
  SET HANDLER w_receiver->handle_top_of_page  FOR w_grid.
  CALL METHOD cl_gui_control=>set_focus
    EXPORTING
      control = w_grid.
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name = 'KNA1'
    CHANGING
      ct_fieldcat      = it_fieldcat.
  DESCRIBE TABLE it_fieldcat LINES lw_line.
  DELETE it_fieldcat FROM 9 TO lw_line.
  READ TABLE it_fieldcat INTO liw_fieldcat INDEX 5.
  liw_fieldcat-edit = 'X'.
  liw_fieldcat-drdn_hndl = '1'.
  liw_fieldcat-checktable = '!'.
  MODIFY it_fieldcat FROM liw_fieldcat INDEX 5.
  READ TABLE it_fieldcat INTO liw_fieldcat INDEX 6.
  liw_fieldcat-edit = 'X'.
  liw_fieldcat-drdn_hndl = '1'.
  liw_fieldcat-checktable = '!'.
  MODIFY it_fieldcat FROM liw_fieldcat INDEX 6.
  PERFORM f_fill_exclude.
  PERFORM f_dropdown.
  CALL METHOD w_grid->set_table_for_first_display
    EXPORTING
      it_toolbar_excluding = it_exclude
    CHANGING
      it_outtab            = it_kna1
      it_fieldcatalog      = it_fieldcat.
  CALL METHOD w_grid->set_ready_for_input
    EXPORTING
      i_ready_for_input = 1.
*  CALL METHOD w_doc->initialize_document.
  CALL METHOD w_grid->list_processing_events
    EXPORTING
      i_event_name = 'TOP_OF_PAGE'
      i_dyndoc_id  = w_doc.
ENDFORM.                    " f_create_alv
*&---------------------------------------------------------------------*
*&      Form  F_FILL_EXCLUDE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f_fill_exclude .
  DATA liw_exclude TYPE ui_func.
  liw_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
  APPEND liw_exclude TO it_exclude.
  liw_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
  APPEND liw_exclude TO it_exclude.
  liw_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
  APPEND liw_exclude TO it_exclude.
  liw_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
  APPEND liw_exclude TO it_exclude.
  liw_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row.
  APPEND liw_exclude TO it_exclude.
  liw_exclude = cl_gui_alv_grid=>mc_fc_loc_copy.
  APPEND liw_exclude TO it_exclude.
  liw_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
  APPEND liw_exclude TO it_exclude.
  liw_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
  APPEND liw_exclude TO it_exclude.
  liw_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
  APPEND liw_exclude TO it_exclude.
  liw_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
  APPEND liw_exclude TO it_exclude.
ENDFORM.                    " F_FILL_EXCLUDE
*&---------------------------------------------------------------------*
*&      Form  F_DROPDOWN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f_dropdown .
  DATA: lit_dropdown TYPE lvc_t_drop,
        liw_dropdown TYPE lvc_s_drop.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '1'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '2'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '3'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '4'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '5'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '6'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '7'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '8'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '9'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '10'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '11'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '12'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '13'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '14'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '15'.
  APPEND liw_dropdown TO lit_dropdown.
  CALL METHOD w_grid->set_drop_down_table
    EXPORTING
      it_drop_down = lit_dropdown.
ENDFORM.                    " F_DROPDOWN
*&---------------------------------------------------------------------*
*&      Form  F_DOUBLE_CLICK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f_double_click USING f_row TYPE lvc_s_row.
  DATA: w_kunnr TYPE kunnr.
  CLEAR iw_kna1.
  READ TABLE it_kna1 INTO iw_kna1 INDEX f_row-index.
  CHECK iw_kna1-kunnr IS NOT INITIAL.
  w_kunnr = iw_kna1-kunnr.
  SET PARAMETER ID 'KUN' FIELD w_kunnr.
  CALL TRANSACTION 'VD02' AND SKIP FIRST SCREEN.
  CLEAR it_kna1.
  SELECT *
    INTO CORRESPONDING FIELDS OF TABLE it_kna1
    FROM kna1
   WHERE kunnr IN s_kunnr.
  CALL METHOD w_grid->refresh_table_display.
ENDFORM.                    " F_DOUBLE_CLICK
*&---------------------------------------------------------------------*
*&      Form  F_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f_top_of_page  USING f_doc TYPE REF TO cl_dd_document.
  DATA: lw_back TYPE sdydo_key VALUE space.
  CALL METHOD f_doc->add_text
    EXPORTING
      text      = '01 资产减值准备'
      sap_style = 'HEADING'.                "大字黑体
  CALL METHOD f_doc->new_line.
  CALL METHOD f_doc->add_text
    EXPORTING
      text         = '02 固定资产折旧、油气资产折耗、生产性生物资产折旧'
      sap_emphasis = 'EMPHASIS'.               "斜体
  IF w_viewer IS INITIAL.
    CREATE OBJECT w_viewer
      EXPORTING
        parent = w_head.
  ENDIF.
  CALL FUNCTION 'REUSE_ALV_GRID_COMMENTARY_SET'
    EXPORTING
      document = w_doc
      bottom   = space.
  CALL METHOD w_doc->merge_document.
  CALL METHOD w_doc->set_document_background
    EXPORTING
      picture_id = lw_back.
  w_doc->html_control = w_viewer.
  CALL METHOD w_doc->display_document
    EXPORTING
      reuse_control = 'X'
      parent        = w_head.
ENDFORM.                    " F_TOP_OF_PAGE
9月28日

自定义f4_help并更新屏幕comment

REPORT zctest11 LINE-SIZE 255 MESSAGE-ID zzzzz01.
TYPES:
  BEGIN OF ty_kna1,
    kunnr TYPE kunnr,
    name1 TYPE name1_gp,
  END OF ty_kna1.
DATA: iw_kna1 TYPE ty_kna1,
      it_kna1 TYPE TABLE OF ty_kna1,
      iw_dfies TYPE dfies,
      it_dfies TYPE TABLE OF dfies,
      iw_dynp TYPE dynpread,
      it_dynp TYPE TABLE OF dynpread,
      iw_return TYPE ddshretval,
      it_return TYPE TABLE OF ddshretval.
DATA: w_position TYPE i,
      w_offset   TYPE i.
PARAMETERS: p_kunnr(10) TYPE c.
SELECTION-SCREEN COMMENT 50(40) w_name FOR FIELD p_kunnr.
INITIALIZATION.
  PERFORM f_set_dfies USING : 'KUNNR',
                              'NAME1'.
AT SELECTION-SCREEN.
  SELECT SINGLE name1
    INTO w_name
    FROM kna1
   WHERE kunnr = p_kunnr.
  CHECK sy-subrc <> 0.
  CLEAR w_name.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_kunnr.
  CLEAR: it_kna1,it_return.
  SELECT kunnr
         name1
    INTO CORRESPONDING FIELDS OF TABLE it_kna1
    FROM kna1.
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield               = 'KUNNR'
      dynpprog               = sy-repid
      dynpnr                 = sy-dynnr
      dynprofield            = 'P_KUNNR'
      value_org              = 'S'
    TABLES
      value_tab              = it_kna1
      field_tab              = it_dfies
      return_tab             = it_return
    EXCEPTIONS
      parameter_error        = 1
      no_values_found        = 2
      OTHERS                 = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  CHECK it_return IS NOT INITIAL.
  CLEAR: iw_dynp,iw_kna1,it_dynp.
  READ TABLE it_return INTO iw_return INDEX 1.

  READ TABLE it_kna1 INTO iw_kna1 WITH KEY kunnr = iw_return-fieldval.
                                                           "#EC *
  CHECK sy-subrc = 0.
  iw_dynp-fieldname  = 'P_KUNNR'.
  iw_dynp-fieldvalue = iw_return-fieldval.
  APPEND iw_dynp TO it_dynp.
  CLEAR iw_dynp.
  iw_dynp-fieldname  = 'W_NAME'.
  iw_dynp-fieldvalue = iw_kna1-name1.
  APPEND iw_dynp TO it_dynp.
  CALL FUNCTION 'DYNP_VALUES_UPDATE'
    EXPORTING
      dyname               = sy-repid
      dynumb               = sy-dynnr
    TABLES
      dynpfields           = it_dynp
    EXCEPTIONS
      invalid_abapworkarea = 1
      invalid_dynprofield  = 2
      invalid_dynproname   = 3
      invalid_dynpronummer = 4
      invalid_request      = 5
      no_fielddescription  = 6
      undefind_error       = 7
      OTHERS               = 8.
  CHECK sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*&---------------------------------------------------------------------*
*&      Form  f_set_dfies
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f_set_dfies  USING    value(u_fname) TYPE c.
  DATA: l_fname TYPE dfies-lfieldname.
  l_fname = u_fname.
  w_position = w_position + 1.
  CALL FUNCTION 'DDIF_FIELDINFO_GET'
    EXPORTING
      tabname              = 'KNA1'
      lfieldname           = l_fname
    IMPORTING
      dfies_wa             = iw_dfies
    EXCEPTIONS
      not_found            = 1
      internal_error       = 2
      OTHERS               = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  CLEAR iw_dfies-tabname.
  iw_dfies-position = w_position.
  iw_dfies-reptext  = iw_dfies-fieldtext.
  iw_dfies-offset   = w_offset.
  w_offset = w_offset + iw_dfies-intlen.
  APPEND iw_dfies TO it_dfies.
ENDFORM.                    " f_set_dfies

web dynpro初体验

http://help.sap.com/saphelp_erp2005/helpdata/en/79/002c2a0d43e645a39a89dd662b5f68/frameset.htm
今天小试了一把,结果不知道什么原因没法看到结果,不知道是单位的路由原因还是操作系统的原因,看来只有回家试试了,不知道28是不是bisis 7.0的,hope。
第一次操作的直观感受就是,和.net jbuilder等图形开发工具比起来还是麻烦了很多,不过想想毕竟人家不是专业搞这个的嘛。
单位不能搞,只能回家搞了,看来以后3c时间是越来越少了。。。
9月21日

在ABAP中使用simple transform创建XML文件

*&---------------------------------------------------------------------*
*& Report  ZCTEST06
*& 在strans中创建simple transform
*& 暂时没有找到创建xml component的方法
*&---------------------------------------------------------------------*
REPORT  zctest06.
DATA:
  BEGIN OF iw_line,
    line1(10) TYPE c,
    line2(10) TYPE c,
  END OF iw_line,
  BEGIN OF iw_head,
    h1(10) TYPE c,
    h1_attr(10) TYPE c,
    h2(10) TYPE c,
    line LIKE TABLE OF iw_line,
  END OF iw_head,
  it_head LIKE TABLE OF iw_head,
  BEGIN OF it_xml OCCURS 0,
    line(100) TYPE c,
  END OF it_xml.
DATA: w_xml TYPE string,
      w_len TYPE i,
      w_fname TYPE string.
PARAMETERS: p_file(128) TYPE c OBLIGATORY LOWER CASE..
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  PERFORM f_get_filename.
START-OF-SELECTION.
  CLEAR: iw_line,iw_head.
  iw_head-h1 = 'head-1-1'.
  iw_head-h2 = 'head-1-2'.
  iw_head-h1_attr = '100'.
  iw_line-line1 = 'line-1-1-1'.
  iw_line-line2 = 'line-1-2-1'.
  APPEND iw_line TO iw_head-line.
  CLEAR iw_line.
  iw_line-line1 = 'line-1-1-2'.
  iw_line-line2 = 'line-1-2-2'.
  APPEND iw_line TO iw_head-line.
  APPEND iw_head TO it_head.
  CLEAR: iw_line,iw_head.
  iw_head-h1 = 'head-2-1'.
  iw_head-h2 = 'head-2-2'.
  iw_head-h1_attr = '200'.
  iw_line-line1 = 'line-2-1-1'.
  iw_line-line2 = 'line-2-2-1'.
  APPEND iw_line TO iw_head-line.
  CLEAR iw_line.
  iw_line-line1 = 'line-2-1-2'.
  iw_line-line2 = 'line-2-2-2'.
  APPEND iw_line TO iw_head-line.
  CLEAR iw_line.
  iw_line-line1 = 'line-2-1-3'.
  iw_line-line2 = 'line-2-2-3'.
  APPEND iw_line TO iw_head-line.
  APPEND iw_head TO it_head.
  CALL TRANSFORMATION zctest01
    SOURCE root = it_head
    RESULT XML w_xml.
  CALL FUNCTION 'SCMS_STRING_TO_FTEXT'
    EXPORTING
      text      = w_xml
    IMPORTING
      length    = w_len
    TABLES
      ftext_tab = it_xml.
  w_fname = p_file.
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      filename                = w_fname
      filetype                = 'BIN'
    IMPORTING
      filelength              = w_len
    TABLES
      data_tab                = it_xml
    EXCEPTIONS
      file_write_error        = 1
      no_batch                = 2
      gui_refuse_filetransfer = 3
      invalid_type            = 4
      no_authority            = 5
      unknown_error           = 6
      header_not_allowed      = 7
      separator_not_allowed   = 8
      filesize_not_allowed    = 9
      header_too_long         = 10
      dp_error_create         = 11
      dp_error_send           = 12
      dp_error_write          = 13
      unknown_dp_error        = 14
      access_denied           = 15
      dp_out_of_memory        = 16
      disk_full               = 17
      dp_timeout              = 18
      file_not_found          = 19
      dataprovider_exception  = 20
      control_flush_error     = 21
      OTHERS                  = 22.
  IF sy-subrc = 0.
    WRITE 'OK'.
  ELSE.
    WRITE 'FALSE'.
  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  F_GET_FILENAME
*&---------------------------------------------------------------------*
FORM f_get_filename .
  DATA: l_rc    TYPE i,
        it_file TYPE filetable.
  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      initial_directory = 'D:\test'
      file_filter       = 'XML FIELS (*.xml)|*.xml|ALL FILES (*.*)|*.*'
    CHANGING
      file_table        = it_file
      rc                = l_rc.
  CHECK l_rc = 1.
  READ TABLE it_file INTO p_file INDEX 1.
ENDFORM.                    " F_GET_FILENAME

用cl_abap_typedescr、cl_abap_structdescr取得自定义工作区中的字段信息

*&---------------------------------------------------------------------*
*& Report  ZCTEST06
*&---------------------------------------------------------------------*
*& 主要使用cl_abap_typedescr=>describe_by_data方法
*& 和子类cl_abap_structdescr中的components属性
*& components包含以下信息
*&     length    长度
*&     decimals  小数
*&     type_kind 类型
*&     name      字段名
*&---------------------------------------------------------------------*
REPORT  zctest06.
TYPE-POOLS abap.
TYPES:
  BEGIN OF ty1,
    p1(10) TYPE c,
    p2(5)  TYPE n,
    p3(3)  TYPE p DECIMALS 2,
  END OF ty1.
DATA: iw1 TYPE ty1,
      iw_comp TYPE abap_compdescr,
      ref_descr TYPE REF TO cl_abap_structdescr.
ref_descr ?= cl_abap_typedescr=>describe_by_data( iw1 ).
LOOP AT ref_descr->components INTO iw_comp.
  WRITE : /1 iw_comp-length,
          15 iw_comp-decimals,
          30 iw_comp-type_kind,
          45 iw_comp-name.
  CLEAR iw_comp.
ENDLOOP.
9月18日

使用VIEW_MAINTENANCE_CALL维护视图

REPORT  zctest10.
TABLES t001b.
TYPES:
  BEGIN OF ty_mkoar,
    mkoar TYPE mkoar,
  END OF ty_mkoar.

DATA: it_vimsellist TYPE TABLE OF vimsellist,
      iw_vimsellist TYPE vimsellist,
      it_vimexclfun TYPE TABLE OF vimexclfun,
      iw_vimexclfun TYPE vimexclfun.
DATA: it_mkoar TYPE TABLE OF ty_mkoar,
      iw_mkoar TYPE ty_mkoar.
DATA: w_flg TYPE c.

PARAMETERS p_bukrs TYPE t001b-bukrs.

SELECT-OPTIONS: s_mkoar FOR t001b-mkoar.

START-OF-SELECTION.

  SELECT mkoar
    INTO CORRESPONDING FIELDS OF TABLE it_mkoar
    FROM t001b
   WHERE mkoar IN s_mkoar.

*编辑过滤数据条件
  iw_vimsellist-viewfield = 'BUKRS'.
  iw_vimsellist-operator  = 'EQ'.
  iw_vimsellist-and_or    = 'AND'.
  iw_vimsellist-value     = p_bukrs.
  APPEND iw_vimsellist TO it_vimsellist.

  LOOP AT it_mkoar INTO iw_mkoar.
    iw_vimsellist-viewfield = 'MKOAR'.
    iw_vimsellist-operator  = 'EQ'.
    iw_vimsellist-and_or    = 'OR'.
    iw_vimsellist-value     = iw_mkoar-mkoar.
    APPEND iw_vimsellist TO it_vimsellist.
    CLEAR iw_mkoar.
  ENDLOOP.
*屏蔽按钮(按T-CODE)
  iw_vimexclfun-function = 'NEWL'.
  APPEND iw_vimexclfun TO it_vimexclfun.
  iw_vimexclfun-function = 'KOPE'.
  APPEND iw_vimexclfun TO it_vimexclfun.
  iw_vimexclfun-function = 'DELE'.
  APPEND iw_vimexclfun TO it_vimexclfun.

  CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
    EXPORTING
      action                       = 'U'
      view_name                    = 'V_T001B'
    TABLES
      dba_sellist                  = it_vimsellist
      excl_cua_funct               = it_vimexclfun
    EXCEPTIONS
      client_reference             = 1
      foreign_lock                 = 2
      invalid_action               = 3
      no_clientindependent_auth    = 4
      no_database_function         = 5
      no_editor_function           = 6
      no_show_auth                 = 7
      no_tvdir_entry               = 8
      no_upd_auth                  = 9
      only_show_allowed            = 10
      system_failure               = 11
      unknown_field_in_dba_sellist = 12
      view_not_found               = 13
      maintenance_prohibited       = 14
      OTHERS                       = 15.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

 

使用SELECT_OPTIONS_RESTRICT对SELECT-OPTIONS进行限制

REPORT  zctest16.
TYPE-POOLS: sscr.
TABLES: t001,mara.
SELECT-OPTIONS: s_bukrs FOR t001-bukrs,
                s_matnr FOR mara-matnr.
INITIALIZATION.
* 控制用结构ls_restrict的做成
  DATA: liw_restrict TYPE sscr_restrict.
  DATA: liw_optlist  TYPE sscr_opt_list,
        liw_ass      TYPE sscr_ass.
* 自定义名称V1
  liw_optlist-name = 'V1'.
* 允许'='
  liw_optlist-options-eq = 'X'.
* 允许范围
  liw_optlist-options-bt = 'X'.
  APPEND  liw_optlist TO liw_restrict-opt_list_tab.
 
  CLEAR liw_optlist.
* 自定义名称V2
  liw_optlist-name = 'V2'.
* 允许'='
  liw_optlist-options-eq = 'X'.
  APPEND  liw_optlist TO liw_restrict-opt_list_tab.
  liw_ass-kind = 'S'.
  liw_ass-name = 'S_BUKRS'.
  liw_ass-sg_main = 'I'.
  liw_ass-op_main = 'V1'.
  APPEND  liw_ass TO liw_restrict-ass_tab.
  CLEAR liw_ass.
  liw_ass-kind = 'S'.
  liw_ass-name = 'S_MATNR'.
  liw_ass-sg_main = 'I'.
  liw_ass-op_main = 'V2'.
  APPEND  liw_ass TO liw_restrict-ass_tab.
  CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
    EXPORTING
      restriction            = liw_restrict
    EXCEPTIONS
      too_late               = 1
      repeated               = 2
      selopt_without_options = 3
      selopt_without_signs   = 4
      invalid_sign           = 5
      empty_option_list      = 6
      invalid_kind           = 7
      repeated_kind_a        = 8
      OTHERS                 = 9.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF. 
9月14日

在ABAP中使用XSLT创建XML文件

*&---------------------------------------------------------------------*
*& Report  ZCTEST14
*&
*&---------------------------------------------------------------------*
*& TEST FOR XSLT
*&
*&---------------------------------------------------------------------*
REPORT  zctest14.
DATA:
  BEGIN OF iw_head,
    user_no TYPE char10,
    user_name TYPE char50,
  END OF iw_head,
  BEGIN OF iw_payee,
    account_payee TYPE char10,
    account_name TYPE char20,
    address TYPE char20,
    bank_name TYPE char20,
    bank_code TYPE char20,
  END OF iw_payee,
  BEGIN OF iw_payment,
    payment_type TYPE char20,
    id TYPE char10,
    date TYPE char10,
    explain TYPE char20,
    amount TYPE char10,
    amount_bill TYPE char10,
    account TYPE char10,
    bank_account TYPE char10,
    payee LIKE TABLE OF iw_payee,
    remit_no TYPE char10,
    budget_no TYPE char10,
    erp_no TYPE char10,
  END OF iw_payment,
  BEGIN OF iw_payment_set,
    operator TYPE char100,
    payment LIKE TABLE OF iw_payment,
  END OF iw_payment_set,
  BEGIN OF iw_data,
    wst_exg_version TYPE char5,
    head LIKE TABLE OF iw_head,
    payment_set LIKE TABLE OF iw_payment_set,
  END OF iw_data,
  BEGIN OF it_xml OCCURS 0,
    line(100) TYPE c,
  END OF it_xml.
DATA: w_xml TYPE string,
      w_len TYPE i,
      w_fname TYPE string.

PARAMETERS: p_file(128) TYPE c OBLIGATORY LOWER CASE..
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  PERFORM f_get_filename.
START-OF-SELECTION.
* 装填数据
  CLEAR iw_data.
  iw_data-wst_exg_version = '300'.
  CLEAR iw_head.
  iw_head-user_no = '2'.
  iw_head-user_name = '客户名称(可空)'.
  APPEND iw_head TO iw_data-head.
  CLEAR iw_payment_set.
  CONCATENATE '<casher>录入人(可空)</casher>'
              '     <checker>复核人(可空)</checker>'
         INTO iw_payment_set-operator
    SEPARATED BY cl_abap_char_utilities=>cr_lf.
  CLEAR iw_payment.
  iw_payment-payment_type = 'auto|inner|outer'.
  iw_payment-id           = '124'.
  iw_payment-date         = '2006-03-10'.
  iw_payment-explain      = '导入的内部转帐指令'.
  iw_payment-amount       = '5000'.
  iw_payment-amount_bill  = ''.
  iw_payment-account      = '21201'.
  iw_payment-bank_account = '102200501'.
  CLEAR iw_payee.
  iw_payee-account_payee = '21202'.
  iw_payee-account_name  = '九恒星科技'.
  iw_payee-address       = ''.
  iw_payee-bank_name     = ''.
  iw_payee-bank_code     = ''.
  APPEND iw_payee TO iw_payment-payee.
  iw_payment-remit_no     = '01'.
  iw_payment-budget_no    = ''.
  iw_payment-erp_no       = ''.
  APPEND iw_payment TO iw_payment_set-payment.
  CLEAR iw_payment.
  iw_payment-payment_type = 'auto|inner|outer'.
  iw_payment-id           = '125'.
  iw_payment-date         = '2006-03-10'.
  iw_payment-explain      = '导入对外支付指令'.
  iw_payment-amount       = '2000'.
  iw_payment-amount_bill  = ''.
  iw_payment-account      = '21201'.
  iw_payment-bank_account = '102200501'.
  CLEAR iw_payee.
  iw_payee-account_payee = '10221205005'.
  iw_payee-account_name  = '集团外单位'.
  iw_payee-address       = '北京'.
  iw_payee-bank_name     = '中国工商银行'.
  iw_payee-bank_code     = '01'.
  APPEND iw_payee TO iw_payment-payee.
  iw_payment-remit_no     = '01'.
  iw_payment-budget_no    = ''.
  iw_payment-erp_no       = 'ERP002'.
  APPEND iw_payment TO iw_payment_set-payment.
  APPEND iw_payment_set TO iw_data-payment_set.
* call transformation
  CALL TRANSFORMATION zctest02
    SOURCE data = iw_data
    RESULT XML w_xml.

* 表中的数据<>在传到STRANS中时会自动转换为'&lt;' '&gt;',所以在这里转回来
  REPLACE ALL OCCURRENCES OF '&lt;' IN w_xml WITH '<'.
  REPLACE ALL OCCURRENCES OF '&gt;' IN w_xml WITH '>'.
 
  CALL FUNCTION 'SCMS_STRING_TO_FTEXT'
    EXPORTING
      text      = w_xml
    IMPORTING
      length    = w_len
    TABLES
      ftext_tab = it_xml.
  w_fname = p_file.
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      filename                        = w_fname
      filetype                        = 'BIN'
    IMPORTING
      filelength                      = w_len
    TABLES
      data_tab                        = it_xml
    EXCEPTIONS
      file_write_error                = 1
      no_batch                        = 2
      gui_refuse_filetransfer         = 3
      invalid_type                    = 4
      no_authority                    = 5
      unknown_error                   = 6
      header_not_allowed              = 7
      separator_not_allowed           = 8
      filesize_not_allowed            = 9
      header_too_long                 = 10
      dp_error_create                 = 11
      dp_error_send                   = 12
      dp_error_write                  = 13
      unknown_dp_error                = 14
      access_denied                   = 15
      dp_out_of_memory                = 16
      disk_full                       = 17
      dp_timeout                      = 18
      file_not_found                  = 19
      dataprovider_exception          = 20
      control_flush_error             = 21
      OTHERS                          = 22.
  IF sy-subrc = 0.
    WRITE 'OK'.
  ELSE.
    WRITE 'FALSE'.
  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  F_GET_FILENAME
*&---------------------------------------------------------------------*
FORM f_get_filename .
  DATA: l_rc    TYPE i,
        it_file TYPE filetable,
        l_obj TYPE REF TO cl_gui_frontend_services.
  CREATE OBJECT l_obj.
  CALL METHOD l_obj->file_open_dialog
    EXPORTING
      initial_directory = 'D:\test'
    CHANGING
      file_table        = it_file
      rc                = l_rc.
  CHECK l_rc = 1.
  READ TABLE it_file INTO p_file INDEX 1.
ENDFORM.                    " F_GET_FILENAME 
9月9日

使用if_ixml 、if_ixml_document 、if_ixml_element创建本地xml文件

*终于知道怎么创建comment了,原来有个if_ixml_comment
*xml的结构: if_ixml > if_ixml_document > if_ixml_element
*                                                  > if_ixml_comment
*if_ixml_document、if_ixml_element、if_ixml_comment都包含属性 if_ixml_node
 
REPORT  zctest13.
DATA:
      it_file TYPE filetable,
      it_dlines TYPE dcxmllines.
DATA: BEGIN OF iw_xml,
        line LIKE LINE OF it_dlines,
      END OF iw_xml,
      it_xml LIKE TABLE OF iw_xml.
DATA:
  w_wst TYPE REF TO if_ixml_element,
  w_head TYPE REF TO if_ixml_element,
  w_paymentset TYPE REF TO if_ixml_element,
  w_payment TYPE REF TO if_ixml_element,
  w_operator TYPE REF TO if_ixml_element,
  w_payee TYPE REF TO if_ixml_element,
  w_comment TYPE REF TO if_ixml_comment,
  w_attribute TYPE REF TO if_ixml_attribute,
  w_document TYPE REF TO if_ixml_document,
  w_ixml TYPE REF TO if_ixml,
  w_rval TYPE i,
  w_size TYPE i,
  w_fname TYPE string,
  w_rc TYPE sy-subrc.
PARAMETERS: p_file(128) TYPE c OBLIGATORY LOWER CASE.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      file_filter             = '*.XML,*.xml'
      initial_directory       = 'D:\test'
    CHANGING
      file_table              = it_file
      rc                      = w_rc
    EXCEPTIONS
      file_open_dialog_failed = 1
      cntl_error              = 2
      error_no_gui            = 3
      not_supported_by_gui    = 4
      OTHERS                  = 5.
  CHECK sy-subrc = 0.
  READ TABLE it_file INTO p_file INDEX 1.
START-OF-SELECTION.
  w_fname = p_file.
  CLASS cl_ixml DEFINITION LOAD.
  w_ixml = cl_ixml=>create( ).
  CHECK NOT w_ixml IS INITIAL.
  w_document = w_ixml->create_document( ).
  w_wst = w_document->create_element( name = 'wst-exg').
  CALL METHOD w_wst->set_attribute
    EXPORTING
      name  = 'version'
      value = '300'
    RECEIVING
      rval  = w_rc.
  PERFORM f_add_element USING 'head'
                        CHANGING w_wst w_head.
  PERFORM f_element_add USING 'user-no'
                              '2'
                     CHANGING w_head.
  PERFORM f_element_add USING 'user-name'
                              '客户名称'
                     CHANGING w_head.
  PERFORM f_add_element USING 'payment-set'
                     CHANGING w_wst w_paymentset.
  PERFORM f_add_element USING 'operator'
                     CHANGING w_paymentset w_operator.
  w_comment = w_document->create_comment( 'this is a comment').
  CALL METHOD w_operator->append_child
    EXPORTING
      new_child = w_comment
    RECEIVING
      rval      = w_rval.
  PERFORM f_add_element USING 'payment'
                     CHANGING w_paymentset w_payment.
  CALL METHOD w_payment->set_attribute
    EXPORTING
      name  = 'type'
      value = 'auto|inner|outer'
    RECEIVING
      rval  = w_rc.
  PERFORM f_element_add USING 'id'
                              '124'
                     CHANGING w_payment.
  PERFORM f_element_add USING 'date'
                              '2006-03-10'
                     CHANGING w_payment.
  PERFORM f_element_add USING 'explain'
                              '导入的内部转帐命令'
                     CHANGING w_payment.
  PERFORM f_element_add USING 'amount'
                              '5000'
                     CHANGING w_payment.
  PERFORM f_element_add USING 'amount-bill'
                              space
                     CHANGING w_payment.
  PERFORM f_element_add USING 'account'
                              '21201'
                     CHANGING w_payment.
  PERFORM f_element_add USING 'bank-account'
                              '102200501'
                     CHANGING w_payment.
  PERFORM f_add_element USING 'payee'
                     CHANGING w_payment w_payee.
  PERFORM f_element_add USING 'account-payee'
                              '21202'
                     CHANGING w_payee.
  PERFORM f_element_add USING 'account-name'
                              '九恒星科技'
                     CHANGING w_payee.
  PERFORM f_element_add USING 'address'
                              space
                     CHANGING w_payee.
  PERFORM f_element_add USING 'band-name'
                              space
                     CHANGING w_payee.
  PERFORM f_element_add USING 'bank-code'
                              space
                     CHANGING w_payee.
  PERFORM f_element_add USING 'remit-no'
                              '01'
                     CHANGING w_payment.
  PERFORM f_element_add USING 'budget-no'
                              space
                     CHANGING w_payment.
  PERFORM f_element_add USING 'ERP-no'
                              space
                     CHANGING w_payment.
  w_rc = w_document->append_child( new_child = w_wst ).
  IF w_rc IS NOT INITIAL.
    WRITE 'ERROR 2'.
    RETURN.
  ENDIF.
  CALL FUNCTION 'SDIXML_DOM_TO_XML'
    EXPORTING
      document            = w_document
*   PRETTY_PRINT        = ' '
    IMPORTING
*   XML_AS_STRING       =
      size                = w_size
    TABLES
      xml_as_table        = it_dlines
    EXCEPTIONS
      no_document         = 1
      OTHERS              = 2.
  IF sy-subrc <> 0.
    WRITE 'ERROR 3'.
    RETURN.
  ENDIF.
  LOOP AT it_dlines INTO iw_xml-line.
    APPEND iw_xml TO it_xml.
    CLEAR iw_xml.
  ENDLOOP.
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      bin_filesize                    = w_size
      filename                        = w_fname
      filetype                        = 'BIN'
*   APPEND                          = ' '
*   WRITE_FIELD_SEPARATOR           = ' '
*   HEADER                          = '00'
*   TRUNC_TRAILING_BLANKS           = ' '
*   WRITE_LF                        = 'X'
*   COL_SELECT                      = ' '
*   COL_SELECT_MASK                 = ' '
*   DAT_MODE                        = ' '
*   CONFIRM_OVERWRITE               = ' '
*   NO_AUTH_CHECK                   = ' '
*   CODEPAGE                        = ' '
*   IGNORE_CERR                     = ABAP_TRUE
*   REPLACEMENT                     = '#'
*   WRITE_BOM                       = ' '
*   TRUNC_TRAILING_BLANKS_EOL       = 'X'
*   WK1_N_FORMAT                    = ' '
*   WK1_N_SIZE                      = ' '
*   WK1_T_FORMAT                    = ' '
*   WK1_T_SIZE                      = ' '
* IMPORTING
*   FILELENGTH                      =
    TABLES
      data_tab                        = it_xml
*   FIELDNAMES                      =
    EXCEPTIONS
      file_write_error                = 1
      no_batch                        = 2
      gui_refuse_filetransfer         = 3
      invalid_type                    = 4
      no_authority                    = 5
      unknown_error                   = 6
      header_not_allowed              = 7
      separator_not_allowed           = 8
      filesize_not_allowed            = 9
      header_too_long                 = 10
      dp_error_create                 = 11
      dp_error_send                   = 12
      dp_error_write                  = 13
      unknown_dp_error                = 14
      access_denied                   = 15
      dp_out_of_memory                = 16
      disk_full                       = 17
      dp_timeout                      = 18
      file_not_found                  = 19
      dataprovider_exception          = 20
      control_flush_error             = 21
      OTHERS                          = 22.
  IF sy-subrc <> 0.
    WRITE 'ERROR 4'.
  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  f_element_add
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f_element_add USING f_name TYPE string
                         f_val  TYPE string
                CHANGING f_elem TYPE REF TO if_ixml_element.
  DATA: lw_docu TYPE REF TO if_ixml_document,
        lw_elem TYPE REF TO if_ixml_element,
        lw_rval TYPE i.
  lw_docu = w_document.
  lw_elem = lw_docu->create_element( f_name ).
  CALL METHOD lw_elem->set_value
    EXPORTING
      value = f_val
    RECEIVING
      rval  = w_rval.
  CALL METHOD f_elem->append_child
    EXPORTING
      new_child = lw_elem
    RECEIVING
      rval      = lw_rval.
ENDFORM.                    " f_element_add
*&---------------------------------------------------------------------*
*&      Form  f_add_element
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f_add_element  USING    f_name
                    CHANGING f_father TYPE REF TO if_ixml_element
                             f_son    TYPE REF TO if_ixml_element.
  DATA: lw_docu TYPE REF TO if_ixml_document,
        lw_rval TYPE i.
  IF f_son IS INITIAL.
    lw_docu = w_document.
    f_son = lw_docu->create_element( f_name ).
  ENDIF.
  CALL METHOD f_father->append_child
    EXPORTING
      new_child = f_son
    RECEIVING
      rval      = lw_rval.
ENDFORM.                    " f_add_element