[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2006
    Beiträge
    111

    Question Dateigröße ermitteln und anzeigen

    Frohes Neues liebe RLP-Gemeinde !

    Eine Dateigröße über API zu ermitteln ist nicht das Thema, sondern eher die Anzeige per 'QMHSNDPM'.

    PGM-Ablauf ist folgender:

    CMD 'DSPFSIZ' aufrufen, File und zugehörige Libl angeben.

    Diese beiden Parameter werden an ein CLLE übergeben

    Code:
     
    /*------------------------------------------------------------------*
                 PGM        PARM(&FIL &LIBL)                             
                                                                         
                 DCL        VAR(&FIL) TYPE(*CHAR) LEN(10)                
                 DCL        VAR(&LIBL) TYPE(*CHAR) LEN(10)               
                                                                         
    /*    Programm zur Anzeige aufrufen                              */  
                 CALL       PGM(WI567) PARM(&FIL &LIBL)                  
                                                                         
     ENDE:       ENDPGM
    Leider funktioniert dann die Anzeige per QMHSNDPM nicht...

    Rufe ich WI567 mit 2 Parametern ohne zwischengeschaltetes CL auf, funktionierts... wo liegt der Fehlerteufel begraben ?

    Code:
    D P_MsgID         S              7    INZ('CPF9897')
         D P_MsgFile       S             20    INZ('QCPFMSG   *LIBL')
         D P_MsgData       S             80
         D P_MsgKey        S              4
         D P_MsgType       S             10    INZ('*INFO')
         D P_PgmQueue      S             10    INZ('*CTLBDY')
         D P_PgmStack      S             10I 0 INZ(1)
         D P_DataLength    S             10I 0
     
     
     C                   CALL (E)  'QMHSNDPM'
         C                   PARM                    P_MsgID
         C                   PARM                    P_MsgFile
         C                   PARM                    P_MsgData
         C                   PARM                    P_DataLength
         C                   PARM                    P_MsgType
         C                   PARM                    P_PgmQueue
         C                   PARM                    P_PgmStack
         C                   PARM                    P_MsgKey
         C                   PARM                    P_Error
    Gruß
    Bratmaxxe

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Betrachte den Eintrag P_PgmStack, an welche Ebene du sendest !
    Wenn du die ja nach Aufruf nicht anpasst ....
    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
    Jan 2006
    Beiträge
    111
    Zitat Zitat von Fuerchau
    Betrachte den Eintrag P_PgmStack, an welche Ebene du sendest !
    Wenn du die ja nach Aufruf nicht anpasst ....
    Danke Fuerchau,

    der Wert P_PgmStack steht derzeit fest auf 1...

    Habe mir den Aufrufstapel angesehen, welcher wie folgt aussieht:

    DSPFSIZCL -> Befehlsverarbeitendes CL

    Code:
     
           Programm                                           
    Rqs    oder                                               
    Lvl    Prozedur    Bibliothek  Anweisung        Instruktio
           GRPPGM      PGM         7200                006B   
           QCMDEXC     QSYS                            0129   
      1    QPGMMENU    QSYS                            03A3   
           QUOCPP      QPDA                            0776   
           QUOMAIN     QPDA                            00FD   
      2    QUOCMD      QSYS                            01E1   
           _CL_PEP     PGM                                    
           DSPFSIZCL   PGM         0000002400                 
         < _PEP_WI567  PGM                                    
           WI567       PGM         0000000462                 
           QTEVIREF    QSYS                            046B
    Habe mittlerweile die Werte 0, 1 und 2 ausgetestet, aber nichts funktioniert...

    Bewege ich mich auf dem Holzweg ?

    Gruß
    Bratmaxxe

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Schau dir nochmal genau die Parameter PgmQueue und Stack an:
    http://publib.boulder.ibm.com/infoce...64%70%6d%22%20

    Bei ILE ist das leider etwas schwieriger, das Ziel zu identifizieren.
    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. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo,

    bei ILE ist zuweilen *PGMBDY statt *CTLBDY commoder

    mfg

    Dieter Bender

    Zitat Zitat von Fuerchau
    Schau dir nochmal genau die Parameter PgmQueue und Stack an:
    http://publib.boulder.ibm.com/infoce...64%70%6d%22%20

    Bei ILE ist das leider etwas schwieriger, das Ziel zu identifizieren.
    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. #6
    Registriert seit
    Dec 2002
    Beiträge
    301
    Versuch mal den hier.

    PHP-Code:

    h DftActGrp
    (*NO)                                                                                                        
     *                                                                                                                      
     * 
    Prozedurenprototyp für Prozedur 'QMHSNDPM'                                                                           
     
    *                                                                                                                      
    dQMHSNDPM         PR                  ExtPgm('QMHSNDPM')                                                                
    d                                7A   Const                                --> Message identifier                       
    d                               20A   
    Const                                --> Qualified message file name              
    d                            32767A   
    Const Options(*VarSize)              --> Message data                             
    d                               10I 0 
    Const                                --> Length of message data                   
    d                               10A   
    Const                                --> Message type                             
    d                              256A   
    Const                                --> Call stack entry                         
    d                               10I 0 
    Const                                --> Call stack counter                       
    d                                4A                                        
    <-- Message key                              
    d                            32767A   Options
    (*VarSize)                    <-> Error code                               
    d                               10I 0 
    Const Options(*NoPass)               --> Length of call stack entry               
    d                               20A   
    Const Options(*NoPass)               --> Call stack entry qualification           
    d                               10I 0 
    Const Options(*NoPass)               --> Display program messages SWT             
    d                               10A   
    Const Options(*NoPass)               --> Call stack entry data type               
    d                               10I 0 
    Const Options(*NoPass)               --> Coded character set identifier           
     
    *                                                                                                                      
     * 
    Datenstruktur für Format 'ERRC0100' für Fehlercode                                                                   
     
    *                                                                                                                      
    dERRC0100         DS                                                                                                    
    d ERRCBytePrv                   10I 0 Inz
    (272)                             --> Bytes provided                           
    d ERRCByteAvl                   10I 0                                      
    <-- Bytes available                          
    d ERRCExcId                      7A                                        
    <-- Exeption-Id.                             
    d ERRCRsrvd                      1A                                        <-- Reserved                                 
    d ERRCExcDta                   256A                                        
    <-- Exeption data                            
     
    *                                                                                                                      
     * 
    Sonstige Felddeklarationen                                                                                           
     
    *                                                                                                                      
    dITMsgKey         S              4A                                        Nachrichtenschlüssel                         
     
    *                                                                                                                      
     * 
    Nachricht in die Programmnachrichtenwarteschlange senden                                                             
     
    *                                                                                                                      
    c                   Reset                   ERRC0100                                                                    
    c                   CallP     QMHSNDPM
    ('CPF9897' :                         --> Message identifier                       
    c                                      
    'QCPFMSG   *LIBL' :                 --> Qualified message file name              
    c                                      
    'Hello World' :                     --> Message data                             
    c                                      11 
    :                                --> Length of message data                   
    c                                      
    '*INFO' :                           --> Message type                             
    c                                      
    '*' :                               --> Call stack entry                         
    c                                      2 
    :                                 --> Call stack counter                       
    c                                      ITMsgKey 
    :                          <-- Message key                              
    c                                      ERRC0100 
    :                          <-> Error code                               
    c                                      1 
    :                                 --> Length of call stack entry               
    c                                      
    '*NONE     *NONE' :                 --> Call stack entry qualification           
    c                                      0
    )                                                                               
     *                                                                                                                      
     * 
    Programmende                                                                                                         
     
    *                                                                                                                      
    c                   Eval      *INLR = *On 
    Frank Hildebrandt

  7. #7
    Registriert seit
    Jan 2006
    Beiträge
    111
    vielen Dank für Eure Hilfe,

    - leider bringt *PGMBDY nichts

    - auch mit der Prozedur von Frank gab's kein Erfolg...



    - muss man vielleicht was in der Aktivierungsgruppe einstellen (ACTGROUP *NEW ...) ?

    ....

    anbei die komplette Source:

    Code:
     
         H DECEDIT('0,') DATEDIT(*DMY.)
         H DFTACTGRP(*NO) OPTION(*NODEBUGIO)
         H* ***************************************************************
          *
          //-----------------------------------
          // Prototypenbeschreibung für Module
          // und Serviceprogramme einbinden
          //-----------------------------------
         D/COPY QSYSINC/QRPGLESRC,QUSROBJD
          *
          //-----------------------------------------
          // Prozeduren für Exterene Programmaufrufe
          //-----------------------------------------
         D USROBJD         PR                  EXTPGM('QUSROBJD')
         D  R_RTN                       527A
         D  R_LEN                         4B 0
         D  R_FMT                         8A
         D  R_OBJ                        20A
         D  R_OBJT                       10A
          *
          //-----------------------------------------
          // übersicht interne Prozeduren/Funktionen
          //-----------------------------------------
         D GET_SIZE        PR
         D  V_OBJ                        10A   VALUE
         D  V_LIBL                       10A   VALUE
         D  V_SIZE                        9S 0 OPTIONS(*NOPASS)
         D  V_OK                           N   OPTIONS(*NOPASS)
          *
          * Prozedurenprototyp für Prozedur 'QMHSNDPM'
          *
         dQMHSNDPM         PR                  ExtPgm('QMHSNDPM')
         d                                7A   Const
         d                               20A   Const
         d                            32767A   Const Options(*VarSize)
         d                               10I 0 Const
         d                               10A   Const
         d                              256A   Const
         d                               10I 0 Const
         d                                4A
         d                            32767A   Options(*VarSize)
         d                               10I 0 Const Options(*NoPass)
         d                               20A   Const Options(*NoPass)
         d                               10I 0 Const Options(*NoPass)
         d                               10A   Const Options(*NoPass)
         d                               10I 0 Const Options(*NoPass)
          *
          * Datenstruktur für Format 'ERRC0100' für Fehlercode
          *
         dERRC0100         DS
         d ERRCBytePrv                   10I 0 Inz(272)
         d ERRCByteAvl                   10I 0
         d ERRCExcId                      7A
         d ERRCRsrvd                      1A
         d ERRCExcDta                   256A
          *
          //------------------------------------------
          // Variablendeklaration
          //------------------------------------------
          *
         D OK              S               N   Inz(*Off)
         d ITMsgKey        S              4A
         D P_MsgData       S          32767A
         D P_DataLength    S             10I 0
         D SIZE            S              9S 0
          *
         ‚*-------------------------------------------------------------------
         ‚* PARAMETER
         ‚*-------------------------------------------------------------------
         C     *ENTRY        PLIST
         C                   PARM                    PAFILE           10
         C                   PARM                    PALIBL           10
          *
         C*‚********************************************************************
         C*š*                       MAIN-PROGRAM                               *
         C*‚********************************************************************
          *
          *                  // Größe der Datei ermitteln
         C                   CALLP(E)  GET_SIZE(PAFILE:PALIBL:SIZE:OK)
          *
         C                   EXSR      SND_MSG
          *
          *š                 // Programmende einleiten
         C                   MOVE      *ON           *INLR
         C*
          *=====================================================================
          *= SND_MSG - Nachricht in die Messagesubfile schreiben
          *=====================================================================
         C     SND_MSG       BEGSR
          *
          *                  // Vorhergehende Verarbeitung ok ?
         C                   IF        OK
         C                   EVAL      P_MsgData = 'Datei: ' + %TRIM(PAFILE) +
         C                             ' - Größe: ' +
         C                             %TRIM(%EDITC(SIZE:'K')) + ' Byte'
         C                   ELSE
         C                   EVAL      P_MsgData = 'Datei wurde nicht gefunden...'
         C                   ENDIF
          *
         C                   EVAL      P_DataLength = %SIZE(P_MsgData)
          *
          *                  //Nachricht in die Messagesubfile senden
         c                   Reset                   ERRC0100
         c                   CallP     QMHSNDPM('CPF9897' :
         c                                      'QCPFMSG   *LIBL' :
         c                                       P_MsgData :
         c                                       P_DataLength :
         c                                      '*INFO' :
         c                                      '*' :
         c                                      2 :
         c                                      ITMsgKey :
         c                                      ERRC0100 :
         c                                      1 :
         c                                      '*NONE     *NONE' :
         c                                      0)
          *
         C                   ENDSR
          *
          //--------------------------------------------------------------------
          // Funktion     GET_SIZE : Dateigröße ermitteln
          //--------------------------------------------------------------------
         P GET_SIZE        B
         D GET_SIZE        PI
         D  V_OBJ                        10A   VALUE
         D  V_LIBL                       10A   VALUE
         D  V_SIZE                        9S 0 OPTIONS(*NOPASS)
         D  V_OK                           N   OPTIONS(*NOPASS)
          //------------------
          // Lokale Variablen
          //------------------
         D  L_LEN          S              4B 0 INZ
         D  L_FMT          S              8A   INZ
         D  L_OBJ          S             20A   INZ
         D  L_OBJT         S             10A   INZ
         D  L_TEST         S            527A   INZ
          //--------------------------------------------------------------------
         C                   CLEAR                   QUSD0400
          *
         C                   IF         V_LIBL = *BLANKS
         C                   EVAL       L_OBJ  = V_OBJ + '*LIBL'
         C                   ELSE
         C                   EVAL       L_OBJ  = V_OBJ + '' + %TRIM(V_LIBL)
         C                   ENDIF
          *
         C                   EVAL       L_OBJT = '*FILE'
         C                   EVAL       L_LEN  = %SIZE(QUSD0400)
         C                   EVAL       L_FMT  = 'OBJD0400'
         C                   CALLP(E)   USROBJD(L_TEST:L_LEN:L_FMT:L_OBJ:L_OBJT)
         C                   EVAL       QUSD0400 = L_TEST
         C                   IF         NOT %ERROR()
         C                   EVAL       V_SIZE  = QUSOBJS00
         C                   EVAL       V_OK = *ON
         C                   ELSE
         C                   EVAL       V_OK = *OFF
         C                   ENDIF
          *
         C                   RETURN
          *
          //--------------------------------------------------------------------
         P GET_SIZE        E
    Gruß
    Bratmaxxe

  8. #8
    Registriert seit
    Dec 2002
    Beiträge
    301
    Ich gehe jetzt mal von folgendem Fall bei Dir aus. Der Befehl ruft ein ILE-CL auf. Das ILE-CL ruft dann das ILE-RPG auf. Die Nachricht soll dann in der Nachrichtenzeile angezeigt werden, von wo aus der Befehl aufgerufen wird. Dann musst Du den Parameter 'Call stack counter' auf 4 setzen. Wenn der Wert auf 0 steht, dann wird die Nachricht in die Nachrichtenwarteschlange des ILE-RPG gesendet. Wenn der Wert auf 1 steht, dann wird die Nachricht in die Nachrichtenwarteschlange der Program-Entry-Prozedure des ILE-RPG gesendet. Wenn der Wert auf 2 steht, dann wird die Nachricht in die Nachrichtenwarteschlange des ILE-CL gesendet. Wenn der Wert auf 3 steht, dann wird die Nachricht in die Nachrichtenwarteschlange der Program-Entry-Prozedure des ILE-CL gesendet. Wenn der Wert auf 4 steht, dann wird die Nachricht in die Nachrichtenwarteschlange des Programms gesendet, welches den Befehl abgesetzt hat.
    Frank Hildebrandt

  9. #9
    Registriert seit
    Jan 2006
    Beiträge
    111
    Da lag der Hund begraben *lach*

    Wert 4 für StackEntry....

    Lieben Dank nochmal Frank !!!

    Gruß
    Bratmaxxe

    Zitat Zitat von Frank Hildebrandt
    Ich gehe jetzt mal von folgendem Fall bei Dir aus. Der Befehl ruft ein ILE-CL auf. Das ILE-CL ruft dann das ILE-RPG auf. Die Nachricht soll dann in der Nachrichtenzeile angezeigt werden, von wo aus der Befehl aufgerufen wird. Dann musst Du den Parameter 'Call stack counter' auf 4 setzen. Wenn der Wert auf 0 steht, dann wird die Nachricht in die Nachrichtenwarteschlange des ILE-RPG gesendet. Wenn der Wert auf 1 steht, dann wird die Nachricht in die Nachrichtenwarteschlange der Program-Entry-Prozedure des ILE-RPG gesendet. Wenn der Wert auf 2 steht, dann wird die Nachricht in die Nachrichtenwarteschlange des ILE-CL gesendet. Wenn der Wert auf 3 steht, dann wird die Nachricht in die Nachrichtenwarteschlange der Program-Entry-Prozedure des ILE-CL gesendet. Wenn der Wert auf 4 steht, dann wird die Nachricht in die Nachrichtenwarteschlange des Programms gesendet, welches den Befehl abgesetzt hat.

  10. #10
    Registriert seit
    Sep 2006
    Beiträge
    162
    @bratmaxxe
    Warum so "umständlich" als RPGLE und nicht als CLP ?
    Also RTVOBJD und anschließend SNDPGMMSG ??

    Gruß
    DVE

Similar Threads

  1. Antworten: 3
    Letzter Beitrag: 25-01-07, 09:29
  2. Aktive User ermitteln + Anmeldezeit anzeigen
    By QSECOFR-1 in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 03-08-06, 18:06
  3. Teildatei mit SQL anzeigen
    By Rico in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 06-07-06, 16:25
  4. Eingabefelder im Command reverse anzeigen
    By becama in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 12-05-06, 19:46
  5. SQL Select mit SUM aus einer DB
    By JonnyRico in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 30-03-06, 12:33

Berechtigungen

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