[NEWSboard IBMi Forum]
Seite 2 von 3 Erste 1 2 3 Letzte
  1. #13
    Registriert seit
    Jan 2007
    Beiträge
    1.002
    @Dieter
    Hast mich gleich nachdenklich gemacht, da diese Problematik nicht mehr so present ist. War wohl nur ein netter Versuch von mîr.

    Offensichtlich bleiben wirklich nur Commands als sauberste Lösung übrig, wenn die Parameterstruktur zu komplex ist.

    Mehr diesem Thema unter diesem Link:

    Get the SBMJOB Command's CMD Parameter to Cooperate
    kf

  2. #14
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Das Problem ist doch der eingebettete Call im SBMJOB.
    Also müssen die Daten in der benötigten Länge übergeben werden.
    Allerdings kann man tatsächlich beliebige Daten übergeben da der Empfänger da nicht bekannt ist.
    Wenn ich also 201 Bytes mit dem "!" am Ende übergebe und der Empfänger nur 200 Bytes definiert, kommt er an das "!" gar nicht dran und es muss nicht entfernt werden.
    Aber wie Dieter schon sagt, sauber ist das 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

  3. #15
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... natürlich kann ich das auch alles in 32er Happen zerhacken, oder vorher die Blanks escapen und nachher wieder erzeugen, oder rechts trimmen und als varchar schicken und wieder auffüllen und zig andere bitfummlerische Tricks. Problem ist dabei nur, daß bei fehlerhafter Bedienung einer solchen Wackelschnittstelle sehr seltsame Fehler an völlig anderer Stelle auftauchen können; zudem setzt man hierbei auch auf undokumentiertem Verhalten auf, wenn der Compiler dann morgen mehr prüft als heute, kriegt man das Gegurke möglicherweise nicht einmal mehr gewandelt. Letzteres ist vor nicht allzulanger Zeit bei der trickreichen Übergabe einstelliger Parameter und CALLPRC passiert!!!

    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/

  4. #16
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Ochnö, für variable Übergabe (ist ja schließlich by reference) nütze ich das Durchreichen von Char(1) sehr häufig.
    Ist ja gemein, wenn dass plötzlich vom Compiler abgelehnt wird, ist ja schließlich CLLE und keine HLL.

    In RPGLE kann ich die PRC ja selber deklarieren, was da auch schon klappte ist "* value", also als Pointer by Value.
    Das ist zwar Huddel, der Compiler frisst es aber.
    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

  5. #17
    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?

  6. #18
    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

  7. #19
    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/

  8. #20
    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.

  9. #21
    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

  10. #22
    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/

  11. #23
    Registriert seit
    Nov 2003
    Beiträge
    2.403

  12. #24
    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

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
  •