Cmd ei api: Unterschied zwischen den Versionen

Aus SAP Wiki ツ
M1ch3lde (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
M1ch3lde (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Zeile 41: Zeile 41:
</syntaxhighlight>
</syntaxhighlight>


=== Buchungskreis ===
=== Buchungskreisdaten ===
<syntaxhighlight lang="abap" line start="1">
<syntaxhighlight lang="abap" line start="1">
     DATA(lt_master_data) = VALUE cmds_ei_extern( header-object_instance-kunnr = '9980000360'
     DATA(lt_master_data) = VALUE cmds_ei_extern( header-object_instance-kunnr = '9980000360'

Version vom 27. Januar 2026, 16:55 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' "Update, because created with ycl_bp->create_role_with_bapi( )
                                                 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