ct04特性批量导入、特性长文本批量导入(BAPI_CHARACT_CREATE、BAPI_CHARACT_CHANGE、BAPI_CHARACT_ADDLONGTEXT)
2016-05-30 18:58
344 查看
*&---------------------------------------------------------------------*
*& REPORT ZPP_CHARACT_IMPORT
*&
*& REPORTNAME :特性值批导程序
*&---------------------------------------------------------------------*
*& CREATED BY : LIUXINYUAN
*& CREATED DATE : 2016-05-25
*&---------------------------------------------------------------------*
REPORT zpp_charact_import.
TYPE-POOLS:slis.
TYPE-POOLS:icon.
TABLES:marc.
TYPE-POOLS:tpit.
DATA:it_tab TYPE truxs_t_text_data.
TYPES:BEGIN OF ty_itab,
code(30),
name(30),
type(4),
lenth(2),
must(1),
dec(2),
unit(3),
value(30),
value_n(3000),
END OF ty_itab.
**定义一个带有HEADER LINE的内存表ITAB
DATA:itab TYPE TABLE OF ty_itab WITH HEADER LINE.
DATA:tt_itab TYPE TABLE OF ty_itab WITH HEADER LINE.
DATA:wa_itab TYPE ty_itab.
FIELD-SYMBOLS:<fs_itab> TYPE ty_itab.
TYPES:BEGIN OF ty_itab1,
code(30),
name(30),
type(4),
lenth(2),
must(1),
dec(2),
unit(3),
value(30),
value_n(30),
result(1),
message(200),
END OF ty_itab1.
DATA:lt_itab TYPE TABLE OF ty_itab1 WITH HEADER LINE.
DATA:BEGIN OF gt_cawn OCCURS 0,
* atinn LIKE caBn-atinn,
* adzhl LIKE caBn-adzhl,
atnam LIKE cabn-atnam,
atinn LIKE cawn-atinn,
atzhl LIKE cawn-atzhl,
adzhl LIKE cawn-adzhl,
atwrt LIKE cawn-atwrt,
END OF gt_cawn.
*DATA:gt_cabn_tmp LIKE TABLE OF gt_cabn WITH HEADER LINE.
DATA:g_info TYPE string.
DATA:charactdetail LIKE bapicharactdetail,
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,
return TYPE TABLE OF bapiret2 WITH HEADER LINE.
DATA:wa_ret LIKE bapiret2,
charactdetailnew LIKE bapicharactdetail OCCURS 0,
char_detail LIKE bapicharactdetail,
charactdescrnew LIKE bapicharactdescr OCCURS 0,
char_descr_new LIKE bapicharactdescr,
charactvaluescharnew LIKE bapicharactvalueschar OCCURS 0 WITH HEADER LINE,
char_val_char LIKE bapicharactvalueschar,
charactvaluesnumnew LIKE bapicharactvaluesnum OCCURS 0,
char_val_num LIKE bapicharactvaluesnum,
charactvaluescurr LIKE bapicharactvaluescurr OCCURS 0,
charactvaluesdescrnew LIKE bapicharactvaluesdescr OCCURS 0,
"charactvaluesdescr LIKE bapicharactvaluesdescr ,
charactreferences LIKE bapicharactreferences OCCURS 0,
charactrestrictions LIKE bapicharactrestrictions OCCURS 0.
DATA:lt_tline LIKE tline OCCURS 0 WITH HEADER LINE.
DATA:l_len TYPE i,
l_linetxt(3000),
l_txtlen TYPE i,
l_entxt(1000),
l_tabix TYPE i,
l_count TYPE i.
*DATA:lv_txtname LIKE thead-tdname,
* ls_header LIKE thead.
PARAMETER p_file LIKE rlgrap-filename DEFAULT 'C:\'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. "类似上传附件时的那个浏览按钮
******************初始屏幕结束**********************************************************************
******************批量导入的BAPI**********************************************************************
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = space
def_path = p_file
mask = text-001
mode = 'O'
IMPORTING
filename = p_file
EXCEPTIONS
selection_cancel = 0.
START-OF-SELECTION.
*excel 数据导入
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_tab_raw_data = it_tab
i_filename = p_file
TABLES
i_tab_converted_data = itab
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.
DELETE itab INDEX 1.
ENDIF.
LOOP AT itab ASSIGNING <fs_itab>.
TRANSLATE <fs_itab>-code TO UPPER CASE.
TRANSLATE <fs_itab>-name TO UPPER CASE.
TRANSLATE <fs_itab>-type TO UPPER CASE.
TRANSLATE <fs_itab>-value TO UPPER CASE.
TRANSLATE <fs_itab>-value_n TO UPPER CASE.
ENDLOOP.
REFRESH lt_itab.
CLEAR lt_itab.
SORT itab BY code.
REFRESH tt_itab.
CLEAR tt_itab.
tt_itab[] = itab[].
* 把新增的记录和修改的记录分离(itab中存放新增记录;tt_itab中存放要修改的记录)
SORT tt_itab BY code.
LOOP AT tt_itab ASSIGNING <fs_itab>.
REFRESH return.
CLEAR return.
CALL FUNCTION 'BAPI_CHARACT_EXISTENCECHECK'
EXPORTING
charactname = <fs_itab>-code
TABLES
return = return.
CLEAR return.
READ TABLE return WITH KEY id = 'C1' number = '002'.
IF sy-subrc EQ 0.
DELETE itab WHERE code = <fs_itab>-code.
ELSE.
DELETE tt_itab.
CONTINUE.
ENDIF.
ENDLOOP.
* --------以下代码创建特性值--------
LOOP AT itab.
MOVE-CORRESPONDING itab TO wa_itab.
AT NEW code.
CLEAR charactdetail.
REFRESH charactdescr.
CLEAR charactdescr.
REFRESH charactvalueschar.
CLEAR charactvalueschar.
REFRESH charactvaluesdescr.
CLEAR charactvaluesdescr.
REFRESH return.
CLEAR return.
charactdetail-charact_name = wa_itab-code."'S_NF5220_2090_SASRAFJ'.
charactdetail-data_type = wa_itab-type."'CHAR'.
charactdetail-length = wa_itab-lenth."30.
charactdetail-status = 1.
IF wa_itab-must = 'X'.
charactdetail-entry_required = wa_itab-must.
ENDIF.
charactdescr-language_int = sy-langu.
charactdescr-language_iso = 'ZH'.
charactdescr-description = wa_itab-name."'NF5220 外插SAS RAID卡'.
APPEND charactdescr.
CLEAR lt_itab.
MOVE-CORRESPONDING wa_itab TO lt_itab.
ENDAT.
charactvalueschar-value_char = wa_itab-value."'0010_V064U040M1707000_BRE018'.
APPEND charactvalueschar.
charactvaluesdescr-language_int = sy-langu.
charactvaluesdescr-language_iso = 'ZH'.
charactvaluesdescr-value_char = wa_itab-value."'0010_V064U040M1707000_BRE018'.
charactvaluesdescr-description = wa_itab-value_n."'A_4R0_5405_256M_MSAS300_PCIE_R'.
APPEND charactvaluesdescr.
AT END OF code.
CALL FUNCTION 'BAPI_CHARACT_CREATE'
EXPORTING
charactdetail = charactdetail
changenumber = changenumber
keydate = sy-datum
TABLES
charactdescr = charactdescr
charactvalueschar = charactvalueschar
charactvaluesdescr = charactvaluesdescr
return = return.
CLEAR return.
READ TABLE return WITH KEY type = 'E'.
IF sy-subrc EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CLEAR g_info.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = return-id
msgnr = return-number
msgv1 = return-message_v1
msgv2 = return-message_v2
msgv3 = return-message_v3
msgv4 = return-message_v4
IMPORTING
message_text_output = g_info.
lt_itab-result = 'E'.
lt_itab-message = g_info.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
lt_itab-result = 'S'.
lt_itab-message = '创建特性值成功!'.
ENDIF.
APPEND lt_itab.
CLEAR lt_itab.
ENDAT.
ENDLOOP.
* --------以上代码创建特性值--------
* --------以下代码修改特性值--------
LOOP AT tt_itab.
MOVE-CORRESPONDING tt_itab TO wa_itab.
AT NEW code.
REFRESH return.
CLEAR return.
CLEAR char_detail.
CLEAR charactdescrnew.
REFRESH charactdescrnew.
CLEAR charactvaluesnumnew.
REFRESH charactvaluesnumnew.
CLEAR charactvaluescharnew.
REFRESH charactvaluescharnew.
CLEAR charactvaluescurr.
REFRESH charactvaluescurr.
CLEAR charactvaluesdescrnew.
REFRESH charactvaluesdescrnew.
CLEAR charactreferences.
REFRESH charactreferences.
CLEAR charactrestrictions.
REFRESH charactrestrictions.
CALL FUNCTION 'BAPI_CHARACT_GETDETAIL'
EXPORTING
charactname = wa_itab-code
IMPORTING
charactdetail = char_detail
TABLES
charactdescr = charactdescrnew
charactvaluesnum = charactvaluesnumnew
charactvalueschar = charactvaluescharnew
charactvaluescurr = charactvaluescurr
charactvaluesdescr = charactvaluesdescrnew
charactreferences = charactreferences
charactrestrictions = charactrestrictions
return = return.
APPEND char_detail TO charactdetailnew.
CLEAR lt_itab.
MOVE-CORRESPONDING wa_itab TO lt_itab.
ENDAT.
CLEAR charactvaluescharnew.
READ TABLE charactvaluescharnew WITH KEY value_char = wa_itab-value.
IF sy-subrc NE 0.
CLEAR char_val_char.
char_val_char-value_char = wa_itab-value.
APPEND char_val_char TO charactvaluescharnew.
CLEAR charactvaluesdescr.
charactvaluesdescr-language_int = sy-langu.
WRITE charactvaluesdescr-language_int TO charactvaluesdescr-language_iso.
charactvaluesdescr-value_char = wa_itab-value.
charactvaluesdescr-description = wa_itab-value_n.
APPEND charactvaluesdescr TO charactvaluesdescrnew.
ENDIF.
AT END OF code.
CALL FUNCTION 'ZBAPI_CHARACT_CHANGE'
EXPORTING
charactname = wa_itab-code
is_change = 'X'
TABLES
charactdetailnew = charactdetailnew
charactdescrnew = charactdescrnew
charactvaluescharnew = charactvaluescharnew
charactvaluesdescrnew = charactvaluesdescrnew
return = return.
CLEAR return.
READ TABLE return WITH KEY type = 'E'.
IF sy-subrc EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CLEAR g_info.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = return-id
msgnr = return-number
msgv1 = return-message_v1
msgv2 = return-message_v2
msgv3 = return-message_v3
msgv4 = return-message_v4
IMPORTING
message_text_output = g_info.
lt_itab-result = 'E'.
lt_itab-message = g_info.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
lt_itab-result = 'S'.
lt_itab-message = '修改特性值成功!'.
ENDIF.
APPEND lt_itab.
CLEAR lt_itab.
ENDAT.
ENDLOOP.
* --------以上代码修改特性值--------
CLEAR itab.
LOOP AT tt_itab.
MOVE-CORRESPONDING tt_itab TO itab.
APPEND itab.
CLEAR itab.
ENDLOOP.
LOOP AT lt_itab WHERE result = 'E'.
DELETE itab WHERE code = lt_itab-code.
ENDLOOP.
IF itab[] IS NOT INITIAL.
PERFORM frm_txt_create.
ENDIF.
IF lt_itab[] IS NOT INITIAL.
PERFORM frm_download.
MESSAGE '特性批导结果已保存到C盘根目录下,请查看!' TYPE 'I'.
ENDIF.
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_download .
DATA:lv_filename TYPE string.
CLEAR lv_filename.
CONCATENATE 'C:/特性批导结果表' sy-datum sy-uzeit '.TXT' INTO lv_filename.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = lv_filename
filetype = 'ASC'
append = ' '
TABLES
data_tab = lt_itab.
IF sy-subrc <> 0.
ENDIF.
ENDFORM. "FRM_DOWNLOAD
*&---------------------------------------------------------------------*
*& Form FRM_TXT_CREATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_txt_create .
*--------以下代码新增特性长文本--------
REFRESH gt_cawn.
CLEAR gt_cawn.
SELECT b~atnam
a~atinn
a~atzhl
a~adzhl
a~atwrt
INTO TABLE gt_cawn
FROM cawn AS a INNER JOIN cabn AS b ON a~atinn = b~atinn AND a~adzhl = b~adzhl
FOR ALL ENTRIES IN itab
WHERE b~atnam = itab-code.
LOOP AT itab ASSIGNING <fs_itab>.
IF strlen( <fs_itab>-value_n ) > 30.
CLEAR gt_cawn.
READ TABLE gt_cawn WITH KEY atnam = <fs_itab>-code atwrt = <fs_itab>-value.
IF sy-subrc EQ 0.
REFRESH lt_tline.
CLEAR lt_tline.
CLEAR l_entxt.
l_entxt = <fs_itab>-value_n+30(2700).
IF l_entxt(1) EQ '"'.
SHIFT l_entxt LEFT DELETING LEADING '"'.
l_txtlen = strlen( l_entxt ) - 1.
IF l_txtlen > 0.
IF l_entxt+l_txtlen(1) EQ '"'.
l_entxt = l_entxt+0(l_txtlen).
ENDIF.
ENDIF.
ENDIF.
WHILE l_entxt IS NOT INITIAL.
lt_tline-tdformat = '*'.
SPLIT l_entxt AT cl_abap_char_utilities=>newline INTO l_linetxt l_entxt.
l_len = strlen( l_linetxt ).
WHILE l_len > 132.
lt_tline-tdline = l_linetxt+l_count(132).
APPEND lt_tline.
l_count = l_count + 132.
l_len = l_len - 132.
lt_tline-tdformat = ''.
ENDWHILE.
IF l_len > 0.
lt_tline-tdline = l_linetxt+l_count(l_len).
APPEND lt_tline.
ENDIF.
CLEAR l_linetxt.
ENDWHILE.
REFRESH return.
CLEAR return.
CALL FUNCTION 'BAPI_CHARACT_ADDLONGTEXT'
EXPORTING
charactname = <fs_itab>-code
value_char = <fs_itab>-value
keydate = sy-datum
language_iso = 'ZH'
TABLES
longtext = lt_tline
return = return.
CLEAR return.
READ TABLE return WITH KEY type = 'E'.
IF sy-subrc EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
*--------以上代码新增特性长文本--------
ENDFORM. " FRM_TXT_CREATE
*& REPORT ZPP_CHARACT_IMPORT
*&
*& REPORTNAME :特性值批导程序
*&---------------------------------------------------------------------*
*& CREATED BY : LIUXINYUAN
*& CREATED DATE : 2016-05-25
*&---------------------------------------------------------------------*
REPORT zpp_charact_import.
TYPE-POOLS:slis.
TYPE-POOLS:icon.
TABLES:marc.
TYPE-POOLS:tpit.
DATA:it_tab TYPE truxs_t_text_data.
TYPES:BEGIN OF ty_itab,
code(30),
name(30),
type(4),
lenth(2),
must(1),
dec(2),
unit(3),
value(30),
value_n(3000),
END OF ty_itab.
**定义一个带有HEADER LINE的内存表ITAB
DATA:itab TYPE TABLE OF ty_itab WITH HEADER LINE.
DATA:tt_itab TYPE TABLE OF ty_itab WITH HEADER LINE.
DATA:wa_itab TYPE ty_itab.
FIELD-SYMBOLS:<fs_itab> TYPE ty_itab.
TYPES:BEGIN OF ty_itab1,
code(30),
name(30),
type(4),
lenth(2),
must(1),
dec(2),
unit(3),
value(30),
value_n(30),
result(1),
message(200),
END OF ty_itab1.
DATA:lt_itab TYPE TABLE OF ty_itab1 WITH HEADER LINE.
DATA:BEGIN OF gt_cawn OCCURS 0,
* atinn LIKE caBn-atinn,
* adzhl LIKE caBn-adzhl,
atnam LIKE cabn-atnam,
atinn LIKE cawn-atinn,
atzhl LIKE cawn-atzhl,
adzhl LIKE cawn-adzhl,
atwrt LIKE cawn-atwrt,
END OF gt_cawn.
*DATA:gt_cabn_tmp LIKE TABLE OF gt_cabn WITH HEADER LINE.
DATA:g_info TYPE string.
DATA:charactdetail LIKE bapicharactdetail,
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,
return TYPE TABLE OF bapiret2 WITH HEADER LINE.
DATA:wa_ret LIKE bapiret2,
charactdetailnew LIKE bapicharactdetail OCCURS 0,
char_detail LIKE bapicharactdetail,
charactdescrnew LIKE bapicharactdescr OCCURS 0,
char_descr_new LIKE bapicharactdescr,
charactvaluescharnew LIKE bapicharactvalueschar OCCURS 0 WITH HEADER LINE,
char_val_char LIKE bapicharactvalueschar,
charactvaluesnumnew LIKE bapicharactvaluesnum OCCURS 0,
char_val_num LIKE bapicharactvaluesnum,
charactvaluescurr LIKE bapicharactvaluescurr OCCURS 0,
charactvaluesdescrnew LIKE bapicharactvaluesdescr OCCURS 0,
"charactvaluesdescr LIKE bapicharactvaluesdescr ,
charactreferences LIKE bapicharactreferences OCCURS 0,
charactrestrictions LIKE bapicharactrestrictions OCCURS 0.
DATA:lt_tline LIKE tline OCCURS 0 WITH HEADER LINE.
DATA:l_len TYPE i,
l_linetxt(3000),
l_txtlen TYPE i,
l_entxt(1000),
l_tabix TYPE i,
l_count TYPE i.
*DATA:lv_txtname LIKE thead-tdname,
* ls_header LIKE thead.
PARAMETER p_file LIKE rlgrap-filename DEFAULT 'C:\'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. "类似上传附件时的那个浏览按钮
******************初始屏幕结束**********************************************************************
******************批量导入的BAPI**********************************************************************
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = space
def_path = p_file
mask = text-001
mode = 'O'
IMPORTING
filename = p_file
EXCEPTIONS
selection_cancel = 0.
START-OF-SELECTION.
*excel 数据导入
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_tab_raw_data = it_tab
i_filename = p_file
TABLES
i_tab_converted_data = itab
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.
DELETE itab INDEX 1.
ENDIF.
LOOP AT itab ASSIGNING <fs_itab>.
TRANSLATE <fs_itab>-code TO UPPER CASE.
TRANSLATE <fs_itab>-name TO UPPER CASE.
TRANSLATE <fs_itab>-type TO UPPER CASE.
TRANSLATE <fs_itab>-value TO UPPER CASE.
TRANSLATE <fs_itab>-value_n TO UPPER CASE.
ENDLOOP.
REFRESH lt_itab.
CLEAR lt_itab.
SORT itab BY code.
REFRESH tt_itab.
CLEAR tt_itab.
tt_itab[] = itab[].
* 把新增的记录和修改的记录分离(itab中存放新增记录;tt_itab中存放要修改的记录)
SORT tt_itab BY code.
LOOP AT tt_itab ASSIGNING <fs_itab>.
REFRESH return.
CLEAR return.
CALL FUNCTION 'BAPI_CHARACT_EXISTENCECHECK'
EXPORTING
charactname = <fs_itab>-code
TABLES
return = return.
CLEAR return.
READ TABLE return WITH KEY id = 'C1' number = '002'.
IF sy-subrc EQ 0.
DELETE itab WHERE code = <fs_itab>-code.
ELSE.
DELETE tt_itab.
CONTINUE.
ENDIF.
ENDLOOP.
* --------以下代码创建特性值--------
LOOP AT itab.
MOVE-CORRESPONDING itab TO wa_itab.
AT NEW code.
CLEAR charactdetail.
REFRESH charactdescr.
CLEAR charactdescr.
REFRESH charactvalueschar.
CLEAR charactvalueschar.
REFRESH charactvaluesdescr.
CLEAR charactvaluesdescr.
REFRESH return.
CLEAR return.
charactdetail-charact_name = wa_itab-code."'S_NF5220_2090_SASRAFJ'.
charactdetail-data_type = wa_itab-type."'CHAR'.
charactdetail-length = wa_itab-lenth."30.
charactdetail-status = 1.
IF wa_itab-must = 'X'.
charactdetail-entry_required = wa_itab-must.
ENDIF.
charactdescr-language_int = sy-langu.
charactdescr-language_iso = 'ZH'.
charactdescr-description = wa_itab-name."'NF5220 外插SAS RAID卡'.
APPEND charactdescr.
CLEAR lt_itab.
MOVE-CORRESPONDING wa_itab TO lt_itab.
ENDAT.
charactvalueschar-value_char = wa_itab-value."'0010_V064U040M1707000_BRE018'.
APPEND charactvalueschar.
charactvaluesdescr-language_int = sy-langu.
charactvaluesdescr-language_iso = 'ZH'.
charactvaluesdescr-value_char = wa_itab-value."'0010_V064U040M1707000_BRE018'.
charactvaluesdescr-description = wa_itab-value_n."'A_4R0_5405_256M_MSAS300_PCIE_R'.
APPEND charactvaluesdescr.
AT END OF code.
CALL FUNCTION 'BAPI_CHARACT_CREATE'
EXPORTING
charactdetail = charactdetail
changenumber = changenumber
keydate = sy-datum
TABLES
charactdescr = charactdescr
charactvalueschar = charactvalueschar
charactvaluesdescr = charactvaluesdescr
return = return.
CLEAR return.
READ TABLE return WITH KEY type = 'E'.
IF sy-subrc EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CLEAR g_info.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = return-id
msgnr = return-number
msgv1 = return-message_v1
msgv2 = return-message_v2
msgv3 = return-message_v3
msgv4 = return-message_v4
IMPORTING
message_text_output = g_info.
lt_itab-result = 'E'.
lt_itab-message = g_info.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
lt_itab-result = 'S'.
lt_itab-message = '创建特性值成功!'.
ENDIF.
APPEND lt_itab.
CLEAR lt_itab.
ENDAT.
ENDLOOP.
* --------以上代码创建特性值--------
* --------以下代码修改特性值--------
LOOP AT tt_itab.
MOVE-CORRESPONDING tt_itab TO wa_itab.
AT NEW code.
REFRESH return.
CLEAR return.
CLEAR char_detail.
CLEAR charactdescrnew.
REFRESH charactdescrnew.
CLEAR charactvaluesnumnew.
REFRESH charactvaluesnumnew.
CLEAR charactvaluescharnew.
REFRESH charactvaluescharnew.
CLEAR charactvaluescurr.
REFRESH charactvaluescurr.
CLEAR charactvaluesdescrnew.
REFRESH charactvaluesdescrnew.
CLEAR charactreferences.
REFRESH charactreferences.
CLEAR charactrestrictions.
REFRESH charactrestrictions.
CALL FUNCTION 'BAPI_CHARACT_GETDETAIL'
EXPORTING
charactname = wa_itab-code
IMPORTING
charactdetail = char_detail
TABLES
charactdescr = charactdescrnew
charactvaluesnum = charactvaluesnumnew
charactvalueschar = charactvaluescharnew
charactvaluescurr = charactvaluescurr
charactvaluesdescr = charactvaluesdescrnew
charactreferences = charactreferences
charactrestrictions = charactrestrictions
return = return.
APPEND char_detail TO charactdetailnew.
CLEAR lt_itab.
MOVE-CORRESPONDING wa_itab TO lt_itab.
ENDAT.
CLEAR charactvaluescharnew.
READ TABLE charactvaluescharnew WITH KEY value_char = wa_itab-value.
IF sy-subrc NE 0.
CLEAR char_val_char.
char_val_char-value_char = wa_itab-value.
APPEND char_val_char TO charactvaluescharnew.
CLEAR charactvaluesdescr.
charactvaluesdescr-language_int = sy-langu.
WRITE charactvaluesdescr-language_int TO charactvaluesdescr-language_iso.
charactvaluesdescr-value_char = wa_itab-value.
charactvaluesdescr-description = wa_itab-value_n.
APPEND charactvaluesdescr TO charactvaluesdescrnew.
ENDIF.
AT END OF code.
CALL FUNCTION 'ZBAPI_CHARACT_CHANGE'
EXPORTING
charactname = wa_itab-code
is_change = 'X'
TABLES
charactdetailnew = charactdetailnew
charactdescrnew = charactdescrnew
charactvaluescharnew = charactvaluescharnew
charactvaluesdescrnew = charactvaluesdescrnew
return = return.
CLEAR return.
READ TABLE return WITH KEY type = 'E'.
IF sy-subrc EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CLEAR g_info.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = return-id
msgnr = return-number
msgv1 = return-message_v1
msgv2 = return-message_v2
msgv3 = return-message_v3
msgv4 = return-message_v4
IMPORTING
message_text_output = g_info.
lt_itab-result = 'E'.
lt_itab-message = g_info.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
lt_itab-result = 'S'.
lt_itab-message = '修改特性值成功!'.
ENDIF.
APPEND lt_itab.
CLEAR lt_itab.
ENDAT.
ENDLOOP.
* --------以上代码修改特性值--------
CLEAR itab.
LOOP AT tt_itab.
MOVE-CORRESPONDING tt_itab TO itab.
APPEND itab.
CLEAR itab.
ENDLOOP.
LOOP AT lt_itab WHERE result = 'E'.
DELETE itab WHERE code = lt_itab-code.
ENDLOOP.
IF itab[] IS NOT INITIAL.
PERFORM frm_txt_create.
ENDIF.
IF lt_itab[] IS NOT INITIAL.
PERFORM frm_download.
MESSAGE '特性批导结果已保存到C盘根目录下,请查看!' TYPE 'I'.
ENDIF.
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_download .
DATA:lv_filename TYPE string.
CLEAR lv_filename.
CONCATENATE 'C:/特性批导结果表' sy-datum sy-uzeit '.TXT' INTO lv_filename.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = lv_filename
filetype = 'ASC'
append = ' '
TABLES
data_tab = lt_itab.
IF sy-subrc <> 0.
ENDIF.
ENDFORM. "FRM_DOWNLOAD
*&---------------------------------------------------------------------*
*& Form FRM_TXT_CREATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_txt_create .
*--------以下代码新增特性长文本--------
REFRESH gt_cawn.
CLEAR gt_cawn.
SELECT b~atnam
a~atinn
a~atzhl
a~adzhl
a~atwrt
INTO TABLE gt_cawn
FROM cawn AS a INNER JOIN cabn AS b ON a~atinn = b~atinn AND a~adzhl = b~adzhl
FOR ALL ENTRIES IN itab
WHERE b~atnam = itab-code.
LOOP AT itab ASSIGNING <fs_itab>.
IF strlen( <fs_itab>-value_n ) > 30.
CLEAR gt_cawn.
READ TABLE gt_cawn WITH KEY atnam = <fs_itab>-code atwrt = <fs_itab>-value.
IF sy-subrc EQ 0.
REFRESH lt_tline.
CLEAR lt_tline.
CLEAR l_entxt.
l_entxt = <fs_itab>-value_n+30(2700).
IF l_entxt(1) EQ '"'.
SHIFT l_entxt LEFT DELETING LEADING '"'.
l_txtlen = strlen( l_entxt ) - 1.
IF l_txtlen > 0.
IF l_entxt+l_txtlen(1) EQ '"'.
l_entxt = l_entxt+0(l_txtlen).
ENDIF.
ENDIF.
ENDIF.
WHILE l_entxt IS NOT INITIAL.
lt_tline-tdformat = '*'.
SPLIT l_entxt AT cl_abap_char_utilities=>newline INTO l_linetxt l_entxt.
l_len = strlen( l_linetxt ).
WHILE l_len > 132.
lt_tline-tdline = l_linetxt+l_count(132).
APPEND lt_tline.
l_count = l_count + 132.
l_len = l_len - 132.
lt_tline-tdformat = ''.
ENDWHILE.
IF l_len > 0.
lt_tline-tdline = l_linetxt+l_count(l_len).
APPEND lt_tline.
ENDIF.
CLEAR l_linetxt.
ENDWHILE.
REFRESH return.
CLEAR return.
CALL FUNCTION 'BAPI_CHARACT_ADDLONGTEXT'
EXPORTING
charactname = <fs_itab>-code
value_char = <fs_itab>-value
keydate = sy-datum
language_iso = 'ZH'
TABLES
longtext = lt_tline
return = return.
CLEAR return.
READ TABLE return WITH KEY type = 'E'.
IF sy-subrc EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
*--------以上代码新增特性长文本--------
ENDFORM. " FRM_TXT_CREATE
相关文章推荐
- 微信浏览器如何禁止iPhone手机上下滑动网页
- iOS 多线程篇6—线程的状态
- linux下邮件查看命令
- 计算最低价格
- HDU 1162.Eddy's picture【最小生成树(Kruskal算法)】【5月30】
- Android网络切换状态广播
- 把普通的java对象转成json字符串
- leetcode evaluate-reverse-polish-notation
- 『数据挖掘』scikit-learn包的进阶学习笔记——第二章:线性回归
- 网络程序设计-为多个客户服务服务器端设计
- 移动端后台接口约定
- hdu 1160 FatMouse's Speed(DP)
- assert()函数用法总结
- assert()函数用法总结
- 第十、十一周项目一:阅读程序,并写出运行结果(1)
- Android 学习之AndroidMainfest.xml详解,必看,总结
- android输入限制
- Deep Learning in NLP (一)词向量和语言模型
- 2.3 高斯分布
- 驱动开发:WMWare+Windbg调试环境搭建