日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

BDC 开发步骤

發(fā)布時間:2025/3/20 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BDC 开发步骤 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
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


總結(jié)

以上是生活随笔為你收集整理的BDC 开发步骤的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。