[54113] in SAPr3-news
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 !!!!!