In diesem Kapitel wird das Anlegen eines Funktionsbausteins am Beispiel von Z_ACC_DOCUMENT_POST beschrieben.
Der Funktionsbaustein wird im Object Navigator angelegt. Nähere Information ist im Kapitel Administrationshandbuch Kapitel Konfiguration in SAP beschrieben.
Nach dem Sichern der Eingaben öffnet sich der Dialog Function Builder: Z_ACC_DOCUMENT_POST anzeigen
Eigenschaften
Hier muss der Radiobutton Remote fähiger Baustein ausgewählt werden.
Import
Hier werden Input-Parameter definiert, welche keiner SAP-Tabelle zugeordnet sind.
Export
Hier werden Parameter definiert, die von dem Funktionsbaustein zurückgegeben werden und als output-Parameter in dem JobSAP BAPI-Baustein verwendet werden können.
Changing
Hier werden keine Einträge benötigt.
Tabellen
Hier werden die Tabellen eingetragen, die von dem Funktionsbaustein BAPI_ACC_DOCUMENT_POST verwendet werden. Diese Tabellen müssen auch in der bapi.xml - Datei des JobSAP BAPI-Bausteins aufgelistet werden.
Hinweis: Falls eine Warnung erscheint, dass TABLES-Parameter obsolet sind, kann diese durch zweimaliges Bestätigen der ENTER-Taste übergangen werden.
Ausnahmen
Hier werden keine Einträge benötigt.
Quelltext
In das Textfeld wird der ABAP-Code für den Funktionsbaustein eingefügt.
FUNCTION z_acc_document_post.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(DOCUMENTHEADER) TYPE BAPIACHE09
*" VALUE(CUSTOMERCPD) TYPE BAPIACPA09 OPTIONAL
*" VALUE(CONTRACTHEADER) TYPE BAPIACCAHD OPTIONAL
*" VALUE(LANGUAGE) TYPE CHAR_02 DEFAULT 'DE'
*" VALUE(ONLY_SUCCESS_COMMIT) TYPE CHAR_01 DEFAULT 'X'
*" VALUE(COMMIT_AND_WAIT) TYPE CHAR_01 DEFAULT SPACE
*" EXPORTING
*" VALUE(OBJ_TYPE) TYPE BAPIACHE09-OBJ_TYPE
*" VALUE(OBJ_KEY) TYPE BAPIACHE09-OBJ_KEY
*" VALUE(OBJ_SYS) TYPE BAPIACHE09-OBJ_SYS
*" VALUE(RETURNCODE) TYPE INTEGER
*" VALUE(MESSAGE_TYPE) TYPE CHAR_01
*" VALUE(RETURN_COMMIT) TYPE BAPIRET2
*" TABLES
*" ACCOUNTGL STRUCTURE BAPIACGL09 OPTIONAL
*" ACCOUNTRECEIVABLE STRUCTURE BAPIACAR09 OPTIONAL
*" ACCOUNTPAYABLE STRUCTURE BAPIACAP09 OPTIONAL
*" ACCOUNTTAX STRUCTURE BAPIACTX09 OPTIONAL
*" CURRENCYAMOUNT STRUCTURE BAPIACCR09
*" CRITERIA STRUCTURE BAPIACKEC9 OPTIONAL
*" VALUEFIELD STRUCTURE BAPIACKEV9 OPTIONAL
*" EXTENSION1 STRUCTURE BAPIACEXTC OPTIONAL
*" RETURN STRUCTURE BAPIRET2
*" PAYMENTCARD STRUCTURE BAPIACPC09 OPTIONAL
*" CONTRACTITEM STRUCTURE BAPIACCAIT OPTIONAL
*" EXTENSION2 STRUCTURE BAPIPAREX OPTIONAL
*" REALESTATE STRUCTURE BAPIACRE09 OPTIONAL
*" ACCOUNTWT STRUCTURE BAPIACWT09 OPTIONAL
*"----------------------------------------------------------------------
TYPE-POOLS abap.
CONSTANTS true VALUE abap_true.
CONSTANTS false VALUE abap_false.
* =========================================================
* Definitionen & Deklarationen
* =========================================================
* Vorbelegungen
returncode = 0.
message_type = 'S'.
* Referenz zur Exceptionklasse
DATA r_exception TYPE REF TO cx_root.
DATA str_exception TYPE string.
* Lokale Strukturen & Variablen
DATA ls_return TYPE bapiret2.
DATA lv_msg TYPE char0128.
* =========================================================
* BAPI
* =========================================================
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = documentheader " (obligatorisch)
customercpd = customercpd
contractheader = contractheader
IMPORTING
obj_type = obj_type
obj_key = obj_key
obj_sys = obj_sys
TABLES
accountgl = accountgl
accountreceivable = accountreceivable
accountpayable = accountpayable
accounttax = accounttax
currencyamount = currencyamount " Währungspositionen (obligatorisch)
criteria = criteria
valuefield = valuefield
extension1 = extension1
return = return " Returnparameter (obligatorisch)
paymentcard = paymentcard
contractitem = contractitem
extension2 = extension2
realestate = realestate
accountwt = accountwt
. " Point
* =========================================================
* Error-Checking
* =========================================================
READ TABLE return INTO ls_return WITH KEY type = 'W'.
IF sy-subrc = 0 AND only_success_commit = true.
message_type = 'W'.
returncode = 3.
ENDIF.
READ TABLE return INTO ls_return WITH KEY type = 'E'.
IF sy-subrc = 0.
message_type = 'E'.
returncode = 2.
ENDIF.
* =========================================================
* Translation Messages (RETURN-TABLE)
* =========================================================
LOOP AT return INTO ls_return.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = return-id
lang = language
no = return-number
v1 = return-message_v1
v2 = return-message_v2
v3 = return-message_v3
v4 = return-message_v4
IMPORTING
msg = lv_msg
EXCEPTIONS
not_found = 1
OTHERS = 2
." Punkt
" Wenn keine Übersetzung möglich, dann wird
" die Default-Sprache beibehalten
IF sy-subrc = 0.
ls_return-message = lv_msg.
MODIFY return FROM ls_return.
ENDIF.
ENDLOOP.
* =========================================================
* COMMIT
* =========================================================
" returncode 0 = BAPI wurde korrekt ausgeführt
IF returncode = 0.
TRY.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = commit_and_wait
IMPORTING
return = return_commit
. " Punkt
CATCH cx_sy_dyn_call_illegal_type INTO r_exception.
ENDTRY.
"-----------------------------------------------------
" COMMIT Error-Checking
"-----------------------------------------------------
IF return_commit-type = 'E'.
message_type = 'E'.
returncode = 4.
ENDIF.
ELSE.
TRY.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
IMPORTING
return = return_commit
. " Punkt
CATCH cx_sy_dyn_call_illegal_type INTO r_exception.
ENDTRY.
"-----------------------------------------------------
" ROLLBACK Error-Checking
"-----------------------------------------------------
IF return_commit-type = 'E'.
message_type = 'E'.
returncode = 5.
ENDIF.
ENDIF.
" Exception für Ausgabe aufbereiten
"-----------------------------------
IF r_exception IS NOT INITIAL.
CALL METHOD r_exception->if_message~get_text
RECEIVING
result = str_exception.
MESSAGE str_exception TYPE 'I'.
ENDIF.
"---------------------------------------------------------
" Translation Messages (RETURN-STRUCTURE)
"---------------------------------------------------------
CLEAR lv_msg.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = return_commit-id
lang = language
no = return_commit-number
v1 = return_commit-message_v1
v2 = return_commit-message_v2
v3 = return_commit-message_v3
v4 = return_commit-message_v4
IMPORTING
msg = lv_msg
EXCEPTIONS
not_found = 1
OTHERS = 2
." Punkt
" Wenn keine Übersetzung möglich, dann wird
" die Default-Sprache beibehalten
IF sy-subrc = 0.
return_commit-message = lv_msg.
ENDIF.
ENDFUNCTION.
Funktionsbaustein aktivieren
Der Funktionsbaustein wird über die Aktivieren-Schaltfläche aktiviert (alternativ Strg+F3).
Wurde der Funktionsbaustein aktiviert, erscheint folgende Meldung: Objekt(e) wurde(n) aktiviert in der Statusleiste.