Diese Seite verwendet Cookies, um das bestmögliche Nutzererlebnis sicherzustellen. Wenn Sie die Seite weiter nutzen, stimmen Sie der Cookie-Nutzung zu.  mehr...  Einverstanden  Ablehnen

Beispiel ABAP Code zum Aufruf des BEMACON Waagen-Web-Service

Folgender ABAP Code zeigt, wie der BEMACON Waagen-Dispatcher über SOAP (RPC-Style) als Web-Service aufgerufen werden kann, um das Gewicht und die Gewichtseinheit von einer Waage zu lesen.
Die Schnittstelle ist in der WSDL-Definition http://bemacon.de/zscale/soap_scale_server.php?wsdl=1 spezifiziert.

Die Web-Service-Client-Proxy-Klasse zbema_co_get_weight_port_type und die beiden Strukturen zbema_get_weight und zbema_get_weight_response lassen sich über die Transaktion SE80 (Anlegen Enterprise Service) ausgehend von der WSDL-Definition mit dem Web Service Creation Wizard generieren (Präfix zbema_ um Namenskonflikte zu vermeiden).

Die Aufruf-URL (Runtime-Feature) des Web-Service ist im logischen Port ZP1 hinterlegt, der sich über die Transaktion LPCONFIG bzw. SOAMANAGER bearbeiten lässt.

Beim Aufruf der Proxy-Methode get_weight werden die möglicherweise auftretenden System-und Anwendungsfehler (z.B. Web-Server nicht erreichbar) über Ausnahmeklassen abgefangen und anschließend behandelt.
Alle Fehlermeldungen des BEMACON Waagen-Dispatchers (z.B. kein Waagenstillstand) werden als Fehlertext im Feld error der Struktur zbema_get_weight_response zurückgeliefert. Ist das Feld leer, war die Gewichtsermittlung erfolgreich. Gewicht und Einheit stehen dann in den Feldern weight und unit zur Verfügung.
Wird zusätzlich ein Alibispeicher ( intern / extern ) verwendet, wird die Wägenummer im Feld id übermittelt.

DATA:
  gro_exc    TYPE REF TO cx_root,
  gf_errtxt  TYPE string,
  gs_input   TYPE zbema_get_weight,
  gs_output  TYPE zbema_get_weight_response,
  gro_weight TYPE REF TO zbema_co_get_weight_port_type.

CREATE OBJECT gro_weight
  EXPORTING
    logical_port_name = 'ZP1'.

gs_input-protocol  = 'SYSTEC'.
gs_input-host      = '10.10.5.5'.
gs_input-port      = '8000'.
gs_input-scalid    = 'R1'.
gs_input-scale     = '1'.
gs_input-plug      = ' '.
gs_input-conf      = ' '.
gs_input-linefeed  = 'CL'.
gs_input-cleartara = '0'.
gs_input-tweight   = '0'.
gs_input-tunit     = 'kg'.
gs_input-alibi     = '1'.
gs_input-wtest     = '0'.

CLEAR gro_exc.
TRY.
    CALL METHOD gro_weight->get_weight
      EXPORTING
        input  = gs_input
      IMPORTING
        output = gs_output.

  CATCH cx_ai_system_fault INTO gro_exc.
  CATCH cx_ai_application_fault INTO gro_exc.
ENDTRY.

IF ( gro_exc IS INITIAL ).
  IF ( gs_output-error IS INITIAL ).
    WRITE: / gs_output-weight.
    WRITE: / gs_output-unit.
    WRITE: / gs_output-id.
    WRITE: / gs_output-data.
  ELSE.
    WRITE: / 'SCALE-Error:' , gs_output-error.
  ENDIF.
ELSE.
  gf_errtxt = gro_exc->if_message~get_text( ).
  WRITE: / 'SOAP-Error:' , gf_errtxt.
ENDIF.