Monday, October 25, 2010

Read Text Object

Posted by Aries Wandari

Today user request me to download Notification long text. Function READ_TEXT need text id, text name, text object as parameters. Below are steps to find those parameters.

call function 'READ_TEXT'
  EXPORTING
    id                      = ?
    language          = sy-langu
    name                = ?
    object               = ?
  TABLES
    lines                  = lines
  EXCEPTIONS
    id                       = 1
    language           = 2
    name                 = 3
    not_found          = 4
    object                 = 5
    reference_check = 6
    wrong_access_to_archive = 7.
In any long text editor, go to menu Go To > Header.
image
There is Text Name, Language, Text ID, Text Object.
image

Monday, June 28, 2010

BAPI_SALESORDER_CREATEFROMDAT2

Posted by Aries Wandari

     Im on the way creating waste selling on intranet. User will input material that will be sold, do some level approval and create sales order in SAP. Im using BAPI_SALESORDER_CREATEFROMDAT2 to create sales order. Test using the function is ok (sales document number diplayed). But when I try to display the SO via VA03, error ‘SD document xxx is not in the database or has been archived’ displayed.
Function test displaying sales order successfully created.
image

To handle this, we  need to commit the transaction by running BAPI_TRANSACTION_COMMIT.

Sequence test on creating sales order and commit transaction:
On function module SE37, click menu Function Module > Test > Test sequence, input BAPI_SALESORDER_CREATEFROMDAT2 and BAPI_TRANSACTION_COMMIT, then run.

Example of abap program testing the function:

*&---------------------------------------------------------------------*
*& Report  ZCREATESALESDOC                                             *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*
REPORT  ZCREATESALESDOC                         .
DATA: order_header_in LIKE standard table of bapisdhd1 with header line.
DATA: order_items_in TYPE STANDARD TABLE OF bapisditm WITH HEADER LINE.
DATA: order_schedules_in
TYPE STANDARD TABLE OF bapischdl WITH HEADER LINE.
DATA: order_partners TYPE STANDARD TABLE OF bapiparnr WITH HEADER LINE.
DATA: return TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE.
data: itemx like bapisditmx occurs 10 with header line.
order_header_in-doc_type = 'ZORL'.
order_header_in-sales_org = 'ID10'.
order_header_in-distr_chan = 'DC'.
order_header_in-division = '00'.
order_header_in-purch_date = sy-datum.
order_header_in-purch_no_c = 'BAPITEST'.
APPEND order_header_in.
order_partners-partn_role = 'AG'.
order_partners-partn_numb = '0000100080'.
APPEND order_partners.
order_partners-partn_role = 'WE'.
order_partners-partn_numb = '0000100082'.
APPEND order_partners.
*req deliv date, pricing date
*payment terms, incoterms
*add next line with more than one item
order_items_in-itm_number = '000010'.
order_items_in-material = 'LL0209AA'.
order_items_in-target_qty = '1000'.
order_items_in-target_qu = 'KG'.
order_items_in-sales_unit = 'KG'.
APPEND order_items_in.
order_schedules_in-itm_number = '000010'.
order_schedules_in-req_qty = '1000'.
APPEND order_schedules_in.
*Add following lines with more than one line
itemx-itm_number = '000010'.
itemx-updateflag = 'I'.
itemx-material = 'X'.
itemx-target_qty = 'X'.
append itemx.
*stop add more lines
REFRESH return.
*BREAK-POINT.
CALL FUNCTION 'SD_SALESDOCUMENT_CREATE'
EXPORTING
  sales_header_in = order_header_in
TABLES
  return = return
  sales_items_in = order_items_in
  sales_items_inx = itemx
  sales_partners = order_partners
  sales_schedules_in = order_schedules_in.
COMMIT WORK.
LOOP AT return.
WRITE: / return-message.
ENDLOOP.

Wednesday, June 9, 2010

ALV Report Template

Posted by Aries Wandari

*&---------------------------------------------------------------------*
*& Report  ZMMF008                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*
REPORT  ZMMF008                                 .
*========================== Global definitions  ====================*
**
* Data Types
**

type-pools: slis.
types: begin of tp_data,
b_mandt like eban-mandt,
b_banfn like eban-banfn,     "Purchase requisition
b_bnfpo like eban-bnfpo,     "Item of requisition
b_bsart like eban-bsart,     "Document type
b_loekz like eban-loekz,     "Deletion indicator
*b_statu like eban-statu,     "Processing status
*b_estkz like eban-estkz,     "Creation indicator
b_frgkz like eban-frgkz,     "Release indicator
b_frgzu like eban-frgzu,     "Release status
b_frgst like eban-frgst,     "Release strategy
b_ekgrp like eban-ekgrp,     "Purchasing Group
b_ernam like eban-ernam,     "Created by
*b_erdat like eban-erdat,     "Changed on
b_afnam like eban-afnam,     "Requisitioner
b_txz01 like eban-txz01,     "Short text
b_matnr like eban-matnr,     "Material
b_werks like eban-werks,     "Plant
*b_lgort like eban-lgort,     "Storage Location
b_bednr like eban-bednr,     "Req. Tracking Number
*b_matkl like eban-matkl,     "Material Group
b_menge like eban-menge,     "Quantity requested
b_meins like eban-meins,     "Unit of measure
b_badat like eban-badat,     "Requisition date
*b_lfdat like eban-lfdat,     "Delivery date
*b_frgdt like eban-frgdt,     "Release date
*b_webaz like eban-webaz,     "GR processing time
b_preis like eban-preis,     "Valuation price
b_peinh like eban-peinh,     "Price unit
*b_pstyp like eban-pstyp,     "Item category
*b_knttp like eban-knttp,     "Acct assignment cat.
*b_wepos like eban-wepos,     "Goods receipt
*b_weunb like eban-weunb,     "GR non-valuated
*b_repos like eban-repos,     "Invoice receipt
*b_lifnr like eban-lifnr,     "Desired vendor
*b_flief like eban-flief,     "Fixed vendor
b_ekorg like eban-ekorg,     "Purch. Organization
*b_vrtyp like eban-vrtyp,     "Purch. doc. category
b_ebeln like eban-ebeln,     "Purchase order
b_ebelp like eban-ebelp,     "Purchase order item
*b_bedat like eban-bedat,     "Purchase order date
*b_bsmng like eban-bsmng,     "Quantity ordered
b_ebakz like eban-ebakz,     "Closed
b_frggr like eban-frggr,     "Release group
*b_frgrl like eban-frgrl,     "Subject to release
b_waers like eban-waers,     "Currency
b_arsnr like eban-arsnr,     "Settlement res. no.
b_arsps like eban-arsps,     "Item settlem.reser.
b_rlwrt like eban-rlwrt,     "Total val. upon release
p_ebeln like ekpo-ebeln,     "Purchasing Document
p_ebelp like ekpo-ebelp,     "Item
p_loekz like ekpo-loekz,     "Deletion indicator
*p_statu like ekpo-statu,     "RFQ status
*p_aedat like ekpo-aedat,     "Last changed on
*p_txz01 like ekpo-txz01,     "Short text
*p_matnr like ekpo-matnr,     "Material
p_bukrs like ekpo-bukrs,     "Company Code
*p_werks like ekpo-werks,     "Plant
*p_lgort like ekpo-lgort,     "Storage Location
*p_bednr like ekpo-bednr,     "Req. Tracking Number
*p_matkl like ekpo-matkl,     "Material Group
p_menge like ekpo-menge,     "Order quantity
p_meins like ekpo-meins,     "Order unit
*p_bprme like ekpo-bprme,     "Order Price Unit
*p_bpumz like ekpo-bpumz,     "Quantity conversion
p_bpumn like ekpo-bpumn,     "Quantity conversion
*p_umrez like ekpo-umrez,     "Equal To
*p_umren like ekpo-umren,     "Denominator
p_netpr like ekpo-netpr,     "Net order price
p_peinh like ekpo-peinh,     "Price unit
p_netwr like ekpo-netwr,     "Net order value
p_brtwr like ekpo-brtwr,     "Gross order value
*p_uebto like ekpo-uebto,     "Overdeliv. tolerance
*p_uebtk like ekpo-uebtk,     "Unltd overdelivery
*p_untto like ekpo-untto,     "Underdel. tolerance
*p_elikz like ekpo-elikz,     "Delivery Completed
*p_knttp like ekpo-knttp,     "Acct assignment cat.
*p_wepos like ekpo-wepos,     "Goods receipt
*p_weunb like ekpo-weunb,     "GR non-valuated
*p_repos like ekpo-repos,     "Invoice receipt
*p_webre like ekpo-webre,     "GR-based inv. verif.
*p_bstyp like ekpo-bstyp,     "Purch. doc. category
*p_plifz like ekpo-plifz,     "Planned deliv. time
*p_banfn like ekpo-banfn,     "Purchase requisition
*p_bnfpo like ekpo-bnfpo,     "Item of requisition
*p_mtart like ekpo-mtart,     "Material Type
*p_afnam like ekpo-afnam,     "Requisitioner
p_anfnr like ekpo-anfnr,
k_frgke like ekko-frgke,
k_frggr like ekko-frggr,
k_frgsx like ekko-frgsx,
prx1date like cdhdr-udate,
prx1time like cdhdr-utime,
prx2date like cdhdr-udate,
prx2time like cdhdr-utime,
prx3date like cdhdr-udate,
prx3time like cdhdr-utime,
prx4date like cdhdr-udate,
prx4time like cdhdr-utime,
prx5date like cdhdr-udate,
prx5time like cdhdr-utime,
prfnldate like cdhdr-udate,
prfnltime like cdhdr-utime,
pox1date like cdhdr-udate,
pox1time like cdhdr-utime,
pox2date like cdhdr-udate,
pox2time like cdhdr-utime,
pox3date like cdhdr-udate,
pox3time like cdhdr-utime,
pox4date like cdhdr-udate,
pox4time like cdhdr-utime,
pofnldate like cdhdr-udate,
pofnltime like cdhdr-utime,
prrel_cd_tx1 like BAPIRLCORQ-REL_CD_TX1,
prrel_cd_tx2 like BAPIRLCORQ-REL_CD_TX2,
prrel_cd_tx3 like BAPIRLCORQ-REL_CD_TX3,
prrel_cd_tx4 like BAPIRLCORQ-REL_CD_TX4,
prrel_cd_tx5 like BAPIRLCORQ-REL_CD_TX5,
porel_cd_tx1 like BAPIRLCORQ-REL_CD_TX1,
porel_cd_tx2 like BAPIRLCORQ-REL_CD_TX2,
porel_cd_tx3 like BAPIRLCORQ-REL_CD_TX3,
porel_cd_tx4 like BAPIRLCORQ-REL_CD_TX4,
porel_cd_tx5 like BAPIRLCORQ-REL_CD_TX5,
days01 type i, "days calculate PO final release - PR final release
weeks type i, "days01 as weeks
days01str(5) type c, "days01 in str
weekstr(5) type c, "weeks in str
itemtx(50) type C,           "item text
mark,
       end of tp_data,
       tp_tbl_data type standard table of tp_data.
types: begin of chgtype,
changenr like cdhdr-changenr,
mandant like cdhdr-mandant,
objectid like cdhdr-objectid,
udate like cdhdr-udate,
utime like cdhdr-utime,
tcode like cdhdr-tcode,
objectclas like cdpos-objectclas,
tabname  like cdpos-tabname,
tabkey  like cdpos-tabkey,
fname  like cdpos-fname,
value_old  like cdpos-value_old,
value_new like cdpos-value_new,
end of chgtype.

**
* Constants
**

**
* Data objects (variable declarations and definitions)
**

data: irel_final like BAPIRLCORQ occurs 5 with header line.
data: ihdr type sorted table of chgtype with unique key changenr,
      ipos type sorted table of chgtype with non-unique key changenr.
*      ipos type sorted table of chgtype with non-unique key value_new with header line. "error sort value_new

* Report data to be shown. data:
    it_data type standard table of tp_data,
    it_data_pr type standard table of tp_data,
    it_data_po type standard table of tp_data,
    it_final type standard table of tp_data
*    it_data_gr type standard table of tp_data,
*    it_data_inv type standard table of tp_data
*    it_data2 type sorted table of tp_data with non-unique key b_banfn b_bnfpo p_ebeln p_ebelp k_bewtp
.
data: wa type tp_data.
data: wahdr type chgtype, wapos type chgtype, wahdrpos type chgtype.
data: flag type i, l_from type i, prtabkey like CDPOS-tabkey, potabkey like CDPOS-tabkey.
* Heading of the report.
data: t_heading type slis_t_listheader.
FIELD-SYMBOLS: <fs> type tp_data.
*======================= Selection Screen ==========================*
selection-screen:
begin of block b1 with frame title text-t01.
DATA: w_aux_werks like eban-werks
,w_aux_badat like eban-badat
,w_aux_banfn like eban-banfn
,w_aux_ebeln like ekpo-ebeln
,w_aux_matnr like eban-matnr
,w_aux_matkl like eban-matkl
,w_aux_ernam like eban-ernam
,w_aux_bednr like eban-bednr
.
SELECT-OPTIONS s_werks for w_aux_werks obligatory no intervals default '5201'.
SELECT-OPTIONS s_badat for w_aux_badat.
SELECT-OPTIONS s_banfn for w_aux_banfn.
SELECT-OPTIONS s_ebeln for w_aux_ebeln.
SELECT-OPTIONS s_matnr for w_aux_matnr.
SELECT-OPTIONS s_matkl for w_aux_matkl.
SELECT-OPTIONS s_ernam for w_aux_ernam.
SELECT-OPTIONS s_bednr for w_aux_bednr.
selection-screen: end of block b1.
*======================== Event Blocks =============================*
at selection-screen.
start-of-selection.
  perform get_data_PR using it_data_pr.
  perform get_data_PO using it_data_pr it_data_po.
  perform get_reldt_PRPO using it_data_po it_final.

  it_data = it_final.
*  perform get_data_INV using it_data_gr it_data_inv.
*LOOP AT it_data_pr ASSIGNING <fs>.
*ENDLOOP.
end-of-selection.
  perform build_alv using it_data t_heading.
*======================== Subroutines ==============================*
*&------------------------------------------------------------------*
*&      Form  get_data
*&------------------------------------------------------------------*
*       Gets the information to be shown in the report.
*-------------------------------------------------------------------*

form get_data_PR using data_pr type tp_tbl_data.
  clear wa.
  unassign <fs>.
  SELECT
  mandt banfn bnfpo bsart loekz frgkz frgzu frgst ekgrp ernam afnam
  txz01 matnr werks bednr menge meins badat preis peinh ekorg
  ebeln ebelp ebakz frggr waers arsnr arsps rlwrt
  from eban
  into
  (wa-b_mandt,
   wa-b_banfn, wa-b_bnfpo, wa-b_bsart, wa-b_loekz, wa-b_frgkz,
   wa-b_frgzu, wa-b_frgst, wa-b_ekgrp, wa-b_ernam, wa-b_afnam,
   wa-b_txz01, wa-b_matnr, wa-b_werks, wa-b_bednr, wa-b_menge,
   wa-b_meins, wa-b_badat, wa-b_preis, wa-b_peinh, wa-b_ekorg,
   wa-b_ebeln, wa-b_ebelp, wa-b_ebakz, wa-b_frggr, wa-b_waers,
   wa-b_arsnr, wa-b_arsps, wa-b_rlwrt)
  where
  werks in s_werks
  AND badat in s_badat
  AND banfn in s_banfn
  AND matnr in s_matnr
  AND matkl in s_matkl
  AND ernam in s_ernam
  AND bednr in s_bednr
  .
       append wa to data_pr.
  endselect.
endform.                    " get_data
form get_data_PO using data_pr type tp_tbl_data
                 data_po type tp_tbl_data.
  clear wa. clear flag.
  if NOT data_pr is initial.
    loop at data_pr into wa.
      clear flag.
      select
      p~ebeln p~ebelp p~loekz p~bukrs p~menge
      p~meins p~bpumn p~netpr p~peinh p~netwr
      p~brtwr p~anfnr
      k~frgke k~frggr k~frgsx
      into
      (wa-p_ebeln, wa-p_ebelp, wa-p_loekz, wa-p_bukrs, wa-p_menge,
       wa-p_meins, wa-p_bpumn, wa-p_netpr, wa-p_peinh, wa-p_netwr,
       wa-p_brtwr, wa-p_anfnr,
       wa-k_frgke, wa-k_frggr, wa-k_frgsx)
      from ekpo as p inner join ekko as k on p~ebeln = k~ebeln
      where banfn = wa-b_banfn and bnfpo = wa-b_bnfpo .
        flag = 1.
        append wa to data_po.
      endselect.
      if flag is initial.
        append wa to data_po..
      endif.
    endloop.
*    it_data = data_po.
  endif.
endform.
form get_reldt_PRPO using data type tp_tbl_data
                          final type tp_tbl_data.
.
  if NOT data is initial.
    loop at data into wa.
*get PR release step
      CALL FUNCTION 'ME_REL_INFO'
        EXPORTING
          i_frgkz = wa-b_frgkz
          i_frggr = wa-b_frggr
          i_frgst = wa-b_frgst
          i_frgot = '1'
          i_no_dialog = 'X'
        TABLES
          rel_final = irel_final
        .
      if not irel_final is initial.
        wa-prrel_cd_tx1 = irel_final-rel_cd_tx1.
        wa-prrel_cd_tx2 = irel_final-rel_cd_tx2.
        wa-prrel_cd_tx3 = irel_final-rel_cd_tx3.
        wa-prrel_cd_tx4 = irel_final-rel_cd_tx4.
        wa-prrel_cd_tx5 = irel_final-rel_cd_tx5.
      endif.
      clear irel_final. clear irel_final[].
*get PO release step
      CALL FUNCTION 'ME_REL_INFO'
        EXPORTING
          i_frgkz = wa-k_frgke
          i_frggr = wa-k_frggr
          i_frgst = wa-k_frgsx
          i_frgot = '1'
          i_no_dialog = 'X'
        TABLES
          rel_final = irel_final
      .
      if not irel_final is initial.
        wa-porel_cd_tx1 = irel_final-rel_cd_tx1.
        wa-porel_cd_tx2 = irel_final-rel_cd_tx2.
        wa-porel_cd_tx3 = irel_final-rel_cd_tx3.
        wa-porel_cd_tx4 = irel_final-rel_cd_tx4.
        wa-porel_cd_tx5 = irel_final-rel_cd_tx5.
      endif.
      clear irel_final. clear irel_final[].
*populate header to ihdr
      select changenr mandant objectid udate utime tcode
      into table ihdr
      from cdhdr CLIENT SPECIFIED
      where ( mandant = wa-b_mandt
      and objectclas = 'BANF'
      and objectid = wa-b_banfn
      AND TCODE in ('ME54N','ME55') )
      OR
      ( mandant = wa-b_mandt
      and objectclas = 'EINKBELEG'
      and objectid = wa-b_ebeln
      AND TCODE in ('ME29N','ME28') ).
      CONCATENATE wa-b_mandt wa-b_banfn wa-b_bnfpo INTO prtabkey.
      CONCATENATE wa-b_mandt wa-b_ebeln INTO potabkey.
      if not ihdr is initial.
*populate detail + header search to ipos, sorted by changenr
        select changenr objectid objectclas tabname tabkey fname value_old value_new
        into (wapos-changenr, wapos-objectid, wapos-objectclas, wapos-tabname,
        wapos-tabkey, wapos-fname, wapos-value_old, wapos-value_new)
        from cdpos
        for all entries in ihdr
        where ( objectid = ihdr-objectid
        and changenr = ihdr-changenr
        and objectclas = 'BANF'
        and tabname = 'EBAN'
        and tabkey = prtabkey
        and ( fname = 'FRGZU' or fname = 'FRGKZ' ) )
        or
        ( objectid = ihdr-objectid
        and changenr = ihdr-changenr
        and objectclas = 'EINKBELEG'
        and tabname = 'EKKO'
        and tabkey = potabkey
        and ( fname = 'FRGZU' OR fname = 'FRGKE' ) )
        .
          read table ihdr transporting no fields with key changenr = wapos-changenr binary search.
          if sy-subrc = 0.
            l_from = sy-tabix.
            loop at ihdr into wahdr from l_from where changenr = wapos-changenr.
              wapos-mandant = wahdr-mandant.
              wapos-objectid = wahdr-objectid.
              wapos-changenr = wahdr-changenr.
              wapos-udate = wahdr-udate.
              wapos-utime = wahdr-utime.
              wapos-tcode = wahdr-tcode.
            endloop.
          endif.
          append wapos to ipos.
        endselect.
*get PR PO release date
        loop at ipos into wapos.
          CASE wapos-objectclas.
            WHEN 'BANF'.
              CASE wapos-value_new.
                WHEN 'X'.
                  wa-prx1date = wapos-udate.
                  wa-prx1time = wapos-utime.
                  clear wa-prx2date. clear wa-prx3date. clear wa-prx4date. clear wa-prx5date.
                  clear wa-prx2time. clear wa-prx3time. clear wa-prx4time. clear wa-prx5time.
                WHEN 'XX'.
                  wa-prx2date = wapos-udate.
                  wa-prx2time = wapos-utime.
                  clear wa-prx3date. clear wa-prx4date. clear wa-prx5date.
                  clear wa-prx3time. clear wa-prx4time. clear wa-prx5time.
                WHEN 'XXX'.
                  wa-prx3date = wapos-udate.
                  wa-prx3time = wapos-utime.
                  clear wa-prx4date. clear wa-prx5date.
                  clear wa-prx4time. clear wa-prx5time.
                WHEN 'XXXX'.
                  wa-prx4date = wapos-udate.
                  wa-prx4time = wapos-utime.
                  clear wa-prx5date.
                  clear wa-prx5time.
                WHEN 'XXXXX'.
                  wa-prx5date = wapos-udate.
                  wa-prx5time = wapos-utime.
                WHEN '2'.
                  if wa-b_frgkz eq 2.
                    wa-prfnldate = wapos-udate.
                    wa-prfnltime = wapos-utime.
                  endif.
              ENDCASE.
            WHEN 'EINKBELEG'.
              CASE wapos-value_new.
                WHEN 'X'.
                  wa-pox1date = wapos-udate.
                  wa-pox1time = wapos-utime.
                  clear wa-pox2date. clear wa-pox3date. clear wa-pox4date.
                  clear wa-pox2time. clear wa-pox3time. clear wa-pox4time.
                WHEN 'XX'.
                  wa-pox2date = wapos-udate.
                  wa-pox2time = wapos-utime.
                  clear wa-pox3date. clear wa-pox4date.
                  clear wa-pox3time. clear wa-pox4time.
                WHEN 'XXX'.
                  wa-pox3date = wapos-udate.
                  wa-pox3time = wapos-utime.
                  clear wa-pox4date.
                  clear wa-pox4time.
                WHEN 'XXXX'.
                  wa-pox4date = wapos-udate.
                  wa-pox4time = wapos-utime.
                WHEN '2'.
                  if wa-k_frgke eq 2.
                    wa-pofnldate = wapos-udate.
                    wa-pofnltime = wapos-utime.
                  endif.
              ENDCASE.
          ENDCASE.
        endloop.
      endif. "end of if ihdr is initial
*days calculate PO final release - PR final release
      if ( not wa-pofnldate is initial ) and ( not wa-prfnldate is initial ).
*        wa-days01 = wa-pofnldate - wa-prfnldate.
*        wa-weeks = ( wa-days01 + 7 ) / 7.
        wa-days01str = wa-pofnldate - wa-prfnldate.
        wa-weekstr = ( wa-days01 + 7 ) / 7.
      endif.
      append wa to final.
      clear wa. clear wahdr. clear wapos. clear ihdr. clear ipos.
    endloop.
  endif.
endform.

*&------------------------------------------------------------------*
*&      Form  build_alv
*&------------------------------------------------------------------*
*       Builds and display the ALV Grid.
*-------------------------------------------------------------------*


form build_alv using t_data type tp_tbl_data
                     t_heading  type slis_t_listheader.
* ALV required data objects.
data: w_title   type lvc_title,
      w_repid   type syrepid,
      w_comm    type slis_formname,
      w_status  type slis_formname,
      x_layout  type slis_layout_alv,
      t_event    type slis_t_event,
      t_fieldcat type slis_t_fieldcat_alv,
      t_sort     type slis_t_sortinfo_alv.
refresh t_fieldcat.
refresh t_event.
refresh t_sort.
clear x_layout.
clear w_title.
* Field Catalog
  perform set_fieldcat2 using:
1  'B_BANFN' 'BANFN' 'EBAN' space space  space  space  space  space space 'X' space space space space t_fieldcat ,
3  'B_BNFPO' 'BNFPO' 'EBAN' space space  space  space  space  space space space space space space space t_fieldcat ,
4  'B_BADAT' 'BADAT' 'EBAN' space space  space  space  space  space space space space space space space t_fieldcat ,
5  'B_LOEKZ' 'LOEKZ' 'EBAN' 5 space  'Del' space  space  space space space space space space space t_fieldcat ,
6  'PRREL_CD_TX1'  ''      '' 15 space  'PRRel1By'  space  space  space space space space space space space t_fieldcat ,
9  'PRX1DATE'  ''      '' space space  'PRRel1Dt'  space  space  space space space space space space space t_fieldcat ,
12 'PRREL_CD_TX2'  ''      '' 15 space  'PRRel2By'  space  space  space space space space space space space t_fieldcat ,
15 'PRX2DATE'  ''      '' space space  'PRRel2Dt'  space  space  space space space space space space space t_fieldcat ,
18 'PRREL_CD_TX3'  ''      '' 15 space  'PRRel3By'  space  space  space space space space space space space t_fieldcat ,
21 'PRX3DATE'  ''      '' space space  'PRRel3Dt'  space  space  space space space space space space space t_fieldcat ,
24 'PRREL_CD_TX4'  ''      '' 15 space  'PRRel4By'  space  space  space space space space space space space t_fieldcat ,
27 'PRX4DATE'  ''      '' space space  'PRRel4Dt'  space  space  space space space space space space space t_fieldcat ,
30 'PRREL_CD_TX5'  ''      '' 15 space  'PRRel5By'  space  space  space space space space space space space t_fieldcat ,
33 'PRX5DATE'  ''      '' space space  'PRRel5Dt'  space  space  space space space space space space space t_fieldcat ,
34 'PRFNLDATE'  ''      '' space space  'PRFinalRelDt'  space  space  space space space space space space space t_fieldcat ,
36 'P_EBELN' 'EBELN' 'EKPO' space space  space  space  space  space space space space space space space t_fieldcat ,
39 'P_EBELP' 'EBELP' 'EKPO' space space  space  space  space  space space space space space space space t_fieldcat ,
40 'P_LOEKZ' 'LOEKZ' 'EKPO' 5 space  'Del' space  space  space space space space space space space t_fieldcat ,
42 'POREL_CD_TX1'  ''      '' 22 space  'PORel1By'  space  space  space space space space space space space t_fieldcat ,
45 'POX1DATE'  ''      '' space space  'PORel1Dt'  space  space  space space space space space space space t_fieldcat ,
48 'POREL_CD_TX2'  ''      '' 22 space  'PORel2By'  space  space  space space space space space space space t_fieldcat ,
51 'POX2DATE'  ''      '' space space  'PORel2Dt'  space  space  space space space space space space space t_fieldcat ,
54 'POREL_CD_TX3'  ''      '' 22 space  'PORel3By'  space  space  space space space space space space space t_fieldcat ,
57 'POX3DATE'  ''      '' space space  'PORel3Dt'  space  space  space space space space space space space t_fieldcat ,
60 'POREL_CD_TX4'  ''      '' 22 space  'PORel4By'  space  space  space space space space space space space t_fieldcat ,
63 'POX4DATE'  ''      '' space space  'PORel4Dt'  space  space  space space space space space space space t_fieldcat ,
64 'POFNLDATE'  ''      '' space space  'POFinalRelDt'  space  space  space space space space space space space t_fieldcat ,
67 'DAYS01STR'  ''      '' space space  'DaysProcessing'  space  space  space space space space space space space t_fieldcat ,
69 'WEEKSTR'  ''      '' space space  'WeeksProcessing'  space  space  space space space space space space space t_fieldcat
.

* Layout
x_layout-zebra = 'X'.x_layout-box_fieldname = 'MARK'.x_layout-box_tabname = 'IT_DATA'.
* Top of page heading
  perform set_top_page_heading using t_heading t_event.
* Events
  perform set_events using t_event.
* GUI Status
  w_status = ''.
  w_repid = sy-repid.
* Title
* w_title = <<If you want to set a title for
*             the ALV, please, uncomment and edit this line>>.
* User commands
  w_comm   = 'USER_COMMAND'.

* Data Sort
* Example
*  PERFORM set_order USING '<field>' 'IT_DATA' 'X' space space t_sort.
PERFORM set_order USING 'B_BANFN' 'IT_DATA' 'X' space space t_sort.
* Displays the ALV grid
  call function 'REUSE_ALV_GRID_DISPLAY'
    exporting
      i_callback_program       = w_repid
      it_fieldcat              = t_fieldcat
      is_layout                = x_layout
      it_sort                  = t_sort
      i_callback_pf_status_set = w_status
      i_callback_user_command  = w_comm
      i_save                   = 'X'
      it_events                = t_event
      i_grid_title             = w_title
    tables
      t_outtab                 = t_data
    exceptions
      program_error            = 1
      others                   = 2.
  if sy-subrc <> 0.
    message id sy-msgid type sy-msgty number sy-msgno
            with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  endif.
endform.                    " build_alv.
*&------------------------------------------------------------------*
*&      Form  set_top_page_heading
*&------------------------------------------------------------------*
*       Creates the report headings.
*-------------------------------------------------------------------*
form set_top_page_heading using t_heading type slis_t_listheader
                                t_events  type slis_t_event.
data: x_heading type slis_listheader,
      x_event   type line of slis_t_event.
* Report title
  clear t_heading[].
  clear x_heading.
  x_heading-typ = 'H'.
  x_heading-info = ''(001).
  append x_heading to t_heading.
* Program name
  clear x_heading.
  x_heading-typ = 'S'.
  x_heading-key = 'Program: '.
  x_heading-info = sy-repid.
  append x_heading to t_heading.
* User who is running the report
  clear x_heading.
  x_heading-typ = 'S'.
  x_heading-key = 'User: '.
  x_heading-info = sy-uname.
  append x_heading to t_heading.
* Date of execution
  clear x_heading.
  x_heading-typ = 'S'.
  x_heading-key = 'Date: '.
  write sy-datum to x_heading-info.
  append x_heading to t_heading.
* Time of execution
  clear x_heading.
  x_heading-typ = 'S'.
  x_heading-key = 'Time: '.
  write sy-uzeit to x_heading-info.
  append x_heading to t_heading.
* Top of page event
  x_event-name = slis_ev_top_of_page.
  x_event-form = 'TOP_OF_PAGE'.
  append x_event to t_events.
endform.
*&------------------------------------------------------------------*
*&      Form  set_events
*&------------------------------------------------------------------*
*       Sets the events for ALV.
*       The TOP_OF_PAGE event is alredy being registered in
*       the set_top_page_heading subroutine.
*-------------------------------------------------------------------*
form set_events using t_events type slis_t_event.
data: x_event   type line of slis_t_event.
**
* Example
* -------
*  clear x_event.
*  x_event-name = .
*  x_event-form = .
*  append x_event to t_event.
**
endform.
*&------------------------------------------------------------------*
*&      Form  set_order
*&------------------------------------------------------------------*
*       Adds an entry to the order table.
*-------------------------------------------------------------------*
FORM set_order USING p_fieldname p_tabname p_up p_down p_subtot
                     t_sort TYPE slis_t_sortinfo_alv.
  DATA: x_sort TYPE slis_sortinfo_alv.
  CLEAR x_sort.
  x_sort-fieldname = p_fieldname.
  x_sort-tabname   = p_tabname.
  x_sort-up = p_up.
  x_sort-down = p_down.
  x_sort-subtot = p_subtot.
  APPEND x_sort TO t_sort.
ENDFORM.                    "set_order
*&------------------------------------------------------------------*
*&      Form  set_fieldcat2
*&------------------------------------------------------------------*
*       Adds an entry to the field catalog.
*    p_colpos: Column position.
*    p_fieldname: Field of internal table which is being described by
*          this record of the field catalog.
*    p_ref_fieldname: (Optional) Table field / data element which
*              describes the properties of the field.
*              If this field is not given, it is copied from
*              the fieldname.
*    p_ref_tabname: (Optional) Table which holds the field referenced
*            by <<p_ref_fieldname>>.
*                   If this is not given, the parameter
*                   <<p_ref_fieldname>> references a data element.
*    p_outputlen: (Optional) Column width.
*    p_noout: (Optional) If set to 'X', states that the field is not
*          showed initially. If so, the field has to be
*             included in the report at runtime using the display
*             options.
*    p_seltext_m: (Optional) Medium label to be used as column header.
*    p_seltext_l: (Optional) Long label to be used as column header.
*    p_seltext_s: (Optional) Small label to be used as column header.
*    p_reptext_ddic: (Optional) Extra small (heading) label to be
*              used as column header.
*    p_ddictxt: (Optional) Set to 'L', 'M', 'S' or 'R' to select
*               whether to use SELTEXT_L, SELTEXT_M, SELTEXT_S,
*               or REPTEXT_DDIC as text for column header.
*    p_hotspot: (Optional) If set to 'X', this field will be used
*            as a hotspot area for cursor, alolowing the user
*        to click on the field.
*    p_showasicon: (Optional) If set to 'X', this field will be shown
*                  as an icon and the contents of the field will set
*           which icon to show.
*    p_checkbox: (Optional) If set to 'X', this field will be shown
*                as a checkbox.
*    p_edit: (Optional) If set to 'X', this field will be editable.
*    p_dosum: (Optional) If set to 'X', this field will be summed
*             (aggregation function) according to the grouping set
*             by the order functions.
*    t_fieldcat: Table which contains the whole fieldcat.
*-------------------------------------------------------------------*
FORM set_fieldcat2 USING
      p_colpos p_fieldname p_ref_fieldname p_ref_tabname
      p_outputlen p_noout
      p_seltext_m p_seltext_l p_seltext_s p_reptext_ddic p_ddictxt
      p_hotspot p_showasicon p_checkbox p_edit
      p_dosum
      t_fieldcat TYPE slis_t_fieldcat_alv.
  DATA: wa_fieldcat TYPE slis_fieldcat_alv.
  CLEAR wa_fieldcat.
* General settings
  wa_fieldcat-fieldname = p_fieldname.
  wa_fieldcat-col_pos = p_colpos.
  wa_fieldcat-no_out = p_noout.
  wa_fieldcat-hotspot = p_hotspot.
  wa_fieldcat-checkbox = p_checkbox.
  wa_fieldcat-icon = p_showasicon.
  wa_fieldcat-do_sum = p_dosum.
* Set reference fieldname, tablenam and rollname.
* If p_ref_tabname is not given, the ref_fieldname given
*    is a data element.
* If p_ref_tabname is given, the ref_fieldname given is a
*    field of a table.
* In case ref_fieldname is not given,
*    it is copied from the fieldname.
  IF p_ref_tabname IS INITIAL.
    wa_fieldcat-rollname =   p_ref_fieldname.
  ELSE.
    wa_fieldcat-ref_tabname = p_ref_tabname.
    IF p_ref_fieldname EQ space.
      wa_fieldcat-ref_fieldname =   wa_fieldcat-fieldname.
    ELSE.
      wa_fieldcat-ref_fieldname =   p_ref_fieldname.
    ENDIF.
  ENDIF.
* Set output length.
  IF NOT p_outputlen IS INITIAL.
    wa_fieldcat-outputlen = p_outputlen.
  ENDIF.
* Set text headers.
  IF NOT p_seltext_m IS INITIAL.
    wa_fieldcat-seltext_m = p_seltext_m.
  ENDIF.
  IF NOT p_seltext_l IS INITIAL.
    wa_fieldcat-seltext_l = p_seltext_l.
  ENDIF.
  IF NOT p_seltext_s IS INITIAL.
    wa_fieldcat-seltext_s = p_seltext_s.
  ENDIF.
  IF NOT p_reptext_ddic IS INITIAL.
    wa_fieldcat-reptext_ddic = p_reptext_ddic.
  ENDIF.
  IF NOT p_ddictxt IS INITIAL.
    wa_fieldcat-ddictxt = p_ddictxt.
  ENDIF.
* Set as editable or not.
  IF NOT p_edit IS INITIAL.
    wa_fieldcat-input     = 'X'.
    wa_fieldcat-edit     = 'X'.
  ENDIF.
  APPEND wa_fieldcat TO t_fieldcat.
ENDFORM.                   "set_fieldcat2
*======================== Subroutines called by ALV ================*
*&------------------------------------------------------------------*
*&      Form  top_of_page
*&------------------------------------------------------------------*
*       Called on top_of_page ALV event.
*       Prints the heading.
*-------------------------------------------------------------------*
form top_of_page.
  call function 'REUSE_ALV_COMMENTARY_WRITE'
    exporting
*     i_logo             = <<If you want to set a logo, please,
*                          uncomment and edit this line>>
      it_list_commentary = t_heading.
endform.                    " alv_top_of_page

*&------------------------------------------------------------------*
*&      Form  user_command
*&------------------------------------------------------------------*
*       Called on user_command ALV event.
*       Executes custom commands.
*-------------------------------------------------------------------*


form user_command using r_ucomm     like sy-ucomm
                        rs_selfield type slis_selfield.

IF r_ucomm = '&IC1' AND
     rs_selfield-fieldname = 'EBELN' AND
     rs_selfield-value <> space.

    REFRESH bdcdata.
    CLEAR bdcdata.

    PERFORM bdc_dynpro      USING 'SAPLMEGUI' '0014'.
    PERFORM bdc_field       USING 'BDC_OKCODE'
                                  '=MECHOB'.

    PERFORM bdc_dynpro      USING 'SAPLMEGUI' '0002'.
    PERFORM bdc_field       USING 'BDC_CURSOR'
                                  'MEPO_SELECT-EBELN'.
    PERFORM bdc_field       USING 'BDC_OKCODE'
                                  '=MEOK'.
    PERFORM bdc_field       USING 'MEPO_SELECT-EBELN'
                                  rs_selfield-value.
    PERFORM bdc_field       USING 'MEPO_SELECT-BSTYP_F'
                                   'X'.
    CALL TRANSACTION 'ME23N' USING bdcdata MODE 'E'.
    CLEAR: rs_selfield.
endif.

endform.                    "user_command
*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
  CLEAR bdcdata.
  bdcdata-program  = program.
  bdcdata-dynpro   = dynpro.
  bdcdata-dynbegin = 'X'.
  APPEND bdcdata.
ENDFORM.                    "bdc_dynpro

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
  IF fval <> nodata_character.
    CLEAR bdcdata.
    bdcdata-fnam = fnam.
    bdcdata-fval = fval.
    APPEND bdcdata.
  ENDIF.
ENDFORM.                    "bdc_field

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM bdc_nodata USING p_nodata.
  nodata_character = p_nodata.
ENDFORM.                    "bdc_nodata

Friday, May 21, 2010

ABAP SELECT.. INTO (… ERROR

Posted by Aries Wandari

See error below.
image
How to Fix
image

Sunday, May 16, 2010

ALV Export Bizarre

Posted by Aries Wandari

Creating report ZMMF003 using ALV and export it to excell file. One of the data field is MSEG-AUFNR. Result in ALV layout is ok. But once I export it (to txt or excell) it truncated. Export giving correct result once MSEG-AUFNR changed to type char 12 (AUFNR is char 12).
ALV Result
image
Export result on field type MSEG-AUFNR.
image
Export result on field type char 12.
image

Thursday, April 1, 2010

SAP > BDC Transfer Template

Posted by Aries Wandari

   After create recording on SHDB and transfer it to a program, steps below will do data transfer from txt data source to SAP:
1. itab data definition.
2. Define filename as data source.
3. Loop at itab
4. Transfer itab data

Line in purple are inserted based from pure SHDB recording.
----------------------------
report ZBDC_ZZZ
       no standard page heading line-size 255.
include bdcrecx1.
* 1. itab data definition
data: begin of itab occurs 0,
             vbeln(10),
        end of itab.

start-of-selection.
* 2. Define filename as data source
CALL FUNCTION 'UPLOAD'
         EXPORTING
              FILENAME                = 'C:\ZZZ.txt'
              FILETYPE                = 'ASC'
         TABLES
              DATA_TAB                = ITAB
*         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
*              GUI_REFUSE_FILETRANSFER = 8
*              OTHERS                  = 9
.

* 3. Loop internal table
LOOP AT ITAB.
perform open_group.
* 4. transfer itab data
perform bdc_field       using 'LIKP-VBELN'
                              ITAB-VBELN.

perform bdc_dynpro    …
perform bdc_field       …
perform bdc_transaction using '…'.
* End Loop
ENDLOOP.
perform close_group.
--------------
Note that we must create txt data source based on data type length. Example: I do upload material stock with parameter material number (length 18), stock quantity (length 6), and store location (length 16). Below are the format:
        2000000309     2            S600
        2000000340     2            S100
        2000000388     2            S600
        2000000437     2            S202
        2000000459     3            S100

Friday, October 2, 2009

SAP > Get Material Long Text

Posted by Aries Wandari

     A little ABAP code showing list of material number, material description, material type, material group, and long text. Material store location, is still on progress.
Result:
image
Preview on the BAPI consumer (using C# .Net):
image
A note on this job:
1. Use refresh to initialize internal table including the body. Clear only initialize work area.
2. SWO1 show error on BAPI. Field is too large for component. But its ok, the BAPI is still can be used.
image
Code:
FUNCTION ZBAPI_MATERIAL_GETLIST03.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(MAX_ROWS) LIKE  BAPIF4A-MAX_ROWS DEFAULT 0
*"  TABLES
*"      MATNRSELECTION STRUCTURE  BAPIMATRAM OPTIONAL
*"      MATERIALSHORTDESCSEL STRUCTURE  BAPIMATRAS OPTIONAL
*"      PLANTSELECTION STRUCTURE  BAPIMATRAW OPTIONAL
*"      MATNRLIST STRUCTURE  ZBAPIMATLST03 OPTIONAL
*"      RETURN STRUCTURE  BAPIRET2 OPTIONAL
*"----------------------------------------------------------------------

TABLES: MAKT, MARA, MARC, MARD.
  DATA : lines type TLINE occurs 0 with header line.
  DATA w_row type TLINE.
  DATA MATNUM TYPE THEAD-TDNAME.
  DATA w_string(1024) TYPE C.

SELECT A~MATNR A~MTART A~MATKL A~BISMT A~MEINS A~BSTME C~WERKS T~MAKTX
  INTO (MATNRLIST-MATNR, MATNRLIST-MTART, MATNRLIST-MATKL,
  MATNRLIST-BISMT, MATNRLIST-MEINS, MATNRLIST-BSTME, MATNRLIST-WERKS,
  MATNRLIST-MAKTX)
  FROM MARA AS A
  INNER JOIN MARC AS C ON A~MATNR = C~MATNR
  INNER JOIN MAKT AS T ON C~MATNR = T~MATNR
  WHERE A~MATNR IN MATNRSELECTION
  AND C~WERKS IN PLANTSELECTION
  AND T~MAKTX IN MATERIALSHORTDESCSEL.

  APPEND MATNRLIST.
ENDSELECT.

  LOOP AT MATNRLIST.
*    MOVE MATNRLIST-MATERIAL to MATNUM.
    MATNUM = MATNRLIST-MATNR.
    call function 'READ_TEXT'
      EXPORTING
        id                      = 'GRUN'
        language                = sy-langu
*        name                    = MATNRLIST-MATERIAL
        name                    = MATNUM
        object                  = 'MATERIAL'
      TABLES
        lines                   = lines
      EXCEPTIONS
        id                      = 1
        language                = 2
        name                    = 3
        not_found               = 4
        object                  = 5
        reference_check         = 6
        wrong_access_to_archive = 7.

    clear w_string.
    loop at LINES into w_row.
        IF w_row NE ''.
          concatenate w_string w_row into w_string.
        ENDIF.
    endloop.

    MATNRLIST-MATL_LT = w_string.
*    clear lines. clear only initialize work area
    REFRESH lines.
    MODIFY MATNRLIST.

  ENDLOOP.
ENDFUNCTION.

Wednesday, September 2, 2009

SAP > Error Print PO, “Purchase Order has not Fully Released”

Posted by Aries Wandari

          An error comes up when trying to print PO on quality environment. As screenshot below, PO display “Purchase Order has not Fully Released” even it has been fully released. Suspect the smartforms and the smartforms’ program caused the error.
clip_image002[4]
Go to NACE to find the program.
clip_image004[4]
The program code is in ZSAPFM06P.
---
CASE x_ekko-BSART.
WHEN 'ZRFQ'.
IF ( x_ekko-BSART = 'ZRFQ' ).
ENDIF.
WHEN 'ZNPU'.
IF ( x_ekko-BSART = 'ZNPU' ) AND
             ( x_ekko-FRGGR = '01' OR x_ekko-FRGGR = '02' ) and
             ( x_ekko-frgsx = 'Z1' OR x_ekko-frgsx = 'Z2' OR x_ekko-frgsx = 'Z3' ) and
               x_ekko-frgke = '2'.
ELSE.
message e016(rp) WITH 'Purchasing Order has not fully released'.
ENDIF.
ENDCASE.

Change to

CASE x_ekko-BSART.
WHEN 'ZRFQ'.
IF ( x_ekko-BSART = 'ZRFQ' ).
ENDIF.
WHEN 'ZNPU'.
IF ( x_ekko-BSART = 'ZNPU' ) AND
( x_ekko-FRGGR = '01' OR
x_ekko-FRGGR = '02' OR
x_ekko-FRGGR = '05' OR
x_ekko-FRGGR = '06' ) and
( x_ekko-frgsx = 'Z1' OR
x_ekko-frgsx = 'Z2' OR
x_ekko-frgsx = 'Z3' ) and
x_ekko-frgke = '2'.
ELSE.
message e016(rp) WITH
'Purchasing Order has not fully released'.
ENDIF.
ENDCASE.
---
Problem solved.

Sunday, August 23, 2009

SAP > Edit RFQ Smartforms, Showing Buyer Name

Posted by Aries Wandari

Today customization I have to show buyer name on print RFQ.
image
Find the Purchasing group and field name at the RFQ form. Purchasing group paramater is found in EKKO-EKGRP.
image
Find the table and field name at Purchasing group configuration (SPRO > SAP Ref IMG > Materials Management > Purchasing > Create Purchasing group)
image
It shows that purchasing group at spro is using database view V_024. Go to SE11 to see which table the view use. The view is using T024 table.
image
At SE11 table T024, field that show buyer name is EKNAM.
Code below do the change.
SELECT SINGLE EKNAM INTO V_NAME_FIRST
FROM T024 WHERE EKGRP = if_ekko-ekgrp.

Result
clip_image002

Monday, April 6, 2009

Customized ABAP Programming Training and Integration with .Net

Posted by Aries Wandari

          A week crash course on ABAP-BAPI programming training and its integration with .Net. This course especially to fulfill enterprise need in SAP reporting so it can be accessed by excessive employee with SAP single user, via common user friendly web interface. Our team had been a year doing ABAP programming job just by ‘programmers intuitive’, debugging and customizing consultant report, following the program flow, self-studying SAP-ABAP material, etc.

Similar course ever followed by partners, show that a single SAP-training-path goes boring, and it can not reach company expectation since single-training-path didn’t cover all knowledge base we need to build such program. This time we try to combine BC400, BC402 and BC417, base for building BAPI, and a day for workshop, connecting our BAPI with .Net. With that overload schedule and a week time span, a portion of material will be excluded.

BC400 ABAP Workbench Concept and Tools
√ ABAP Workbench Foundations and Concepts
√ Program Flow in ABAP Program
√ Introduction to the ABAP Workbench
√ ABAP Statements and Data Declarations
√ Reading Database Tables
√ Internal Program Modularization
x User Dialog: List
x User Dialog: Selection Screens
x User Dialog: Screens
x Interfaces
x Reuse Components

BC402 ABAP Programming Technique
√ ABAP Runtime Environment
√ Data Objects, Types, and Statements
√ Global Types and Global Constants
√ Control Statements
√ Internal Tables
√ Subroutines
√ Function Group and Function Modules
√ Introduction to ABAP Objects
√ Calling Program and Passing Data
√ Dynamic Programming

BC417 BAPI Development for Accessing SAP Components
√ BAPI Basics
√ Creating a RFC Function Module
√ Business Objects
x Database Updates
√ BAPI Calls
x Enhancements & Modifications
x BAPIs Using ALE & IDOCs
x Mass Data Transfer

SAP connector for Microsoft .NET Workshop

We will discuss this more detail later.