Select Join mehrere Tabellen anschließend IF-Anweisung

Getting started ... Alles für einen gelungenen Start.
17 Beiträge / Seite 1 von 2 (current) Nächste
17 Beiträge Seite 1 von 2 (current) Nächste

Select Join mehrere Tabellen anschließend IF-Anweisung

Beitrag von thinkpad-94 (ForumUser / 9 / 4 / 0 ) » 30. Jan 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
Zuletzt geändert von thinkpad-94 am 17. Feb 2019 18:00, insgesamt 1-mal geändert.


Re: Web-Service(REST) Programmieren

Beitrag von thinkpad-94 (ForumUser / 9 / 4 / 0 ) » 8. Feb 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 '[' lv_string ']' 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 8. Feb 2019 12:48, insgesamt 1-mal geändert.

Re: Web-Service(REST) Programmieren

Beitrag von Tron (Expert / 992 / 8 / 196 ) » 8. Feb 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

Folgende Benutzer bedankten sich beim Autor Tron für den Beitrag:
thinkpad-94

<:: 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.

Re: Web-Service(REST) Programmieren

Beitrag von thinkpad-94 (ForumUser / 9 / 4 / 0 ) » 8. Feb 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

Re: Web-Service(REST) Programmieren

Beitrag von Tron (Expert / 992 / 8 / 196 ) » 8. Feb 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

Folgende Benutzer bedankten sich beim Autor Tron für den Beitrag:
thinkpad-94

<:: 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.

Re: Web-Service(REST) Programmieren

Beitrag von wreichelt (Expert / 687 / 16 / 119 ) » 8. Feb 2019 17:09

Hallo,

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

auch ein gutes Beispiel

Gruß Wolfgang

Folgende Benutzer bedankten sich beim Autor wreichelt für den Beitrag:
thinkpad-94


Re: Web-Service(REST) Programmieren

Beitrag von thinkpad-94 (ForumUser / 9 / 4 / 0 ) » 10. Feb 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- ... velopment/


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/W ... %20Gateway



Danke nochmals und einen angenehmen Sonntagabend!

Re: Web-Service(REST) Programmieren

Beitrag von Tron (Expert / 992 / 8 / 196 ) » 11. Feb 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.

Re: Web-Service(REST) Programmieren

Beitrag von thinkpad-94 (ForumUser / 9 / 4 / 0 ) » 11. Feb 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".

Re: Web-Service(REST) Programmieren

Beitrag von Tron (Expert / 992 / 8 / 196 ) » 11. Feb 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.

Re: Web-Service(REST) Programmieren

Beitrag von thinkpad-94 (ForumUser / 9 / 4 / 0 ) » 11. Feb 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

Re: Web-Service(REST) Programmieren

Beitrag von Tron (Expert / 992 / 8 / 196 ) » 11. Feb 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.

Re: Web-Service(REST) Programmieren

Beitrag von thinkpad-94 (ForumUser / 9 / 4 / 0 ) » 11. Feb 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 ... ameset.htm dazu, um es zu generieren?

Re: Web-Service(REST) Programmieren

Beitrag von Tron (Expert / 992 / 8 / 196 ) » 11. Feb 2019 15:53

absolut.

Folgende Benutzer bedankten sich beim Autor Tron für den Beitrag:
thinkpad-94

<:: 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.

Re: Web-Service(REST) Programmieren

Beitrag von thinkpad-94 (ForumUser / 9 / 4 / 0 ) » 12. Feb 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 '[' lv_string ']' 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.

Seite 1 von 2 (current) Nächste

Aktuelle Forenbeiträge

Business Partner Konzept
vor 2 Stunden von msfox 3 / 217
Exception Handling FuBa test
vor 9 Stunden von ichse18577 1 / 40
CDS-Views / AMDP für HCM
vor 12 Stunden von RaCDigger 6 / 316
Kreditlimitprüfung Obligo
vor 16 Stunden von SAP_ENTWICKLER 3 / 163

Unbeantwortete Forenbeiträge

Exception Handling FuBa test
vor 9 Stunden von ichse18577 1 / 40
Verursachervormerkung OCM manuell anlegen
vor 6 Tagen von Aba 1 / 127
Auflösen MILL_OC - Auftragszusammenfassung
vor einer Woche von tofralu 1 / 109
Löschen von archivierten Drucklisten
vor einer Woche von Asaph 1 / 99