adesso business consulting Stellenangebote
Software Engineer Senior
| (Senior) Cloud Software Engineer BTP | Senior Frontend Software Engineer SAP BTP
| (Senior) Consultant Technologie
Werkstudent Softwareentwicklung · Consulting
Cmd ei api: Unterschied zwischen den Versionen
| (23 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
[[Kategorie: Clean- | [[Kategorie: Clean-Core-Level_C]] | ||
Die Klasse ist sehr mächtig und es ist schnell ohne weiteres möglich Daten aus dem Geschäftspartner zu löschen. | Die Klasse ist sehr mächtig und es ist schnell ohne weiteres möglich Daten aus dem Geschäftspartner zu löschen. | ||
Es ist sehr anzuraten mit einem konkreten Test-Geschäftsparntersatz zu testen, wenn ein | Es ist sehr anzuraten mit einem konkreten Test-Geschäftsparntersatz zu testen, wenn ein Geschäftpartner oder dessen Rollen mit dieser Klasse gepflegt werden. | ||
== Klassenmethode maintain_bapi == | == Klassenmethode maintain_bapi == | ||
Der beispielhafte Code unten ist nicht quasi out-of-the-box zu verstehen. | |||
Abhängig welche Felder als Pflichtfelder im Customizing definiert sind, sind ggf. weitere Felder mitzugeben. | |||
Es wird davon ausgegangen, dass der Geschäftspartner bereits angelegt ([[BAPI_BUPA_CREATE_FROM_DATA]]) und die GP-Rolle hinzugefügt ([[BAPI_BUPA_ROLE_ADD_2]]) wurde. | |||
=== Vertriebsdaten === | |||
<syntaxhighlight lang="abap" line start="1"> | <syntaxhighlight lang="abap" line start="1"> | ||
cmd_ei_api_check=>get_mand_partner_functions( | cmd_ei_api_check=>get_mand_partner_functions( | ||
EXPORTING iv_ktokd = 'CUST' | EXPORTING iv_ktokd = 'CUST' "natürlich dynamisch vom Kundenstammsatz holen | ||
IMPORTING et_parvw = DATA(lt_parw) ). | IMPORTING et_parvw = DATA(lt_parw) ). | ||
| Zeile 33: | Zeile 39: | ||
) | ) | ||
). | ). | ||
</syntaxhighlight> | |||
"Prüfen lt_master_data nicht intial ... | === Buchungskreisdaten === | ||
<syntaxhighlight lang="abap" line start="1"> | |||
DATA(lt_master_data) = VALUE cmds_ei_extern( header-object_instance-kunnr = '9980000360' | |||
header-object_task = 'U' | |||
company_data = VALUE #( company = VALUE #( ( task = 'I' | |||
data_key-bukrs = ms_company_code_data-company_code | |||
data-akont = ms_company_code_data-reconciliation_account | |||
datax-akont = abap_true ) | |||
) | |||
) | |||
). | |||
</syntaxhighlight> | |||
=== Aufruf, Commit und Message-Handling === | |||
<syntaxhighlight lang="abap" line start="1"> | |||
"Prüfen lt_master_data nicht intial ... | |||
"Hier sperren mit ENQUEUE_EXKNA1 ... | "Hier sperren mit ENQUEUE_EXKNA1 ... | ||
cmd_ei_api=>maintain_bapi( | cmd_ei_api=>maintain_bapi( | ||
EXPORTING | |||
iv_test_run = iv_test_run | iv_test_run = iv_test_run | ||
iv_collect_messages = abap_true | iv_collect_messages = abap_true | ||
is_master_data = | is_master_data = VALUE #( customers = VALUE #( ( lt_master_data ) ) ) | ||
IMPORTING | |||
es_master_data_correct = | es_master_data_correct = DATA(lt_correct_data) | ||
es_message_correct = | es_message_correct = DATA(lt_correct_messages) | ||
es_message_defective = | es_message_defective = DATA(lt_error_messages) | ||
). | ). | ||
IF lt_error_messages-is_error = abap_false AND iv_test_run = abap_false. | IF lt_error_messages-is_error = abap_false AND iv_test_run = abap_false. | ||
IF | IF lt_error_messages-is_error = abap_false. | ||
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' | |||
exporting | exporting | ||
wait = abap_true. | wait = abap_true. | ||
| Zeile 60: | Zeile 82: | ||
"RAISE EXCEPTION TYPE oder oder sonstiges | "RAISE EXCEPTION TYPE oder oder sonstiges | ||
ENDIF. | ENDIF. | ||
ELSEIF | ELSEIF lt_error_messages-is_error = abap_true. | ||
IF iv_test_run = abap_false. | IF iv_test_run = abap_false. | ||
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. | CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. | ||
| Zeile 68: | Zeile 90: | ||
ENDIF. | ENDIF. | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Nützliche Seiten == | |||
* https://github.com/fidley/Customers | |||
Aktuelle Version vom 27. Januar 2026, 16:56 Uhr
Die Klasse ist sehr mächtig und es ist schnell ohne weiteres möglich Daten aus dem Geschäftspartner zu löschen. Es ist sehr anzuraten mit einem konkreten Test-Geschäftsparntersatz zu testen, wenn ein Geschäftpartner oder dessen Rollen mit dieser Klasse gepflegt werden.
Klassenmethode maintain_bapi
Der beispielhafte Code unten ist nicht quasi out-of-the-box zu verstehen. Abhängig welche Felder als Pflichtfelder im Customizing definiert sind, sind ggf. weitere Felder mitzugeben.
Es wird davon ausgegangen, dass der Geschäftspartner bereits angelegt (BAPI_BUPA_CREATE_FROM_DATA) und die GP-Rolle hinzugefügt (BAPI_BUPA_ROLE_ADD_2) wurde.
Vertriebsdaten
cmd_ei_api_check=>get_mand_partner_functions(
EXPORTING iv_ktokd = 'CUST' "natürlich dynamisch vom Kundenstammsatz holen
IMPORTING et_parvw = DATA(lt_parw) ).
DATA lt_master_data TYPE cmds_ei_extern.
lt_master_data = VALUE #( header-object_instance-kunnr = '9980000360'
header-object_task = 'U'
sales_data = VALUE #( sales = VALUE #( ( task = 'I'
data-waers = 'EUR'
data_key-vkorg = '1010'
data_key-vtweg = '10'
data_key-spart = '00'
datax-waers = 'X'
functions = VALUE #( functions = VALUE #( FOR ls_parw IN lt_parw
( task = 'I'
data_key-parvw = ls_parw-parvw
data-partner = '9980000360'
datax-partner = 'X' )
)
)
)
)
)
).
Buchungskreisdaten
DATA(lt_master_data) = VALUE cmds_ei_extern( header-object_instance-kunnr = '9980000360'
header-object_task = 'U'
company_data = VALUE #( company = VALUE #( ( task = 'I'
data_key-bukrs = ms_company_code_data-company_code
data-akont = ms_company_code_data-reconciliation_account
datax-akont = abap_true )
)
)
).
Aufruf, Commit und Message-Handling
"Prüfen lt_master_data nicht intial ...
"Hier sperren mit ENQUEUE_EXKNA1 ...
cmd_ei_api=>maintain_bapi(
EXPORTING
iv_test_run = iv_test_run
iv_collect_messages = abap_true
is_master_data = VALUE #( customers = VALUE #( ( lt_master_data ) ) )
IMPORTING
es_master_data_correct = DATA(lt_correct_data)
es_message_correct = DATA(lt_correct_messages)
es_message_defective = DATA(lt_error_messages)
).
IF lt_error_messages-is_error = abap_false AND iv_test_run = abap_false.
IF lt_error_messages-is_error = abap_false.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
exporting
wait = abap_true.
"Hier entsperren mit DEQUEUE_EXKNA1
"S-Meldung oder sonstiges
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
"Hier entsperren mit DEQUEUE_EXKNA1
"RAISE EXCEPTION TYPE oder oder sonstiges
ENDIF.
ELSEIF lt_error_messages-is_error = abap_true.
IF iv_test_run = abap_false.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
"Hier entsperren mit DEQUEUE_EXKNA1
"RAISE EXCEPTION TYPE oder sonstiges
ENDIF.