[NEWSboard IBMi Forum]
Seite 2 von 2 Erste 1 2
  1. #13
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Ja jetzt nähert sich das so langsam. Die Ursache ist der SBMJOB !
    Wenn du beim SBMJOB einen CALL mit Parametern übergibst, werden diese genauso gehandhabt wie ein Aufruf aus einer Kommandozeile.

    Also SBMJOB ... CMD(CALL PGMX PARM(&V)) wird der Inhalt der Variablen ausgelesen und als Zeichenkette übergeben.
    Nun schlägt die Defaultbehandlung des CMD-Prozessors für das CALL-CMD zu:
    Numerische Werte in 15p5, Zeichenwerte in der Länge der Eingabe, mindestens jedoch 32 Stellen.
    Einthält eine Zeichenkette keine Leer- und Sonderzeichen wird sie in Grossbuchstaben übersetzt ansonsten automatisch mit Hochkommata eingeschlossen.

    Ein SBMJOB kann ja keinen Call-by-Reference auslösen wie ein CALL-CMD, der zur Compilezeit bereits in einen MI-CALLX aufgelöst wird !!!

    Machst du nun einen SBMJOB ... CMD(MYCMD MYPARM(&V)) wird der Inhalt der Variable passend zum PARM konvertiert (numerisch, alpha ggf. in Hochkomma).
    Der Befehlsprozessor stellt aber später sicher, dass das aufzurufende Programm garantiert die Puffer in der angegebenen Definition erhält.

    Wenn du also einen CALL submitten willst, musst du die Parameter selber in einer Variablen zusammenbauen, ggf. Hochkommata einsetzen und das ganze als Variable übergeben SBMJOB ... RQSDTA(&V) anstelle von CMD(...).

    Allerdings gibt es eine Längenbeschränkung von 3000 Zeichen !!!
    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

  2. #14
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Ach ja:
    Aus JAVA kann es keinen Call-by-Reference an RPG geben, so dass hier quasi per QCMDEXC ein Call aus den Inhalten gestrickt wird. Hier gilt wieder die automatische Parameteranpassung (s.o.).
    Ausserdem arbeitet Java in UNICODE und muss daher die Parameter in SBCS konvertieren.
    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

  3. #15
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.012
    Ja jetzt nähert sich das so langsam. Die Ursache ist der SBMJOB !
    Das hatte ich aber weiter oben schon geschrieben, dass ich vorhabe die Mails per SBMJOB im Batch zu versenden.

    Also SBMJOB ... CMD(CALL PGMX PARM(&V)) wird der Inhalt der Variablen ausgelesen und als Zeichenkette übergeben...
    Aus diesen Gründen kann ich mit den CALL per SBMJOB abschminken.

    Wenn du also einen CALL submitten willst, musst du die Parameter selber in einer Variablen zusammenbauen, ggf. Hochkommata einsetzen und das ganze als Variable übergeben SBMJOB ... RQSDTA(&V) anstelle von CMD(...)...
    Den Aufruf mit RQSDTA hatte ich auch schon getestet. Nur durch die Längenbeschränkung von 3000 Zeichen konnte ich auch das nicht benutzen, da ja allein der eine Parameter schon 9999 Stellen hat.

    Machst du nun einen SBMJOB ... CMD(MYCMD MYPARM(&V)) wird der Inhalt der Variable passend zum PARM konvertiert (numerisch, alpha ggf. in Hochkomma).
    Genau da liegt ja das Problem. Ich dachte ja mit dem CMD hätte ich die Lösung zu meinem Problem gefunden. Nur entsprechen da die übergebenen 9999 Stellen nicht den empfangenen 9999 Stellen, zumindest wenn sie hinterher in einen Java-String konvertiert werden.

    Aus JAVA kann es keinen Call-by-Reference an RPG geben, so dass hier quasi per QCMDEXC ein Call aus den Inhalten gestrickt wird.
    Aus Java will ich ja auch gar kein RPG aufrufen.

    Die Lösung mit dem Substring funktioniert ja. Und es scheint wohl auch die einzige Lösung für mein Problem zu sein. Damit kann ich leben.

    Gruß,
    KM

  4. #16
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    HI KM,
    als wir das Problem hatten, haben wir eine Arbeitsdatei erfunden.
    Wir schreiben die (bei uns mehrere) Parameter immer mit einem RPGPGM in die Datei. Das RPGPGM gibt uns eine SatzNr zurück. Diese ist dann Parameter und das gleiche PGM wird vom submittenten job gerufen, gibt die Parms zurück und löscht den Satz. Nicht sehr elegant aber es geht
    Gruß
    RJ

  5. #17
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    zurück zum Anfang: hast du nun einen eigenen Command erstellt, oder nicht.
    SBMJOB CMD(MyCommand PARM(....)) geht mit allen Parametern, solange sie sein dürfen ohne Probleme.
    Was nicht geht ist:
    SBMJOB CMD(CALL ....), was am Command Call liegt, wie ein Blick in die Bedienerhilfe des Commands Call näher erläutert...

    mfg

    Dieter Bender

    Zitat Zitat von KM
    Ich habe ein sehr seltsames Phänomen. Ich habe einen Command zum Versenden von eMails erstellt mit mehreren Parametern vom Typ Character. Ein Parameter davon ist 9999 Stellen lang, die anderen deutlich kleiner. Das Feld mit den 9999 Stellen stellt den eMail-Body dar. Hinter diesem Command steckt ein CLLE-Programm, das die Parameter empfängt und weiterverarbeitet. So weit so gut.
    Wenn ich nun einen normalen Text (z.B. ein paar Wörter) per eMail versenden will, erstellt mir das Programm eine Mail von 22 KB (!). Ich habe auch gesehen, dass das lange Textfeld wohl in Blöcke zu jeweils 75 Stellen aufgesplittet wird mit lauter Leerzeichen, obwohl vorher auf dieses lange Textfeld ein %trim() gemacht wird.

    Kann es also sein, dass es Probleme gibt, wenn man lange Textfelder bei einem Command an ein Programm übergibt ? Irgendwas scheint hier faul zu sein, denn im Debug sieht alles noch ganz normal aus.

    Gruß,
    KM
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #18
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.012
    Ja, das hatte ich ja schon mehrfach geschrieben, dass ich einen eigenen CMD dafür erstellt habe.

    SBMJOB CMD(MyCommand PARM(....)) geht mit allen Parametern, solange sie sein dürfen ohne Probleme.
    Das geht eben nicht!!! Das ist ja das Problem. Ich dachte ja auch, dass das funktioniert. Aber wenn ich im gerufenen Programm einen TRIM auf das lange Feld mache, in dem nur ein kurzer Text steht, und das Ergebnis dieses TRIMs in einen Java-String konvertiere, dann sollte doch eigentlich in diesem String nur noch dieser kurze Text vorhanden sein. Und das ist nicht so. Ich erhalte ein langes String-Objekt, das offenbar in mehrere Blöcke aufgeteilt ist und viele Leezeichen enthält.

    Gruß,
    KM

  7. #19
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Wie sieht denn wiederum deine Zielvariable für den Trim aus ?
    Ist diese denn mit varying definiert ?

    Ich denke nicht, dass es ein CMD-Problem ist.
    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

  8. #20
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.012
    Das Ergebnis wird direkt mit dem Constructor für Java.lang.String in einen Java-String konvertiert und wird nicht erst in eine Zwischenvariable gespeichert. Es funktioniert ja normalerweise auch immer. Nur eben nicht beim CMD.

    Gruß,
    KM

  9. #21
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Hm !
    Wenn ich variable Längen benötige, kann ich das doch im PARM direkt definieren, dass mir die Länge der Eingabe als 2-Byte binär vorangestellt wird.
    Das Parameterfeld im Programm definiere ich dann mit "varying" und es passt !

    Kleiner Vorteil:
    Bewusste Leerzeichen am Ende gehen nicht verloren.
    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. MS ado und Prepared Command
    By Asti in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 26-10-06, 09:39
  2. FETCH n ROws in einzelne Felder einer DS
    By pedro-zapata in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 11-09-06, 12:34
  3. MiDViSiON Ausstellerprofil: command ag
    By Kirsten Steer in forum Archiv NEWSboard Events
    Antworten: 0
    Letzter Beitrag: 15-06-06, 07:49
  4. Erstellung Command und Valuelist
    By JonnyRico in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 10-05-06, 11:18
  5. command und IBM: Tête-à-Tête auf der SYSTEMS
    By ralfmh in forum Archiv NEWSboard Events
    Antworten: 0
    Letzter Beitrag: 06-10-04, 22:37

Berechtigungen

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