[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Dec 2016
    Beiträge
    8
    Hallo BenderD,
    Hallo Fuerchau,

    vielen Dank für eure Antworten. Der Hintergrund ist folgender:
    Wir haben im Unternehmen gerade damit angefangen uns mit Webservices zu beschäftigen. Die Daten liegen bei uns auf der DB2. Nun würden wir für jede Datei oder für jeden Select eigene Webservices brauchen. Das sind zwar kleine Programme, aber letztendlich würden es viele werden.
    Nun versuche ich (Und ich bin mir sicher, dass es auf irgendeinem Wege möglich ist) einen universalen Webservice jeweils für SELECT, INSERT, UPDATE und DELETE zu schreiben. Das ich mir da eine Mega-Aufgabe gestellt habe, habe ich mir zwar schon gedacht aber wenn das Ding halt einmal fertig ist, brauche ich mir nie wieder oder zumindest nur sehr selten Gedanken darüber zu machen, wie ich den Webservice bei zukünftigen Programmentwicklungen anpacke(Unser Dateibestand an physischen Dateien wächst in etwa um zwei PF Pro Monat).
    Für diese Mammut Aufgabe brauche ich doch ein bisschen Hilfe von Experten
    Vielleicht hat jemand sowas schonmal entwickelt oder vielleicht können später mehr Entwickler von dem know how profitieren

    Nun für heute mache ich erstmal Feierabend. Ich warte morgen gespannt auf eure Antworten. Hoffentlich kann ich schlafen :-D

    Beste Grüße

    Matthias

    EDIT(Mir fällt hinterher auch immer noch was ein -.-*): Der obige Code stammt natürlich aus einem Test und nicht aus meiner UNIWEBSRVS-Datei. 'VARIABLE' soll dann natürlich eine variable sein in der der Dateiname (PF) steht und die Fragezeichen sollen durch eine variable ersetzt werden.

  2. #2
    Registriert seit
    Dec 2016
    Beiträge
    8
    ... auch da würde man heute zu anderen Programmiersprachen greifen. Das ergibt doch ganz andere Aufwand/Effekt Relationen.
    Ich hätte es lieber über RPG gelöst aber andere Programmiersprachen wie Java, C#, C++, C,... beherrsche ich auch.

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.752
    RPG ist keine dynamische Sprache und für solche komplexen Aufgaben einfach ungeignet.
    Java ist insofern gut, als dass du mit Eclipse (o.ä.) entwickeln und testen kannst und es dann auf der AS/400 ausführen lassen kannst (wenn erforderlich).
    Es hängt ganz einfach von deiner Anforderung ab.

    Deshalb noch mal: was willst du damit erreichen? Was ist deine Aufgabe?
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    HTTP WebServices & Dynamische Verarbeitung ... für mich wäre hier zunächst mal PHP das besser geeignete Werkzeug dafür.

    In RPG habe ich mal ein Beispiel-Code zusammengestellt um genau das was du möchtest zu realisieren.
    Ist aber sicher kein Code den man für performancekritische Anwendungen verwenden sollte:
    Code:
    D vsql s 512 
    D vtype s 10 
    D vlength s 10 0 
    D vresult_ind s 10 0 
    D vCount S 10 0 
    D i S 10 0 
    
    /Free 
    	// SQL Cursor erstellen 
    	vSql = 'Select * From tab1';
    	Exec Sql Prepare S1 from :vsql;
    	Exec Sql Declare c1 Cursor For s1;
    
    	// Descriptor mit der max. Anzahl der Spalten initialisieren 
    	Exec Sql allocate descriptor 'mydesc' with max 2;
    	EXEC SQL DESCRIBE S1 Using descriptor 'mydesc';
    
    	// Ersten Satz einlesen Exec Sql open c1;
    	Exec Sql Fetch c1 into sql descriptor 'mydesc';
    
    	// Anzahl der Spalten abrufen 
    	EXEC SQL GET DESCRIPTOR 'mydesc' :vCount = COUNT;
    
    	// Alle Spalten mit deren Werte einlesen 
    	For i=0 to vCount;
    		// Attribute der Spalte einlesen 
                    Exec Sql GET DESCRIPTOR 'mydesc' VALUE :i :vtype = TYPE, :vlength = LENGTH, :vresult_ind = INDICATOR;
    		if vresult_ind >= 0;
    			Select;
    			When vtype = '1';
    			// Character exec Sql GET DESCRIPTOR 'mydesc' VALUE :i :sp2 = DATA;
    			When vtype = '4';
    			// Integer exec Sql GET DESCRIPTOR 'mydesc' VALUE :i :sp1 = DATA;
    			endsl;
    		endif;
    	endfor;
    	Exec Sql close c1;
    
    /End-Free
    lg Andreas

  5. #5
    Registriert seit
    Dec 2016
    Beiträge
    8
    Hallo zusammen,

    zunächst einmal recht herzlichen Dank für eure Antworten und eure Mühe.

    Zitat Zitat von Fuerchau Beitrag anzeigen
    Deshalb noch mal: was willst du damit erreichen? Was ist deine Aufgabe?
    Ich weiß nicht ob ich besser erklären kann :-) so wie es aussieht scheint andreaspr@aon.at den Punkt aber ganz gut zu treffen. Jedenfalls wenn ich den Code korrekt interpretiere.

    Allerdings kommt bei mir bei vCount immer 0 heraus, hier mein Debug:

    EDIT: Okay ein eingebettetes Bild war nicht so gut ihr findet es im Anhang^^

    Hmm. Vielleicht sollte ich es doch in php machen...
    Click image for larger version. 

Name:	Debug.jpg 
Views:	49 
Size:	330,9 KB 
ID:	407
    Andreas kannst du mir noch sagen warum da bei mir eine 0 herauskommt? Die Tabelle ist in der Bibliothek definitiv vorhanden (Arbeite ich oft mit).

    Vielen Dank euch

    Besten Gruß

    Matthias Neubert

  6. #6
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Bei "With max 2" musst du sicher einen höheren Wert angeben.
    Starte einfach mal den DEBUG und schau ins Joblog oder mit Monitoring.
    In einem der beiden wirst du sicher den genauen Fehler finden können.

    lg Andreas

  7. #7
    Registriert seit
    Dec 2016
    Beiträge
    8
    Jo das sieht schon etwas besser aus.
    Jetzt hat er nur noch ein Problem mit den Variablen.
    Das ist das was mir der JOBLOG ausgibt aber ich weiß nicht so genau was der mir sagen möchte .
    Click image for larger version. 

Name:	Debug.jpg 
Views:	19 
Size:	282,7 KB 
ID:	408

    Meine Variablen habe ich wie folgt definiert:
    Code:
           dcl-s vsql varchar(512);
           dcl-s vtype varchar(10);
           dcl-s vlength int(10);
           dcl-s vresult_ind int(10);
           dcl-s vCount int(10);
           dcl-s i int(10);
           dcl-s sp1 varchar(500);
           dcl-s sp2 packed(20:10);
    EDIT: Ich habe gerade gesehen, dass der Cursor weder geöffnet noch geschlossen wird. Das habe ich jetzt eingebaut aber die Variablen bleiben trotzdem leer. Eingefügt habe ich den Open nach der Deklaration des Cursors und geschlossen habe ich ihn nach dem endfor

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.379
    ... ihr seid euch schon darüber im klaren, dass man auf diese Weise nicht Satz für Satz lesen kann und zwischendurch andere Lese/Schreib Operationen durchführen kann?
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  9. #9
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Da ist mir doch eine Zeile ins Kommentar gerutscht, habs im Beispiel-Post korrigiert.
    War die Zeile:
    Code:
    Exec Sql GET DESCRIPTOR 'mydesc' VALUE :i :vtype = TYPE, :vlength = LENGTH, :vresult_ind = INDICATOR;
    @Dieter: Sicher kann man Satz für Satz einlesen:
    Code:
    Exec Sql Fetch c1 into sql descriptor 'mydesc';
    Oder meinst du was anderes?

    lg Andreas

  10. #10
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Ich würde aber wirklich lieber mit PHP das ganze Lösen.
    Das würde dir das Leben einfacher machen. :-)

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.752
    Und wenn du firm mit Java bist, dann wäre hier Java die bessere Wahl, da du für PHP zusätzliche Laufzeitumgebungen benötigst.
    Da inzwischen auch Node.JS für AS/400 native verfügbar ist, kann man hierüber sogar ohne Einsatz von Zendserver o.ä. direkte Web-Services zur Verfügung stellen.
    Hoch flexibel, einfach und von (fast) allen Javaprogrammierern realisierbar.
    Zusätzlich kann man bei Bedarf ebenso Programmaufrufe bestehender Anwendungsteile über SQL-Wrapper (Prozeduren und Funktionen) in Node.JS/Java-SQL einbinden.

    Für das, was du da vorhast, kann man RPG nicht so einfach verwenden.

    Und was Dieter meint ist:
    Ein RPGLE kann auf diesem Wege nur einen Cursor aufmachen!
    Oder du musst in dem RPGLE je Cursor einen eigenen Satz von Routinen schreiben und dich entscheiden, wieviele parallelel Zugriffe und verschiedene Tabellen du zulässt.

    Mit einer OOP-Sprache hast du das Problem erst gar nicht.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. Kann keine Beiträge erstellen in zB. "System i Hauptforum"
    By lch in forum Intern - Hilfe - Feedback - Tests-Forum
    Antworten: 10
    Letzter Beitrag: 15-02-21, 12:06
  2. Antworten: 1
    Letzter Beitrag: 19-07-17, 12:38
  3. MinusField falsche Darstellung "ü" statt "-"
    By Edi in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 07-11-14, 08:52
  4. Cobol/400 - "Fett", "Unterstreichen" als HEX-Wert
    By RLurati in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 05-08-14, 10:10
  5. "zu wenig Speicher" Rational Developer for Power-Systems
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 13-02-14, 21:58

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •