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.