BDC 开发步骤

转载 2015年07月10日 10:36:09
Step 1. 录制 BDC.
        SM35/SHDB 进入 BDC 录制界面, 开始录制.
Step 2. 把录制好的 BDC 转成 ABAP 程式.
  定义通过 EXCEL 上传用到的参数,
DATAif_intern TYPE alsmex_tabline OCCURS 0 WITH HEADER LINE.
DATAvf_start_col TYPE i,
      vf_start_row TYPE i,
      vf_end_col   TYPE i,
      vf_end_row   TYPE i.
DATAvf_index TYPE i.
FIELD-SYMBOLS: <fs>.
  定义 BDC 用到的参数.
DATABEGIN OF bdcdata OCCURS 0.
        INCLUDE STRUCTURE bdcdata.
DATAEND OF bdcdata.
DATABEGIN OF messtab OCCURS 0.
        INCLUDE STRUCTURE bdcmsgcoll.
DATAEND OF messtab.
DATABEGIN OF errlist OCCURS 0.
        INCLUDE STRUCTURE itab0.
DATAEND OF errlist.
DATAcnt TYPE i.
DATAtcode 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 .
  REFRESHbdcdata.
  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:
   上面的方式执行者也必须有执行 Tcode 的权限, 某些情况下 User 可能没此权限, 这种情况下就要换另外一种方式去做(会话).
   1.  数据传输程序从数据文件中获取数据传输信息,生成批输入会话, 会话通常以后台模式调用 SAP 事务并模拟用户对话进行数据传输. 同时, 会话中还包含所有需要传输的数据, 这些数据将在处理会话时输入应用事务的各个屏幕, 并更新数据库.
   2. 会话的创建过程与处理过程是分开进行的. 在创建批输入对话之后, 可以通过程序 RSBDCSUB 或批输入监控器(SM35)来处理该会话, 会话的处理过程即通过事务将数据传输到 SAP 系统的过程.
   3. 创建批输入会话之后, 如果会话以后台模式处理(包括提交后台作业或者在批输入监按器中以后台模式运行), 系统将使用会话创建用户来进行相关事务的权限检查. 如果以交互模式处理会话, 则将检查在线处理该会话的用户权限.
   4. 对于某些字段类型为 QUAN 的, 如果定义上传的内表字段的类型也为 QUAN, 则程式执行时,可能出现 "Input value is longer than screen field." 解决这个的办法就是把这个定义成 char 型.
   5. F1, F4 功能以及自定义的 F1, F4帮助都不能被录制.
   6. 系统(system)和(Help)菜单中的功能均无法录制.
   7. 默认变式, 即事务变式中的字段值不能被录制
   8. 错误和警告信息不能被录制
   9. 有些较新的 SAP 控件不支持录制及批量输入的功能.
   10. 有些新的 Tcode 不支持录制
   11. 滚动条功能不能被录制, 录制时应使用功能键 F21-F24.
   12. 最好使用字符型来定义内表字段, 不要用 Like 去参照其它数据对象来定义, 那样容易报错, 不同用户定义的日期风格会存在差异, 使用 write date2 to date1 来实现日期格式的转换.
DATAp_groupid LIKE apqi-groupid.
DATAp_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.
  CLEARitab1,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 .
  DATAcount 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


相关文章推荐

SAP 录屏BDC使用—实例

1)  输入TCode:SHDB进入BDC录制初始界面,该界面可以实现已创建BDC Session信息的查看、删除及锁定等操作 2)  单击工具栏 Newrecording 按钮创建一个...

ABAP 程序中退出操作(CHECK, EXIT, RETURN, LEAVE PROGRAM...)

ABAP 程序中退出操作(CHECK, EXIT, RETURN, LEAVE PROGRAM...)这里总结一下几个常用的退出操作:CHECK.(SAP官方推荐只在循环中使用)1)CHECK 后面要...

BDC程序需要注意的问题!(常见问题集合)

BDC在FICO模块是经常用到的,用于批量过账程序时使用的,但是稳定性不如使用BAPI的好,但是BDC可以有多种T-CODE进行过账,也有不同的模式,功能也不错,但是在写程序或者是出现问题的时候需要考...

ABAP的一些命令处理(CHECK、STOP、EXIT、continue、return、reject)

待定

abap CA CO CS等操作符

abap CA CO CS 1.CA  contain  any str1 ca str2  遍历str1,其中的每个字符对应到str2的每个字符,如果对应成功,注意:只要有一个字符成功,就为...

ABAP中字符串的处理(包含特殊字符)

1. 字符串连接 CONCATENATE dobj1 dobj2 ... INTO result [IN { BYTE | CHARACTER } MODE] [SEPARATED BY sep...

快速开发之BDC模板程序

BDC的调试和创建参考用到的TCODE为SHDB,SM35; 以下为网上收索的一个的BDC程序事例, *&—————————————————————————————–* *& 程序名  ...

BDC导入数据

  • 2014-02-20 10:34
  • 24KB
  • 下载

SAP_BDC_举例讲解

  • 2012-04-19 11:18
  • 146KB
  • 下载

BDC

BDC 分为传统输入方法(Classical Batch Input method)和调用事务方法(Call Transaction Method)。由于程序的长度不是非常长,所以我就不分帖描述了,在...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)