[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2002
    Beiträge
    77

    Post Befehle als Prototypen einrichen

    Hallo zusammen,
    ich möchte für einige oft aus RPGLE benutze Befehle Prototypen einrichten.
    Im ersten Ansatz hab ich die Programme für die Befehlsausführung als EXTPGM() eingtragen. Bei IBM Befehlen habe ich da aber meine Bedenken, was den zukünftigen Wartungsaufwand angeht, da doch des öfteren Parameter hinzukommen.
    Frage: Kann ich irgendwie das CMD direkt in den Prototypen eintragen?
    Andreas
    ***Wer einen Schreibfehler findet darf ihn behalten***

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.873

    Post

    Hallo Andreas,

    mir ist nicht ganz klar, was Du erreichen möchtest.
    Willst Du die ausführende Programme direkt aus RPG aufrufen oder den Command über QCMDEXC absetzen?
    Oder versuchst Du Prototypen für APIs zu definieren.

    Gib mal ein Beispiel.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Aug 2002
    Beiträge
    77

    Post

    Hallo Birgitta,
    nehmen wir als beispiel OVRDBF
    Im Moment haben wir das Programm QCMDEXC als Prototypen as400cmd definiert.
    Der Aufruf wäre also für den Ovrdbf

    callp AS400CMD('OVRDBF FILE(' +
    %TRIM(LIBNAME) + '/' +
    %TRIM(FILENAME) + ') TOFILE('+
    %TRIM(TOFILE) ')'
    :512)

    Bei solch einfachen Befehlen sicher noch übersichtlich.
    AS400CMD('CVTSPL +
    FROMFILE(' + %TRIM(SPLF) + ') -
    TOSTMF(' + %TRIM(#USR) + '_' +
    + %TRIM(SPLF)
    + '.PDF) -
    TODIR(' + %TRIM(DIR) + ') -
    JOB(' + JOBNR + '/' +
    %TRIM(JOBUSR) + '/' +
    %TRIM(JOBNAME) + ') -
    SPLNBR(' + %TRIM(W#SPLNRA) + ') -
    TOFMT(*PDF) -
    STMFOPT(*REPLACE) -
    STMFCODPAG(*PCASCII)':512)
    ist da dann schon etwas mehr getippe.
    hier wäre mir ein Prototyp
    callp cvtsplstmf(
    splf c_file ir:JobNr:JobUsr:JobName:SplNr:'*PDF':'*REPLACE':'* PCASCII') wesentlich lieber. mir ist schon klar, dass da bei dem Beispiel noch diverse *OMITs für ausgelassene Paramter reinmüssten. Sollte nur ein Bild geben, was ich mir vorstelle.
    Die Frage ist jetzt, gibt es statt EXTPGM('CPPvonCMD') (das Befehlsausführungspgm eines Commands) mit allen seinen Parametern, die sich jedes Release ändern können, eine elegante Art, den Befehl direkt als Prototypen zu definiern? EXTCMD('OVRDBF') wäre ja schick, aber das Keyword gibts ja leider nicht :-)


    [Dieser Beitrag wurde von AndreasH am 16. April 2003 editiert.]
    Andreas
    ***Wer einen Schreibfehler findet darf ihn behalten***

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.873

    Post

    Hallo Andreas,

    eine Universal-Lösung kann ich dir nicht bieten, aber vielleicht einen Vorschlag.

    Schreibe ein Programm, in dem die wichtigsten Parameter übergeben werden müssen.
    Die restlichen lässt Du entweder weg, oder definierst sie mit Options(*NoPass)oder Options(*NoPass: *Omit).
    In deinem Programm baust Du dann den Befehl zusammen aus den übergebenen Parameter und Default-Werten zusammen und rufst ihn über QCMDEXC auf.

    Ich habe etwas Ähnliches mit unseren Send Message Befehlen gemacht.
    Der einzige Unterschied ist, dass ich keinen CL-Befehl über QCMDEXC absetze, sondern ein API aufrufe.

    Wenn ich z.B. eine Escape Message schicken möchte, brauche ich nur SndEscMsg('MSG1234') aufzurufen.
    Die anderen für das API benötigten Parameter werden in dem Programm mit Unterlassungs-Werten versorgt.
    Werden variable Message-Texte oder eine andere als unsere Standard-Message-File benötigt, werden die entsprechenden Parameter übergeben.

    Dadurch werden die APIs mit ihren komplexen Parameter-Strukturen nur an einer Stelle aufgerufen und müssen (falls sich etwas ändern sollte) auch nur an einer Stelle geändert werden.

    Birgitta

    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241

    Post

    Ausserdem muss man sich mal die Struktur von Parametern der Kommandos ansehen. (Im CL-Handbuch beschrieben, Felder, Listen, Elemente, mit/Ohne Attribut oder Längeninfo usw. usw.).
    Selbst nicht ausgewählte Schlüsselworte werden mit ihrem Defaultwert an das ausführende Programm übergeben. Dazu gibt es auch noch versteckte Schlüsselworte, die man gar nicht herausbekommt.

    Übrigens kann man die Berechtigung von CMD- und PGM-Objekt trennen.
    Während das CMD-Objeckt bei *PUBLIC *USE aufweist, gilt für das Programm *PUBLIC *EXCLUDE !
    Damit ist ein Direktaufruf eines CMD's in den meisten Fällen sowieso nicht möglich.
    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
    Aug 2002
    Beiträge
    77

    Post

    Ich danke euch,
    Ich werde wohl die von Birgitta vorgeschlagen Lösung für die häufigen Befehle benutzen.
    Vielleicht "schenkt" uns IBM ja mal das Schlüsselwort EXTCMD()
    Andreas
    ***Wer einen Schreibfehler findet darf ihn behalten***

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.241

    Post

    Ich bezweifle das, da es ja CL gibt und die Möglichkeiten eines Kommandos sehr vielfältig sind.

    Übrigens, ein CLP kann auch ein CLLE sein und ist somit auch als Prozedur aufrufbar.
    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. benutzerdefinierte Befehle
    By cimbala in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 10-12-06, 16:46
  2. OpsNav Befehle extern verwenden
    By Robi in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 06-10-04, 12:12
  3. Befehle in Englisch
    By TARASIK in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 26-05-04, 15:15
  4. AS/400 Befehle aus der DOS-Ebene
    By TARASIK in forum IBM i Hauptforum
    Antworten: 10
    Letzter Beitrag: 11-06-02, 12:05
  5. ping u.a. befehle auf as400 (V4R3)
    By Seb400 in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 08-06-01, 19:31

Berechtigungen

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