BAPI创建CLASS和CHARACTERISTICS

REPORT zcmm_00004 MESSAGE-ID 00 .
??
??
??INCLUDE ole2incl.
??
??DATA : BEGIN OF itab_sheet OCCURS 0 ,
?? sheet_name(20),
?? max_row TYPE i,
?? max_col TYPE i,
?? END OF itab_sheet.
??
??DATA : BEGIN OF sheet_line,
?? name(30),
?? changenumber(12),
?? validfrom(8),
?? status(1),
?? datatype(4),
?? numberofchars(5),
?? valueassignment(1),
?? language(2),
?? description(30),
?? value(20),
?? valuelanguage(2),
?? valuedescription(30),
?? END OF sheet_line,
?? itab_characteristics LIKE TABLE OF sheet_line WITH HEADER LINE.
??DATA : BEGIN OF class_line,
?? classnum(18),
?? classtype(3),
?? changenum(12),
?? classtpfr(8),
?? language(2),
?? desc(40),
?? status(1),
?? validfr(8),
?? validto(8),
?? charact(30),
?? END OF class_line,
?? itab_class LIKE TABLE OF class_line WITH HEADER LINE.
??DATA : BEGIN OF table_line.
?? INCLUDE STRUCTURE alsmex_tabline .
??DATA : END OF table_line.
??
??DATA simple_tab LIKE TABLE OF table_line.
??
??
??DATA : charactdetail LIKE TABLE OF bapicharactdetail WITH HEADER LINE,
?? changenumber LIKE bapicharactkey-changenum,
?? charactdescr TYPE TABLE OF bapicharactdescr WITH HEADER LINE,
?? charactvalueschar TYPE TABLE OF bapicharactvalueschar WITH HEADER
?? LINE,
?? charactvaluesdescr TYPE TABLE OF bapicharactvaluesdescr WITH
??HEADER LINE,
?? valid_date TYPE bapicharactkey-keydate,
??return TYPE TABLE OF bapiret2 WITH HEADER LINE.
??
??DATA : classnum TYPE bapi_class_key-classnum,
?? classtype TYPE bapi_class_key-classtype,
?? changenum TYPE bapi1003_key-changenumber,
?? keywordsold LIKE TABLE OF bapi1003_catch_r WITH HEADER LINE,
?? charactsold LIKE TABLE OF bapi1003_charact_r WITH HEADER
??LINE,
?? charactvalueold LIKE TABLE OF bapi1003_char_val_r WITH
??HEADER LINE,
?? keywords LIKE TABLE OF bapi1003_catch WITH HEADER LINE,
?? characts LIKE TABLE OF bapi1003_charact WITH HEADER LINE,
?? charactsnew LIKE TABLE OF bapi1003_charact_new WITH HEADER LINE
??,
?? keywordsnew LIKE TABLE OF bapi1003_catch_new WITH HEADER LINE,
?? basicdata LIKE TABLE OF bapi1003_basic WITH HEADER LINE,
?? basicdatanew LIKE TABLE OF bapi1003_basic_new WITH HEADER LINE.
??DATA : sheetname TYPE rlgrap-filename ,
?? begin_col TYPE i VALUE '1',
?? begin_row TYPE i VALUE '11'.
??
??*-----------------------------------------------------------------------
??* selection screen
??*-----------------------------------------------------------------------
??PARAMETERS :
?? charc_c RADIOBUTTON GROUP rad1 ,
?? charc_m RADIOBUTTON GROUP rad1 ,
?? class_c RADIOBUTTON GROUP rad1 ,
?? class_m RADIOBUTTON GROUP rad1 ,
?? filename TYPE rlgrap-filename .
??
??*-----------------------------------------------------------------------
??* initial screen
??*-----------------------------------------------------------------------
??INITIALIZATION.
??
?? filename = 'c:\MM_CLASS_UPLOAD_TEMPLE.XLS'.
??
??
??
??START-OF-SELECTION.
??*-----------------------------------------------------------------------
??* main logic for create/modify characteristics/class
??*-----------------------------------------------------------------------
??
?? PERFORM. get_sheets_desc USING filename.
??
?? IF charc_c = 'X' .
?? sheetname = 'MM_CHARACTERISTICS'.
?? PERFORM. whether_have_sheet USING sheetname.
?? PERFORM. upload_excel TABLES itab_characteristics USING sheetname
??begin_col begin_row.
?? PERFORM. create_character .
?? ENDIF.
?? IF charc_m = 'X' .
?? sheetname = 'MM_CHARACTERISTICS'.
?? PERFORM. whether_have_sheet USING sheetname.
?? PERFORM. upload_excel TABLES itab_characteristics USING sheetname
??begin_col begin_row.
?? PERFORM. modify_character .
?? ENDIF.
?? IF class_c = 'X'.
?? sheetname = 'MM_CLASS' .
?? PERFORM. whether_have_sheet USING sheetname.
?? PERFORM. upload_excel TABLES itab_class USING sheetname begin_col
??begin_row .
?? PERFORM. create_class .
?? ENDIF.
?? IF class_m = 'X'.
?? sheetname = 'MM_CLASS' .
?? PERFORM. whether_have_sheet USING sheetname.
?? PERFORM. upload_excel TABLES itab_class USING sheetname begin_col
??begin_row .
?? PERFORM. modify_class .
?? ENDIF.
??
??END-OF-SELECTION.
??*&--------------------------------------------------------------------*
??*& Form. whether_have_sheet
??*&--------------------------------------------------------------------*
??* text
??*---------------------------------------------------------------------*
??* --&gtSHEETNAME text
??*---------------------------------------------------------------------*
??FORM. whether_have_sheet USING sheetname .
?? READ TABLE itab_sheet WITH KEY sheet_name = sheetname.
?? IF sy-subrc <> 0 .
?? MESSAGE s001(00) WITH sheetname ' does not exist'.
?? STOP.
?? ENDIF.
??ENDFORM. "whether_have_sheet
??*&--------------------------------------------------------------------*
??*& Form. create_class
??*&--------------------------------------------------------------------*
??* text
??*---------------------------------------------------------------------*
??FORM. create_class .
?? SORT itab_class BY classnum.
?? LOOP AT itab_class .
??
?? classnum = itab_class-classnum.
?? classtype = itab_class-classtype.
?? changenum = itab_class-changenum.
?? basicdata-status = itab_class-status.
?? basicdata-valid_from = itab_class-validfr .
?? basicdata-valid_to = itab_class-validto .
??
?? keywords-langu = itab_class-language.
?? keywords-catchword = itab_class-desc.
?? APPEND keywords.
??
?? characts-name_char = itab_class-charact .
?? APPEND characts.
?? AT END OF classnum .
?? CALL FUNCTION 'BAPI_CLASS_CREATE'
?? EXPORTING
?? classnumnew = classnum
?? classtypenew = classtype
?? classbasicdata = basicdata
?? TABLES
?? classdescriptions = keywords
?? classcharacteristics = characts
?? return = return.
?? ENDAT.
?? LOOP AT return .
?? IF return-type = 'I' AND return-number = '813'.
?? CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
?? FORMAT COLOR COL_KEY .
?? WRITE : / return-message.
?? ENDIF.
?? IF return-type = 'S' OR return-type = 'E'.
?? FORMAT COLOR COL_GROUP.
?? WRITE : / return-message.
?? ENDIF.
?? ENDLOOP.
?? ENDLOOP.
??ENDFORM. "create_class
??*&--------------------------------------------------------------------*
??*& Form. modify_class
??*&--------------------------------------------------------------------*
??* text
??*---------------------------------------------------------------------*
??FORM. modify_class .
??
?? SORT itab_class BY classnum.
?? LOOP AT itab_class .
??
?? classnum = itab_class-classnum.
?? classtype = itab_class-classtype.
?? changenum = itab_class-changenum.
?? basicdata-status = itab_class-status.
?? basicdata-valid_from = itab_class-validfr .
?? basicdata-valid_to = itab_class-validto .
??
?? basicdatanew-status = itab_class-status.
?? basicdatanew-valid_from = itab_class-validfr .
?? basicdatanew-valid_to = itab_class-validto .
??
??
??
?? keywordsnew-langu = itab_class-language.
?? keywordsnew-langu_iso = itab_class-language.
?? keywordsnew-catchword = itab_class-desc.
?? APPEND keywordsnew.
??
?? charactsnew-name_char = itab_class-charact .
?? APPEND charactsnew.
??
?? AT END OF classnum .
??
??* first ,get class detail.
?? CALL FUNCTION 'BAPI_CLASS_GETDETAIL'
?? EXPORTING
?? classtype = classtype
?? classnum = classnum
?? IMPORTING
?? classbasicdata = basicdata
?? return = return
?? TABLES
?? classdescriptions = keywordsold
?? classcharacteristics = charactsold
?? classcharvalues = charactvalueold.
??
?? IF return-type <> 'E' .
??
?? LOOP AT keywordsold.
?? MOVE-CORRESPONDING keywordsold TO keywords.
?? APPEND keywords.
?? ENDLOOP.
?? LOOP AT charactsold .
?? MOVE-CORRESPONDING charactsold TO characts.
?? APPEND characts.
?? ENDLOOP.
??
?? CALL FUNCTION 'BAPI_CLASS_CHANGE'
?? EXPORTING
?? classnum = classnum
?? classtype = classtype
?? classbasicdata = basicdata
?? classbasicdatanew = basicdatanew
?? TABLES
?? classdescriptions = keywords
?? classdescriptionsnew = keywordsnew
?? classcharacteristics = characts
?? classcharacteristicsnew = charactsnew
?? return = return.
?? LOOP AT return .
?? IF return-type = 'I' AND return-number = '814'.
?? CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
?? FORMAT COLOR COL_KEY .
?? WRITE : / return-message.
?? ENDIF.
?? IF return-type <> 'I'.
?? FORMAT COLOR COL_GROUP.
?? WRITE : / return-message.
?? ENDIF.
?? ENDLOOP.
?? ELSE.
?? FORMAT COLOR COL_GROUP.
?? WRITE : / return-message.
?? ENDIF.
?? ENDAT.
?? REFRESH keywords.
?? REFRESH keywordsnew.
?? REFRESH characts.
?? ENDLOOP.
??ENDFORM. . "modify_class
??*&--------------------------------------------------------------------*
??*& Form. create_character
??*&--------------------------------------------------------------------*
??* text
??*---------------------------------------------------------------------*
??FORM. create_character .
?? SORT itab_characteristics BY name.
?? LOOP AT itab_characteristics .
?? charactdetail-charact_name = itab_characteristics-name.
?? charactdetail-data_type = itab_characteristics-datatype.
?? charactdetail-length = itab_characteristics-numberofchars.
?? charactdetail-status = itab_characteristics-status.
?? charactdetail-value_assignment =
??itab_characteristics-valueassignment.
?? changenumber = itab_characteristics-changenumber.
?? valid_date = itab_characteristics-validfrom.
??
?? charactdescr-language_int = itab_characteristics-language.
?? charactdescr-language_iso = itab_characteristics-language.
?? charactdescr-description = itab_characteristics-description.
?? APPEND charactdescr.
??
?? charactvalueschar-value_char = itab_characteristics-value.
?? APPEND charactvalueschar.
??
?? charactvaluesdescr-language_int = itab_characteristics-valuelanguage
??.
?? charactvaluesdescr-language_iso = itab_characteristics-valuelanguage
??.
?? charactvaluesdescr-value_char = itab_characteristics-value.
?? charactvaluesdescr-description =
??itab_characteristics-valuedescription.
?? APPEND charactvaluesdescr.
??
?? AT END OF name.
?? CALL FUNCTION 'BAPI_CHARACT_CREATE'
?? EXPORTING
?? charactdetail = charactdetail
?? changenumber = changenumber
?? keydate = valid_date
?? TABLES
?? charactdescr = charactdescr
?? charactvalueschar = charactvalueschar
?? charactvaluesdescr = charactvaluesdescr
?? return = return.
??
?? LOOP AT return .
?? IF return-type = 'I' AND return-number = '021'.
?? CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
?? FORMAT COLOR COL_KEY .
?? WRITE : / return-message.
?? ENDIF.
?? IF return-type = 'S' OR return-type = 'E'.
?? FORMAT COLOR COL_GROUP.
?? WRITE : / return-message.
?? ENDIF.
??
?? ENDLOOP.
?? REFRESH charactdetail.
?? REFRESH charactdescr.
?? REFRESH charactvalueschar.
?? REFRESH charactvaluesdescr.
?? ENDAT.
?? ENDLOOP.
??
??
??
??
??ENDFORM. "create_character
??*&--------------------------------------------------------------------*
??*& Form. modify_character
??*&--------------------------------------------------------------------*
??* text
??*---------------------------------------------------------------------*
??FORM. modify_character .
?? DATA charactname TYPE bapicharactkey-charactname.
?? SORT itab_characteristics BY name.
?? LOOP AT itab_characteristics .
?? charactdetail-charact_name = itab_characteristics-name.
?? charactdetail-data_type = itab_characteristics-datatype.
?? charactdetail-length = itab_characteristics-numberofchars.
?? charactdetail-status = itab_characteristics-status.
?? charactdetail-value_assignment =
??itab_characteristics-valueassignment.
?? APPEND charactdetail.
??
??
?? charactdescr-language_int = itab_characteristics-language.
?? charactdescr-language_iso = itab_characteristics-language.
?? charactdescr-description = itab_characteristics-description.
?? APPEND charactdescr.
??
?? charactvalueschar-value_char = itab_characteristics-value.
?? APPEND charactvalueschar.
??
?? charactvaluesdescr-language_int = itab_characteristics-valuelanguage
??.
?? charactvaluesdescr-language_iso = itab_characteristics-valuelanguage
??.
?? charactvaluesdescr-value_char = itab_characteristics-value.
?? charactvaluesdescr-description =
??itab_characteristics-valuedescription.
?? APPEND charactvaluesdescr.
?? AT END OF name .
?? charactname = itab_characteristics-name.
?? CALL FUNCTION 'BAPI_CHARACT_CHANGE'
?? EXPORTING
?? charactname = charactname
?? TABLES
?? charactdetailnew = charactdetail
?? charactvaluescharnew = charactvalueschar
?? charactdescrnew = charactdescr
?? charactvaluesdescrnew = charactvaluesdescr
?? return = return.
??
?? LOOP AT return .
?? IF return-type = 'I' AND return-number = '022'.
?? CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
?? FORMAT COLOR COL_KEY .
?? WRITE : / return-message.
?? ENDIF.
??
?? IF return-type = 'E' OR return-type = 'S'.
?? FORMAT COLOR COL_GROUP.
?? WRITE : / return-message.
?? ENDIF.
??
?? ENDLOOP.
?? REFRESH charactdetail.
?? REFRESH charactdescr.
?? REFRESH charactvalueschar.
?? REFRESH charactvaluesdescr.
?? ENDAT.
??
?? ENDLOOP.
??
??ENDFORM. "modify_character
??*&--------------------------------------------------------------------*
??*& Form. upload_excel
??*&--------------------------------------------------------------------*
??* text
??*---------------------------------------------------------------------*
??FORM. upload_excel TABLES itab USING sheetname begin_col begin_row .
?? READ TABLE itab_sheet WITH KEY sheet_name = sheetname.
?? IF sy-subrc = 0 .
?? CALL FUNCTION 'Z_ALSM_EXCEL_TO_INTERNAL_TABLE'
?? EXPORTING
?? filename = filename
?? z_shname = sheetname
?? i_begin_col = begin_col
?? i_begin_row = begin_row
?? i_end_col = itab_sheet-max_col
?? i_end_row = itab_sheet-max_row
?? TABLES
?? intern = simple_tab.
??
?? PERFORM. cnvt_irregual_table TABLES itab simple_tab.
??* LOOP AT itab.
??* WRITE : / itab.
??* ENDLOOP.
?? ENDIF.
??ENDFORM. "upload_excel
??
??*&--------------------------------------------------------------------*
??*& Form. cnvt_irregual_table
??*&--------------------------------------------------------------------*
??* text
??*---------------------------------------------------------------------*
??* --&gtTB text
??* --&gtEXCEL_TB text
??*---------------------------------------------------------------------*
??FORM. cnvt_irregual_table TABLES tb excel_tb .
?? DATA : len TYPE i,
?? col TYPE i,
?? offset TYPE i,
?? value TYPE string.
?? DATA : BEGIN OF attri_line,
?? colnumber TYPE i,
?? collength TYPE i,
?? END OF attri_line,
?? col_attri LIKE TABLE OF attri_line WITH HEADER LINE.
?? DATA : flg TYPE c VALUE 'X'.
??
?? FIELD-SYMBOLS TYPE ANY.
?? FIELD-SYMBOLS TYPE ANY.
?? FIELD-SYMBOLS TYPE ANY .
?? ASSIGN COMPONENT 1 OF STRUCTURE excel_tb TO .
?? ASSIGN COMPONENT 2 OF STRUCTURE excel_tb TO .
??*------------------------------------------------------------------
??* get colume length
??*------------------------------------------------------------------
?? col_attri-colnumber = 1.
?? WHILE flg = 'X' .
?? ASSIGN COMPONENT col_attri-colnumber OF STRUCTURE tb TO .
?? IF sy-subrc = 0 .
?? DESCRIBE FIELD LENGTH len IN CHARACTER MODE .
?? col_attri-collength = len .
?? APPEND col_attri.
?? col_attri-colnumber = col_attri-colnumber + 1 .
?? ELSE.
?? flg = space .
?? ENDIF.
?? ENDWHILE.
??
??*----------------------------------------------------------------
??* assign col row value to innternal table
??*----------------------------------------------------------------
?? SORT excel_tb BY .
?? LOOP AT excel_tb.
??
?? ASSIGN COMPONENT 2 OF STRUCTURE excel_tb TO .
?? col = .
?? ASSIGN COMPONENT 3 OF STRUCTURE excel_tb TO .
?? value = .
??
?? READ TABLE col_attri WITH KEY colnumber = col .
?? IF sy-subrc = 0 .
?? LOOP AT col_attri WHERE colnumber < col.
?? ffset = col_attri-collength + offset.
?? ENDLOOP.
?? WRITE value TO tb+offset.
?? ffset = 0 .
?? ENDIF.
??
?? ASSIGN COMPONENT col OF STRUCTURE tb TO .
?? IF sy-subrc = 0 .
?? DESCRIBE FIELD LENGTH len IN CHARACTER MODE .
?? ELSE.
?? IF NOT tb IS INITIAL.
?? APPEND tb.
?? ENDIF.
?? CLEAR tb.
?? CLEAR offset .
?? CLEAR col.
?? CLEAR len.
?? CONTINUE.
?? ENDIF.
?? ASSIGN COMPONENT 1 OF STRUCTURE excel_tb TO .
?? AT END OF .
?? APPEND tb.
?? CLEAR tb.
?? CLEAR offset .
?? CLEAR col.
?? CLEAR len.
?? ENDAT.
?? ENDLOOP.
??ENDFORM. "cnvt_irregual_table
??
??
??*&--------------------------------------------------------------------*
??*& Form. get_sheets_desc
??*&--------------------------------------------------------------------*
??* text
??*---------------------------------------------------------------------*
??* --&gtFILENAME text
??*---------------------------------------------------------------------*
??FORM. get_sheets_desc USING filename .
?? DATA excel TYPE ole2_object.
?? DATA books TYPE ole2_object.
?? DATA book TYPE ole2_object.
?? DATA application TYPE ole2_object.
?? DATA sheets TYPE ole2_object.
?? DATA sheet TYPE ole2_object.
?? DATA sheet_name TYPE string.
?? DATA i_sheets TYPE i.
?? DATA nrows TYPE i.
?? DATA cells TYPE ole2_object.
?? DATA specialcells TYPE ole2_object.
?? FIELD-SYMBOLS:
?? TYPE ANY.
??
?? DEFINE m_message.
?? case sy-subrc.
?? when 0.
?? when 1.
?? message id sy-msgid type sy-msgty number sy-msgno
?? with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
?? stop.
?? when others.
?? message s000 with 'Errors occur on Excel'.
?? stop.
?? endcase.
?? END-OF-DEFINITION.
??* open file in Excel
??
?? IF excel-header = space OR excel-handle = -1.
?? CREATE OBJECT excel 'Excel.Application'.
?? m_message.
?? ENDIF.
??* SET PROPERTY OF excel 'Visible' = 1.
?? m_message.
??
?? CALL METHOD OF excel 'Workbooks' = books .
?? m_message.
??
?? CALL METHOD OF books 'open'
?? EXPORTING
?? #1 = filename.
??* m_message.
?? IF sy-subrc <> 0 .
??
?? MESSAGE s368(00) WITH 'Could not open file:' filename.
?? STOP.
?? ENDIF.
??
?? GET PROPERTY OF books 'application' = application.
?? m_message.
??
?? GET PROPERTY OF application 'sheets' = sheets.
?? m_message.
??
??
?? GET PROPERTY OF sheets 'Count' = i_sheets.
??
?? WHILE i_sheets GE 1 .
?? GET PROPERTY OF sheets 'Item' = sheet
?? exporting #1 = i_sheets.
?? m_message .
?? GET PROPERTY OF sheet 'Name' = sheet_name.
?? m_message .
??
?? GET PROPERTY OF sheet 'Cells' = cells.
?? m_message .
??
?? CALL METHOD OF cells 'SpecialCells' = specialcells
?? EXPORTING
?? #1 = 11.
?? m_message .
?? GET PROPERTY OF specialcells 'Row' = itab_sheet-max_row.
?? m_message .
?? GET PROPERTY OF specialcells 'Column' = itab_sheet-max_col.
?? m_message .
?? i_sheets = i_sheets - 1 .
?? itab_sheet-sheet_name = sheet_name.
?? APPEND itab_sheet.
?? ENDWHILE.
??* close excel process
?? CALL METHOD OF excel 'quit'.
??
?? m_message.
??* LOOP AT data_tab.
??* ASSIGN COMPONENT sy-tabix OF STRUCTURE data_tab TO .
??* WRITE : / .
??* ENDLOOP.
??
?? FREE excel .
?? FREE books .
?? FREE book .
?? FREE application .
?? FREE sheets.
?? FREE sheet .
??
??ENDFORM. "get_sheets_desc

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/166523/viewspace-343063/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/166523/viewspace-343063/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值