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 ) »
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.02.2019 18:00, insgesamt 1-mal geändert.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Web-Service(REST) Programmieren

Beitrag von thinkpad-94 (ForumUser / 9 / 4 / 0 ) »
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 08.02.2019 12:48, insgesamt 1-mal geändert.

Re: Web-Service(REST) Programmieren

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
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 ) »
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 (Top Expert / 1327 / 35 / 332 ) »
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 (Top Expert / 1046 / 30 / 192 ) »
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 ) »
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 (Top Expert / 1327 / 35 / 332 ) »
... 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 ) »
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 (Top Expert / 1327 / 35 / 332 ) »
... 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 ) »
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 (Top Expert / 1327 / 35 / 332 ) »
.... 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 ) »
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 (Top Expert / 1327 / 35 / 332 ) »
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 ) »
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.

Vergleichbare Themen

2
Antw.
4707
Views
Select über 3 Tabellen: Wie? Join? Subquery? füllen ITAB?
von ASchreier » 13.06.2007 10:28 • Verfasst in ABAP® für Anfänger
11
Antw.
6112
Views
JOIN-Anweisung
von honeyjam » 04.01.2011 16:41 • Verfasst in ABAP® für Anfänger
3
Antw.
1722
Views
Select-Anweisung
von phil1982 » 02.08.2007 08:30 • Verfasst in ABAP® für Anfänger
9
Antw.
6117
Views
Select-Anweisung
von ??? » 23.05.2005 10:22 • Verfasst in ABAP® für Anfänger
4
Antw.
2287
Views
Problem mit Select-Anweisung
von Crashday2707 » 19.05.2018 11:51 • Verfasst in ABAP® für Anfänger

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 17 Stunden von Bright4.5 1 / 375
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2022
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8618