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 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
Jeder dieser Informationen ist eine eigene Fehlermeldung zugeordnet, die den ggf. aufgetretenen Fehler zurückliefert.

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
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_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)
der Struktur zbema_get_plate_response zurückgeliefert. Ist das jeweilige Fehlerfeld leer, war der Lesezugriff erfolgreich.
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)
zur Verfügung.



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.