Show TOC Anfang des Inhaltsbereichs

Vorgehensweisen TU&C/C-Web-Service konsumieren  Dokument im Navigationsbaum lokalisieren

Verwendung

Die Interface-Pattern zustandslos (XI 3.0 kompatibel), zustandslos, zustandsbehaftet und TU&C/C weisen jedem Service-Interface die Art der auszuführenden Kommunikation zu.

Ein TU&C/C-Szenario (Tentative Update and Compensate or Confirm) könnte aus Sicht einer betriebswirtschaftlichen Anwendung folgendermaßen aussehen:

Der Consumer schickt seine Aufträge an den Server. Dieser führt die Änderungen in seinem System vorläufig aus. Erst wenn auf der Client-Seite zum Beispiel eine Bestellung definitiv vorgenommen wurde, werden die Änderungen persistiert. Bei einem Fehler werden die Änderungen zurückgerollt. Diese Art der Kommunikation erfordert spezielle Vorgehensweisen in der Anwendung.

Bei einem TUCC-Szenario sind mehrere Operationen nötig. Mindestens eine Operation, die Änderungen im Zielsystem vornimmt, eine die die Änderungen bestätigt, wenn zum Beispiel eine Bestellung definitiv vorgenommen wurde und eine die das Rollback veranlasst, sollte eine Änderung nicht bestätigt worden sein. Zuvor kann eine Operation ausgeführt werden, die keinerlei Änderungen im Zielsystem vornimmt, sondern beispielsweise nur Werte liest.

Weitere Informationen erhalten Sie unter Tentative Update & Confirm / Compensate (TU&C/C) im Abschnitt Interface-Pattern.

Voraussetzungen

      Sie haben ein Proxy generiert (siehe:Consumer-Proxy generieren).

      Sie haben das Consumer-Proxy konfiguriert.

Weitere Informationen hierzu finden Sie im Abschnitt Configuring Web Service Clients im NetWeaver Administrator und Consumer-Proxy konfigurieren im SOA Manager.

      Ihrem Benutzerstammsatz wurde die Rolle SAP_BC_WEBSERVICE_CONSUMER zugeordnet (siehe: Berechtigungen).

Vorgehensweise

...

Legen Sie ein Programm an, um einen Service mit dem Interface-Pattern TU&C/C aufzurufen.

 

Beispiel Beispiel

 

DATA: l_proxy       TYPE REF TO my_proxy_class,
      l_seq_prot    TYPE REF TO if_wsprotocol_sequence,
      l_seq_comp    TYPE REF TO if_ws_client_sequence,
      l_seq_conf    TYPE REF TO if_ws_client_sequence,
      l_lp_name     TYPE prx_logical_port_name,
      l_tucc_id     TYPE sysuuid_x16,
      l_output_comp TYPE my_comp_req_struct,
      l_output_m1   TYPE my_m1_req_struct,
      l_output_m2   TYPE my_m2_req_struct,
      l_output_conf TYPE my_conf_req_struct,
      l_input_m1    TYPE my_m1_resp_struct,
      l_input_m2    TYPE my_m2_resp_struct.

TRY.

* determine logical port:

    l_lp_name = ...

* create proxy object:
    CREATE OBJECT l_proxy
      EXPORTING
        logical_port_name = l_lp_name.

* get sequence protocol:
    l_seq_prot ?= l_proxy->get_protocol( if_wsprotocol=>sequence ).

* create TU&C/C ID:
    l_tucc_id = cl_system_uuid=>if_system_uuid_static~create_uuid_x16( ).

* register compensate method for reliable execution

* if the LUW fails (rollback, dump, shutdown). This needs to be done
* before sending any other messages of the LUW, as a shutdown
* could happen at any time:

    l_seq_comp = l_seq_prot->create_transient_sequence( on_failure = 'X' ).
    l_seq_comp->begin( ).
    l_seq_prot->set_client_sequence( l_seq_comp ).

    l_output_comp-my_comp_req_struct-id = l_tucc_id.
    l_proxy->compensate( output = l_output_comp ).

    l_seq_comp->end( ).

* call synchronous methods:

    l_output_m1-my_m1_req_struct-id = l_tucc_id.
    l_output_m1-... = ...
    l_proxy->method1( EXPORTING output = l_output_m1
                      IMPORTING input  = l_input_m1 ).
    ...

    l_output_m2-my_m2_req_struct-id = l_tucc_id.
    l_output_m2-... = ...
    l_proxy->method2( EXPORTING output = l_output_m2
                      IMPORTING input  = l_input_m2 ).
    ...

* register confirm method for reliable execution if the
* LUW succeeds (commit):

    l_seq_conf = l_seq_prot->create_transient_sequence( ).
    l_seq_conf->begin( ).
    l_seq_prot->set_client_sequence( l_seq_conf ).

    l_output_conf-my_conf_req_struct-id = l_tucc_id.
    l_proxy->confirm( output = l_output_conf ).

    l_seq_conf->end( ).

* success, commit the LUW:
    COMMIT WORK.

  CATCH cx_root.

* failure, rollback of LUW:
    ROLLBACK WORK.

ENDTRY.

Weitere Informationen finden Sie unter Programmieren mit Sequenzen.

 

 

Ende des Inhaltsbereichs