Web-Service(REST) Programmieren


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

Web-Service(REST) Programmieren

Beitragvon thinkpad-94 » 30.01.2019, 13:16

Hallo zusammen,

ich habe ein Projekt und als Anfänger wollte ich euch hierzu fragen, ob ich mit dem Aufbau so richtig liege.
Ein Chatroboter soll eine Anbindung an das SAP-System erhalten. Der Chatroboter unterstützt REST. Im SAP-System ist ein Web-Service schon vorhanden (SICF), welches REST unterstützt.

Es erfolgt eine Eingabe im Chatbot -> Daten werden an das SAP-System gesendet -> Nach der Verarbeitung eine Nachricht über Erfolg/Fehler zurück.

Vorgehensweise, welche ich mir überlegt habe:
Paket erstellen -> Klasse erstellen -> Methode erstellen -> Serivce in SICF erstellen -> Methode/Handler mit dem Paket zuweisen

Was soll die Methode haben?
Es soll die empfangenen Daten umwandeln in ABAP-lesbare Daten.

Dann die empfangenen Daten(5 Stück) wie folgt bearbeiten:
1. Zur Identifikation(2 von den 5): Datensatz No. 1 in einer Tabelle mittels SELECT finden, wenn gefunden mittels in der Tabelle vorhandenen Datensatz ein JOIN in eine andere, dort in eine dritte, danach in eine vierte. In der vierten wird nun Datensatz No. 2 verglichen, wenn es passt kann weiter gemacht werden.
2. Zuordnung: Bevor der nächste Schritt durchgeführt wird, soll Datensatz No. 3 in einer Tabelle abgeglichen werden, damit im nächsten Schritt kein Fehler passiert. (SELECT)
3. FuBa aufrufen: Datensatz No. 4 und 5 an FuBa senden mittels Import/Export.

Nach erfolgreichen Ausführen der 3 Schritte soll eine Bestätigung an den Chatroboter gesandt werden oder eine Fehlermeldung, wenn irgendwo etwas nicht gepasst hat.

Passt das denn vom Ablauf her eurer Meinung nach?
Sollte ich im Paket lieber eine Tabelle erstellen, um diesen in der Methode aufzurufen und die Daten hier die empfangenen Daten zwischenzeitig abzuspeichern?
Ich warte auf einen Entwicklerschlüssel, damit ich eine weiter arbeiten kann und würde später den Code zusenden.


VG
thinkpad-94
ForumUser
 
Beiträge: 8
Registriert: 11.12.2018, 13:04
Dank erhalten: 0 mal
Ich bin: Student/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Web-Service(REST) Programmieren

Beitragvon thinkpad-94 » 08.02.2019, 12:26

Hallo zusammen,

mein derzeitiger Code sieht wie folgt aus. Natürlich funktioniert es so nicht.
Wie kann ich am besten den einkommenden Datensatz in der Tabelle EVER herraussuchen? Bin ich mit dem Ansatz von LOOP richtig dabei?
Ich danke vielmals!


Code: Alles auswählen
  method IF_HTTP_EXTENSION~HANDLE_REQUEST.

    DATA: lt_indata       TYPE TABLE OF ZTZ_CHB_ROH,
          lt_ever         TYPE TABLE OF EVER,
          lv_string       TYPE string.
Field-Symbols: <fs_ever> TYPE EVER,
                       <fs_indata>  TYPE ZTZ_CHB_ROH.

* Body-Daten von JSON als String holen
    lv_string = server->request->get_cdata( ).

    CONCATENATE '&#91;' lv_string '&#93;' INTO lv_string.
* Empfangene Daten in die benötigte Struktur umwandeln
    TRY .
        /ui2/cl_json=>deserialize(
          EXPORTING
            json             = lv_string
*            pretty_name = /ui2/cl_json=>pretty_mode-camel_case
          CHANGING
            data             = lt_indata ).
    ENDTRY.



*Tabelle EVER in interne Tablle hinzufügen
 SELECT * FROM EVER INTO TABLE lt_ever.


*Einkommendes Datensatz Vertragsnummer in EVER heraussuchen
 LOOP AT lt_ever ASSIGNING <fs_ever>
   WHERE Vertrag = <fs_indata>-Vertragsnummer.
ENDLOOP.


** Postleizahl wie Vertragsnummer abgleichen. Hängt mit Vertragsnummer zusammen.
*  SELECT POST_CODE1
*    FROM EVER
*        INNER JOIN FKKVKP ON EVER-VKONT = FKKVKP-VKONT
*        INNER JOIN BUT020 ON FKKVKP-GPART = BUT020-PARTNER
*        INNER JOIN ADRC   ON BUT020-ADDRNUMBER = ADRC-ADDRNUMBER
*    INTO CORRESPONDING FIELDS OF TABLE
*    WHERE EVER-Vertrag = Vertrag.
*

** Zählerstand übermitteln
*   CALL FUNCTION ' '
*    EXPORTING
*
*    IMPORTING



  endmethod.
Zuletzt geändert von thinkpad-94 am 08.02.2019, 12:48, insgesamt 1-mal geändert.
thinkpad-94
ForumUser
 
Beiträge: 8
Registriert: 11.12.2018, 13:04
Dank erhalten: 0 mal
Ich bin: Student/in

Re: Web-Service(REST) Programmieren

Beitragvon Tron » 08.02.2019, 12:42

Moin.
Untersuche doch eimal, ob Du nicht einen ODATA Webservice einsetzten kannst.

Open Data Protocol (OData) is an open protocol which allows the creation and consumption of queryable and interoperable RESTful APIs in a simple and standard way initiated 2007 by Microsoft. https://en.wikipedia.org/wiki/Open_Data_Protocol
A RESTful API is an application program interface (API) that uses HTTP requests
to GET, PUT, POST and DELETE data.
A RESTful API , also referred to as a RESTful web service , is based on representational state transfer (REST) technology, an architectural style and approach to communications often used in web service development.
A RESTful API explicitly takes advantage of HTTP methodologies defined by the RFC 2616 protocol. They use GET to retrieve a resource; PUT to change the state of or update a resource, which can be an object, file or block; POST to create that resource; and DELETE to remove it.


http://www.beginners-sap.com/what-is-odata/

Beispiel:
000.png
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Für diese Nachricht hat Tron einen Dank bekommen :
thinkpad-94
Tron
Expert
 
Beiträge: 965
Registriert: 04.08.2007, 21:08
Wohnort: Hamburg
Dank erhalten: 181 mal
Ich bin: Entwickler/in

Re: Web-Service(REST) Programmieren

Beitragvon thinkpad-94 » 08.02.2019, 12:52

Tron hat geschrieben:Moin.
Untersuche doch eimal, ob Du nicht einen ODATA Webservice einsetzten kannst.

Open Data Protocol (OData) is an open protocol which allows the creation and consumption of queryable and interoperable RESTful APIs in a simple and standard way initiated 2007 by Microsoft. https://en.wikipedia.org/wiki/Open_Data_Protocol
A RESTful API is an application program interface (API) that uses HTTP requests
to GET, PUT, POST and DELETE data.
A RESTful API , also referred to as a RESTful web service , is based on representational state transfer (REST) technology, an architectural style and approach to communications often used in web service development.
A RESTful API explicitly takes advantage of HTTP methodologies defined by the RFC 2616 protocol. They use GET to retrieve a resource; PUT to change the state of or update a resource, which can be an object, file or block; POST to create that resource; and DELETE to remove it.


http://www.beginners-sap.com/what-is-odata/


Danke erstmal für das schnelle Antwort. OData Services ist mir auch schon in den Sinn gekommen, aber leider konnte ich keine ausführliche "Anleitung" finden, womit ich OData Services verstehe und implementieren kann. Ich suche aber mal weiterhin danach. Falls es dazu Tipps mit einem Link gibt wäre ich dankbar!

Viele Grüße
thinkpad-94
ForumUser
 
Beiträge: 8
Registriert: 11.12.2018, 13:04
Dank erhalten: 0 mal
Ich bin: Student/in

Re: Web-Service(REST) Programmieren

Beitragvon Tron » 08.02.2019, 13:09

Moin.
Das Tutorial ist ganz gut:

How to develop a Gateway Service using code based implementation
https://archive.sap.com/documents/docs/DOC-43030
https://www.sdn.sap.com/irj/scn/index?r ... ayout=true
Dieses Tutorial habe ich auch umgesetzt. Es wird hier allles per Coding erstellt und dann im customizing bekannt gemacht.

Während mit der neueren Methode via Transaktion SEGW, das Datenmodell über Oberflächen eingegeben werden kann.
Zuvor kann man auch mit "OGEE"
https://www.odata.org/blog/eclipse-ogee/
das Datenmodel erstellen und dann in die SEGW importieren. Das spart viel Zeit.
Ogee ist auch im Paket "Abab mit Eclipse" enthalten.

https://mission-mobile.de/sap-fiori/oda ... n-teil-14/

und recht neu , wie mir scheint,
https://developers.sap.com/tutorial-navigator.html
https://developers.sap.com/mission.scp-3-odata.html

gruß Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Für diese Nachricht hat Tron einen Dank bekommen :
thinkpad-94
Tron
Expert
 
Beiträge: 965
Registriert: 04.08.2007, 21:08
Wohnort: Hamburg
Dank erhalten: 181 mal
Ich bin: Entwickler/in

Re: Web-Service(REST) Programmieren

Beitragvon wreichelt » 08.02.2019, 17:09

Hallo,

https://www.erpworkbench.com/sap-webapp ... ervice.htm

auch ein gutes Beispiel

Gruß Wolfgang

Für diese Nachricht hat wreichelt einen Dank bekommen :
thinkpad-94
wreichelt
Expert
 
Beiträge: 666
Registriert: 17.07.2005, 09:46
Wohnort: Hessen
Dank erhalten: 113 mal
Ich bin: sonstiges

Re: Web-Service(REST) Programmieren

Beitragvon thinkpad-94 » 10.02.2019, 18:56

Guten Abend zusammen,

erstmal vielen Dank für die Links und Tipps.
Dank der URL von Tron bin ich auf die Anleitung gestoßen, welches der mit euren hauptsächlich ähnlich ist, aber anhand des neuen Designs vom SAP Gateway service gemacht worden ist. https://blogs.sap.com/2016/05/31/odata-service-development-with-sap-gateway-code-based-service-development/


Frage:
Bei mir ist das GW_HUB bei der Serviceverwaltung nicht zu sehen. Ich kann es somit nicht registrieren.
Muss dieses erst aktiviert werden wie es hier steht? https://www.ebel-computing.de/JSPWiki/Wiki.jsp?page=Netweaver%20Gateway



Danke nochmals und einen angenehmen Sonntagabend!
thinkpad-94
ForumUser
 
Beiträge: 8
Registriert: 11.12.2018, 13:04
Dank erhalten: 0 mal
Ich bin: Student/in

Re: Web-Service(REST) Programmieren

Beitragvon Tron » 11.02.2019, 10:53

... hatte ich auch mal. Da war es eine fehlende Berechtigung (SICF).
Starte doch mal SU53.
gruß Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.
Tron
Expert
 
Beiträge: 965
Registriert: 04.08.2007, 21:08
Wohnort: Hamburg
Dank erhalten: 181 mal
Ich bin: Entwickler/in

Re: Web-Service(REST) Programmieren

Beitragvon thinkpad-94 » 11.02.2019, 12:52

Tron hat geschrieben:... hatte ich auch mal. Da war es eine fehlende Berechtigung (SICF).
Starte doch mal SU53.
gruß Jens


In SICF fehlt es mir an keinen Berechtigungen.
In Su53 kommt dementsprechend "Die letzte Berechtigungsprüfunf war erfolgreich".
thinkpad-94
ForumUser
 
Beiträge: 8
Registriert: 11.12.2018, 13:04
Dank erhalten: 0 mal
Ich bin: Student/in

Re: Web-Service(REST) Programmieren

Beitragvon Tron » 11.02.2019, 13:20

... dann bitte mal prüfen, ob die Services für Odata alle aktiviert sind :
e.g.
000.png
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.
Tron
Expert
 
Beiträge: 965
Registriert: 04.08.2007, 21:08
Wohnort: Hamburg
Dank erhalten: 181 mal
Ich bin: Entwickler/in

Re: Web-Service(REST) Programmieren

Beitragvon thinkpad-94 » 11.02.2019, 14:36

Die sind alle aktiv. Unter dem sap Knoten sind nur manche nicht aktiv wie bspw. 'adt_srv'. Echt komisch.
Unter SPRO habe ich den Gateway-Alias GW_HUB ebenfalls erstellt, da dieser nicht eingetragen war, sondern nur LOCAL.
Das bringt einen echt schon zum verzweifeln :down

2019-02-11 14_34_04-Pflege der Services.png

2019-02-11 14_34_26-Pflege der Services.png
thinkpad-94
ForumUser
 
Beiträge: 8
Registriert: 11.12.2018, 13:04
Dank erhalten: 0 mal
Ich bin: Student/in

Re: Web-Service(REST) Programmieren

Beitragvon Tron » 11.02.2019, 14:52

.... Na gut,
1.te Möglichkeit Customizing SPRO :
000.png


2.te Möglichkeit
kommen wir zu den "Geheimtips" :wink:
1.) Starte Transaktion STC01
2.) Aus der Dropdownbox die Tasks
    SAP_GATEWAY_BASIC_CONFIG
    SAP_GATEWAY_ACTIVATE_ODATA_SERV
abarbeiten.
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.
Tron
Expert
 
Beiträge: 965
Registriert: 04.08.2007, 21:08
Wohnort: Hamburg
Dank erhalten: 181 mal
Ich bin: Entwickler/in

Re: Web-Service(REST) Programmieren

Beitragvon thinkpad-94 » 11.02.2019, 15:40

Die erste Möglichkeit hatte ich schon überprüft und ist aktiv.

Bei deinen Geheimtipps habe ich das erste ausgeführt.
Beim zweiten habe ich für "OData-Services für Aktivierung definieren" den Namen meines Projekts aus SEGW eingegeben.
Für "Verarbeitungsmodus / Systemalias für Aktivierung wählen" fehlt jedoch ein Systemalias. Ich muss anschienend ein RFC-fähiges Systemalias generieren.

Passt die Anleitung https://help.sap.com/doc/fiori_bs2013/1.0%202015-10/de-DE/bf/d1b053a647e842e10000000a4450e5/frameset.htm dazu, um es zu generieren?
thinkpad-94
ForumUser
 
Beiträge: 8
Registriert: 11.12.2018, 13:04
Dank erhalten: 0 mal
Ich bin: Student/in

Re: Web-Service(REST) Programmieren

Beitragvon Tron » 11.02.2019, 15:53

absolut.
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Für diese Nachricht hat Tron einen Dank bekommen :
thinkpad-94
Tron
Expert
 
Beiträge: 965
Registriert: 04.08.2007, 21:08
Wohnort: Hamburg
Dank erhalten: 181 mal
Ich bin: Entwickler/in

Re: Web-Service(REST) Programmieren

Beitragvon thinkpad-94 » 12.02.2019, 15:14

Leider musste ich das mit dem OData sein lassen, da ich dies damit nicht machen soll. Somit kommt wieder der Restful WebService zurück.
Wie schaut der Code aus?

Tabelle
2019-02-12 15_13_25-Dictionary_ Tabelle anzeigen.png



Code: Alles auswählen
  method IF_HTTP_EXTENSION~HANDLE_REQUEST.

    DATA: lt_indata       TYPE TABLE OF ZTZ_CHB_ROH,
             lt_ever         TYPE TABLE OF EVER,
             lt_data         TYPE ZTZ_CHB_ROH,
             lv_string       TYPE string.
Field-Symbols: <fs_ever>    TYPE EVER,
               <fs_indata>  TYPE ZTZ_CHB_ROH.

* Body-Daten von JSON als String holen
    lv_string = server->request->get_cdata( ).

    CONCATENATE '&#91;' lv_string '&#93;' INTO lv_string.
* Empfangene Daten in die benötigte Struktur umwandeln
    TRY .
        /ui2/cl_json=>deserialize(
          EXPORTING
            json             = lv_string
*            pretty_name = /ui2/cl_json=>pretty_mode-camel_case
          CHANGING
            data             = lt_indata ).
    ENDTRY.



*Tabelle EVER mit Vertragsdaten in interne Tablle hinzufügen
 SELECT * FROM EVER INTO TABLE lt_ever.


*Einkommendes Datensatz Vertragsnummer in EVER heraussuchen
LOOP AT lt_ever ASSIGNING <fs_ever>
   WHERE Vertrag = <fs_indata>-Vertragsnummer.
ENDLOOP.


* Potleizahl überprüfen
  SELECT POST_CODE1
    FROM EVER
        INNER JOIN FKKVKP ON EVER~VKONTO = FKKVKP~VKONT
        INNER JOIN BUT020 ON FKKVKP~GPART = BUT020~PARTNER
        INNER JOIN ADRC   ON BUT020~ADDRNUMBER = ADRC~ADDRNUMBER
    INTO CORRESPONDING FIELDS OF  lt_data
    WHERE EVER~Vertrag = <fs_indata>-Vertragsnummer.
  ENDSELECT.

** Zählerstand übermitteln
*   CALL FUNCTION 'BAPI_MTRREADDOC_UPLOAD'
*    EXPORTING
*    TABLES
*        BAPIEABLU =        .
*    IMPORTING



  endmethod.
thinkpad-94
ForumUser
 
Beiträge: 8
Registriert: 11.12.2018, 13:04
Dank erhalten: 0 mal
Ich bin: Student/in


Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
gelöst SALV - Layout wird nicht gezogen
vor 6 Stunden von ralf.wenzel 0 Antw.
ADRMAS-Segmente vorbefüllen
vor 10 Stunden von lausek 0 Antw.
MS Word nicht als SAPscript-Editor verwenden
vor 11 Stunden von DeathAndPain 2 Antw.
EWM: HU mit RBG anhand von Produkt-LB bewegen
Gestern von TimTo 0 Antw.
BADI Impl. cin_plug_in_to_migo deaktivieren
Gestern von zzcpak 1 Antw.

  Ähnliche Beiträge beta
Uhr programmieren
18.11.2011, 08:33 von a-dead-trousers 4 Antw.
Liste programmieren
22.07.2011, 14:40 von ratsnus 1 Antw.
gelöst Rekursives Programmieren
03.08.2015, 13:46 von SaskuAc 1 Antw.
gelöst Primzahlen programmieren
16.02.2016, 10:52 von PeterPaletti 5 Antw.
gelöst Rechnungssplit Programmieren
09.11.2016, 16:04 von JHM 1 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder