當前位置:
首頁 >
BDC 开发步骤
發(fā)布時間:2025/3/20
13
豆豆
Step 1. 錄制 BDC.
????????SM35/SHDB 進入 BDC 錄制界面, 開始錄制.
Step 2. 把錄制好的 BDC 轉(zhuǎn)成 ABAP 程式.
??定義通過 EXCEL 上傳用到的參數(shù),
DATA:?if_intern?TYPE?alsmex_tabline?OCCURS?0?WITH?HEADER?LINE. DATA:?vf_start_col?TYPE?i,
??????vf_start_row?TYPE?i,
??????vf_end_col???TYPE?i,
??????vf_end_row???TYPE?i.
DATA:?vf_index?TYPE?i.
FIELD-SYMBOLS:?<fs>. ??定義 BDC 用到的參數(shù). DATA:?BEGIN?OF?bdcdata?OCCURS?0.
????????INCLUDE?STRUCTURE?bdcdata.
DATA:?END?OF?bdcdata.
DATA:?BEGIN?OF?messtab?OCCURS?0.
????????INCLUDE?STRUCTURE?bdcmsgcoll.
DATA:?END?OF?messtab.
DATA:?BEGIN?OF?errlist?OCCURS?0.
????????INCLUDE?STRUCTURE?itab0.
DATA:?END?OF?errlist.
DATA:?cnt?TYPE?i.
DATA:?tcode?LIKE?tstc-tcode,
??????cnt_input?TYPE?i,
??????cnt_error?TYPE?i,
??????cnt_update?TYPE?i,
??????c_update?TYPE?c?VALUE?'S'.
Start-of-selection. ??PERFORM?upload_from_pc?USING?i_file1.
??PERFORM?modify.
??PERFORM?output_result.
??PERFORM?output_error?USING?i_file2. ********************************************************* FORM?modify?.
??DESCRIBE?TABLE?itab0?LINES?cnt.
??IF?cnt?<>?0.
????LOOP?AT?itab0.
??????PERFORM?check_data.
??????PERFORM?pre_bdcdata.
??????PERFORM?call_transaction_form.
????ENDLOOP.
??ENDIF.
ENDFORM. *********************************************************** FORM?pre_bdcdata?.
??REFRESH:?bdcdata.
??PERFORM?scr_1.
??PERFORM?scr_2.
??PERFORM?scr_3.
??PERFORM?scr_4.
ENDFORM. ************************************************************ FORM?scr_1?.
??PERFORM?bdc_dynpro?USING?'SAPLAIST'?'0100'.
??PERFORM?bdc_field?USING?'BDC_CURSOR'?'ANLA-ANLN1'.
??PERFORM?bdc_field?USING?'BDC_OKCODE'?'/00'.
??PERFORM?bdc_field?USING?'ANLA-ANLN1'?itab0-anln1.
??PERFORM?bdc_field?USING?'ANLA-BUKRS'?itab0-bukrs.
ENDFORM.? *********************************************************** FORM?bdc_dynpro??USING??program?dynpro.
??CLEAR?bdcdata.
??bdcdata-program?=?program.
??bdcdata-dynpro??=?dynpro.
??bdcdata-dynbegin??=?'X'.
??APPEND?bdcdata.
ENDFORM.????????????????????"?BDC_DYNPRO
*&---------------------------------------------------------------------*
*&??????Form??BDC_FIELD
*&---------------------------------------------------------------------*
FORM?bdc_field??USING??fnam?fval.
??CLEAR?bdcdata.
??bdcdata-fnam?=?fnam.
??bdcdata-fval??=?fval.
??APPEND?bdcdata.
ENDFORM.????????????????????"?BDC_FIELD ************************************************************************** FORM?call_transaction_form?.
??CALL?TRANSACTION?tcode
????USING?bdcdata
????MODE?s_mode
????UPDATE?c_update
????MESSAGES?INTO?messtab.
??IF?sy-subrc?NE?0.
????ADD?1?TO?cnt_error.
????PERFORM?append_err_file.
??ELSE.
????ADD?1?TO?cnt_update.
??ENDIF.
ENDFORM. ? ******************************************************* FORM?append_err_file?.
??MOVE-CORRESPONDING?itab0?TO?errlist.
??APPEND?errlist.
??CLEAR?errlist.
ENDFORM.????????????????????"?APPEND_ERR_FILE
*&---------------------------------------------------------------------*
*&??????Form??OUTPUT_RESULT
*&---------------------------------------------------------------------*
FORM?output_result?.
??SKIP?2.
??ULINE.
??WRITE:?/?'Number?of?input:?',?20?cnt_input.
??WRITE:?/?'Number?of?update:?',?20?cnt_update.
??WRITE:?/?'Number?of?error:?',?20?cnt_error.
ENDFORM.????????????????????"?OUTPUT_RESULT
Note: ???上面的方式執(zhí)行者也必須有執(zhí)行 Tcode 的權限, 某些情況下 User 可能沒此權限, 這種情況下就要換另外一種方式去做(會話). ???1. ?數(shù)據(jù)傳輸程序從數(shù)據(jù)文件中獲取數(shù)據(jù)傳輸信息,生成批輸入會話, 會話通常以后臺模式調(diào)用 SAP 事務并模擬用戶對話進行數(shù)據(jù)傳輸. 同時, 會話中還包含所有需要傳輸?shù)臄?shù)據(jù), 這些數(shù)據(jù)將在處理會話時輸入應用事務的各個屏幕, 并更新數(shù)據(jù)庫. ???2. 會話的創(chuàng)建過程與處理過程是分開進行的. 在創(chuàng)建批輸入對話之后, 可以通過程序 RSBDCSUB 或批輸入監(jiān)控器(SM35)來處理該會話, 會話的處理過程即通過事務將數(shù)據(jù)傳輸?shù)?SAP 系統(tǒng)的過程. ???3. 創(chuàng)建批輸入會話之后, 如果會話以后臺模式處理(包括提交后臺作業(yè)或者在批輸入監(jiān)按器中以后臺模式運行), 系統(tǒng)將使用會話創(chuàng)建用戶來進行相關事務的權限檢查. 如果以交互模式處理會話, 則將檢查在線處理該會話的用戶權限. ???4. 對于某些字段類型為?QUAN 的, 如果定義上傳的內(nèi)表字段的類型也為 QUAN, 則程式執(zhí)行時,可能出現(xiàn) "Input value is longer than screen field." 解決這個的辦法就是把這個定義成 char 型. ???5. F1, F4 功能以及自定義的 F1, F4幫助都不能被錄制. ???6. 系統(tǒng)(system)和(Help)菜單中的功能均無法錄制. ???7. 默認變式, 即事務變式中的字段值不能被錄制 ???8. 錯誤和警告信息不能被錄制 ???9. 有些較新的 SAP 控件不支持錄制及批量輸入的功能. ???10. 有些新的 Tcode 不支持錄制 ???11. 滾動條功能不能被錄制, 錄制時應使用功能鍵 F21-F24. ???12. 最好使用字符型來定義內(nèi)表字段, 不要用 Like 去參照其它數(shù)據(jù)對象來定義, 那樣容易報錯, 不同用戶定義的日期風格會存在差異, 使用 write date2 to date1 來實現(xiàn)日期格式的轉(zhuǎn)換. DATA:?p_groupid?LIKE?apqi-groupid.
DATA:?p_user?LIKE?sy-uname. *??PERFORM?bdc_open_group.
*??PERFORM?pre_bdc.
*??PERFORM?bdc_insert_group.
*??PERFORM?bdc_close_group?.
*??PERFORM?get_session_state?USING?p_groupid?.
*??PERFORM?write_error. ************************************************************** FORM?bdc_open_group?.
??CONCATENATE??sy-datum?sy-uzeit?INTO?p_groupid.
??CALL?FUNCTION?'BDC_OPEN_GROUP'??"open?session
????EXPORTING
?????????client??????????????=?sy-mandt
*?????????DEST????????????????=?FILLER8
?????????group???????????????=?p_groupid
*?????????HOLDDATE????????????=?FILLER8
?????????keep????????????????=?'X'
?????????user????????????????=?p_user
*?????????RECORD??????????????=?FILLER1
*????IMPORTING
*?????????QID?????????????????=
????EXCEPTIONS
?????????client_invalid??????=?1
?????????destination_invalid?=?2
?????????group_invalid???????=?3
?????????group_is_locked?????=?4
?????????holddate_invalid????=?5
?????????internal_error??????=?6
?????????queue_error?????????=?7
?????????running?????????????=?8
?????????system_lock_error???=?9
?????????user_invalid????????=?10
?????????OTHERS??????????????=?11.
ENDFORM.????????????????????"?BDC_OPEN_GROUP ************************************************************ FORM?pre_bdc?.
??REFRESH?bdcdata.
??PERFORM?bdc_dynpro?USING?'SAPLMR1M'?'0300'.
??PERFORM?bdc_field??USING?'BDC_CURSOR'?'G_BUDAT'.
??PERFORM?bdc_field??USING?'BDC_OKCODE'?'=CANC'.
??PERFORM?bdc_field??USING?'RBKPV-BELNR'?i_belnr.
??PERFORM?bdc_field??USING?'RBKPV-GJAHR'?i_gjahr.
??PERFORM?bdc_field??USING?'UF05A-STGRD'?i_stgrd.
??PERFORM?bdc_field??USING?'G_BUDAT'?i_budat.
ENDFORM.? ************************************************************* FORM?bdc_insert_group?.
??CALL?FUNCTION?'BDC_INSERT'
????EXPORTING
??????tcode????????????=?tcode
????TABLES
??????dynprotab????????=?bdcdata
????EXCEPTIONS
??????internal_error???=?1
??????not_open?????????=?2
??????queue_error??????=?3
??????tcode_invalid????=?4
??????printing_invalid?=?5
??????posting_invalid??=?6
??????OTHERS???????????=?7.
ENDFORM.????????????????????"?BDC_INSERT_GROUP ********************************************************* FORM?bdc_close_group?.
??CALL?FUNCTION?'BDC_CLOSE_GROUP'
????EXCEPTIONS
??????not_open????=?1
??????queue_error?=?2
??????OTHERS??????=?3.
??SUBMIT?rsbdcsub?WITH?mappe?EQ?p_groupid
???????????????WITH?von?EQ?sy-datum
???????????????WITH?bis?EQ?sy-datum
???????????????WITH?fehler?EQ?'.'
???????????????EXPORTING?LIST?TO?MEMORY
???????????????AND?RETURN.
??WAIT?UP?TO?10?SECONDS?.
ENDFORM.????????????????????"?BDC_CLOSE_GROUP ********************************************************** FORM?get_session_state??USING???p_session.
??CLEAR:?itab1,itab1[].
??itab1-groupid?=?p_groupid.
??itab1-belnr?=?i_belnr.
??itab1-gjahr?=?i_gjahr.
??itab1-stgrd?=?i_stgrd.
??itab1-budat?=?i_budat.
??itab1-erdat?=?sy-datum.
??itab1-uzeit?=?sy-uzeit.
??itab1-ernam?=?sy-uname.
??itab1-text?=?i_text.
??APPEND?itab1.
??PERFORM?insert_zszd219.
??SELECT?SINGLE?apqi~mandant?apqi~groupid?apqi~qid?apqi~qstate
???????????????apql~temseid
????INTO?(ijob-mandant,ijob-groupid,ijob-qid,ijob-qstate,ijob-temseid)
????FROM?apqi?INNER?JOIN?apql
?????????????ON?apql~mandant?=?apqi~mandant
?????????????AND?apql~groupid?=?apqi~groupid
?????????????AND?apql~qid?=?apqi~qid
??????WHERE?apqi~groupid?=?p_session
????????AND?apqi~datatyp?=?'BDC'
????????AND?apqi~mandant?=?sy-mandt?.
??IF?sy-subrc?=?0?AND?ijob-qstate?=?'F'.
????READ?TABLE?itab1?INDEX?1.
????itab1-state?=?'F'.
????MODIFY?itab1?INDEX?1.
????PERFORM?insert_zszd219.
????WRITE:?/?'Cancel?Invoice?Sucessful'.
??ELSEIF?sy-subrc?=?0?AND?ijob-qstate?<>?'F'.
????PERFORM?read_bdc_log_plain?TABLES?logtable?USING?ijob-temseid?ijob-mandant.
??ELSEIF?sy-subrc?<>?0.
????WRITE:/?'Job?name:?',p_session,'?has?not?finish.'.
??ENDIF.
??CHECK?NOT?bdclm[]?IS?INITIAL.
??LOOP?AT?itab1.
????READ?TABLE?bdclm?WITH?KEY?tcode?=?'MR8M'
??????????????????????????????tcnt?=?sy-tabix.
????CHECK?sy-subrc?=?0.
????MOVE-CORRESPONDING?itab1?TO?errtab.
????IF?bdclm-mart?=?'E'.
??????errtab-mess?=??bdclm-longtext.
????ELSE.
??????errtab-mess?=?'Cancel?Invoice?Sucessful'.
????ENDIF.
????APPEND?errtab.
????CLEAR?errtab.
??ENDLOOP.
ENDFORM. ? ********************************************************* FORM?write_error?.
??DATA:?count?TYPE?i.
??count?=?0.
??LOOP?AT?errtab.
????IF?count?=?0.
??????FORMAT?COLOR?3?ON.
??????WRITE:?/01?errtab.
??????FORMAT?COLOR?3?OFF.
??????SKIP?1.
????ELSE.
??????WRITE:?/01?errtab.
????ENDIF.
????count?=?1.
??ENDLOOP.
ENDFORM.????????????????????"?WRITE_ERROR
??????vf_start_row?TYPE?i,
??????vf_end_col???TYPE?i,
??????vf_end_row???TYPE?i.
DATA:?vf_index?TYPE?i.
FIELD-SYMBOLS:?<fs>. ??定義 BDC 用到的參數(shù). DATA:?BEGIN?OF?bdcdata?OCCURS?0.
????????INCLUDE?STRUCTURE?bdcdata.
DATA:?END?OF?bdcdata.
DATA:?BEGIN?OF?messtab?OCCURS?0.
????????INCLUDE?STRUCTURE?bdcmsgcoll.
DATA:?END?OF?messtab.
DATA:?BEGIN?OF?errlist?OCCURS?0.
????????INCLUDE?STRUCTURE?itab0.
DATA:?END?OF?errlist.
DATA:?cnt?TYPE?i.
DATA:?tcode?LIKE?tstc-tcode,
??????cnt_input?TYPE?i,
??????cnt_error?TYPE?i,
??????cnt_update?TYPE?i,
??????c_update?TYPE?c?VALUE?'S'.
Start-of-selection. ??PERFORM?upload_from_pc?USING?i_file1.
??PERFORM?modify.
??PERFORM?output_result.
??PERFORM?output_error?USING?i_file2. ********************************************************* FORM?modify?.
??DESCRIBE?TABLE?itab0?LINES?cnt.
??IF?cnt?<>?0.
????LOOP?AT?itab0.
??????PERFORM?check_data.
??????PERFORM?pre_bdcdata.
??????PERFORM?call_transaction_form.
????ENDLOOP.
??ENDIF.
ENDFORM. *********************************************************** FORM?pre_bdcdata?.
??REFRESH:?bdcdata.
??PERFORM?scr_1.
??PERFORM?scr_2.
??PERFORM?scr_3.
??PERFORM?scr_4.
ENDFORM. ************************************************************ FORM?scr_1?.
??PERFORM?bdc_dynpro?USING?'SAPLAIST'?'0100'.
??PERFORM?bdc_field?USING?'BDC_CURSOR'?'ANLA-ANLN1'.
??PERFORM?bdc_field?USING?'BDC_OKCODE'?'/00'.
??PERFORM?bdc_field?USING?'ANLA-ANLN1'?itab0-anln1.
??PERFORM?bdc_field?USING?'ANLA-BUKRS'?itab0-bukrs.
ENDFORM.? *********************************************************** FORM?bdc_dynpro??USING??program?dynpro.
??CLEAR?bdcdata.
??bdcdata-program?=?program.
??bdcdata-dynpro??=?dynpro.
??bdcdata-dynbegin??=?'X'.
??APPEND?bdcdata.
ENDFORM.????????????????????"?BDC_DYNPRO
*&---------------------------------------------------------------------*
*&??????Form??BDC_FIELD
*&---------------------------------------------------------------------*
FORM?bdc_field??USING??fnam?fval.
??CLEAR?bdcdata.
??bdcdata-fnam?=?fnam.
??bdcdata-fval??=?fval.
??APPEND?bdcdata.
ENDFORM.????????????????????"?BDC_FIELD ************************************************************************** FORM?call_transaction_form?.
??CALL?TRANSACTION?tcode
????USING?bdcdata
????MODE?s_mode
????UPDATE?c_update
????MESSAGES?INTO?messtab.
??IF?sy-subrc?NE?0.
????ADD?1?TO?cnt_error.
????PERFORM?append_err_file.
??ELSE.
????ADD?1?TO?cnt_update.
??ENDIF.
ENDFORM. ? ******************************************************* FORM?append_err_file?.
??MOVE-CORRESPONDING?itab0?TO?errlist.
??APPEND?errlist.
??CLEAR?errlist.
ENDFORM.????????????????????"?APPEND_ERR_FILE
*&---------------------------------------------------------------------*
*&??????Form??OUTPUT_RESULT
*&---------------------------------------------------------------------*
FORM?output_result?.
??SKIP?2.
??ULINE.
??WRITE:?/?'Number?of?input:?',?20?cnt_input.
??WRITE:?/?'Number?of?update:?',?20?cnt_update.
??WRITE:?/?'Number?of?error:?',?20?cnt_error.
ENDFORM.????????????????????"?OUTPUT_RESULT
Note: ???上面的方式執(zhí)行者也必須有執(zhí)行 Tcode 的權限, 某些情況下 User 可能沒此權限, 這種情況下就要換另外一種方式去做(會話). ???1. ?數(shù)據(jù)傳輸程序從數(shù)據(jù)文件中獲取數(shù)據(jù)傳輸信息,生成批輸入會話, 會話通常以后臺模式調(diào)用 SAP 事務并模擬用戶對話進行數(shù)據(jù)傳輸. 同時, 會話中還包含所有需要傳輸?shù)臄?shù)據(jù), 這些數(shù)據(jù)將在處理會話時輸入應用事務的各個屏幕, 并更新數(shù)據(jù)庫. ???2. 會話的創(chuàng)建過程與處理過程是分開進行的. 在創(chuàng)建批輸入對話之后, 可以通過程序 RSBDCSUB 或批輸入監(jiān)控器(SM35)來處理該會話, 會話的處理過程即通過事務將數(shù)據(jù)傳輸?shù)?SAP 系統(tǒng)的過程. ???3. 創(chuàng)建批輸入會話之后, 如果會話以后臺模式處理(包括提交后臺作業(yè)或者在批輸入監(jiān)按器中以后臺模式運行), 系統(tǒng)將使用會話創(chuàng)建用戶來進行相關事務的權限檢查. 如果以交互模式處理會話, 則將檢查在線處理該會話的用戶權限. ???4. 對于某些字段類型為?QUAN 的, 如果定義上傳的內(nèi)表字段的類型也為 QUAN, 則程式執(zhí)行時,可能出現(xiàn) "Input value is longer than screen field." 解決這個的辦法就是把這個定義成 char 型. ???5. F1, F4 功能以及自定義的 F1, F4幫助都不能被錄制. ???6. 系統(tǒng)(system)和(Help)菜單中的功能均無法錄制. ???7. 默認變式, 即事務變式中的字段值不能被錄制 ???8. 錯誤和警告信息不能被錄制 ???9. 有些較新的 SAP 控件不支持錄制及批量輸入的功能. ???10. 有些新的 Tcode 不支持錄制 ???11. 滾動條功能不能被錄制, 錄制時應使用功能鍵 F21-F24. ???12. 最好使用字符型來定義內(nèi)表字段, 不要用 Like 去參照其它數(shù)據(jù)對象來定義, 那樣容易報錯, 不同用戶定義的日期風格會存在差異, 使用 write date2 to date1 來實現(xiàn)日期格式的轉(zhuǎn)換. DATA:?p_groupid?LIKE?apqi-groupid.
DATA:?p_user?LIKE?sy-uname. *??PERFORM?bdc_open_group.
*??PERFORM?pre_bdc.
*??PERFORM?bdc_insert_group.
*??PERFORM?bdc_close_group?.
*??PERFORM?get_session_state?USING?p_groupid?.
*??PERFORM?write_error. ************************************************************** FORM?bdc_open_group?.
??CONCATENATE??sy-datum?sy-uzeit?INTO?p_groupid.
??CALL?FUNCTION?'BDC_OPEN_GROUP'??"open?session
????EXPORTING
?????????client??????????????=?sy-mandt
*?????????DEST????????????????=?FILLER8
?????????group???????????????=?p_groupid
*?????????HOLDDATE????????????=?FILLER8
?????????keep????????????????=?'X'
?????????user????????????????=?p_user
*?????????RECORD??????????????=?FILLER1
*????IMPORTING
*?????????QID?????????????????=
????EXCEPTIONS
?????????client_invalid??????=?1
?????????destination_invalid?=?2
?????????group_invalid???????=?3
?????????group_is_locked?????=?4
?????????holddate_invalid????=?5
?????????internal_error??????=?6
?????????queue_error?????????=?7
?????????running?????????????=?8
?????????system_lock_error???=?9
?????????user_invalid????????=?10
?????????OTHERS??????????????=?11.
ENDFORM.????????????????????"?BDC_OPEN_GROUP ************************************************************ FORM?pre_bdc?.
??REFRESH?bdcdata.
??PERFORM?bdc_dynpro?USING?'SAPLMR1M'?'0300'.
??PERFORM?bdc_field??USING?'BDC_CURSOR'?'G_BUDAT'.
??PERFORM?bdc_field??USING?'BDC_OKCODE'?'=CANC'.
??PERFORM?bdc_field??USING?'RBKPV-BELNR'?i_belnr.
??PERFORM?bdc_field??USING?'RBKPV-GJAHR'?i_gjahr.
??PERFORM?bdc_field??USING?'UF05A-STGRD'?i_stgrd.
??PERFORM?bdc_field??USING?'G_BUDAT'?i_budat.
ENDFORM.? ************************************************************* FORM?bdc_insert_group?.
??CALL?FUNCTION?'BDC_INSERT'
????EXPORTING
??????tcode????????????=?tcode
????TABLES
??????dynprotab????????=?bdcdata
????EXCEPTIONS
??????internal_error???=?1
??????not_open?????????=?2
??????queue_error??????=?3
??????tcode_invalid????=?4
??????printing_invalid?=?5
??????posting_invalid??=?6
??????OTHERS???????????=?7.
ENDFORM.????????????????????"?BDC_INSERT_GROUP ********************************************************* FORM?bdc_close_group?.
??CALL?FUNCTION?'BDC_CLOSE_GROUP'
????EXCEPTIONS
??????not_open????=?1
??????queue_error?=?2
??????OTHERS??????=?3.
??SUBMIT?rsbdcsub?WITH?mappe?EQ?p_groupid
???????????????WITH?von?EQ?sy-datum
???????????????WITH?bis?EQ?sy-datum
???????????????WITH?fehler?EQ?'.'
???????????????EXPORTING?LIST?TO?MEMORY
???????????????AND?RETURN.
??WAIT?UP?TO?10?SECONDS?.
ENDFORM.????????????????????"?BDC_CLOSE_GROUP ********************************************************** FORM?get_session_state??USING???p_session.
??CLEAR:?itab1,itab1[].
??itab1-groupid?=?p_groupid.
??itab1-belnr?=?i_belnr.
??itab1-gjahr?=?i_gjahr.
??itab1-stgrd?=?i_stgrd.
??itab1-budat?=?i_budat.
??itab1-erdat?=?sy-datum.
??itab1-uzeit?=?sy-uzeit.
??itab1-ernam?=?sy-uname.
??itab1-text?=?i_text.
??APPEND?itab1.
??PERFORM?insert_zszd219.
??SELECT?SINGLE?apqi~mandant?apqi~groupid?apqi~qid?apqi~qstate
???????????????apql~temseid
????INTO?(ijob-mandant,ijob-groupid,ijob-qid,ijob-qstate,ijob-temseid)
????FROM?apqi?INNER?JOIN?apql
?????????????ON?apql~mandant?=?apqi~mandant
?????????????AND?apql~groupid?=?apqi~groupid
?????????????AND?apql~qid?=?apqi~qid
??????WHERE?apqi~groupid?=?p_session
????????AND?apqi~datatyp?=?'BDC'
????????AND?apqi~mandant?=?sy-mandt?.
??IF?sy-subrc?=?0?AND?ijob-qstate?=?'F'.
????READ?TABLE?itab1?INDEX?1.
????itab1-state?=?'F'.
????MODIFY?itab1?INDEX?1.
????PERFORM?insert_zszd219.
????WRITE:?/?'Cancel?Invoice?Sucessful'.
??ELSEIF?sy-subrc?=?0?AND?ijob-qstate?<>?'F'.
????PERFORM?read_bdc_log_plain?TABLES?logtable?USING?ijob-temseid?ijob-mandant.
??ELSEIF?sy-subrc?<>?0.
????WRITE:/?'Job?name:?',p_session,'?has?not?finish.'.
??ENDIF.
??CHECK?NOT?bdclm[]?IS?INITIAL.
??LOOP?AT?itab1.
????READ?TABLE?bdclm?WITH?KEY?tcode?=?'MR8M'
??????????????????????????????tcnt?=?sy-tabix.
????CHECK?sy-subrc?=?0.
????MOVE-CORRESPONDING?itab1?TO?errtab.
????IF?bdclm-mart?=?'E'.
??????errtab-mess?=??bdclm-longtext.
????ELSE.
??????errtab-mess?=?'Cancel?Invoice?Sucessful'.
????ENDIF.
????APPEND?errtab.
????CLEAR?errtab.
??ENDLOOP.
ENDFORM. ? ********************************************************* FORM?write_error?.
??DATA:?count?TYPE?i.
??count?=?0.
??LOOP?AT?errtab.
????IF?count?=?0.
??????FORMAT?COLOR?3?ON.
??????WRITE:?/01?errtab.
??????FORMAT?COLOR?3?OFF.
??????SKIP?1.
????ELSE.
??????WRITE:?/01?errtab.
????ENDIF.
????count?=?1.
??ENDLOOP.
ENDFORM.????????????????????"?WRITE_ERROR
總結(jié)
- 上一篇: 内表之间的复制
- 下一篇: SAP 自定义 Table 中的小陷阱