[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    May 2006
    Beiträge
    195
    mit Command funktioniert. Danke.

    das heisst:
    für SBMJOB(Call.... Parm(abc)) wird eine Kopie im Speicher erstellt und die Leerstellen nicht erkannt.
    Ich nutze als Parameter eine
    Ext.Ds->
    Feld1(100A),
    Feld2(200A),
    Feld3(200A)
    alle Felder sind nur bis zur Hälfte Gefüllt der Rest ist mit HEX'00' gefüllt.
    Folgendes unklar:
    die DS wird doch als ein String(500A) gesehen. Ich wurde verstehen wenn nur die Letzten Leerstellen von dem Feld3 mit HEX'00' gefüllt oder?

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Es würde reichen, das letzte Byte zu füllen.
    Das CMD funktioniert deshalb, weil über die Parameterdefinition zu kurze Werte dann mit Blanks automatisch gefüllt werden.

    Wie bereits oben schon mal gesagt wäre der korrekte Call eben so:

    CALL MYPGM PARM('langer inhalt _____')

    Wichtig ist ja, dass der Parameter in korrekter Länge übergeben wird und das schafft man nur mittels Hochkomma (zu beachten ist ggf. die Hochkommaverdoppelung).

    Der Unterschied zwischen dem CALL-CMD und einem CALL im CLP ist der, dass der Compiler den CALL direkt in einen Programmaufruf ändert und somit die Variablen by reference übergeben werden.
    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. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... wie sieht denn dein command aus? wenn die Definition des Commands die Schnittstelle richtig abbildet, wird da garnix mit HEX '00' oder anderen weisen Frauen gefüllt...

    D*B

    Zitat Zitat von svit Beitrag anzeigen
    mit Command funktioniert. Danke.

    das heisst:
    für SBMJOB(Call.... Parm(abc)) wird eine Kopie im Speicher erstellt und die Leerstellen nicht erkannt.
    Ich nutze als Parameter eine
    Ext.Ds->
    Feld1(100A),
    Feld2(200A),
    Feld3(200A)
    alle Felder sind nur bis zur Hälfte Gefüllt der Rest ist mit HEX'00' gefüllt.
    Folgendes unklar:
    die DS wird doch als ein String(500A) gesehen. Ich wurde verstehen wenn nur die Letzten Leerstellen von dem Feld3 mit HEX'00' gefüllt oder?
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    May 2006
    Beiträge
    195
    D*B:
    Command funktioniert. und es werden Keine Hex wert übergeben.
    die Beschreibung bezog sich auf SBM und Call.

    Fuerchau:
    ich habe eine RPG Programm welches die DS füllt und anschliesend das CL aufruft. das CL macht SBMjob mit DS als parameter.

    Mir geht es jetzt nur die Problematik zu verstehen.
    Was läuft im Speicher ab.

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Das liegt nicht am Speicher sondern in der Natur von Kommandos.

    Ein CALL im CLP ruft nicht das CMD-CALL wie aus der Kommandozeile auf sondern direkt den Maschinenbefehl Call analog zum Call in RPG/COBOL.

    Wenn CMD's aufgerufen werden, wird das Kommando im Speicher zusammengebaut (Runtimeroutinen des CLP's) und dann wie mit QCMDEXC aufgerufen.
    Der Kommando-Interpreter hat nun mal die Angewohnheit:
    Bei Zeichenketten ohne Hochkomma, die restlichen Blanks zu entfernen und wenn keine Sonderzeichen/Zahlen vorhanden sind, das Ergebnis in Großbuchstaben zu konvertieren.

    Das Hauptkommando ist hier der SBMJOB der mit Parametern gefüllt wird.
    Einer davon ist das halt das CMD-CALL.
    Analog zu RPG wird also folgendes gemacht:

    MyCall = 'CALL MYPGM PARM(' + MyDs + ')';

    Möchtest du die DS als Ganzes übergeben so ist das Ganze anzupassen:

    MyCall = 'CALL MYPGM PARM(''' + MyDs + ''')';
    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

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Zitat Zitat von svit Beitrag anzeigen
    D*B:
    Command funktioniert. und es werden Keine Hex wert übergeben.
    die Beschreibung bezog sich auf SBM und Call.
    http://newsolutions.de/forum-systemi...html#post82300

    Wie dieser Übergabebereich erstellt wird, beschreibt die Bedienerhilfe des Parameters PARM des Befehls call:

    - alles numerische wird als dec (15 5) erstellt
    - alle Alfa Felder mit mindestens 32 bzw. mit aktueller (rechts getrimmter) Länge

    Falls dass dann im aufgerufenen Programm anders deklariert ist, kann es zu undokumentierten Effekten kommen, z.B.:
    - Absturz wg. nicht numerischer Daten
    - HEX00 Werte am rechten Rand
    - Überlappung von Inhalten
    - Machine Check wg. Pointer Fehler
    - ...

    Das Command Objekt beschreibt nun genau diesen Übergabestack in den dann die übergebenen Parameterliterale (vor dem Submit!) eingefüllt werden.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Kleine Korrektur:
    Vor dem Submit erfolgt nur die Aufbereitung des zu übergebenden Befehls als Gesamtstring!

    Erst im gestarteten Job wird dieser String durch den Commandprozessor wieder zerlegt und nach obigen Kriterien dann der Speicherbereich aufgebaut und das auszuführende Programm aufgerufen.

    Allerdings ist das Entfernen von "überflüssigen" Leerzeichen beim Submit bereits erfolgt.
    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. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... das Command Objekt macht einiges mehr, was hier nicht zum Verständnis nötig ist (z.B.: special values übersetzen etc.) und wird sowohl vor dem submit, als auch nach dem submit aufgerufen.

    D*B
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Kleine Korrektur:
    Vor dem Submit erfolgt nur die Aufbereitung des zu übergebenden Befehls als Gesamtstring!

    Erst im gestarteten Job wird dieser String durch den Commandprozessor wieder zerlegt und nach obigen Kriterien dann der Speicherbereich aufgebaut und das auszuführende Programm aufgerufen.

    Allerdings ist das Entfernen von "überflüssigen" Leerzeichen beim Submit bereits erfolgt.
    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
    Feb 2001
    Beiträge
    20.696
    Ja, das betrifft das SBMJOB-Command selber aber nicht das darin eingebettete auszuführende CMD.

    Der Job wird initiiert und das auszuführende CMD bzw. die RQSDTA werden als Request-Message in die Job-MSGQ gestellt.
    Über die Routing-Entries im Subsystem wird das zu startende Programm ermittelt (default QCMD).
    Dieser liest die Nachricht aus der Job-MSGQ und führt dann das Command mittels Transfercontrol (TFRCTL) aus.

    Über die Routing-Entries könnte ich auch ein eigenes Programm aufrufen lassen und mit den Daten die ich per RCVMSG abholen muss dann was ganz anderes machen.
    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

  10. #10
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    @Baldur: ich bleibe bei meinem Einspruch!
    das unter Parameter CMD des SBMJOB eingetragene Command wird vor dem SBMJOB benutzt, um den Übergabebereich zu erstellen und zu füllen (erkennbar daran, dass man Parameter prompten kann etc.)
    Im submitteten Job wird der command dann wieder benutzt um das command processing programm aufzurufen und die Parameter dafür aufzubereiten (erkennbar daran, das validity checker ausgeführt werden etc.)

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  11. #11
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.012
    Hallo,

    hier hab ich auch noch einen aktuellen Beitrag von Joe Pluta zu diesem Thema gefunden.

    Practical CL: The 32-Character Solution | CL

    Gruß,
    KM

  12. #12
    Registriert seit
    Nov 2003
    Beiträge
    2.403

Similar Threads

  1. SNDPGMMSG und SBMJOB
    By Dominik Meyer in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 13-01-07, 15:16
  2. JOBQ(*JOBD) oder JOBQ(LIB/JOBQ) an SBMJOB übergeben
    By hww in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 12-12-06, 15:27
  3. SBMJOB und SCDDATE/SCDTIME
    By Luebbert in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 13-09-06, 11:39
  4. sbmjob und ' im Parameter
    By muadeep in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 27-06-06, 11:31
  5. Parameterübergabe CL/RPG
    By mott in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 09-12-05, 09:06

Berechtigungen

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