-
CLRDTAQ
Hallo,
ich habe zwei Fragen an Euch:
1. Wenn ich ein CLRDTAQ aus führe und einzelne Einträge löschen will, wie muss ich da vorgehen. Muss der CLR in einer Schleife so oft ausgeführt werden, bis zum Ende. Wie wird das Ende dann festgestellt, das keine passenden Einträge mehr vorhanden sind?
2. Ich habe das mal für mich in einem kleinen Test-Programm vorbereitet. Leider bekomme ich bei der Umwandlung immer diese beiden Fehler.
*RNF5410 30 1 Der Prototyp für den Aufruf ist nicht definiert.
*RNF7030 30 1 Der Name oder die Bezugszahl/der Anzeiger ist nicht
definiert.
Ich denke es hängt an dem Parameter CERROR (Error wurde auch bei RCVDTaq schon mal definiert)
SOURCECODE:
D RCVDTAQ PR EXTPGM('QRCVDTAQ')
D DATAQUEUENAME 10A CONST
D DATAQUEUELIB 10A CONST
D DATALENGTH 5P 0
D DABABUFFER 32767A OPTIONS(*VARSIZE)
D WAITTIME 5P 0 CONST
D KEYORDER 2A CONST OPTIONS(*NOPASS)
D KEYLENGTH 3P 0 CONST OPTIONS(*NOPASS)
D KEYBUFFER 256A OPTIONS(*NOPASS : *VARSIZE)
D SNDLENGTH 3P 0 CONST OPTIONS(*NOPASS)
D SNDBUFFER 44A OPTIONS(*NOPASS)
D REMOVEMSG 10A CONST OPTIONS(*NOPASS : *OMIT)
D RCVSIZE 5P 0 CONST OPTIONS(*NOPASS : *OMIT)
D ERROR 32767A OPTIONS(*NOPASS : *VARSIZE)
D
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 CERROR 32767A CONST OPTIONS(*NOPASS : *VARSIZE)
C EVAL KEY = E_JOBNR + E_JOBUSR
C CALLP CLRDTAQ('DYQ01' : '*LIBL' : 'EQ' : 17: KEY : CERROR)
Danke für Euere Hilfe!!!!
-
... aus meiner Erfahrung: bis einschl. V4R5 kam es hin und wieder zu systemseitigen Hustenanfällen. Meine Clears bestehen deshalb je nach Dienst aus DLTDTAQ (Ende des fütternden Subsystems, z.B. QINTER) und CRTDTAQ mit MONMSG (Start des Subsystems).
-
zum CLRDTAQ - letzter Eintrag:
man kann den 5. Parameter WAIT am QRCVDTAQ nutzen, um den letzten Eintrag zu erkennen (-1 = warte endlos, nn = warte diese Zeit, wenn bis dahin nichts neues gekommen ist...)
-
zum Schluss noch 'ne Gegenfrage:
Ein QRCVDTAQ bedeutet doch, dass die Queue bereits um den Eintrag erleichtert ist. Was soll denn dann noch gecleart werden. Auf welcher Leitung stehe ich?
-
 Zitat von sirdidi
Ich denke es hängt an dem Parameter CERROR (Error wurde auch bei RCVDTaq schon mal definiert
Daran scheint's zu liegen: Hast du CERROR (das aus dem CALLP) auch als eigenständiges Feld definiert?
-
Ein QCLRDTAQ-Aufruf kann nicht zum Löschen einzelner Einträge verwendet werden, da entweder die gesamte DataQueue oder bei einer geschlüsselten Dataqueue alle Einträge, die dem angegebenen Schlüssel entsprechen gecleart wird.
Hier die API-Beschreibung:
Clear Data Queue (QCLRDTAQ) API
Normalerweise werden die Einträge beim Lesen der DataQueue aus dieser entfernt, es sei den der 11. Parameter (Remove Message) wird mit *NO übergeben.
Das Schlüssel-Wort CONST darf bei Ein/Ausgabe-Parameter nicht gesetzt werden.
Hier die API-Beschreibung zu QRCVDTAQ:
Receive Data Queue (QRCVDTAQ) API
Der Error-Code wird als Datenstruktur ausgegeben. Die Beschreibung der Datenstrukturen ist hier:
Error Code Parameter
und dann Error Code Paramter Format.
Birgitta
-
11. Parameter (Remove Message) mit *NO
Danke! Hatte ich nicht auf dem Schirm.
-
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?
-
- 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.
- 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
-
Hi,
Versuch mal den Error-Code so zu definieren
DCL VAR(&CERROR) TYPE(*CHAR) LEN(16)
-
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
-
Die Definition "ParErrDS1 DS" gehört nicht mehr zur PR-Deklaration sondern ist eine eigene DS.
Du musst diese ohne "DS" wie KEYDATA definieren.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks