Cmd ei api: Unterschied zwischen den Versionen

Aus SAP Wiki ツ
M1ch3lde (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
M1ch3lde (Diskussion | Beiträge)
 
(28 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie: Clean-Code-Level_C]]
[[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 Geschäftparnter oder dessen Rollen mit dieser Klasse gepflegt werden.
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 ===


<syntaxhighlight lang="abap" line start="1">
<syntaxhighlight lang="abap" line start="1">
== Klassenmethode maintain_bapi ==
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' )
                                                                                                            )
 
                                                                                      )
                                                                    )
                                                                )
 
                                            )
                        ).
</syntaxhighlight>
 
=== 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>


<sytnaxhighlight lang="abap">
=== Aufruf, Commit und Message-Handling ===
    "Prüfen lt_master_data nicht intial ...
<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
       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          = value #( customers = value #( ( lt_master_data ) ) )
         is_master_data          = VALUE #( customers = VALUE #( ( lt_master_data ) ) )
       importing
       IMPORTING
         es_master_data_correct  = data(lt_correct_data)
         es_master_data_correct  = DATA(lt_correct_data)
         es_message_correct      = data(lt_correct_messages)
         es_message_correct      = DATA(lt_correct_messages)
         es_message_defective    = data(lt_error_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 AND iv_test_run = abap_false.


       IF error_messages-is_error = abap_false.
       IF lt_error_messages-is_error = abap_false.
       call function 'BAPI_TRANSACTION_COMMIT'
       CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
         exporting
         exporting
         wait = abap_true.
         wait = abap_true.
Zeile 33: Zeile 82:
         "RAISE EXCEPTION TYPE oder oder sonstiges
         "RAISE EXCEPTION TYPE oder oder sonstiges
       ENDIF.
       ENDIF.
     ELSEIF error_messages-is_error = abap_true.
     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 41: 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.

Nützliche Seiten