[NEWSboard IBMi Forum]

Thema: CLRDTAQ

Hybrid View

  1. #1
    Registriert seit
    Oct 2001
    Beiträge
    68
    Erstmal danke an die reichlichen Anworter!!!

    Das in dem Programm ein RCVDTAQ steht hat folgenden Hintergrund: Dieses augegeliederte "Teil"-Programm ist ein Teil zum testen. Das eigentliche enthält einen SNDDTAQ und einen RCVDTAQ und steuert die Kommunikation zwischen einem Client und unser iSeries. Alle paar Tage kam es nun vor das sich der Client aufgehängt hat. Das mit dem SND und RCV funktioniert also schon länger ohne Probleme.
    Ein Problem haben wir festgestellt könnte sein, wenn der Client wieder neu reingeht und einen RCV macht und dann unter Umständen "Altlasten" liest und sich dann dementsprechend seltsam verhält. Um dies zu verhindern wollten wir mit CLR alle "Altlasten" mit Jobnummer und User vorm RCV löschen.

    Ich hab mit Dtaq noch nicht soviel gemacht. Vieles wird mir durch lesen klarer.
    Was ich aber nicht "raffe" ist - das mit dem Error.
    Wenn ich den CERROR aus dem CALLP rauslasse, bekomme ich das Programm umgewandelt - aber beim Aufruf einen Fehler.

    Lass ich ihn so drin, krieg ich das Teil nicht umgewandelt.

    Wie muss ich also die Definition richtig machen in den D-Bestimmungen?

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.945
    1. Der Error Code ist in der Required Paramter Group 2, d.h. entweder alle oder keiner der Parameter in Parameter Group 2 muss übergeben werden.
    2. Bei dem Parameter handelt es sich um einen Ein-/Ausgabe-Parameter und Du hast ihn als Input Only (Schlüssel-Wort Const) definiert.


    Die Error-Datenstruktur (Format ERRC0100 sieht so aus)
    Code:
    D RefDSAPIError1  DS                  Qualified                    
    D   ByteProv                    10I 0 inz(%size(RefDSAPIError1))   
    D   ByteAvail                   10I 0                              
    D   MsgId                        7A           
    D   Reserved                     1                                 
    D   ExceptData               32767
    Der Parameter Error Code kann dann so aussehen:
    Code:
    D  ParErrDS                           LikeDS(RefDSAPIError1)               Error Data Structure     
    D                                     Options(*NoPass)
    Eine entsprechende Variable wird wie folgt definiert:
    Code:
    D ParErrDS1       DS                  LikeDS(RefDSAPIError1) inz(*LikeDS)
    Birgitta
    Birgitta Hauser

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

  3. #3
    Registriert seit
    Mar 2012
    Beiträge
    71
    Hi,

    Versuch mal den Error-Code so zu definieren

    DCL VAR(&CERROR) TYPE(*CHAR) LEN(16)

  4. #4
    Registriert seit
    Oct 2001
    Beiträge
    68
    Hallo,

    sorry, wenn ich nochmal wegen dem CLRDTAQ nerve. Aber ich bekomme es einfach nicht "gebacken".

    Wo liegt mein Fehler liegt? Wie muss ich es richtig schreiben?
    (Umwandlung schlägt fehl mit flg. Fehlermeldung:
    RNF5407 20 1 Mehr Parameter im Prototypaufruf übergeben als zulässig.




    Code:
         D CLRDTAQ         PR                  EXTPGM('QCLRDTAQ')
         D  DATAQUEUENAME                10A   CONST
         D  DATAQUEUELIB                 10A   CONST
         D  KEYORDER                      2A   CONST OPTIONS(*NOPASS)
         D  KEYLENGTH                     3P 0 CONST OPTIONS(*NOPASS)
         D  KEYDATA                   32767A   CONST OPTIONS(*NOPASS)
         D  ParErrDS1      DS                  LikeDS(RefDSAPIErr) inz(*LikeDS)
         D
         D* ParErrDS1                          LikeDS(RefDSAPIErr) Options(*NoPass)
         D
         D RefDSAPIErr     DS                  Qualified
         D   ByteProv                    10I 0 inz(%size(RefDSAPIErr))
         D   ByteAvail                   10I 0
         D   MsgId                        7A
         D   Reserved                     1
         D   ExceptData               32767

    Code:
         C     SR999         BEGSR
         C
         C                   EVAL      KEY = E_JOBNR + E_JOBUSR
         C                   CALLP     CLRDTAQ('DYQ01' : '*LIBL' : 'EQ' : 17 :
         C                                      KEY : PARERRDS1)
         C
         C                   TIME                    R120T2           12 0
         C
         C                   ENDSR
    Danke!!!

    Mit freundlichen Grüßen
    Ralph

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.808
    Die Definition "ParErrDS1 DS" gehört nicht mehr zur PR-Deklaration sondern ist eine eigene DS.
    Du musst diese ohne "DS" wie KEYDATA definieren.
    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
    Oct 2001
    Beiträge
    68
    Ich danke für den Tipp!! Jetzt tut das Teil endlich was es soll - LÖSCHEN -
    Danke nochmal an alle, für ihre Mühen etwas dazu zu schreiben!

Berechtigungen

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