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并更新屏幕commentREPORT 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. DATA: it_vimsellist TYPE TABLE OF vimsellist, PARAMETERS p_bukrs TYPE t001b-bukrs. SELECT-OPTIONS: s_mkoar FOR t001b-mkoar. START-OF-SELECTION. SELECT mkoar *编辑过滤数据条件 LOOP AT it_mkoar INTO iw_mkoar. CALL FUNCTION 'VIEW_MAINTENANCE_CALL' 使用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中时会自动转换为'<' '>',所以在这里转回来 REPLACE ALL OCCURRENCES OF '<' IN w_xml WITH '<'. REPLACE ALL OCCURRENCES OF '>' 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 |
|
|