Retain BDC Session

Hi,
The standard SAP functionality (in Oil&Gas-SAPLOIAI) is creating a session with Deletion indicator.
The standard SAP functionality is not using KEEP parameter (BDC_OPEN_GROUP)
Once the session is processed, it is getting deleted.
We want to retain the session, even after processing the session.
All our bdc sessions start with NET*
Is there a program that we can run that will modify the delete indicator to 'KEEP'.
SAP an option to modify the delete indicator manually. But many sessions will be created each day and our users don't want to go with this option.
Can you please suggest if a custom program can be written to modify the delete indicator.
Thanks in Advance.
-Vidya

Hi Anil,
call tranction may solve your problem in genral to create our own erron log we will use call tranction. i will update you if i got more information.

Similar Messages

  • Capturing Batch Input Log without keeping BDC session

    Hi all -
    Would like to capture the Batch Input log and keep it persistent in some manner (for example using an application log) without keeping the corresponding BDC session.  The reason for this is that any manual corrections to data interfaces through BDC sessions MUST be logged indefinitely for audit purposes.  The actual BDC sessions are HUGE and therefore precludes saving the entire BDC session.  My thoughts are user-exit'ing in BDC session either as a Batch Input Log is being created or when a Session is being deleted (NOTE: running ECC 6.0 which has new enhancement concept permitting extremely flexible user-exit'ing so exit points are NOT an issue and repair/core mode not required).  Anyone see any flaws with this approach or can recommend perhaps a simpler or standard approach so that Batch Input Logs are retained indefinitely whereas the Session is deleted?
    Many thanks,
    Pat

    Hi Pat,
    Why dont you try archiving?
    For archiving, archive object BDCLOGPROD can be used. if archived, then you can read the archived logs using program RSBDC_ARCHREAD (also accessible from SARA->Read).
    See some notes if it is helpful:
    147354, 18319, 24438, 18307
    Also have a look at the Data Management Guide available at service.sap.com/data-archiving.
    Hope this helps,
    Naveen

  • BDC SESSION METHOD EXPLAINED

    Hi,
    Eplained BDC Session Method
    flat file upload into sap

    ABAP BDC SESSION METHOD SAMPLE CODE
    pool of form routines
    include zmppn001.
    Define BDC Table Structure
    data: begin of itab_bdc_tab occurs 0.
    include structure bdcdata.
    data: end of itab_bdc_tab.
    Input record layout of Leagcy File
    data: begin of itab_xcel occurs 0,
    matnr(18) type c,
    werks(4) type c,
    alnag(2) type c,
    verid(4) type c,
    text1(40) type c,
    bstmi like mkal-bstmi,
    bstma like mkal-bstma,
    adatu(10) type c,
    bdatu(10) type c,
    stlal(2) type c,
    stlan(1) type c,
    serkz(1) type c,
    mdv01(8) type c,
    elpro(4) type c,
    alort(4) type c,
    end of itab_xcel.
    data: begin of lt_pp04_cache occurs 0,
    matnr like itab_xcel-matnr,
    werks like itab_xcel-werks,
    alnag like itab_xcel-alnag,
    plnnr like mapl-plnnr,
    arbpl like crhd-arbpl,
    ktext like crtx-ktext,
    end of lt_pp04_cache.
    data: v_ssnnr(4) type n,
    v_lines_in_xcel like sy-tabix,
    v_ssnname like apqi-groupid,
    v_trans_in_ssn type i,
    wa_xcel LIKE itab_xcel,
    l_tabix like sy-tabix,
    v_matnr like rc27m-matnr,
    v_plnnr like mapl-plnnr,
    v_plnal like mapl-plnal,
    v_tcode like sy-tcode value 'C223',
    v_plnty like plas-plnty value 'R',
    v_objty like crhd-objty value 'A',
    v_plpo_steus like plpo-steus value 'PP04',
    v_verwe like crhd-verwe value '0007'.
    Parameters
    selection-screen: skip 3.
    selection-screen: begin of block 1 with frame.
    parameters: p_name like rlgrap-filename
    default 'C:\My Documents\InputFile.txt'
    obligatory,
    bdc session name prefix
    p_bdcpfx(6) default 'ZPVCRT'
    obligatory,
    number for transction per BDC session
    p_trnssn type i
    default 2000 obligatory,
    retain the BDC session after successfull execution
    p_keep like apqi-qerase
    default 'X',
    user who will be executing BDC session
    p_uname like apqi-userid
    default sy-uname
    obligatory.
    selection-screen: end of block 1.
    possible entry list (F4 dropdown) for input file name
    at selection-screen on value-request for p_name.
    *-SELECT FILE FROM USERS LOCAL PC
    call function 'WS_FILENAME_GET'
    exporting
    DEF_FILENAME = ' '
    def_path = 'C:\Temp\'
    mask = ',.,..'
    mode = 'O'
    title = 'Select File '(007)
    importing
    filename = p_name
    RC =
    exceptions
    inv_winsys = 1
    no_batch = 2
    selection_cancel = 3
    selection_error = 4
    others = 5.
    if sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    endif.
    begin the show
    start-of-selection.
    read data from input file
    perform transfer_xcel_to_itab.
    loop at itab_xcel.
    hang on to xcel line num
    l_tabix = sy-tabix.
    each line in the xcel file marks begining of new prod.version defn
    if num-of-trnas-in-session = 0, create new BDC session
    if v_trans_in_ssn is initial.
    perform bdc_session_open.
    endif.
    begin new bdc script for rtg create trans
    fill in bdc-data for prod.version maintenance screens
    perform bdc_build_script.
    insert the bdc script as a BDC transaction
    perform bdc_submit_transaction.
    keep track of how many BDC transactions were inserted in the BDC
    session
    add 1 to v_trans_in_ssn.
    if the user-specified num of trans in BDC session is reached OR
    if end of input file is reached, close the BDC session
    if v_trans_in_ssn = p_trnssn or
    l_tabix = v_lines_in_xcel.
    perform bdc_session_close.
    clear v_trans_in_ssn.
    endif.
    endloop.
    top-of-page.
    call function 'Z_HEADER'
    EXPORTING
    FLEX_TEXT1 =
    FLEX_TEXT2 =
    FLEX_TEXT3 =
    FORM TRANSFER_XCEL_TO_ITAB *
    Transfer Xcel Spreadsheet to SAP Internal Table *
    form transfer_xcel_to_itab.
    Read the tab-delimited file into itab
    call function 'WS_UPLOAD'
    exporting
    filename = p_name
    filetype = 'DAT'
    IMPORTING
    filelength = flength
    tables
    data_tab = itab_xcel
    exceptions
    conversion_error = 1
    file_open_error = 2
    file_read_error = 3
    invalid_table_width = 4
    invalid_type = 5
    no_batch = 6
    unknown_error = 7
    others = 8.
    if sy-subrc = 0.
    sort the data
    sort itab_xcel by matnr werks.
    clear v_lines_in_xcel.
    if no data in the file - error out
    describe table itab_xcel lines v_lines_in_xcel.
    if v_lines_in_xcel is initial.
    write: / 'No data in input file'.
    stop.
    endif.
    else.
    if file upload failed - error out
    write: / 'Error reading input file'.
    stop.
    endif.
    endform.
    FORM BDC_SESSION_OPEN *
    Open BDC Session *
    form bdc_session_open.
    create bdc session name = prefix-from-selectn-screen + nnnn
    add 1 to v_ssnnr.
    concatenate p_bdcpfx v_ssnnr into v_ssnname.
    open new bdc session
    call function 'BDC_OPEN_GROUP'
    exporting
    client = sy-mandt
    group = v_ssnname
    keep = p_keep
    user = p_uname
    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.
    FORM BDC_BUILD_SCRIPT *
    Build BDC *
    form bdc_build_script.
    data: l_arbpl like crhd-arbpl,
    l_text1 like mkal-text1,
    l_mdv01 like mkal-mdv01,
    l_mapl like mapl.
    clear bdc-data itab - begin of new bdc transaction
    clear itab_bdc_tab.
    refresh itab_bdc_tab.
    read material cross reference tables to determine sap part#
    clear : v_matnr, v_plnnr, v_plnal.
    perform read_matnr_cross_ref using itab_xcel-matnr
    itab_xcel-werks
    changing v_matnr.
    determine the version description to use
    if itab_xcel-text1 is initial.
    l_text1 = itab_xcel-verid.
    else.
    l_text1 = itab_xcel-text1.
    endif.
    determine the routing group# and group ctr# to use
    perform read_routing .
    determine the production line to use
    if itab_xcel-mdv01 is initial.
    if not provided in the file then:
    prod line = work ctr on the last PP04 op of the rtg determined above
    perform read_wc_on_last_pp04 using v_plnnr v_plnal
    changing l_mdv01.
    NOTE: when executing the above form\routine, if v_plnnr is initial
    or v_plnal is initial, THEN l_mdv01 will automatically be
    returned blank (ie initial)
    else.
    l_mdv01 = itab_xcel-mdv01.
    endif.
    build bdc script
    perform bdc_build_script_record
    fill in initial screen
    using: 'X' 'SAPLCMFV' '1000',
    ' ' 'BDC_OKCODE' '=ENTE',
    ' ' 'MKAL-WERKS' itab_xcel-werks,
    ' ' 'MKAL-MATNR' v_matnr,
    ' ' 'MKAL_ADMIN-DISPO' space,
    ' ' 'MKAL-PLNNR' space,
    ' ' 'MKAL_ADMIN-STTAG' space,
    ' ' 'MKAL-PLNNG' space,
    ' ' 'MKAL-MDV01' space,
    ' ' 'MKAL-PLNNM' space,
    click create button on initial screen and go to detail screen
    'X' 'SAPLCMFV' '1000',
    ' ' 'BDC_OKCODE' '=CREA',
    fill in the detail screen and go back to initial screen
    'X' 'SAPLCMFV' '2000',
    ' ' 'BDC_OKCODE' '=CLOS',
    ' ' 'MKAL_EXPAND-MATNR' v_matnr,
    ' ' 'MKAL_EXPAND-VERID' itab_xcel-verid,
    ' ' 'MKAL_EXPAND-TEXT1' l_text1,
    ' ' 'MKAL_EXPAND-BSTMI' itab_xcel-bstmi,
    ' ' 'MKAL_EXPAND-BSTMA' itab_xcel-bstma,
    ' ' 'MKAL_EXPAND-ADATU' itab_xcel-adatu,
    ' ' 'MKAL_EXPAND-BDATU' itab_xcel-bdatu,
    ' ' 'MKAL_EXPAND-PLTYG' v_plnty,
    ' ' 'MKAL_EXPAND-PLNNG' v_plnnr,
    ' ' 'MKAL_EXPAND-ALNAG' v_plnal,
    ' ' 'MKAL_EXPAND-STLAL' itab_xcel-stlal,
    ' ' 'MKAL_EXPAND-STLAN' itab_xcel-stlan,
    ' ' 'MKAL_EXPAND-SERKZ' itab_xcel-serkz,
    ' ' 'MKAL_EXPAND-MDV01' l_mdv01,
    ' ' 'MKAL_EXPAND-ELPRO' itab_xcel-elpro,
    ' ' 'MKAL_EXPAND-ALORT' itab_xcel-alort,
    save the production version from initial screen
    'X' 'SAPLCMFV' '1000',
    ' ' 'BDC_OKCODE' '=SAVE'.
    endform.
    FORM BDC_SUBMIT_TRANSACTION *
    Submit BDC Session *
    form bdc_submit_transaction.
    Load BDC script as a trqansction in BDC session
    call function 'BDC_INSERT'
    exporting
    tcode = v_tcode
    tables
    dynprotab = itab_bdc_tab
    exceptions
    internal_error = 01
    not_open = 02
    queue_error = 03
    tcode_invalid = 04.
    endform.
    FORM BDC_BUILD_SCRIPT_RECORD *
    form bdc_build_script_record using dynbegin name value.
    clear itab_bdc_tab.
    if dynbegin = 'X'.
    move: name to itab_bdc_tab-program,
    value to itab_bdc_tab-dynpro,
    'X' to itab_bdc_tab-dynbegin.
    else.
    move: name to itab_bdc_tab-fnam,
    value to itab_bdc_tab-fval.
    shift itab_bdc_tab-fval left deleting leading space.
    endif.
    append itab_bdc_tab.
    endform.
    FORM BDC_SESSION_CLOSE *
    Close BDC Session *
    form bdc_session_close.
    close the session
    call function 'BDC_CLOSE_GROUP'
    exceptions
    not_open = 1
    queue_error = 2
    others = 3.
    skip 2.
    if sy-subrc ne 0.
    write: / 'Error Closing BDC Session ' , 'RETURN CODE: ', sy-subrc.
    else.
    write : / 'Session created:', v_ssnname,
    50 '# of transactions:', v_trans_in_ssn.
    endif.
    endform.
    *& Form read_routing_cache
    *FORM read_routing_cache USING pi_matnr
    pi_werks
    pi_alnag
    pi_verid
    pi_mdv01.
    DATA: BEGIN OF lt_plpo OCCURS 0,
    vornr LIKE plpo-vornr,
    objty LIKE crhd-objty,
    objid LIKE crhd-objid,
    arbpl LIKE crhd-arbpl,
    END OF lt_plpo,
    l_mapl_plnnr LIKE mapl-plnnr.
    determine the routing group#
    CLEAR lt_pp04_cache.
    chk if its in the cache first, if not then get it from MAPL table
    and put it in the cache
    READ TABLE lt_pp04_cache WITH KEY matnr = pi_matnr
    werks = pi_werks
    alnag = pi_alnag.
    IF sy-subrc = 0.
    do nothing - lt_pp04_cache header line has rtg#
    ELSE.
    get the routing group # from MAPL
    SELECT plnnr INTO l_mapl_plnnr
    FROM mapl UP TO 1 ROWS
    WHERE matnr = pi_matnr AND
    werks = pi_werks AND
    plnty = 'R' AND
    plnal = pi_alnag AND
    loekz = space.
    ENDSELECT.
    put it in the cache internal table
    IF NOT l_mapl_plnnr IS INITIAL.
    lt_pp04_cache-matnr = pi_matnr.
    lt_pp04_cache-werks = pi_werks.
    lt_pp04_cache-alnag = pi_alnag.
    lt_pp04_cache-plnnr = l_mapl_plnnr.
    APPEND lt_pp04_cache.
    ENDIF.
    ENDIF.
    if the rtg# was determined AND
    -- the work center was not determined yet AND
    -- work center was really needed for this line in the input file
    then
    -- read the work center from last PP04 operation on the routing
    -- update the cache accordingly
    IF NOT lt_pp04_cache-plnnr IS INITIAL AND
    lt_pp04_cache-arbpl IS INITIAL AND
    ( pi_verid IS INITIAL OR
    pi_mdv01 IS INITIAL ).
    read the last PP04 operation
    CLEAR lt_plpo.
    REFRESH lt_plpo.
    SELECT vornr eobjty eobjid e~arbpl
    INTO CORRESPONDING FIELDS OF TABLE lt_plpo
    FROM plas AS b
    INNER JOIN plpo AS c
    ON bplnty = cplnty AND
    bplnnr = cplnnr AND
    bzaehl = czaehl
    INNER JOIN crhd AS e
    ON carbid = eobjid
    WHERE b~plnty = v_plnty AND
    b~plnnr = lt_pp04_cache-plnnr AND
    b~plnal = lt_pp04_cache-alnag AND
    c~loekz = space AND
    c~steus = v_plpo_steus AND
    e~objty = v_objty AND
    e~werks = lt_pp04_cache-werks AND
    e~verwe = v_verwe.
    SORT lt_plpo BY vornr DESCENDING.
    READ TABLE lt_plpo INDEX 1.
    IF NOT lt_plpo-arbpl IS INITIAL.
    lt_pp04_cache-arbpl = lt_plpo-arbpl.
    read work center description
    SELECT SINGLE ktext INTO lt_pp04_cache-ktext
    FROM crtx WHERE objty = lt_plpo-objty AND
    objid = lt_plpo-objid AND
    spras = sy-langu.
    the following read will get the index of the correct record to be
    updated in the cache
    READ TABLE lt_pp04_cache
    WITH KEY matnr = pi_matnr
    werks = pi_werks
    alnag = pi_alnag.
    MODIFY lt_pp04_cache
    INDEX sy-tabix
    TRANSPORTING arbpl ktext.
    ENDIF.
    ENDIF.
    *ENDFORM. " read_last_pp04_operation_cache
    *& Form read_routing
    form read_routing.
    data: begin of lt_mapl occurs 0,
    plnnr like mapl-plnnr,
    plnal like mapl-plnal,
    end of lt_mapl,
    l_arbpl like crhd-arbpl.
    get all the rtg# and grp ctr# from MAPL
    select plnnr plnal
    into corresponding fields of table lt_mapl
    from mapl
    where matnr = v_matnr and
    werks = itab_xcel-werks and
    plnty = v_plnty and "Rate Routing
    loekz = space. "with del flag = OFF
    sort lt_mapl by plnal.
    if not itab_xcel-verid is initial.
    if the verid=0001 then use the 1st good rtg-grp# and grp-ctr#
    if itab_xcel-verid = '0001'.
    read table lt_mapl index 1.
    v_plnnr = lt_mapl-plnnr.
    v_plnal = lt_mapl-plnal.
    else.
    if the verid<>0001 then use the rtg-grp# and grp-ctr# of the routing
    whose work center on the last PP04 operation matches the given verid
    loop at lt_mapl.
    clear l_arbpl.
    get the work center from the last PP04 operation
    perform read_wc_on_last_pp04 using lt_mapl-plnnr
    lt_mapl-plnal
    changing l_arbpl.
    if itab_xcel-verid = l_arbpl.
    v_plnnr = lt_mapl-plnnr.
    v_plnal = lt_mapl-plnal.
    exit.
    endif.
    endloop.
    endif.
    else.
    do nothing
    endif.
    For version IDs that are other then '0000' or 'ZWIP' :--
    if itab_xcel-verid NE '0000' and
    itab_xcel-verid NE 'ZWIP'.
    if routing group# or group counter was not determined, make the
    valid-to date 99/99/9999 so that the BDC, on execution, errors out.
    if v_plnnr is initial or
    v_plnal is initial.
    itab_xcel-bdatu = '99/99/9999'.
    endif.
    endif.
    determine the routing group#
    CLEAR lt_pp04_cache.
    chk if its in the cache first, if not then get it from MAPL table
    and put it in the cache
    READ TABLE lt_pp04_cache WITH KEY matnr = pi_matnr
    werks = pi_werks
    alnag = pi_alnag.
    IF sy-subrc = 0.
    do nothing - lt_pp04_cache header line has rtg#
    ELSE.
    get the routing group # from MAPL
    put it in the cache internal table
    IF NOT l_mapl_plnnr IS INITIAL.
    lt_pp04_cache-matnr = pi_matnr.
    lt_pp04_cache-werks = pi_werks.
    lt_pp04_cache-alnag = pi_alnag.
    lt_pp04_cache-plnnr = l_mapl_plnnr.
    APPEND lt_pp04_cache.
    ENDIF.
    ENDIF.
    if the rtg# was determined AND
    -- the work center was not determined yet AND
    -- work center was really needed for this line in the input file
    then
    -- read the work center from last PP04 operation on the routing
    -- update the cache accordingly
    IF NOT lt_pp04_cache-plnnr IS INITIAL AND
    lt_pp04_cache-arbpl IS INITIAL AND
    ( pi_verid IS INITIAL OR
    pi_mdv01 IS INITIAL ).
    read the last PP04 operation
    CLEAR lt_plpo.
    REFRESH lt_plpo.
    SELECT vornr eobjty eobjid e~arbpl
    INTO CORRESPONDING FIELDS OF TABLE lt_plpo
    FROM plas AS b
    INNER JOIN plpo AS c
    ON bplnty = cplnty AND
    bplnnr = cplnnr AND
    bzaehl = czaehl
    INNER JOIN crhd AS e
    ON carbid = eobjid
    WHERE b~plnty = v_plnty AND
    b~plnnr = lt_pp04_cache-plnnr AND
    b~plnal = lt_pp04_cache-alnag AND
    c~loekz = space AND
    c~steus = v_plpo_steus AND
    e~objty = v_objty AND
    e~werks = lt_pp04_cache-werks AND
    e~verwe = v_verwe.
    SORT lt_plpo BY vornr DESCENDING.
    READ TABLE lt_plpo INDEX 1.
    IF NOT lt_plpo-arbpl IS INITIAL.
    lt_pp04_cache-arbpl = lt_plpo-arbpl.
    read work center description
    SELECT SINGLE ktext INTO lt_pp04_cache-ktext
    FROM crtx WHERE objty = lt_plpo-objty AND
    objid = lt_plpo-objid AND
    spras = sy-langu.
    the following read will get the index of the correct record to be
    updated in the cache
    READ TABLE lt_pp04_cache
    WITH KEY matnr = pi_matnr
    werks = pi_werks
    alnag = pi_alnag.
    MODIFY lt_pp04_cache
    INDEX sy-tabix
    TRANSPORTING arbpl ktext.
    ENDIF.
    ENDIF.
    endform. " read_last_pp04_operation_cache
    *& Form read_wc_on_last_pp04
    form read_wc_on_last_pp04 using pi_plnnr
    pi_plnal
    changing pe_arbpl.
    data: begin of lt_plpo occurs 0,
    vornr like plpo-vornr,
    objty like crhd-objty,
    objid like crhd-objid,
    arbpl like crhd-arbpl,
    end of lt_plpo.
    get all the PP04 operations for the given rtg# & grp-ctr#
    select vornr eobjty eobjid e~arbpl
    into corresponding fields of table lt_plpo
    from plas as b
    inner join plpo as c
    on bplnty = cplnty and
    bplnnr = cplnnr and
    bzaehl = czaehl
    inner join crhd as e
    on carbid = eobjid
    where b~plnty = v_plnty and "Rate Routing
    b~plnnr = pi_plnnr and
    b~plnal = pi_plnal and
    c~loekz = space and "Oper Del Flag = OFF
    c~steus = v_plpo_steus and "PP04
    e~objty = v_objty. "WC Obj Type = 'A'
    read the last operation
    sort lt_plpo by vornr descending.
    read table lt_plpo index 1.
    pe_arbpl = lt_plpo-arbpl.
    endform.
    Regards.

  • Example of BDC Session method

    Hello Friends,
    Can you guide me how to create BDC with SESSION method.?
    Please mantion examples.
    Thanks in advance.
    Regards,
    nimesh master

    See below example code :
    Call three FM : BDC_OPEN_GROUP,BDC_INSERT and BDC_CLOSE_GROUP.
    Once you execute the program and it creates the session at SM35 Transaction.
    Report     : ZMPPC011
    Type       : Data upload
    Author     : Chetan Shah
    Date       : 05/05/2005
    Transport  : DV3K919557
    Transaction: ??
    Description: This ABAP/4 Program creates new Production Versions
                 (C223). It accepts tab-delimited spreadsheet input and
                 creates BDC sessions.
                        Modification Log
    Date       Programmer    Request #    Description
    06/10/2005 Chetan Shah   DV3K919557   Initial coding
    report zmppc011 no standard page heading line-size 120 line-count 55
       message-id zz.
    pool of form routines
    include zmppn001.
    Define BDC Table Structure
    data: begin of itab_bdc_tab occurs 0.
            include structure bdcdata.
    data: end of itab_bdc_tab.
    Input record layout of Leagcy File
    data: begin of itab_xcel occurs 0,
            matnr(18)  type c,
            werks(4)   type c,
            alnag(2)   type c,
            verid(4)   type c,
            text1(40)  type c,
            bstmi      like mkal-bstmi,
            bstma      like mkal-bstma,
            adatu(10)  type c,
            bdatu(10)  type c,
            stlal(2)   type c,
            stlan(1)   type c,
            serkz(1)   type c,
            mdv01(8)   type c,
            elpro(4)   type c,
            alort(4)   type c,
          end of itab_xcel.
    data: begin of lt_pp04_cache occurs 0,
            matnr like itab_xcel-matnr,
            werks like itab_xcel-werks,
            alnag like itab_xcel-alnag,
            plnnr like mapl-plnnr,
            arbpl like crhd-arbpl,
            ktext like crtx-ktext,
          end of lt_pp04_cache.
    data: v_ssnnr(4)      type n,
          v_lines_in_xcel like sy-tabix,
          v_ssnname       like apqi-groupid,
          v_trans_in_ssn  type i,
         wa_xcel         LIKE itab_xcel,
          l_tabix         like sy-tabix,
          v_matnr         like rc27m-matnr,
          v_plnnr         like mapl-plnnr,
          v_plnal         like mapl-plnal,
          v_tcode         like sy-tcode value 'C223',
          v_plnty         like plas-plnty value 'R',
          v_objty         like crhd-objty value 'A',
          v_plpo_steus    like plpo-steus value 'PP04',
          v_verwe         like crhd-verwe value '0007'.
    Parameters
    selection-screen: skip 3.
    selection-screen: begin of block 1 with frame.
    parameters: p_name        like rlgrap-filename
                              default 'C:\My Documents\InputFile.txt'
                              obligatory,
    bdc session name prefix
                p_bdcpfx(6)   default 'ZPVCRT'
                              obligatory,
    number for transction per BDC session
                p_trnssn      type i
                              default 2000 obligatory,
    retain the BDC session after successfull execution
                p_keep        like apqi-qerase
                              default 'X',
    user who will be executing BDC session
                p_uname       like apqi-userid
                              default sy-uname
                              obligatory.
    selection-screen: end of block 1.
    possible entry list (F4 dropdown) for input file name
    at selection-screen on value-request for p_name.
    *-SELECT FILE FROM USERS LOCAL PC
      call function 'WS_FILENAME_GET'
          exporting
             DEF_FILENAME     = ' '
               def_path         = 'C:\Temp\'
               mask             = ',.,..'
               mode             = 'O'
               title            = 'Select File '(007)
          importing
               filename         = p_name
             RC               =
          exceptions
               inv_winsys       = 1
               no_batch         = 2
               selection_cancel = 3
               selection_error  = 4
               others           = 5.
      if sy-subrc <> 0.
       MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      endif.
    begin the show
    start-of-selection.
    read data from input file
      perform transfer_xcel_to_itab.
      loop at itab_xcel.
      hang on to xcel line num
        l_tabix = sy-tabix.
      each line in the xcel file marks begining of new prod.version defn
      if num-of-trnas-in-session = 0, create new BDC session
        if v_trans_in_ssn is initial.
          perform bdc_session_open.
        endif.
      begin new bdc script for rtg create trans
      fill in bdc-data for prod.version maintenance screens
        perform bdc_build_script.
      insert the bdc script as a BDC transaction
        perform bdc_submit_transaction.
      keep track of how many BDC transactions were inserted in the BDC
      session
        add 1 to v_trans_in_ssn.
      if the user-specified num of trans in BDC session is reached OR
      if end of input file is reached, close the BDC session
        if v_trans_in_ssn = p_trnssn or
           l_tabix = v_lines_in_xcel.
          perform bdc_session_close.
          clear v_trans_in_ssn.
        endif.
      endloop.
    top-of-page.
      call function 'Z_HEADER'
    EXPORTING
      FLEX_TEXT1       =
      FLEX_TEXT2       =
      FLEX_TEXT3       =
          FORM TRANSFER_XCEL_TO_ITAB                                    *
          Transfer Xcel Spreadsheet to SAP Internal Table               *
    form transfer_xcel_to_itab.
    Read the tab-delimited file into itab
      call function 'WS_UPLOAD'
           exporting
                filename            = p_name
                filetype            = 'DAT'
          IMPORTING
               filelength          = flength
           tables
                data_tab            = itab_xcel
           exceptions
                conversion_error    = 1
                file_open_error     = 2
                file_read_error     = 3
                invalid_table_width = 4
                invalid_type        = 5
                no_batch            = 6
                unknown_error       = 7
                others              = 8.
      if sy-subrc = 0.
      sort the data
        sort itab_xcel by matnr werks.
        clear v_lines_in_xcel.
      if no data in the file - error out
        describe table itab_xcel lines v_lines_in_xcel.
        if v_lines_in_xcel is initial.
          write: / 'No data in input file'.
          stop.
        endif.
      else.
      if file upload failed - error out
        write: / 'Error reading input file'.
        stop.
      endif.
    endform.
          FORM BDC_SESSION_OPEN                                         *
          Open BDC Session                                              *
    form bdc_session_open.
    create bdc session name = prefix-from-selectn-screen + nnnn
      add 1 to v_ssnnr.
      concatenate p_bdcpfx v_ssnnr into v_ssnname.
    open new bdc session
      call function 'BDC_OPEN_GROUP'
           exporting
                client              = sy-mandt
                group               = v_ssnname
                keep                = p_keep
                user                = p_uname
           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.
          FORM BDC_BUILD_SCRIPT                                         *
          Build BDC                                                     *
    form bdc_build_script.
      data: l_arbpl like crhd-arbpl,
            l_text1 like mkal-text1,
            l_mdv01 like mkal-mdv01,
            l_mapl  like mapl.
    clear bdc-data itab - begin of new bdc transaction
      clear   itab_bdc_tab.
      refresh itab_bdc_tab.
    read material cross reference tables to determine sap part#
      clear : v_matnr, v_plnnr, v_plnal.
      perform read_matnr_cross_ref using itab_xcel-matnr
                                         itab_xcel-werks
                                   changing v_matnr.
    determine the version description to use
      if itab_xcel-text1 is initial.
        l_text1 = itab_xcel-verid.
      else.
        l_text1 = itab_xcel-text1.
      endif.
    determine the routing group# and group ctr# to use
      perform read_routing .
    determine the production line to use
      if itab_xcel-mdv01 is initial.
      if not provided in the file then:
      prod line = work ctr on the last PP04 op of the rtg determined above
        perform read_wc_on_last_pp04 using v_plnnr v_plnal
                                  changing l_mdv01.
      NOTE: when executing the above form\routine, if v_plnnr is initial
            or v_plnal is initial, THEN l_mdv01 will automatically be
            returned blank (ie initial)
      else.
        l_mdv01 = itab_xcel-mdv01.
      endif.
    build bdc script
      perform bdc_build_script_record
    fill in initial screen
              using: 'X' 'SAPLCMFV'         '1000',
                     ' ' 'BDC_OKCODE'       '=ENTE',
                     ' ' 'MKAL-WERKS'       itab_xcel-werks,
                     ' ' 'MKAL-MATNR'       v_matnr,
                     ' ' 'MKAL_ADMIN-DISPO' space,
                     ' ' 'MKAL-PLNNR'       space,
                     ' ' 'MKAL_ADMIN-STTAG' space,
                     ' ' 'MKAL-PLNNG'       space,
                     ' ' 'MKAL-MDV01'       space,
                     ' ' 'MKAL-PLNNM'       space,
    click create button on initial screen and go to detail screen
                     'X' 'SAPLCMFV'         '1000',
                     ' ' 'BDC_OKCODE'       '=CREA',
    fill in the detail screen and go back to initial screen
                     'X' 'SAPLCMFV'           '2000',
                     ' ' 'BDC_OKCODE'         '=CLOS',
                     ' ' 'MKAL_EXPAND-MATNR'  v_matnr,
                     ' ' 'MKAL_EXPAND-VERID'  itab_xcel-verid,
                     ' ' 'MKAL_EXPAND-TEXT1'  l_text1,
                     ' ' 'MKAL_EXPAND-BSTMI'  itab_xcel-bstmi,
                     ' ' 'MKAL_EXPAND-BSTMA'  itab_xcel-bstma,
                     ' ' 'MKAL_EXPAND-ADATU'  itab_xcel-adatu,
                     ' ' 'MKAL_EXPAND-BDATU'  itab_xcel-bdatu,
                     ' ' 'MKAL_EXPAND-PLTYG'  v_plnty,
                     ' ' 'MKAL_EXPAND-PLNNG'  v_plnnr,
                     ' ' 'MKAL_EXPAND-ALNAG'  v_plnal,
                     ' ' 'MKAL_EXPAND-STLAL'  itab_xcel-stlal,
                     ' ' 'MKAL_EXPAND-STLAN'  itab_xcel-stlan,
                     ' ' 'MKAL_EXPAND-SERKZ'  itab_xcel-serkz,
                     ' ' 'MKAL_EXPAND-MDV01'  l_mdv01,
                     ' ' 'MKAL_EXPAND-ELPRO'  itab_xcel-elpro,
                     ' ' 'MKAL_EXPAND-ALORT'  itab_xcel-alort,
    save the production version from initial screen
                     'X' 'SAPLCMFV'           '1000',
                     ' ' 'BDC_OKCODE'         '=SAVE'.
    endform.
          FORM BDC_SUBMIT_TRANSACTION                                   *
          Submit BDC Session                                            *
    form bdc_submit_transaction.
    Load BDC script as a trqansction in BDC session
      call function 'BDC_INSERT'
           exporting
                tcode          = v_tcode
           tables
                dynprotab      = itab_bdc_tab
           exceptions
                internal_error = 01
                not_open       = 02
                queue_error    = 03
                tcode_invalid  = 04.
    endform.
          FORM BDC_BUILD_SCRIPT_RECORD                                  *
    form bdc_build_script_record using dynbegin name value.
      clear itab_bdc_tab.
      if dynbegin = 'X'.
        move: name  to itab_bdc_tab-program,
              value to itab_bdc_tab-dynpro,
              'X'   to itab_bdc_tab-dynbegin.
      else.
        move: name  to itab_bdc_tab-fnam,
              value to itab_bdc_tab-fval.
        shift itab_bdc_tab-fval left deleting leading space.
      endif.
      append itab_bdc_tab.
    endform.
          FORM BDC_SESSION_CLOSE                                        *
          Close BDC Session                                             *
    form bdc_session_close.
    close the session
      call function 'BDC_CLOSE_GROUP'
           exceptions
                not_open    = 1
                queue_error = 2
                others      = 3.
      skip 2.
      if sy-subrc ne 0.
        write: / 'Error Closing BDC Session ' , 'RETURN CODE: ', sy-subrc.
      else.
        write : /  'Session created:', v_ssnname,
                50 '# of transactions:', v_trans_in_ssn.
      endif.
    endform.
    *&      Form  read_routing_cache
    *FORM read_routing_cache USING    pi_matnr
                                    pi_werks
                                    pi_alnag
                                    pi_verid
                                    pi_mdv01.
    DATA: BEGIN OF lt_plpo OCCURS 0,
             vornr LIKE plpo-vornr,
             objty LIKE crhd-objty,
             objid LIKE crhd-objid,
             arbpl LIKE crhd-arbpl,
           END OF lt_plpo,
           l_mapl_plnnr LIKE mapl-plnnr.
    determine the routing group#
    CLEAR lt_pp04_cache.
    chk if its in the cache first, if not then get it from MAPL table
    and put it in the cache
    READ TABLE lt_pp04_cache WITH KEY matnr = pi_matnr
                                       werks = pi_werks
                                       alnag = pi_alnag.
    IF sy-subrc = 0.
      do nothing - lt_pp04_cache header line has rtg#
    ELSE.
      get the routing group # from MAPL
       SELECT plnnr INTO l_mapl_plnnr
         FROM mapl UP TO 1 ROWS
        WHERE matnr = pi_matnr    AND
              werks = pi_werks    AND
              plnty = 'R'         AND
              plnal = pi_alnag    AND
              loekz = space.
       ENDSELECT.
      put it in the cache internal table
       IF NOT l_mapl_plnnr IS INITIAL.
         lt_pp04_cache-matnr = pi_matnr.
         lt_pp04_cache-werks = pi_werks.
         lt_pp04_cache-alnag = pi_alnag.
         lt_pp04_cache-plnnr = l_mapl_plnnr.
         APPEND lt_pp04_cache.
       ENDIF.
    ENDIF.
    if the rtg# was determined AND
    -- the work center was not determined yet AND
    -- work center was really needed for this line in the input file
    then
    -- read the work center from last PP04 operation on the routing
    -- update the cache accordingly
    IF NOT lt_pp04_cache-plnnr IS INITIAL AND
            lt_pp04_cache-arbpl IS INITIAL AND
        ( pi_verid IS INITIAL OR
          pi_mdv01 IS INITIAL ).
      read the last PP04 operation
       CLEAR   lt_plpo.
       REFRESH lt_plpo.
       SELECT vornr eobjty eobjid e~arbpl
         INTO CORRESPONDING FIELDS OF TABLE lt_plpo
         FROM plas AS b
              INNER JOIN plpo AS c
                    ON bplnty = cplnty AND
                       bplnnr = cplnnr AND
                       bzaehl = czaehl
              INNER JOIN crhd AS e
                    ON carbid = eobjid
        WHERE b~plnty = v_plnty             AND
              b~plnnr = lt_pp04_cache-plnnr AND
              b~plnal = lt_pp04_cache-alnag AND
              c~loekz = space               AND
              c~steus = v_plpo_steus        AND
              e~objty = v_objty             AND
              e~werks = lt_pp04_cache-werks AND
              e~verwe = v_verwe.
       SORT lt_plpo BY vornr DESCENDING.
       READ TABLE lt_plpo INDEX 1.
       IF NOT lt_plpo-arbpl IS INITIAL.
         lt_pp04_cache-arbpl = lt_plpo-arbpl.
        read work center description
         SELECT SINGLE ktext INTO lt_pp04_cache-ktext
           FROM crtx WHERE objty = lt_plpo-objty AND
                           objid = lt_plpo-objid AND
                           spras = sy-langu.
        the following read will get the index of the correct record to be
        updated in the cache
         READ TABLE lt_pp04_cache
              WITH KEY matnr = pi_matnr
                       werks = pi_werks
                       alnag = pi_alnag.
         MODIFY lt_pp04_cache
                INDEX sy-tabix
                TRANSPORTING arbpl ktext.
       ENDIF.
    ENDIF.
    *ENDFORM.                    " read_last_pp04_operation_cache
    *&      Form  read_routing
    form read_routing.
      data: begin of lt_mapl occurs 0,
              plnnr like mapl-plnnr,
              plnal like mapl-plnal,
            end of lt_mapl,
            l_arbpl like crhd-arbpl.
    get all the rtg# and grp ctr# from MAPL
      select plnnr plnal
        into corresponding fields of table lt_mapl
        from mapl
       where matnr = v_matnr          and
             werks = itab_xcel-werks  and
             plnty = v_plnty          and     "Rate Routing
             loekz = space.                   "with del flag = OFF
      sort lt_mapl by plnal.
      if not itab_xcel-verid is initial.
      if the verid=0001 then use the 1st good rtg-grp# and grp-ctr#
        if itab_xcel-verid = '0001'.
          read table lt_mapl index 1.
          v_plnnr = lt_mapl-plnnr.
          v_plnal = lt_mapl-plnal.
        else.
      if the verid<>0001 then use the rtg-grp# and grp-ctr# of the routing
      whose work center on the last PP04 operation matches the given verid
          loop at lt_mapl.
            clear l_arbpl.
          get the work center from the last PP04 operation
            perform read_wc_on_last_pp04 using lt_mapl-plnnr
                                               lt_mapl-plnal
                                      changing l_arbpl.
            if itab_xcel-verid = l_arbpl.
              v_plnnr = lt_mapl-plnnr.
              v_plnal = lt_mapl-plnal.
              exit.
            endif.
          endloop.
        endif.
      else.
      do nothing
      endif.
    For version IDs that are other then '0000' or 'ZWIP' :--
      if itab_xcel-verid NE '0000' and
         itab_xcel-verid NE 'ZWIP'.
      if routing group# or group counter was not determined, make the
      valid-to date 99/99/9999 so that the BDC, on execution, errors out.
        if v_plnnr is initial or
           v_plnal is initial.
          itab_xcel-bdatu = '99/99/9999'.
        endif.
      endif.
    determine the routing group#
    CLEAR lt_pp04_cache.
    chk if its in the cache first, if not then get it from MAPL table
    and put it in the cache
    READ TABLE lt_pp04_cache WITH KEY matnr = pi_matnr
                                       werks = pi_werks
                                       alnag = pi_alnag.
    IF sy-subrc = 0.
      do nothing - lt_pp04_cache header line has rtg#
    ELSE.
      get the routing group # from MAPL
      put it in the cache internal table
       IF NOT l_mapl_plnnr IS INITIAL.
         lt_pp04_cache-matnr = pi_matnr.
         lt_pp04_cache-werks = pi_werks.
         lt_pp04_cache-alnag = pi_alnag.
         lt_pp04_cache-plnnr = l_mapl_plnnr.
         APPEND lt_pp04_cache.
       ENDIF.
    ENDIF.
    if the rtg# was determined AND
    -- the work center was not determined yet AND
    -- work center was really needed for this line in the input file
    then
    -- read the work center from last PP04 operation on the routing
    -- update the cache accordingly
    IF NOT lt_pp04_cache-plnnr IS INITIAL AND
            lt_pp04_cache-arbpl IS INITIAL AND
        ( pi_verid IS INITIAL OR
          pi_mdv01 IS INITIAL ).
      read the last PP04 operation
       CLEAR   lt_plpo.
       REFRESH lt_plpo.
       SELECT vornr eobjty eobjid e~arbpl
         INTO CORRESPONDING FIELDS OF TABLE lt_plpo
         FROM plas AS b
              INNER JOIN plpo AS c
                    ON bplnty = cplnty AND
                       bplnnr = cplnnr AND
                       bzaehl = czaehl
              INNER JOIN crhd AS e
                    ON carbid = eobjid
        WHERE b~plnty = v_plnty             AND
              b~plnnr = lt_pp04_cache-plnnr AND
              b~plnal = lt_pp04_cache-alnag AND
              c~loekz = space               AND
              c~steus = v_plpo_steus        AND
              e~objty = v_objty             AND
              e~werks = lt_pp04_cache-werks AND
              e~verwe = v_verwe.
       SORT lt_plpo BY vornr DESCENDING.
       READ TABLE lt_plpo INDEX 1.
       IF NOT lt_plpo-arbpl IS INITIAL.
         lt_pp04_cache-arbpl = lt_plpo-arbpl.
        read work center description
         SELECT SINGLE ktext INTO lt_pp04_cache-ktext
           FROM crtx WHERE objty = lt_plpo-objty AND
                           objid = lt_plpo-objid AND
                           spras = sy-langu.
        the following read will get the index of the correct record to be
        updated in the cache
         READ TABLE lt_pp04_cache
              WITH KEY matnr = pi_matnr
                       werks = pi_werks
                       alnag = pi_alnag.
         MODIFY lt_pp04_cache
                INDEX sy-tabix
                TRANSPORTING arbpl ktext.
       ENDIF.
    ENDIF.
    endform.                    " read_last_pp04_operation_cache
    *&      Form  read_wc_on_last_pp04
    form read_wc_on_last_pp04 using    pi_plnnr
                                       pi_plnal
                              changing pe_arbpl.
      data: begin of lt_plpo occurs 0,
              vornr like plpo-vornr,
              objty like crhd-objty,
              objid like crhd-objid,
              arbpl like crhd-arbpl,
            end of lt_plpo.
    get all the PP04 operations for the given rtg# & grp-ctr#
      select vornr eobjty eobjid e~arbpl
        into corresponding fields of table lt_plpo
        from plas as b
             inner join plpo as c
                   on bplnty = cplnty and
                      bplnnr = cplnnr and
                      bzaehl = czaehl
             inner join crhd as e
                   on carbid = eobjid
       where b~plnty = v_plnty          and           "Rate Routing
             b~plnnr = pi_plnnr         and
             b~plnal = pi_plnal         and
             c~loekz = space            and           "Oper Del Flag = OFF
             c~steus = v_plpo_steus     and           "PP04
             e~objty = v_objty.                       "WC Obj Type = 'A'
    read the last operation
      sort lt_plpo by vornr descending.
      read table lt_plpo index 1.
      pe_arbpl = lt_plpo-arbpl.
    endform.                    " read_wc_on_last_pp04
    Reward Points if it is useful
    Thanks
    Seshu

  • Bdc session sample program

    Hi,
    Please any body send a sample program for bdc session method.
    Thanks,
    sreedhar.

    See the BDC Session method program :
    report zmppc011 no standard page heading line-size 120 line-count 55
       message-id zz.
    pool of form routines
    include zmppn001.
    Define BDC Table Structure
    data: begin of itab_bdc_tab occurs 0.
            include structure bdcdata.
    data: end of itab_bdc_tab.
    Input record layout of Leagcy File
    data: begin of itab_xcel occurs 0,
            matnr(18)  type c,
            werks(4)   type c,
            alnag(2)   type c,
            verid(4)   type c,
            text1(40)  type c,
            bstmi      like mkal-bstmi,
            bstma      like mkal-bstma,
            adatu(10)  type c,
            bdatu(10)  type c,
            stlal(2)   type c,
            stlan(1)   type c,
            serkz(1)   type c,
            mdv01(8)   type c,
            elpro(4)   type c,
            alort(4)   type c,
          end of itab_xcel.
    data: begin of lt_pp04_cache occurs 0,
            matnr like itab_xcel-matnr,
            werks like itab_xcel-werks,
            alnag like itab_xcel-alnag,
            plnnr like mapl-plnnr,
            arbpl like crhd-arbpl,
            ktext like crtx-ktext,
          end of lt_pp04_cache.
    data: v_ssnnr(4)      type n,
          v_lines_in_xcel like sy-tabix,
          v_ssnname       like apqi-groupid,
          v_trans_in_ssn  type i,
         wa_xcel         LIKE itab_xcel,
          l_tabix         like sy-tabix,
          v_matnr         like rc27m-matnr,
          v_plnnr         like mapl-plnnr,
          v_plnal         like mapl-plnal,
          v_tcode         like sy-tcode value 'C223',
          v_plnty         like plas-plnty value 'R',
          v_objty         like crhd-objty value 'A',
          v_plpo_steus    like plpo-steus value 'PP04',
          v_verwe         like crhd-verwe value '0007'.
    Parameters
    selection-screen: skip 3.
    selection-screen: begin of block 1 with frame.
    parameters: p_name        like rlgrap-filename
                              default 'C:\My Documents\InputFile.txt'
                              obligatory,
    bdc session name prefix
                p_bdcpfx(6)   default 'ZPVCRT'
                              obligatory,
    number for transction per BDC session
                p_trnssn      type i
                              default 2000 obligatory,
    retain the BDC session after successfull execution
                p_keep        like apqi-qerase
                              default 'X',
    user who will be executing BDC session
                p_uname       like apqi-userid
                              default sy-uname
                              obligatory.
    selection-screen: end of block 1.
    possible entry list (F4 dropdown) for input file name
    at selection-screen on value-request for p_name.
    *-SELECT FILE FROM USERS LOCAL PC
      call function 'WS_FILENAME_GET'
          exporting
             DEF_FILENAME     = ' '
               def_path         = 'C:\Temp\'
               mask             = ',.,..'
               mode             = 'O'
               title            = 'Select File '(007)
          importing
               filename         = p_name
             RC               =
          exceptions
               inv_winsys       = 1
               no_batch         = 2
               selection_cancel = 3
               selection_error  = 4
               others           = 5.
      if sy-subrc <> 0.
       MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      endif.
    begin the show
    start-of-selection.
    read data from input file
      perform transfer_xcel_to_itab.
      loop at itab_xcel.
      hang on to xcel line num
        l_tabix = sy-tabix.
      each line in the xcel file marks begining of new prod.version defn
      if num-of-trnas-in-session = 0, create new BDC session
        if v_trans_in_ssn is initial.
          perform bdc_session_open.
        endif.
      begin new bdc script for rtg create trans
      fill in bdc-data for prod.version maintenance screens
        perform bdc_build_script.
      insert the bdc script as a BDC transaction
        perform bdc_submit_transaction.
      keep track of how many BDC transactions were inserted in the BDC
      session
        add 1 to v_trans_in_ssn.
      if the user-specified num of trans in BDC session is reached OR
      if end of input file is reached, close the BDC session
        if v_trans_in_ssn = p_trnssn or
           l_tabix = v_lines_in_xcel.
          perform bdc_session_close.
          clear v_trans_in_ssn.
        endif.
      endloop.
    top-of-page.
      call function 'Z_HEADER'
    EXPORTING
      FLEX_TEXT1       =
      FLEX_TEXT2       =
      FLEX_TEXT3       =
          FORM TRANSFER_XCEL_TO_ITAB                                    *
          Transfer Xcel Spreadsheet to SAP Internal Table               *
    form transfer_xcel_to_itab.
    Read the tab-delimited file into itab
      call function 'WS_UPLOAD'
           exporting
                filename            = p_name
                filetype            = 'DAT'
          IMPORTING
               filelength          = flength
           tables
                data_tab            = itab_xcel
           exceptions
                conversion_error    = 1
                file_open_error     = 2
                file_read_error     = 3
                invalid_table_width = 4
                invalid_type        = 5
                no_batch            = 6
                unknown_error       = 7
                others              = 8.
      if sy-subrc = 0.
      sort the data
        sort itab_xcel by matnr werks.
        clear v_lines_in_xcel.
      if no data in the file - error out
        describe table itab_xcel lines v_lines_in_xcel.
        if v_lines_in_xcel is initial.
          write: / 'No data in input file'.
          stop.
        endif.
      else.
      if file upload failed - error out
        write: / 'Error reading input file'.
        stop.
      endif.
    endform.
          FORM BDC_SESSION_OPEN                                         *
          Open BDC Session                                              *
    form bdc_session_open.
    create bdc session name = prefix-from-selectn-screen + nnnn
      add 1 to v_ssnnr.
      concatenate p_bdcpfx v_ssnnr into v_ssnname.
    open new bdc session
      call function 'BDC_OPEN_GROUP'
           exporting
                client              = sy-mandt
                group               = v_ssnname
                keep                = p_keep
                user                = p_uname
           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.
          FORM BDC_BUILD_SCRIPT                                         *
          Build BDC                                                     *
    form bdc_build_script.
      data: l_arbpl like crhd-arbpl,
            l_text1 like mkal-text1,
            l_mdv01 like mkal-mdv01,
            l_mapl  like mapl.
    clear bdc-data itab - begin of new bdc transaction
      clear   itab_bdc_tab.
      refresh itab_bdc_tab.
    read material cross reference tables to determine sap part#
      clear : v_matnr, v_plnnr, v_plnal.
      perform read_matnr_cross_ref using itab_xcel-matnr
                                         itab_xcel-werks
                                   changing v_matnr.
    determine the version description to use
      if itab_xcel-text1 is initial.
        l_text1 = itab_xcel-verid.
      else.
        l_text1 = itab_xcel-text1.
      endif.
    determine the routing group# and group ctr# to use
      perform read_routing .
    determine the production line to use
      if itab_xcel-mdv01 is initial.
      if not provided in the file then:
      prod line = work ctr on the last PP04 op of the rtg determined above
        perform read_wc_on_last_pp04 using v_plnnr v_plnal
                                  changing l_mdv01.
      NOTE: when executing the above form\routine, if v_plnnr is initial
            or v_plnal is initial, THEN l_mdv01 will automatically be
            returned blank (ie initial)
      else.
        l_mdv01 = itab_xcel-mdv01.
      endif.
    build bdc script
      perform bdc_build_script_record
    fill in initial screen
              using: 'X' 'SAPLCMFV'         '1000',
                     ' ' 'BDC_OKCODE'       '=ENTE',
                     ' ' 'MKAL-WERKS'       itab_xcel-werks,
                     ' ' 'MKAL-MATNR'       v_matnr,
                     ' ' 'MKAL_ADMIN-DISPO' space,
                     ' ' 'MKAL-PLNNR'       space,
                     ' ' 'MKAL_ADMIN-STTAG' space,
                     ' ' 'MKAL-PLNNG'       space,
                     ' ' 'MKAL-MDV01'       space,
                     ' ' 'MKAL-PLNNM'       space,
    click create button on initial screen and go to detail screen
                     'X' 'SAPLCMFV'         '1000',
                     ' ' 'BDC_OKCODE'       '=CREA',
    fill in the detail screen and go back to initial screen
                     'X' 'SAPLCMFV'           '2000',
                     ' ' 'BDC_OKCODE'         '=CLOS',
                     ' ' 'MKAL_EXPAND-MATNR'  v_matnr,
                     ' ' 'MKAL_EXPAND-VERID'  itab_xcel-verid,
                     ' ' 'MKAL_EXPAND-TEXT1'  l_text1,
                     ' ' 'MKAL_EXPAND-BSTMI'  itab_xcel-bstmi,
                     ' ' 'MKAL_EXPAND-BSTMA'  itab_xcel-bstma,
                     ' ' 'MKAL_EXPAND-ADATU'  itab_xcel-adatu,
                     ' ' 'MKAL_EXPAND-BDATU'  itab_xcel-bdatu,
                     ' ' 'MKAL_EXPAND-PLTYG'  v_plnty,
                     ' ' 'MKAL_EXPAND-PLNNG'  v_plnnr,
                     ' ' 'MKAL_EXPAND-ALNAG'  v_plnal,
                     ' ' 'MKAL_EXPAND-STLAL'  itab_xcel-stlal,
                     ' ' 'MKAL_EXPAND-STLAN'  itab_xcel-stlan,
                     ' ' 'MKAL_EXPAND-SERKZ'  itab_xcel-serkz,
                     ' ' 'MKAL_EXPAND-MDV01'  l_mdv01,
                     ' ' 'MKAL_EXPAND-ELPRO'  itab_xcel-elpro,
                     ' ' 'MKAL_EXPAND-ALORT'  itab_xcel-alort,
    save the production version from initial screen
                     'X' 'SAPLCMFV'           '1000',
                     ' ' 'BDC_OKCODE'         '=SAVE'.
    endform.
          FORM BDC_SUBMIT_TRANSACTION                                   *
          Submit BDC Session                                            *
    form bdc_submit_transaction.
    Load BDC script as a trqansction in BDC session
      call function 'BDC_INSERT'
           exporting
                tcode          = v_tcode
           tables
                dynprotab      = itab_bdc_tab
           exceptions
                internal_error = 01
                not_open       = 02
                queue_error    = 03
                tcode_invalid  = 04.
    endform.
          FORM BDC_BUILD_SCRIPT_RECORD                                  *
    form bdc_build_script_record using dynbegin name value.
      clear itab_bdc_tab.
      if dynbegin = 'X'.
        move: name  to itab_bdc_tab-program,
              value to itab_bdc_tab-dynpro,
              'X'   to itab_bdc_tab-dynbegin.
      else.
        move: name  to itab_bdc_tab-fnam,
              value to itab_bdc_tab-fval.
        shift itab_bdc_tab-fval left deleting leading space.
      endif.
      append itab_bdc_tab.
    endform.
          FORM BDC_SESSION_CLOSE                                        *
          Close BDC Session                                             *
    form bdc_session_close.
    close the session
      call function 'BDC_CLOSE_GROUP'
           exceptions
                not_open    = 1
                queue_error = 2
                others      = 3.
      skip 2.
      if sy-subrc ne 0.
        write: / 'Error Closing BDC Session ' , 'RETURN CODE: ', sy-subrc.
      else.
        write : /  'Session created:', v_ssnname,
                50 '# of transactions:', v_trans_in_ssn.
      endif.
    endform.
    *&      Form  read_routing_cache
    *FORM read_routing_cache USING    pi_matnr
                                    pi_werks
                                    pi_alnag
                                    pi_verid
                                    pi_mdv01.
    DATA: BEGIN OF lt_plpo OCCURS 0,
             vornr LIKE plpo-vornr,
             objty LIKE crhd-objty,
             objid LIKE crhd-objid,
             arbpl LIKE crhd-arbpl,
           END OF lt_plpo,
           l_mapl_plnnr LIKE mapl-plnnr.
    determine the routing group#
    CLEAR lt_pp04_cache.
    chk if its in the cache first, if not then get it from MAPL table
    and put it in the cache
    READ TABLE lt_pp04_cache WITH KEY matnr = pi_matnr
                                       werks = pi_werks
                                       alnag = pi_alnag.
    IF sy-subrc = 0.
      do nothing - lt_pp04_cache header line has rtg#
    ELSE.
      get the routing group # from MAPL
       SELECT plnnr INTO l_mapl_plnnr
         FROM mapl UP TO 1 ROWS
        WHERE matnr = pi_matnr    AND
              werks = pi_werks    AND
              plnty = 'R'         AND
              plnal = pi_alnag    AND
              loekz = space.
       ENDSELECT.
      put it in the cache internal table
       IF NOT l_mapl_plnnr IS INITIAL.
         lt_pp04_cache-matnr = pi_matnr.
         lt_pp04_cache-werks = pi_werks.
         lt_pp04_cache-alnag = pi_alnag.
         lt_pp04_cache-plnnr = l_mapl_plnnr.
         APPEND lt_pp04_cache.
       ENDIF.
    ENDIF.
    if the rtg# was determined AND
    -- the work center was not determined yet AND
    -- work center was really needed for this line in the input file
    then
    -- read the work center from last PP04 operation on the routing
    -- update the cache accordingly
    IF NOT lt_pp04_cache-plnnr IS INITIAL AND
            lt_pp04_cache-arbpl IS INITIAL AND
        ( pi_verid IS INITIAL OR
          pi_mdv01 IS INITIAL ).
      read the last PP04 operation
       CLEAR   lt_plpo.
       REFRESH lt_plpo.
       SELECT vornr eobjty eobjid e~arbpl
         INTO CORRESPONDING FIELDS OF TABLE lt_plpo
         FROM plas AS b
              INNER JOIN plpo AS c
                    ON bplnty = cplnty AND
                       bplnnr = cplnnr AND
                       bzaehl = czaehl
              INNER JOIN crhd AS e
                    ON carbid = eobjid
        WHERE b~plnty = v_plnty             AND
              b~plnnr = lt_pp04_cache-plnnr AND
              b~plnal = lt_pp04_cache-alnag AND
              c~loekz = space               AND
              c~steus = v_plpo_steus        AND
              e~objty = v_objty             AND
              e~werks = lt_pp04_cache-werks AND
              e~verwe = v_verwe.
       SORT lt_plpo BY vornr DESCENDING.
       READ TABLE lt_plpo INDEX 1.
       IF NOT lt_plpo-arbpl IS INITIAL.
         lt_pp04_cache-arbpl = lt_plpo-arbpl.
        read work center description
         SELECT SINGLE ktext INTO lt_pp04_cache-ktext
           FROM crtx WHERE objty = lt_plpo-objty AND
                           objid = lt_plpo-objid AND
                           spras = sy-langu.
        the following read will get the index of the correct record to be
        updated in the cache
         READ TABLE lt_pp04_cache
              WITH KEY matnr = pi_matnr
                       werks = pi_werks
                       alnag = pi_alnag.
         MODIFY lt_pp04_cache
                INDEX sy-tabix
                TRANSPORTING arbpl ktext.
       ENDIF.
    ENDIF.
    *ENDFORM.                    " read_last_pp04_operation_cache
    *&      Form  read_routing
    form read_routing.
      data: begin of lt_mapl occurs 0,
              plnnr like mapl-plnnr,
              plnal like mapl-plnal,
            end of lt_mapl,
            l_arbpl like crhd-arbpl.
    get all the rtg# and grp ctr# from MAPL
      select plnnr plnal
        into corresponding fields of table lt_mapl
        from mapl
       where matnr = v_matnr          and
             werks = itab_xcel-werks  and
             plnty = v_plnty          and     "Rate Routing
             loekz = space.                   "with del flag = OFF
      sort lt_mapl by plnal.
      if not itab_xcel-verid is initial.
      if the verid=0001 then use the 1st good rtg-grp# and grp-ctr#
        if itab_xcel-verid = '0001'.
          read table lt_mapl index 1.
          v_plnnr = lt_mapl-plnnr.
          v_plnal = lt_mapl-plnal.
        else.
      if the verid<>0001 then use the rtg-grp# and grp-ctr# of the routing
      whose work center on the last PP04 operation matches the given verid
          loop at lt_mapl.
            clear l_arbpl.
          get the work center from the last PP04 operation
            perform read_wc_on_last_pp04 using lt_mapl-plnnr
                                               lt_mapl-plnal
                                      changing l_arbpl.
            if itab_xcel-verid = l_arbpl.
              v_plnnr = lt_mapl-plnnr.
              v_plnal = lt_mapl-plnal.
              exit.
            endif.
          endloop.
        endif.
      else.
      do nothing
      endif.
    For version IDs that are other then '0000' or 'ZWIP' :--
      if itab_xcel-verid NE '0000' and
         itab_xcel-verid NE 'ZWIP'.
      if routing group# or group counter was not determined, make the
      valid-to date 99/99/9999 so that the BDC, on execution, errors out.
        if v_plnnr is initial or
           v_plnal is initial.
          itab_xcel-bdatu = '99/99/9999'.
        endif.
      endif.
    determine the routing group#
    CLEAR lt_pp04_cache.
    chk if its in the cache first, if not then get it from MAPL table
    and put it in the cache
    READ TABLE lt_pp04_cache WITH KEY matnr = pi_matnr
                                       werks = pi_werks
                                       alnag = pi_alnag.
    IF sy-subrc = 0.
      do nothing - lt_pp04_cache header line has rtg#
    ELSE.
      get the routing group # from MAPL
      put it in the cache internal table
       IF NOT l_mapl_plnnr IS INITIAL.
         lt_pp04_cache-matnr = pi_matnr.
         lt_pp04_cache-werks = pi_werks.
         lt_pp04_cache-alnag = pi_alnag.
         lt_pp04_cache-plnnr = l_mapl_plnnr.
         APPEND lt_pp04_cache.
       ENDIF.
    ENDIF.
    if the rtg# was determined AND
    -- the work center was not determined yet AND
    -- work center was really needed for this line in the input file
    then
    -- read the work center from last PP04 operation on the routing
    -- update the cache accordingly
    IF NOT lt_pp04_cache-plnnr IS INITIAL AND
            lt_pp04_cache-arbpl IS INITIAL AND
        ( pi_verid IS INITIAL OR
          pi_mdv01 IS INITIAL ).
      read the last PP04 operation
       CLEAR   lt_plpo.
       REFRESH lt_plpo.
       SELECT vornr eobjty eobjid e~arbpl
         INTO CORRESPONDING FIELDS OF TABLE lt_plpo
         FROM plas AS b
              INNER JOIN plpo AS c
                    ON bplnty = cplnty AND
                       bplnnr = cplnnr AND
                       bzaehl = czaehl
              INNER JOIN crhd AS e
                    ON carbid = eobjid
        WHERE b~plnty = v_plnty             AND
              b~plnnr = lt_pp04_cache-plnnr AND
              b~plnal = lt_pp04_cache-alnag AND
              c~loekz = space               AND
              c~steus = v_plpo_steus        AND
              e~objty = v_objty             AND
              e~werks = lt_pp04_cache-werks AND
              e~verwe = v_verwe.
       SORT lt_plpo BY vornr DESCENDING.
       READ TABLE lt_plpo INDEX 1.
       IF NOT lt_plpo-arbpl IS INITIAL.
         lt_pp04_cache-arbpl = lt_plpo-arbpl.
        read work center description
         SELECT SINGLE ktext INTO lt_pp04_cache-ktext
           FROM crtx WHERE objty = lt_plpo-objty AND
                           objid = lt_plpo-objid AND
                           spras = sy-langu.
        the following read will get the index of the correct record to be
        updated in the cache
         READ TABLE lt_pp04_cache
              WITH KEY matnr = pi_matnr
                       werks = pi_werks
                       alnag = pi_alnag.
         MODIFY lt_pp04_cache
                INDEX sy-tabix
                TRANSPORTING arbpl ktext.
       ENDIF.
    ENDIF.
    endform.                    " read_last_pp04_operation_cache
    *&      Form  read_wc_on_last_pp04
    form read_wc_on_last_pp04 using    pi_plnnr
                                       pi_plnal
                              changing pe_arbpl.
      data: begin of lt_plpo occurs 0,
              vornr like plpo-vornr,
              objty like crhd-objty,
              objid like crhd-objid,
              arbpl like crhd-arbpl,
            end of lt_plpo.
    get all the PP04 operations for the given rtg# & grp-ctr#
      select vornr eobjty eobjid e~arbpl
        into corresponding fields of table lt_plpo
        from plas as b
             inner join plpo as c
                   on bplnty = cplnty and
                      bplnnr = cplnnr and
                      bzaehl = czaehl
             inner join crhd as e
                   on carbid = eobjid
       where b~plnty = v_plnty          and           "Rate Routing
             b~plnnr = pi_plnnr         and
             b~plnal = pi_plnal         and
             c~loekz = space            and           "Oper Del Flag = OFF
             c~steus = v_plpo_steus     and           "PP04
             e~objty = v_objty.                       "WC Obj Type = 'A'
    read the last operation
      sort lt_plpo by vornr descending.
      read table lt_plpo index 1.
      pe_arbpl = lt_plpo-arbpl.
    endform.                    " read_wc_on_last_pp04

  • What is structure of BDC session?

    Hi Experts,
    What is structure of BDC session?
    Thanks
    ~Sid
    "Max points are assured"

    Hi,
    If you want to write your own program, proceed as follows:
    Generate the batch input session using function module BDC_OPEN_GROUP
    The proceed as follows for each transaction that session contains:
    In the BDCDATA structure, enter the value for all screens and fields that must be processed in the transaction.
    Use BDC_INSERT to transfer the transaction and BDCDATA structure to the session.
    Close the batch input session with BDC_CLOSE_GROUP
    Start to process the generated session.
    BDC_OPEN_GROUP
    Use the BDC_OPEN_GROUP function module to create a new session. Once you have created a session, then you can insert batch input data into it with BDC_INSERT.
    You cannot reopen a session that already exits and has been closed. If you call BDC_OPEN_GROUP with the name of an existing session, then an additional session with the same name is created.
    A batch input program may have only one session open at a time. Before opening a session, make sure that any sessions that program closes any sessions that it previously had opened.
    BDC_OPEN_GROUP takes the following EXPORTING parameters:
    CLIENT
    Client in which the session is to be processed. Default: If you don’t provide a value for this parameter, the default is the client under which the bathc input program runs when the session is created.
    GROUP
    Name of the session that is to be created. May up to 12 characters long. Default: None. You must specify a session name.
    HOLDDATE
    Lock date. The session is locked and may not be processed until after the date that you specified. Only a system administrator with the LOCK authorization for the authorization object Batch Input Authorizations can unlock and run a session before this date.
    KEEP
    Retain session after successful processing. Set this option to the value X to have a session kept after it has been successfully processed. A session that is kept remains in the input/output queue until an administrator deleletes it. Sessions that contain errors in transactions are kept even if KEEP is not set. Default: If not set, then sessions that are successfully processed are deleted. Only the batch input log is kept.
    USER
    Authorizations user for background processing. This is the user name that is used for checking authorizations if a session is started in background processing. The user must be authorized for all of transactions and functions that are to be executed in a session. Otherwise, transactions will be terminated with “no authorization” errors. The user can be of type dialog or background. Dialog users are normal interactive users in the R/3 System. Background users are user master records that are specially defined for providing authorizations for background processing jobs.
    BDC_INSERT
    Use the BDC_INSERT function module to add a transaction to a batch input session. You specify the transaction that is to be started in the call to BDC_INSERT. You must provide a BDCDATA structure that contains all of the data required to process the transaction completely.
    BDC_INSERT takes the following parameters:
    TCODE
    The code of the transaction that is to be run.
    POST_LOCAL
    Parameter to update data locally. If POST_LOCAL = “X”, data will be updated locally.
    DYNPROTAB
    The BDCDATA structure that contains the data that is to be processed by the transaction. DYNPROTAB is a table parameter in the function module.
    BDC_CLOSE_GROUP
    Use the BDC_CLOSE_GROUP function module to close a session after you have inserted all of your batch input data into it. Once a session is closed, it can be processed.
    BDC_CLOSE_GROUP needs no parameters. It automatically closes the session that is currently open in your program. You must close a session before you can open another session from the same program.
    BDCDATA Structure
    IF you want to write data to a batch input session or to process the data using CALL TRANSACTION USING or CALL DIALOG, you must prepare an internal table <bdc_tab>. This internal table must be structured according to ABAP Dictionary structure BDCDATA. The internal table <bdc_tab> stores the data that is to be entered into R/3 System and the actions that are necessary to process data. You can think of the table as storing the script that the R/3 System is to follow in processing batch input data.
    BDC table structure
    FIELD                     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.
    Regards,
    Omkar.
    Message was edited by:
            Omkaram Yanamala

  • URGENT - HOW TO PROCESS A BDC SESSION (IN BACKGROUND) FROM INSIDE A REPORT

    Hi All,
    I have a requirement wherein I need to create a BDC session for mass update(from file) of one transaction and check if at all that update has taken place and proceed with the same session for another transaction.
    For this I need to know how to process the session in background in a report, so that if the processing is done, the next set of data to update a different transaction can happen.
    All inputs are welcome and highly valuable to me.
    If someone is unable to intrepret this, I'll detail it again.
    Thanks in advance,
    Vaishnavi Varadarajan

    Hi,
    1.Use RSBDCDRU is an exe pg.With this u can download the logs into local file.
    2.It will create the spool request .from there u can download or print.
    OtherWise:
    Use the code from the link below. U need to provide the session queue id as input and it will download the log to an excel file. U can change it to  ur reqmt.
    Re: BDC
    regards
    kiran

  • Error in my BDC SESSION METHOD

    Hi,
    I was trying work on BDC SESSION METHOD AND MY TCODE IS XK01.
    Here is my code can some one tell me where i am doing wrong becoz its not giving the output as I expected. And I am uploading a tab delimeter file.
    report ZAN_BDCVENDOR
           no standard page heading line-size 255.
    include bdcrecx1.
    DATA: I_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
    DATA: BEGIN OF RECORD OCCURS 0,
    LIFNR(016),
    BURKS(004),
    EKORG(004),
    KTOKK(004),
    AKONT(010),
    FDGRV(010),
    WAERS(005),
    END OF RECORD.
    start-of-selection.
    perform open_group.
    CALL FUNCTION 'GUI_UPLOAD'
      EXPORTING
        filename                      = 'C:\VENDOR.TXT'
    FILETYPE                      = 'ASC'
      tables
        data_tab                      = RECORD
    IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    LOOP AT RECORD.
    perform bdc_dynpro      using 'SAPMF02K' '0100'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'USE_ZAV'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'RF02K-LIFNR'
                                  '8765'.
    perform bdc_field       using 'RF02K-BUKRS'
                                  '1000'.
    perform bdc_field       using 'RF02K-EKORG'
                                  '1000'.
    perform bdc_field       using 'RF02K-KTOKK'
                                  '0001'.
    perform bdc_field       using 'USE_ZAV'
                                  'X'.
    perform bdc_dynpro      using 'SAPMF02K' '0210'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'LFB1-FDGRV'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=UPDA'.
    perform bdc_field       using 'LFB1-AKONT'
                                  '160000'.
    perform bdc_field       using 'LFB1-FDGRV'
                                  'A1'.
    perform bdc_dynpro      using 'SAPMF02K' '0310'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'LFM1-WAERS'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=UPDA'.
    perform bdc_field       using 'LFM1-WAERS'
                                  'usd'.
    perform bdc_transaction using 'XK01'.
    ENDLOOP.
    perform close_group.
                  CALL FUNCTION 'BDC_OPEN_GROUP'
                   EXPORTING
                    CLIENT                    = SY-MANDT
                    DEST                      = FILLER8
                     GROUP                     = 'SESSION1'
                    HOLDDATE                  = FILLER8
                    KEEP                      = FILLER1
                     USER                      = SY-UNAME
                    RECORD                    = FILLER1
                    PROG                      = SY-CPROG
                  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
                  IF sy-subrc <> 0.
                  WRITE 'ERROR IN OPEN_GROUP'.
                  ENDIF.
                   CALL FUNCTION 'BDC_INSERT'
                   EXPORTING
                     TCODE                  = TCODE
                     POST_LOCAL             = NOVBLOCAL
                     PRINTING               = NOPRINT
                     SIMUBATCH              = ' '
                     CTUPARAMS              = ' '
                     TABLES
                       dynprotab              = I_BDCDATA
                   EXCEPTIONS
                     INTERNAL_ERROR         = 1
                     NOT_OPEN               = 2
                     QUEUE_ERROR            = 3
                     TCODE_INVALID          = 4
                     PRINTING_INVALID       = 5
                     POSTING_INVALID        = 6
                     OTHERS                 = 7
                   IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
                   ENDIF.
                   CALL FUNCTION 'BDC_CLOSE_GROUP'
                   EXCEPTIONS
                     NOT_OPEN          = 1
                     QUEUE_ERROR       = 2
                     OTHERS            = 3
                   IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
                   ENDIF.
    I appreciate

    Hi,
    i guess, the error is due to, u didnt pass the TCODE parameter in BDC_INSERT FM.
    Try by passing it...
    CALL FUNCTION 'BDC_INSERT'
    EXPORTING
    TCODE = TCODE*
    POST_LOCAL = NOVBLOCAL
    PRINTING = NOPRINT
    SIMUBATCH = ' '
    CTUPARAMS = ' '
    TABLES
    dynprotab = I_BDCDATA
    EXCEPTIONS
    INTERNAL_ERROR = 1
    NOT_OPEN = 2
    QUEUE_ERROR = 3
    TCODE_INVALID = 4
    PRINTING_INVALID = 5
    POSTING_INVALID = 6
    OTHERS = 7
    Hope it works!!
    Regards,
    Pavan

  • BDC session error handling for IW41 transaction

    Hi,
    When the order confirmation is done by BDC session program, it is executed without any error. But if we do the same process manually, it is showing the error message as 'Posting period is Locked for 001 2012'. My question here is why this is not happening when it is executed through bdc session program.
    Anyone can help us?
    Thanks,
    Guna

    It is difficult to believe that you would get good results from background BDC process and error in foreground using same transaction and exactly the same data.  Beyond that, why is month 1 of the current year locked?    Are you absolutely sure that:
    BDC works correctly? maybe does NOT and the errors have been missed or ignored?
    Data is precisely the same for both BDC sessions?
    Same transaction is called?
    Sounds silly perhaps, but I have to believe that something is very different between the two sessions.

  • Is possible to skip first screen in BDC Session

    Hi all,
    Is it possible like  in call transaction method to skip first screen in Batch input session?
    Syntax----
    call transaction MM01 and skip first screen.
    I want same result By using Batch input session.
    Suggess..........
    Thanks
    Sanket sethi

    Actually i am open transaction SE38 and execute an Standard Report.In the selectiion screen I am changing something in layout.
    I recorded it by BDC.
    And use batch input session.
    Now i want to skip the se38 window i want to drop user on the execution of the report.
    I also do it by submit report but i want to know that is there any possibilities to use with BDC session.
    Thanks
    Sanket

  • Creation of Material using BDC Session method & global class

    Hi
    Creation of Material using BDC Session method & global class by using oops.
    can anyone plz help me out

    Hi,
    it looks like it's not possible to call this BAPI wihtout material number. Here is a quote from BAPI documentation.
    When creating material master data, you must transfer the material
    number, the material type, and the industry sector to the method. You
    must also enter a material description and its language.
    Cheers

  • Creating Sales order texts while using BDC session method is not working

    Hi All,
    I have an existing program which creates sales order using BDC session method.( Actual program uses BAPI to create sales order and in case if any error occurs during creation of sales order BDC session is generated so that user can process it later and i am facing issues in this part of code where it uses BDC)
    I wanted to modify this BDC sesion  to update the sales order text also. I tried recording VA01 for creationg sales order text unfortunatly it is not capturing the data i am entering in the text fields.
    Please suggest if there is any way to create sales order using BDC.
    Regards
    Sheeba

    Hi Madhu,
    '=TP_CREATE' is the OK code i am getting for creating TEXTS. But the text entered are not captured in BDC.
    Part of BDC program generated for cretaing sales order texts.
    perform bdc_dynpro      using 'SAPMV45A' '4003'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=%_GC 128 22'.
    perform bdc_field       using 'LV70T-SPRAS'
                                  'EN'.
    perform bdc_dynpro      using 'SAPMV45A' '4003'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=TP_CREATE'.
    perform bdc_field       using 'LV70T-SPRAS'
                                  'EN'.
    perform bdc_dynpro      using 'SAPMV45A' '4003'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=%_GC 128 22'.
    perform bdc_field       using 'LV70T-SPRAS'
                                  'EN'.
    perform bdc_dynpro      using 'SAPMV45A' '4003'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=TP_CREATE'.
    perform bdc_field       using 'LV70T-SPRAS'
                                  'EN'.
    perform bdc_dynpro      using 'SAPMV45A' '4003'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/EBACK'.
    perform bdc_field       using 'LV70T-SPRAS'
                                  'EN'.
    perform bdc_dynpro      using 'SAPMV45A' '4001'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=SICH'.
    Regards,
    Sheeba

  • Problem in bdc session method for tcode FS00

    Hi Experts,
    problem in bdc session method, when i run this program no output is shown.
    Even it is not calling the transaction.
    code as follows.
    *& Report  Z_GL_MASTER
    *& CATEGORY         =  BDC.
    *& DESCRIPTION      =  UPLOADING G/L MASTER RECORDS.
    *& TECHNICAL CONST  =  FRANCIS REDDY.
    *& FUNTIONAL CONST  =  FICO.
    REPORT  Z_GL_MASTER.
    *& Internal  Table
    DATA : BEGIN OF IT_UPLOAD OCCURS 0,
           SAKNR LIKE  GLACCOUNT_SCREEN_KEY-SAKNR,          " ACCOUNT NUMBER.
           BUKRS LIKE  GLACCOUNT_SCREEN_KEY-BUKRS,          " COMPANY CODE.
           KTOKS LIKE GLACCOUNT_SCREEN_COA-KTOKS,           " ACCOUNT GROUP.
           XPLACCT LIKE GLACCOUNT_SCREEN_COA-XPLACCT,       " P&L STATEMEMENT.
           GVTYP LIKE  GLACCOUNT_SCREEN_COA-GVTYP,          " P&L STATEMENT TYPE.
           XBILK LIKE GLACCOUNT_SCREEN_COA-XBILK,           " BALANCE SHEET STATEMENT
           SHORT LIKE GLACCOUNT_SCREEN_COA-TXT20_ML,        " SHORT TEXT.
           LONG LIKE GLACCOUNT_SCREEN_COA-TXT50_ML,         " LONG TEXT.
           WAERS LIKE GLACCOUNT_SCREEN_CCODE-WAERS,         " ACCOUNT CURRENCY.
           XSALH LIKE GLACCOUNT_SCREEN_CCODE-XSALH,         " ONLY BALANCES IN LOCAL CURRENCY.
           MITKZ LIKE GLACCOUNT_SCREEN_CCODE-MITKZ,         " RECONCILATION ACCOUNT FOR ACCOUNT TYPEGLACCOUNT_SCREEN_CCODE-MITKZ
           XOPVW LIKE GLACCOUNT_SCREEN_CCODE-XOPVW,         " OPEN ITEM MANAGEMENT.
           XKRES LIKE GLACCOUNT_SCREEN_CCODE-XKRES,         " LINE ITEM DISPLAY.
           ZUAWA LIKE GLACCOUNT_SCREEN_CCODE-ZUAWA,         " SORT KEY.
           FSTAG LIKE GLACCOUNT_SCREEN_CCODE-FSTAG,         " FIELD STATUS GROUP.
           XGKON LIKE GLACCOUNT_SCREEN_CCODE-XGKON,         " RELAVENT CASH FLOW.
           END OF IT_UPLOAD.
    *& Internal  Table FOR BDC DATA.
    DATA : IT_BDCDATA TYPE  BDCDATA OCCURS 0  WITH HEADER LINE.
    *& DATA DECLARATIONS.
    DATA : V_FILE LIKE RLGRAP-FILENAME.
    *&  SELECTION SCREEN.
    PARAMETER : P_FILE LIKE V_FILE.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
         PERFORM GET_FILENAME.
    START-OF-SELECTION.
          PERFORM UPLOAD_DATA.
          PERFORM BDCDATA_OPEN.
          PERFORM BDC_POPULATE.
          PERFORM BDC_CLOSE.
    *&      Form  GET_FILENAME
    form GET_FILENAME .
      CALL FUNCTION 'F4_FILENAME'
       EXPORTING
         PROGRAM_NAME        = SYST-CPROG
         DYNPRO_NUMBER       = SYST-DYNNR
         FIELD_NAME          = 'P_FILE'
       IMPORTING
         FILE_NAME           = P_FILE.
    endform.                    " GET_FILENAME
    *&      Form  UPLOAD_DATA
    form UPLOAD_DATA .
    CALL FUNCTION 'WS_UPLOAD'
    EXPORTING
       FILENAME                      =  P_FILE
       FILETYPE                      = 'DAT'
      TABLES
        data_tab                     = IT_UPLOAD.
    endform.                    " UPLOAD_DATA
    *&      Form  BDCDATA_OPEN
       FORM FOR BDC_OPEN_GROUP.
    form BDCDATA_OPEN .
    CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
       CLIENT                    = SY-MANDT
       GROUP                     = 'GLMASTER'
       HOLDDATE                  = SY-DATUM
       KEEP                      = 'X'
       USER                      = SY-UNAME.
    endform.                    " BDCDATA_OPEN
    *&      Form  BDC_POPULATE
      POPULATING BDC DATA .
    form BDC_POPULATE .
    loop at it_upload.
    PERFORM BDC_SUB1 USING 'X' 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.
    PERFORM BDC_SUB2 USING 'BDC_OKCODE' '=ACC_CRE'.
    PERFORM BDC_SUB2 USING 'BDC_CURSOR' 'GLACCOUNT_SCREEN_KEY-SAKNR'.
    PERFORM BDC_SUB2 USING 'GLACCOUNT_SCREEN_KEY-SAKNR'    IT_UPLOAD-SAKNR.
    PERFORM BDC_SUB2 USING 'GLACCOUNT_SCREEN_KEY-BUKRS'    IT_UPLOAD-BUKRS.
    PERFORM BDC_SUB1 USING 'X' 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.
    PERFORM BDC_SUB2 USING 'BDC_OKCODE' '=2102_GROUP'.
    PERFORM BDC_SUB2 USING 'BDC_CURSOR' 'GLACCOUNT_SCREEN_COA-KTOKS'.
    PERFORM BDC_SUB2 USING 'GLACCOUNT_SCREEN_COA-KTOKS'    IT_UPLOAD-KTOKS.
    PERFORM BDC_SUB2 USING 'GLACCOUNT_SCREEN_COA-XPLACCT'  IT_UPLOAD-XPLACCT.
    PERFORM BDC_SUB1 USING 'X' 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.
    PERFORM BDC_SUB2 USING 'BDC_OKCODE' '=2102_BS_PL'.
    PERFORM BDC_SUB2 USING 'GLACCOUNT_SCREEN_COA-GVTYP'    IT_UPLOAD-GVTYP.
    PERFORM BDC_SUB2 USING 'GLACCOUNT_SCREEN_COA-XBILK'    IT_UPLOAD-XBILK.
    PERFORM BDC_SUB1 USING 'X' 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.
    PERFORM BDC_SUB2 USING 'BDC_CURSOR' 'GLACCOUNT_SCREEN_COA-TXT20_ML'.
    PERFORM BDC_SUB2 USING 'GLACCOUNT_SCREEN_COA-TXT20_ML' IT_UPLOAD-SHORT.
    PERFORM BDC_SUB2 USING 'GLACCOUNT_SCREEN_COA-TXT50_ML' IT_UPLOAD-LONG.
    PERFORM BDC_SUB1 USING 'X' 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.
    PERFORM BDC_SUB2 USING  'BDC_OKCODE' '=TAB02'.
    PERFORM BDC_SUB2 USING 'GLACCOUNT_SCREEN_CCODE-WAERS'  IT_UPLOAD-WAERS.
    PERFORM BDC_SUB2 USING 'GLACCOUNT_SCREEN_CCODE-XSALH'  IT_UPLOAD-XSALH.
    PERFORM BDC_SUB2 USING 'GLACCOUNT_SCREEN_CCODE-MITKZ'  IT_UPLOAD-MITKZ.
    PERFORM BDC_SUB2 USING 'GLACCOUNT_SCREEN_CCODE-XOPVW'  IT_UPLOAD-XOPVW.
    PERFORM BDC_SUB2 USING 'GLACCOUNT_SCREEN_CCODE-XKRES'  IT_UPLOAD-XKRES.
    PERFORM BDC_SUB2 USING 'GLACCOUNT_SCREEN_CCODE-ZUAWA'  IT_UPLOAD-ZUAWA.
    PERFORM BDC_SUB1 USING 'X' 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.
    PERFORM BDC_SUB2 USING 'BDC_OKCODE' '=TAB03'.
    PERFORM BDC_SUB2 USING 'GLACCOUNT_SCREEN_CCODE-FSTAG' IT_UPLOAD-FSTAG.
    PERFORM BDC_SUB2 USING 'GLACCOUNT_SCREEN_CCODE-XGKON' IT_UPLOAD-XGKON.
    CALL FUNCTION 'BDC_INSERT'
      EXPORTING
        TCODE                  = 'FS00'
       TABLES
         dynprotab              = IT_BDCDATA.
    endloop.
    endform.                    " BDC_POPULATE
    *&      Form  BDC_CLOSE
    FORM FOR CLOSING BDC_GROUP
    form BDC_CLOSE .
    CALL FUNCTION 'BDC_CLOSE_GROUP'.
    endform.                    " BDC_CLOSE
    *&      Form  BDC_SUB1
       FORM FOR BDCDATA.
    form BDC_SUB1   USING  A  B  C.
    CLEAR  IT_BDCDATA.
    IT_BDCDATA-DYNBEGIN = A.
    IT_BDCDATA-PROGRAM =  B.
    IT_BDCDATA-DYNPRO =   C.
    APPEND IT_BDCDATA.
    endform.                    " BDC_SUB1
    *&      Form  BDC_SUB2
          text
    form BDC_SUB2   USING  A  B.
    CLEAR  IT_BDCDATA.
      IT_BDCDATA-FNAM = A.
      IT_BDCDATA-FVAL = B.
      APPEND IT_BDCDATA.
    endform.                    " BDC_SUB2
    Points will be  rewarded.
    Thanks in advance.
    Francis.

    Hi,
    Once the program is executed..It will a BDC session..
    THen you have to use the transaction SM35..To process the BDC session..
    Thanks,
    Naren

  • Storing of log file in A/P Server while running BDC session in SM35

    Hi All,
    I have issue when running BDC session in SM35.
    The actual issue is
    I need to store of log file generated while running BDC session in <b>SM35</b> in <b>Application/Presentation</b> Server path.
    When ever we run single session the Log file regarding that session we need to store in Application/Presentation Server.
    Can anybody have solution for this issue.
    Thanks in advance.
    Thanks & Regards,
    Rayeez.

    Hi
    See the std report RSBDC_ANALYSE, here you can know how to find out the log of B.I..
    You can create a program like that to load the log into file instead of showing it.
    Max

  • How to handle the errors in BDC Session method

    Hi All,
    I am uploading Material Master (MM01) records using BDC Session Method.my problem is when i am running the program, all the error records are going to flat file.how can i correcting the error records and after correction how can i re-process the error records.tell me with example.
    i have around 70,000 records in my flat file.

    Hi,
    I am attaching few threads.Hope these will help you.
    If there are any error records in session, all those error records will get poulated in log .SM35 and after the session is completed , u can see error records which can be corrected and reprocessed again
    We have the structures BDCLD and BDCLM, which will capture the log details inthe session. Firstly, sesssion should be processed. After that log will be created. Then caputure the information into an internal table using BDCLM and BDCLD.
    and refer the link.
    error correction in bdc session
    regards
    Madhu

Maybe you are looking for

  • Final mixdown is dramatically off when exported. I had found a work-around but that no longer works.

    This has happened before: I'd blend, EQ, pan, etc. to a great final mix and bounce it out (either to disk or straight to ITunes) and certain stock EQs and compressions would end up disabled. I learned that the MacBook just needed to be rebooted and G

  • Production Order qty in Report Painter

    Can we get Production Order qty in Report Painter? I have tried and used couple of Libaries but the values are not getting updated in report. Can anybody please tell me which Library and Table combination to to get the result. Kami

  • Graphical message mapping

    Hello Expert I am woking in IS retail Outbound Scenario for article master  where enhancement segment E1WXX01 repeat multiple time and contain different -2 value  and I want to collect that different value in different Target filed  Suppose When firs

  • Diameter

    HI All, In the Inventory Module----> Item Master Data In the Purchasing Tab or Sales Tab I need a new filed called Diameter how can I incorporate in it. Can I use the Factors available in Purchasing Tab or Sales Tab as Diameter. How can I calculate t

  • After replace the ATX case for K7T Turbo2 mainboard???

    hi, Master outhere help plz... after replace the ATX case for K7T Turbo2 mainboard??? why not boot up on screen any more , but power running is ok for the CPU fan , if i forgot any thing from this stage plz guide me the step. thank for kindly support