BDC Table

BDC Table Structure

BDC Table是一個Structure,用來存放要放入輸入畫面的資料,包含有以下的欄位:

 

Field Name

Type

Description

Program

Char(8)

Program name of Transaction

Dynpro

Char(4)

Screen number of Transaction

Dynbegin

Char(1)

Indicator for new Screen

Fnam

Char(35)

Name of  Database Field from Screen

Fval

Char(80)

Value to Submit to Field

 

可在程式開始之初宣告一個Internal Table使用BDCDATAStructure:

 

DATA  BEGIN  OF  INT_BDC  OCCURS  0.

      INCLUDE  STRUCTURE  BDCDATA.

DATA  END  OF INT_BDC.

 

如在以上的畫面中要輸入VBAK-KUNNR VBAK-NAME1 兩個欄位的內容,分別要填入

‘ 34051920’ 台達電子,其BDC Table內容如下:

 

Program

Dynpro

Dynbegin

Fnam

Fval

SAPMV 45A

0300

X

 

 

 

 

 

VBAK-KUNNR

34051920

 

 

 

VBAK-NAME1

台達電子

 

 

 

BDC_OKCODE

/nn

 

BDC_OKCODE欄位的值就是結束輸入時所要按下的鍵盤控制碼,

 

& 常用的BDC Okcode:

OKCODE     Description                                      

  /nn          Function Key nn

  /00          Enter

  / 8            F 8Continue or Execute

  / 11           F 11Post

  %EX        Exit

  BACK       F3Back Previous Screen

  DLT         Delete

  PICK        Double Click

  SAVE        F11Save

 

存入BDC Table的資料

   首先我們需建立兩個副程式,BDC_SCREEN是來存入ProgramDynproDynbegin

   三個欄位,也就是輸入畫面的程式名稱及Screen NumberBDC_FIELD:用來存入

   FnamFval兩個欄位,也就是輸入畫面所需填入的各個欄位內容,程式內容如:

  

* Add BDC Screen Field Data

FORM BDC_SCREEN TABLES P_BDC STRUCTURE BDCDATA

     USING P_PROGRAM P_SCREEN.

  CLEAR  P_BDC.

  P_BDC-PROGRAM  =  P_PROGRAM.

  P_BDC-DYNPRO   =  P_SCREEN.

  P_BDC-DYNBEGIN = 'X'.

  APPEND  P_BDC.

ENDFORM.

 

* Add BDC Field Data

FORM BDC_FIELD TABLES P_BDC STRUCTURE BDCDATA

     USING P_NAME  P_VALUE.

  CLEAR P_BDC.

  CASE  P_VALUE.

    WHEN ''.

    WHEN OTHERS.

      P_BDC-FNAM  =  P_NAME.

      P_BDC-FVAL  =  P_VALUE.

      APPEND  P_BDC.

  ENDCASE.

ENDFORM.

 

 

 

 

接下來在程式中去呼叫這兩個副程式來填入資料,程式敘述如下:

   PERFORM BDC_SCREEN  TABLES  INT_BDC

      USING  'SAPMV 45A '  '0300'.

   PERFORM BDC_FIELD  TABLES  INT_BDC:

     USING  'VBAK-KUNNR'  ‘ 34051920’ ,

     USING  'VBAK-NAME1'  台達電子’,

     USING  'BDC_OKCODE'  '/00'.       " Save and end

 

 Call Transaction指令

將資料依序填入BDC Table後要寫入R/3Database時要使用 CALL TRANSACTION

指令,指令格式如下:

 

   CALL  TRANSACTION  WITH  <tcode>

                          USING  <BDC Table>

                          MODE  <Display Mode>

   <Display Mode> 可分成:

   A      Show all Screen

   E      Show only Screen with Error

   N      Show no Screen

 

:

   CALL  TRANSACTION  'VA03'

             USING  INT_BDC

             MODE  'E'.

 

Example for BDC Program

例如我們想經由BDC ProgramSales Empolyee的資料由ASCII Text File去更新 R/3

資料庫Sales Empolyee Persolnal Data 會有以下兩個畫面要輸入:  



Program Name SAPMP 50A Screen Number 1000Transaction Code PAL3

 

Program Name SAPMP 50A Screen Number 2042Transaction Code PAL3

 

 

Screen 1000 要填入的資料是

Description        Field Name         Value

Personal Number   RP 50G -PERNR      242147

Info Type          RP 50G -CHOIL      Personal Data

 

Screen 2042 要填入的資料是

Description        Field Name         Value

From Date         P002-BEGDA       01/13/1969

To Date           P002-ENDDA       12/31/9999

Last Name         P002-NACHN       Dora

First Name         P002-VORNA       Cheng

 

欲轉入的ASCII Text File檔名是 empoly.txt,其格式為

Description        Length   Position      Value

Personal Number     10         1        242147

Info Type           20        11        Personal Data

From Date          10        31        01/13/1969

To Date            10        41        12/31/9999

Last Name          20        61        Dora

First Name          20        81        Cheng

 

程式如下:

 

*  PROGRAM SOURCE HEADER 

* Program Name: ZTBDC00

* Description:  Change Sales Empolyee Data Using BDC Program

* Date/Author:   1998/06/10 周慶日

* Table Update:

* Special Logic:

* Include:

*---------------------------------------------------------------

*  MODIFICATION LOG

*---------------------------------------------------------------

* ChangeDate Programmer    Request      Description

* ========== ============= ============ ==========================

* 1998/06/10 Chou                       NEW PROGRAM

*----------------------------------------------------------------------------

 

* REPORT NAME 

*------------------------------------------------------------------

REPORT ZTBDC00

       NO STANDARD PAGE HEADING

          MESSAGE-ID ZZ

          LINE-COUNT 60 

          LINE-SIZE  80.

 

*DATA

*----------------------------------------------------------------

TABLES: RP 50G ,P002.

DATA: BEGIN OF INT_BDC  OCCURS  0.

      INCLUDE  STRUCTURE  BDCDATA.

DATA: END  OF  INT_BDC.

 

* Work Internal Table

DATA: BEGIN OF IN_REC,

     PERNR   LIKE  RP 50G -PERNR,

     CHOIL   LIKE  RP 50G -CHOIL,

     BEGDA  LIKE   P002-BEGDA,

     ENDDA  LIKE   P002-ENDDA,

     NACHN  LIKE   P002-NACHN,

     VORNA  LIKE   P002-VORNA,

      END  OF  IN_REC.

 

DATA: P_FILE(30)  VALUE  ‘empoly.txt’.  “ASCII Text File Name       

* INITIALIZATION

*----------------------------------------------------------------

INITIALIZATION.

* AT START SELECTION

*---------------------------------------------------------------

START-OF-SELECTION.

  PERFORM READ_DATA.

  PERFORM PROCESS_DATA.

 

*  END OF SELECTION

*---------------------------------------------------------------------

END-OF-SELECTION.

  PERFORM  CLEAN_UP.

 

* FORM

*-------------------------------------------------------------

* Read Data  OPEN ASCII Text File

*-------------------------------------------------------------

FORM READ_DATA.

  OPEN  DATASET  P_FILE  FOR  INPUT  IN  TEXT  MODE.

 

  IF  SY-SUBRC   NE   0.

     MESSAGE  E999  WITH  ‘Cannot  Open ‘  P_FILE.

  ENDIF. 

 

ENDFORM.

 

 

* Process Data

*-------------------------------------------------------------

FORM PROCESS_DATA.

  DO.

    READ DATASET P_FILE  INTO  IN_REC.  “Add Data To Internal Table

IF SY-SUBRC   NE   0.

   EXIT.

ENDIF.

 

PERFORM  BUILD_BDC.    “Add to BDC Table

PERFORM  SUBMIT_BDC.  “Call Transaction Code To Change Data

 

 ENDDO.

ENDFORM.

 

*----------------------------------------------------

* Add Data to BDC Table

FORM BUILD_BDC.

  PERFORM  BDC_SCREEN  TABLES  INT_BDC 

           USING  ‘SAPMP 50A ’  ‘ 1000’ .

  PERFORM  BDC_FIELD  TABLES   INT_BDC:

           USING  ‘RP 50G -PERNR’ IN_REC-PERNR,

           USING  ‘RP 50G -CHOIL’  IN_REC-CHOIL,

           USING  ‘BDC_OKCODE’  ‘/ 00’ .

 PERFORM  BDC_SCREEN  TABLES  INT_BDC 

           USING  ‘SAPMP 50A ’  ‘ 2042’ .

 PERFORM  BDC_FIELD  TABLES   INT_BDC:

           USING  ‘P0002-BEGDA’ IN_REC-BEGDA,

           USING  ‘P0002-ENDDA’ IN_REC-ENDDA,

           USING  ‘P0002-NACHN’ IN_REC-NACHN,

           USING  ‘P0002-VORNA’ IN_REC-VORNA,

           USING  ‘BDC_OKCODE’  ‘/ 11’ .

 ENDFORM.

 

*----------------------------------------------------------------

* Call Transaction Code to Execute Change Data

FORM  SUBMIT_BDC.

  CALL  TRANSACTION  ‘PAL 3’   USING  INT_BDC

        MODE  ‘N’.

  REFRESH  INT_BDC.  BDC Table資料清除

ENDFORM.

 

*------------------------------------------------------------------

* Close ASCII Text File

FORM  CLEAN_UP.

  CLOSE  DATASET  P_NAME.

  IF  SY-SUBRC   NE   0.

     MESSAGE  E999  WITH  ‘Cannot  Close ‘ P_FILE.

  ENDIF. 

 

ENDFORM.

 

*------------------------------------------------------------------

* Add BDC Screen Field Data

*---------------------------------------------------------------------------------------------------

FORM BDC_SCREEN TABLES P_BDC STRUCTURE BDCDATA

     USING P_PROGRAM P_SCREEN.

  CLEAR  P_BDC.

  P_BDC-PROGRAM  =  P_PROGRAM.

  P_BDC-DYNPRO   =  P_SCREEN.

  P_BDC-DYNBEGIN = 'X'.

  APPEND  P_BDC.

ENDFORM.

 

* Add BDC Field Data

*----------------------------------------------------------------------------------------------

FORM BDC_FIELD TABLES P_BDC STRUCTURE BDCDATA

     USING P_NAME P_VALUE.

  CLEAR  P_BDC.

  CASE  P_VALUE.

    WHEN ''.

    WHEN OTHERS.

      P_BDC-FNAM  =  P_NAME.

      P_BDC-FVAL  =  P_VALUE.

      APPEND  P_BDC.

  ENDCASE.

ENDFORM.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值