Beispiel ABAP Code zum Aufruf des BEMACON ANPR-Dispatchers
Folgender ABAP Code zeigt, wie der
BEMACON ANPR-Dispatcher
über
SOAP (RPC-Style)
als
Web-Service
aufgerufen werden kann,
um die Kfz-Kennzeichen und die Fotos (jeweils Zugfahrzeug und Anhänger) von zwei
Kennzeichenlesern
zu lesen,
um sie auf einem Dynpro anzuzeigen.
Der Web-Service erhält als Input die Verbindungsdaten der beiden Kameras (Hostname und Port),
die Wartezeit für die OCR-Kennzeichenermittlung und einen Dateipfad, in den die Kameras die
Fotos per
FTP
ablegen.
Der Web-Service ermittelt danach die vier Informationen
- Kennzeichen, Datum, Uhrzeit Zugfahrzeug
- Kennzeichen, Datum, Uhrzeit Anhänger
- Foto Zugfahrzeug
- Foto Anhänger
Die Schnittstelle ist in der WSDL-Definition http://bemacon.de/zscale/soap_anpr_server.wsdl spezifiziert.
Die Web-Service-Client-Proxy-Klasse zbema_co_get_plate_port_type und die beiden Strukturen
- zbema_get_plate
- zbema_get_plate_response
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_plate 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 ANPR-Dispatchers (z.B. Kennzeichen ungültig, Datei nicht vorhanden) werden als Fehlertexte in den Feldern
- perrora (Fehler bei Kennzeichenermittlung Zugfahrzeug)
- ierrora (Fehler bei Bildermittlung Zugfahrzeug)
- perrorb (Fehler bei Kennzeichenermittlung Anhänger)
- ierrorb (Fehler bei Bildermittlung Anhänger)
Datum, Uhrzeit, Kennzeichen und Foto stehen dann in den Feldern
- pdatea (Datum Zugfahrzeug JJJJMMTT)
- ptimea (Uhrzeit Zugfahrzeug hhmmss)
- platea (Kennzeichen Zugfahrzeug NR-LAND )
- imga (Foto Zugfahrzeug JPG)
- pdateb (Datum Anhänger JJJJMMTT)
- ptimeb (Uhrzeit Anhänger hhmmss)
- plateb (Kennzeichen Anhänger NR-LAND)
- imgb (Foto Anhänger JPG)
DATA:
gf_imga TYPE xstring,
gf_imgb TYPE xstring,
gro_exc TYPE REF TO cx_root,
gf_errtxt TYPE string,
gs_input TYPE zbema_get_plate,
gs_output TYPE zbema_get_plate_response,
gro_plate TYPE REF TO zbema_co_get_plate_port_type,
gro_conta TYPE REF TO cl_gui_custom_container,
gro_contb TYPE REF TO cl_gui_custom_container,
gro_pica TYPE REF TO cl_gui_picture,
gro_picb TYPE REF TO cl_gui_picture.
CREATE OBJECT gro_plate
EXPORTING
logical_port_name = 'ZP1'.
* --------------------------------
* Protokoll NEDAP Access
* --------------------------------
gs_input-protocol = 'NEDAP'.
* --------------------------------
* Kamera Zugfahrzeug
* --------------------------------
gs_input-hosta = '10.10.5.5'.
gs_input-porta = 8000.
* --------------------------------
* Kamera Anhänger
* --------------------------------
gs_input-hostb = '10.10.5.6'.
gs_input-portb = 8000.
* --------------------------------
* Wartezeit für OCR Analyse (msec)
* --------------------------------
gs_input-gatetime = 1000.
* --------------------------------
* FTP-Pfad
* --------------------------------
gs_input-pathname = 'C:\NEDAP'.
CLEAR gro_exc.
TRY.
CALL METHOD gro_plate->get_plate
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 ).
* ------------------------------------
* Kennzeichen Zugfahrzeug
* ------------------------------------
IF ( gs_output-perrora IS INITIAL ).
WRITE: / gs_output-pdatea.
WRITE: / gs_output-ptimea.
WRITE: / gs_output-platea.
ELSE.
WRITE: / 'A-Plate-Error:' , gs_output-perrora.
ENDIF.
* ------------------------------------
* Kennzeichen Anhänger
* ------------------------------------
IF ( gs_output-perrorb IS INITIAL ).
WRITE: / gs_output-pdateb.
WRITE: / gs_output-ptimeb.
WRITE: / gs_output-plateb.
ELSE.
WRITE: / 'B-Plate-Error:' , gs_output-perrorb.
ENDIF.
* ------------------------------------
* Foto Zugfahrzeug
* ------------------------------------
IF ( gs_output-ierrora IS INITIAL ).
CALL METHOD cl_http_utility=>if_http_utility~decode_x_base64
EXPORTING
encoded = gs_output-imga
RECEIVING
decoded = gf_imga.
PERFORM showpic USING gro_conta gro_pica gf_imga 'CONTA'.
ELSE.
WRITE: / 'A-Image-Error:' , gs_output-ierrora.
ENDIF.
* ------------------------------------
* Foto Anhänger
* ------------------------------------
IF ( gs_output-ierrorb IS INITIAL ).
CALL METHOD cl_http_utility=>if_http_utility~decode_x_base64
EXPORTING
encoded = gs_output-imgb
RECEIVING
decoded = gf_imgb.
PERFORM showpic USING gro_contb gro_picb gf_imgb 'CONTB'.
ELSE.
WRITE: / 'B-Image-Error:' , gs_output-ierrorb.
ENDIF.
ELSE.
gf_errtxt = gro_exc->if_message~get_text( ).
WRITE: / 'SOAP-Error:' , gf_errtxt.
ENDIF.
CALL SCREEN 100.
*----------------------------------------------------------------------*
FORM showpic
USING pro_cont TYPE REF TO cl_gui_custom_container
pro_pic TYPE REF TO cl_gui_picture
pf_img TYPE xstring
pf_name TYPE c.
DATA:
lf_url(255) TYPE c,
lt_img TYPE STANDARD TABLE OF w3mime.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = pf_img
TABLES
binary_tab = lt_img.
CREATE OBJECT pro_cont
EXPORTING
container_name = pf_name.
CREATE OBJECT pro_pic
EXPORTING
parent = pro_cont.
CALL METHOD pro_pic->set_display_mode
EXPORTING
display_mode = cl_gui_picture=>display_mode_fit_center.
CALL FUNCTION 'DP_CREATE_URL'
EXPORTING
type = 'IMAGE'
subtype = 'JPG'
TABLES
data = lt_img
CHANGING
url = lf_url.
CALL METHOD pro_pic->load_picture_from_url
EXPORTING
url = lf_url.
ENDFORM.