[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2001
    Beiträge
    309

    QCMDEXC & OVRPRTV

    Habe folgendes Problem:
    PHP-Code:
    H Option(*SrcStmt : *NoDebugIODatedit(*DMYDatFmt(*ISOIndent('| ')
    H DftActGrp(*No)
     *
    FMontAuPR  O    E             Printer UsrOpn
     
    *
    DPgmSDS          SDS
    D User                  254    263
     
    *
    D QCmdExc         PR                  ExtPgm('QCMDEXC')      
    D   Command                   3000A   const options(*varsize)
    D   Length                      15P 5 const
     *
    C                   Select                    
    C                   When      
    (User 'MXX1')
     *
    C                   CallP     QCMDEXC('OVRPRTF FILE(MONTAUPR) ' +    
    C                                              'DEV(PRTCM4200)' 37)
    C                   Open      MontAuPR                               
    C                   Write     LabelE                                 
    C                   Close     MontAuPR                               
    C                   CallP     QCMDEXC
    ('DLTOVR FILE(MONTAUPR)' 21)
    C                   Other
                         
    :
                         :
    C                   EndSl
     
    *
    C                   Eval      *InLR = *on 
    Wenn der User "MXX1" ist wird das Statement mit "CallP QCMDEXC('..." ausgeführt und es gibt auch keinen Programmabruch aber die Überschreibung (OVRPRTF ... ) ist dann leider auch nicht vorhanden bzw. es wird auf dem Standartdrucker gedruckt!

    Kann mir jemand sagen, was ich da falsch mache?

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    OVRSCOPE(*JOB) !!!

    Das Problem:
    QCMDEXC ist ein OPM-Programm und läuft daher in einer anderen Aktivierungsgruppe als dein ILERPG.
    Der Default ist leider *ACTGRPDFN.
    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
    Aug 2001
    Beiträge
    309
    ahhhh !!!!

    und was heist das jetzt für mich?


    kann ich das irgendwie umgehen, wenn ja wie?

  4. #4
    Registriert seit
    Aug 2004
    Beiträge
    923
    Hello,

    damit ist wohl z.B. der Parameter aus den OVR-Befehlen für die *ACTGRPDFN gemeint.
    Zum Beispiel eben in OVRPRTF der Parameter.

    Erklärung in Englisch gemopst von http://faq.midrange.com/data/cache/94.html


    Using overrides in ILE is somewhat different from using them in OPM:

    In ILE an override (again, using the default OVRSCOPE) will work for all other programs in the activation group in which the override is issued. It will not be automatically removed when the issuing prorgram ends; it will exist until it is explicitly removed with DLTOVR or until the activation group ends.
    If you want an override to be visible through different activation groups (as in calling an OPM program from an ILE program), you will have to use OVRSCOPE(*JOB). The override will be in effect for all programs in the job, regardless of activation group, until it is removed or the job ends. OVRSCOPE(*CALLLVL) is for getting the 'old' behaviour in ILE: the override will be removed when the call level, i.e. the issuing program, ends.


    OVRSCOPE



    Falls die Spielerei mit den Aktivirungstruppen nicht gleich geht, gibts es glaube ich auch noch ne altherkömmliche Methode?
    So übern CL erst den OVR absetzen und dann den CALL.
    Bin mir da aber gerade nicht sicher wegen alten Releasestand hier.

    k.

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Also zusammengefasst:
    Den OVRSCOPE musst du an den OVRPRTF anhängen.

    Das mit dem CLP ist auch nicht so einfach:

    - Zu beachten ist die Aufrufhierarchie
    - Besonders zu berücksichtigen ist QCMDEXC
    - ILE-Umgebung

    *ACTGRPDFN
    Funktioniert nur, wenn das CMD direkt (also nicht per QCMDEXC) aufgerufen wird oder der nachfolgende Open in einem OPM-Programm erfolgt

    *CALLLVL
    Das ist die Aufrufebene, die den OVR durchführt, dabei betrachtet sich QCMDEXC nicht als Aufrufebene, kann also vernachlässigt werden.
    Aber beim Ablauf PGM->CLP->OVR ist der OVR wieder weg, wenn in das PGM zurückgekehrt wird.

    *JOB
    Ist eigentlich selbsterklärend.

    Zur Vorgensweise bei *JOB/*ACTGRPDFN:
    OVR->OPEN->DLTOVR->Verarbeitung
    Da der OVR nur für den Open relevant ist, kann der OVR ja nach Open wieder entfernt werden. Somit ist er auch nach Programmabbruch (was wir ja nicht hoffen) auf jeden Fall wieder weg 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

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    309
    so, hab jetzt meinen Source-Code so abgändert:

    PHP-Code:
    C                   CallP     QCMDEXC('OVRPRTF FILE(MONTAUPR) ' +          
    C                                     'DEV(PRTCM4200) OVRSCOPE(*JOB)' 52)
    C                   Open      MontAuPR                                     
    C                   Write     LabelE                                       
    C                   Close     MontAuPR
    C                   CallP     QCMDEXC
    ('DLTOVR FILE(MONTAUPR) ' +
    C                                     'LVL(*JOB)' 31
    der OVRPRTF wird zwar ausgeführt
    (wenn ich Pgm mit DEBUG und an entsprechender Stelle mit WRKJOB prüfe)
    aber die Druckausgabe kommt trotzdem auf dem Standartdrucker (so wie in der PrinterFile angegeben) !!!!

  7. #7
    Registriert seit
    Jan 2003
    Beiträge
    746
    Für mich sieht das so aus, als würde nur der QCMDEXC ausgeführt, nicht aber der OVRPRTF (Joblog?).

    'string' + 'string' : len sehen für mich wie drei Parameter aus.

    lass mal die beiden ' um das plus weg oder EVALuiere vorher einen String in einer Variable: CALLP QCMDEXC(CMDSTRG:37)

  8. #8
    Registriert seit
    Jan 2001
    Beiträge
    833
    Hallo zusammen,


    kann es vielleicht sein das Du nicht über die Device drucken kannst ?

    Ich mache eigentlich immer einen Override auf die OUTQ


    Gruss
    Michael

  9. #9
    Registriert seit
    Sep 2005
    Beiträge
    20
    Hatte früher dasselbe Problem, nach ewigem Hin und Her mit IBM (und nicht gelöstem Problem) bin ich dann zähneknirschend dazu übergegangen, das RPG-Proggi in ein CLP einzubetten und den OVRPRTF in dem CLP vor das RPG zu stellen. Bums, fertig aus und klappt immer.

  10. #10
    Registriert seit
    Jun 2006
    Beiträge
    5
    Hallo.

    Der OVRPRTF funktioniert z.B.:

    DoCmdString = 'OVRPRTF'
    + ' FILE(JLD205P) DEVTYPE(*AFPDS)'
    + ' PAGESIZE(93 180) LPI(8) CPI(12) OVRFLW(93)'
    + ' OVRSCOPE(*JOB)';
    DoCmdmsg = DoCmd(DoCmdString);
    .
    .
    .
    Open JLD205P;
    DoCmdString = 'DLTOVR FILE(JLD205P) LVL(*JOB)';
    DoCmdMsg = DoCmd(DoCmdString);
    close(e) JLD205P;


    DoCmd procedure und DoCmdSring, DoCmdMsg felder sind programintern definiert:

    PHP-Code:
    d DoCmd           pr             7                   
    d  DoCmdString               32767    
    const varying  
                                                         
    d DoCmdMsg        s              7                   
    d DoCmdString     s          32767    varying        

    p DoCmd           b                                                     
    d                 pi             7                                      
    d  pDoCmdString              32767    
    const varying                     
                                                                            
    d wReturnMsg      s              7                                      
                                                                            
    d QCmdExc         pr                  extpgm
    ('QCMDEXC')                 
    d                            32767    const                             
    d                               15p 5 const                             
                                                                            
    c                   clear                   wReturnMsg                  
    c                   callp
    (e)  QCmdExc(pDoCmdString:%len(DoCmdString))   
    c                   if        %error                                    
    c                   
    eval      wReturnMsg zPgmErrMsgId  
    c                   
    endif                                
    c                   return    wReturnMsg                 
                                                             
    p                 e 
    Gruss
    Helge Bichel
    Copenhagen

Similar Threads

  1. RCVMSG nach QCMDEXC
    By flytokiwi in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 29-03-06, 13:49
  2. Objektnamen dynamisch dem SAVOBJ im CL zuordnen
    By becama in forum IBM i Hauptforum
    Antworten: 12
    Letzter Beitrag: 11-08-05, 15:05
  3. Nachrichtenbehandlung nach QCMDEXC in COBOL/400
    By Lichtblitz in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 25-07-05, 12:44
  4. V5R3 & QCMDEXC
    By Freezer in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 02-12-04, 13:38
  5. QCMDEXC und Parameterlänge
    By fabax in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 27-02-04, 11:10

Berechtigungen

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