[54113] in SAPr3-news

home help back first fref pref prev next nref lref last post

ABAP Toolprogramme / BADI Erweiterungen

daemon@ATHENA.MIT.EDU (volker Korrmann)
Tue Apr 12 03:07:02 2005

To: sapr3-news@mit.edu
Date: 12 Apr 2005 00:06:50 -0700
From: volker_korrmann@web.de (volker Korrmann)
Message-ID: <cdd58c09.0504112306.ebc3edc@posting.google.com>

Hallo Leute,

anbei ein kleines Beispiel, wie man einen BAPI über die ExtensionIn
erweitern kann.

Das Beispiel kommt allerdings aus dem SAP CMS, weswegen wohl fast
keiner das Beispiel 1:1 nachvollziehen kann.

Die beschriebene Vorgehensweise sollte Euch hoffentlich trotdem
weiterhelfen.


Gruß Volker Korrmann








BAPI Erweiterungen 


Einleitung
Wir haben im SAP CMS eine Datenbanktabelle über APPEND Strukturen
erweitert und diese Felderweiterungen über das BDT für den Benutzer
pflegbar gemacht.

Diese zusätzlichen Felder sollen jedoch auch bei einer maschinellen
Datenübernahme mit versorgt werden. Dazu ist eine Erweiterung des
zuständigen BAPI´s nötig.

Die Daten müssen über die EXTENSIONin Tabelle übergeben werden. 

Datenversorgung
In dem hier aufgeführten Beispielprogramm wird der BAPI Baustein mit
Daten versorgt und aufgerufen.

*&---------------------------------------------------------------------*
*& Report  Z_TEST_CAG
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  z_test_cag.
DATA:
  gt_cag_extensionin       TYPE TABLE OF bapiparex,
  gt_cag_system_status     TYPE TABLE OF bapicms_str_cag_sys_stat_crt,
  gt_cag_portions          TYPE TABLE OF bapicms_str_cag_por_crt,
  gt_cag_rules             TYPE TABLE OF bapicms_str_cag_rules_crt,
  gt_cag_receivable_links  TYPE TABLE OF bapicms_str_cag_rbl_crt,
  gt_cag_charges           TYPE TABLE OF bapicms_str_cag_chg_crt,
  gt_cag_business_partners TYPE TABLE OF bapicms_str_cag_bp_crt,
  gt_cag_documents         TYPE TABLE OF bapicms_str_cag_doc_crt,
  gt_cag_portion_bp        TYPE TABLE OF bapicms_str_cag_por_bp_crt,
  gt_cag_relations_from    TYPE TABLE OF bapicms_str_cag_rel_por_crt,
  gt_cag_relations_to      TYPE TABLE OF bapicms_str_cag_por_rel_crt,
  gt_cag_special_arrangements  TYPE TABLE OF bapicms_str_cag_sa_crt,
  gt_cag_partner_terminat_data TYPE TABLE OF
bapicms_str_cag_bp_trm_crt,
  gt_cag_costs             TYPE TABLE OF bapicms_str_cag_exp_crt,
  gt_cag_notes             TYPE TABLE OF bapicms_str_cag_notes_crt,
  gt_cag_extensionout      TYPE TABLE OF bapiparex,
  gt_cag_return            TYPE TABLE OF bapiret2,

  gw_cag_extensionin          LIKE LINE OF gt_cag_extensionin,
  gw_cag_system_status        LIKE LINE OF gt_cag_system_status,
  gw_cag_portions             LIKE LINE OF gt_cag_portions,
  gw_cag_rules                LIKE LINE OF gt_cag_rules,
  gw_cag_receivable_links     LIKE LINE OF gt_cag_receivable_links,
  gw_cag_charges              LIKE LINE OF gt_cag_charges,
  gw_cag_business_partners    LIKE LINE OF gt_cag_business_partners,
  gw_cag_documents            LIKE LINE OF gt_cag_documents,
  gw_cag_portion_bp           LIKE LINE OF gt_cag_portion_bp,
  gw_cag_relations_from       LIKE LINE OF gt_cag_relations_from,
  gw_cag_relations_to         LIKE LINE OF gt_cag_relations_to,
  gw_cag_special_arrangements LIKE LINE OF
gt_cag_special_arrangements,
  gw_cag_partner_terminat_data LIKE LINE OF
                               gt_cag_partner_terminat_data,
  gw_cag_costs                LIKE LINE OF gt_cag_costs,
  gw_cag_notes                LIKE LINE OF gt_cag_notes,
  gw_cag_extensionout         LIKE LINE OF gt_cag_extensionout,
  gw_cag_return               LIKE LINE OF gt_cag_return,

  gw_cag_override_defaults     TYPE bapicms_str_cag_specific_crt,
  gw_cag_basic_data            TYPE bapicms_str_cag_basic_crt,
  gw_cag_admin_data            TYPE bapicms_str_cag_org_unit_crt,
  gw_cag_guarantee_data        TYPE bapicms_str_cag_guar_crt,
  gw_cag_transfer_data         TYPE bapicms_str_cag_tran_crt,
  gw_cag_land_charge_data      TYPE bapicms_str_cag_lchg_crt,
  gw_cag_assigment_pledge_data TYPE bapicms_str_cag_asmt_pld_crt,

  gv_cag_agreement_id       TYPE bapicms_str_cag_id-cagmtid,
  gv_cag_agreement_id_in    TYPE bapicms_str_cag_id-cagmtid,
  gv_cag_agreement_type     TYPE bapicms_str_cag_typ-cagmt_type,
  gv_cag_agreement_type_in  TYPE bapicms_str_cag_typ-cagmt_type,
  gv_cag_testrun            TYPE bapi_cms_str_central-testrun,
  gv_cag_processextension   TYPE
bapi_cms_str_central-processextension,
  gv_cag_generate_rbl_links TYPE
                        bapicms_str_flg_gen_auto_links-gen_auto_links.


*DATA: x_bapi TYPE zbapi_te_cag.
DATA: x_bapi TYPE ZACMS_STR_CAG_BASIC_MAP.


* Füllen der Strukturen mit DUMMY Daten zur Anlage

gw_cag_basic_data-assessment_amount = '20000'.
gw_cag_basic_data-assessment_currency = 'EUR'.
gw_cag_basic_data-collateral_agreement_date = sy-datum.
gw_cag_basic_data-agreement_valid_from = sy-datum.
gw_cag_basic_data-agreement_valid_to = '17062005'.
gw_cag_basic_data-guarantee_rate = '100'.
gw_cag_basic_data-collateral_agmt_description = 'test'.
gw_cag_basic_data-old_collateral_agreement_id = '123333'.

gw_cag_admin_data-admin_organizational_unit = '001-60000'.
gw_cag_admin_data-organization_unit1 = '001-60000'.
gw_cag_admin_data-bank_area = '001'.

gw_cag_guarantee_data-is_fixed_liability_guarantee = 'X'.
gw_cag_guarantee_data-is_default_liability_guarantee = 'X'.
gw_cag_guarantee_data-default_liability_percentage = '85'.
gw_cag_guarantee_data-authorities_approval = '01'.
gw_cag_guarantee_data-is_enforceable = 'X'.
gw_cag_guarantee_data-lending_rate = '100'.

gw_cag_system_status-sys_stat = 'I8907'.
APPEND gw_cag_system_status TO gt_cag_system_status.

gw_cag_business_partners-bu_partnerid = '4501326'.
gw_cag_business_partners-bpf = '050003'.
APPEND gw_cag_business_partners TO gt_cag_business_partners.


gw_cag_receivable_links-portionid = '0001'.
gw_cag_receivable_links-creditsystem = '001'.
gw_cag_receivable_links-receivable_id
          = '02954381022/0000000000/005/00978/001/000000/90'.
gw_cag_receivable_links-priority = '0001'.
gw_cag_receivable_links-receivable_ranking_class = '0001'.
gw_cag_receivable_links-receivable_percentage = '100'.
APPEND gw_cag_receivable_links TO gt_cag_receivable_links.





* Beispieldaten für die Erweiterung !!!
* Wichtig: Nennung der Übergabestruktur für den BADI
gw_cag_extensionin-structure = 'ZACMS_STR_CAG_BASIC_MAP'.
x_bapi-zzstform = '02'.


* Konvertierung der Kundeneigenenstruktur in die Übergabefelder

DATA: text1(1000).

    CALL METHOD CL_ABAP_CONTAINER_UTILITIES=>FILL_CONTAINER_C
      EXPORTING
        IM_VALUE               = x_bapi
      IMPORTING
        EX_CONTAINER           = text1
      EXCEPTIONS
        ILLEGAL_PARAMETER_TYPE = 1
        others                 = 2.


MOVE text1     TO gw_cag_extensionin-valuepart1.
move text1+240 TO gw_cag_extensionin-valuepart2.
move text1+480 TO gw_cag_extensionin-valuepart3.
move text1+700 TO gw_cag_extensionin-valuepart4.

APPEND gw_cag_extensionin TO gt_cag_extensionin.


* WICHTIG: Kundendatenerweiterungen zulassen

gv_cag_processextension = 'X'.

CALL FUNCTION 'BAPI_CMS_CAG_CREATE'
  EXPORTING
    agreement_type_in         = '050300'  "gv_cag_agreement_type_in
    agreement_id_in           = gv_cag_agreement_id_in
    testrun                   = gv_cag_testrun
    processextension          = gv_cag_processextension
    generate_receivable_links = gv_cag_generate_rbl_links
    override_defaults         = gw_cag_override_defaults
    basic_data                = gw_cag_basic_data
    admin_data                = gw_cag_admin_data
    guarantee_data            = gw_cag_guarantee_data
    transfer_data             = gw_cag_transfer_data
    land_charge_data          = gw_cag_land_charge_data
    assigment_pledge_data     = gw_cag_assigment_pledge_data
  IMPORTING
    agreement_id              = gv_cag_agreement_id
    agreement_type            = gv_cag_agreement_type
  TABLES
    extensionin               = gt_cag_extensionin
    system_status             = gt_cag_system_status
    portions                  = gt_cag_portions
    rules                     = gt_cag_rules
    receivable_links          = gt_cag_receivable_links
    charges                   = gt_cag_charges
    business_partners         = gt_cag_business_partners
    documents                 = gt_cag_documents
    portion_business_partners = gt_cag_portion_bp
    relations_from            = gt_cag_relations_from
    relations_to              = gt_cag_relations_to
    special_arrangements      = gt_cag_special_arrangements
    partner_termination_data  = gt_cag_partner_terminat_data
    costs                     = gt_cag_costs
    notes                     = gt_cag_notes
    extensionout              = gt_cag_extensionout
    return                    = gt_cag_return.
.

COMMIT WORK AND WAIT.

 
Identifizieren des BADI´s

Um den BAPI zu erweitern muss man erst einmal herausbekommen, welche
BADI Definition man denn verwenden muss. Das ist leider gar nicht
immer eindeutig, da die eigentliche Information nur in einem
Beschreibungstext zu finden ist ....

Vorgehensweise:

Man gehe per Doppelklick in den BADI und suche die Programmstelle, wo
die Extensionin abgehandelt wird (in unserem Beispiel die folgende) :


    CALL METHOD g_rcl_cms_if_cms_busisb101_crt->transferextensionin
      EXPORTING
        im_cagmt_typ              = l_cag_typ
        im_tab_extensionin        = l_tab_extensionin
      IMPORTING
        ex_tab_return             = l_tab_return
      CHANGING
        ch_flg_gen_auto_links     = l_flg_auto_links
        ch_flg_testrun            = l_flg_testrun
        ch_cagmt_id               = l_cag_id
        ch_str_cag_specific       = l_str_cag_specific_map
        ch_tab_cag_system_status  = l_tab_cag_system_status
        ch_str_cag_basic          = l_str_cag_basic_map
        ch_str_cag_admin_data     = l_str_cag_org_unit_map
        ch_str_cag_guar           = l_str_cag_guar_map
        ch_str_cag_tran           = l_str_cag_tran_map
        ch_str_cag_lchg           = l_str_cag_lchg_map
        ch_str_cag_asgmt_pldg     = l_str_cag_asgmt_pldg_map
        ch_tab_cag_bp             = l_tab_cag_bp_map
        ch_tab_cag_doc            = l_tab_cag_doc_map
        ch_tab_cag_por            = l_tab_cag_por_crt_map
        ch_tab_cag_por_bp         = l_tab_cag_por_bp_map
        ch_tab_cag_rules          = l_tab_cag_rules_crt_map
        ch_tab_cag_rbl            = l_tab_cag_rbl_crt_map
        ch_tab_cag_chg            = l_tab_cag_chg_crt_map
        ch_tab_cag_rel_to_cag_por = l_tab_cag_rel_to_cagpor_map
        ch_tab_cag_sa             = l_tab_cag_sa_crt_map
        ch_tab_cag_bp_trm         = l_tab_cag_bp_trm_crt_map
        ch_tab_cag_por_rel_to_cag = l_tab_cag_por_rel_to_cag_map
        ch_tab_cag_exp            = l_tab_cag_exp_crt_map
        ch_tab_cag_notes          = l_tab_cag_notes_crt_map.


Hier wird die Behandlung dieser „Kundendatenstruktur" aufgerufen und
man erhält als CHANGING Parameter alle auf MAPI Strukturen gemapten
Daten mit übergeben. Die MAPI Strukturen sind durch unsere
Tabellenerweiterungen bereits um unsere Kunden APPENDSTRUKTUR
erweitert, und müssen nun mit den Daten aus der ExtensionIN versorgt
werden.

Im Klassennamen sieht man bereits, dass ein OBJEKT CMS_BUSISB101
verwendet wird.
Das findet man durch einen Doppelklick auf die Klasse
g_rcl_cms_if_cms_busisb101_crt
auch noch einmal bestätigt:

data: g_rcl_if_ex_cms_busisb101_get type ref to
if_ex_cms_busisb101_get,
      g_rcl_cms_if_cms_busisb101_crt type ref to
                              if_ex_cms_busisb101_create,


 

Anlage der BADI Implementierung

So gewappnet kann man jetzt in die Transaktion SE18 gehen.
Hier kann man nach einem Definitionsnamen CMS* mal suchen, und wird
dort auch die BADI Definition: CMS_BUSISB101_CREATE finden.

Nun bitte über das Menü den Punkt: Implementierung / Anlegen
auswählen.
Hier ist nun ein Name für unseren 
neuen eigenen BADI anzugeben z.B. : ZZ_CMS_BUSISB101_CR

Dieses Objekt ist anzulegen und zu aktivieren.

Danach bitte die Transaktion SE19 aufrufen
und den Implementierungsnamen: ZZ_CMS_BUSISB101_CR
angeben.

Anschließend bitte den Button „ÄNDERN" wählen und unter dem Reiter
Interface die Methode: TransferExtensioIn doppelklicken.

Nun können Sie hier den Badi wie folgt ausprogrammieren:

method IF_EX_CMS_BUSISB101_CREATE~TRANSFEREXTENSIONIN.

  DATA: l_str type ZACMS_STR_CAG_BASIC_MAP.
  DATA: l_txt(1000) type c.
  DATA: wa_ext like line of im_tab_extensionin.

  loop at im_tab_extensionin into wa_ext.
    if wa_ext-structure = 'ZACMS_STR_CAG_BASIC_MAP'.
      l_txt     =  wa_ext-valuepart1.
      l_txt+240 =  wa_ext-valuepart2.
      l_txt+480 =  wa_ext-valuepart3.
      l_txt+700 =  wa_ext-valuepart4.

* Konvertieren des Textfeldes in das Strukturfeld
      CALL METHOD CL_ABAP_CONTAINER_UTILITIES=>READ_CONTAINER_C
        EXPORTING
          IM_CONTAINER           = l_txt
        IMPORTING
          EX_VALUE               = l_str
        EXCEPTIONS
          ILLEGAL_PARAMETER_TYPE = 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.
      move-corresponding l_Str to ch_str_cag_basic.
    endif.
  endloop.
endmethod.




FERTIG !!!!!

home help back first fref pref prev next nref lref last post