-
ERRSFL + QMHSNDPM + **FREE
Schoenen Nachmittag.
Jetzt braeuchte ich eure Hilfe mal denn ich sehe den Wald vor lauter Baeume nicht mehr.
Ich bin gerade dabei mein ersten Programm in **FREE zu schrieben. Es soll ein Dialogprogramm werden welches die Fehler per QMHSNDPM an das Messagesubfile schicken soll. In meinen vorherigen pseudo-free Programmen hat dies immer wunderbar geklappt.
Daher habe ich die Prozeduren einfach aus den "alten" pseudo-free ile rpg uebernommen bzw ins free uebersetzt. Genau so den CallStackEntry 0 sowie PgmQueue 'MAIN' (wie bei mir halt immer). Ich habs aber auch schon mit '*' statt 'MAIN' probiert. Leider wird im Subfile nichts angezeigt sondern nur im Joblog.
Im Dsplayfile wie gehabt:
Code:
DSPSIZ(24 80 *DS4) PRINT
ALTHELP(CA01) HELP
MSGLOC(24) ERRSFL
R AUFAU7ZS SFL
SFLMSGRCD(24)
MESSAGEKEY SFLMSGKEY
PGMQUEUE SFLPGMQ
R AUFAU7ZC SFLCTL(AUFAU7ZS)
CF01
KEEP
OVERLAY
PUTRETAIN
SFLDSP
SFLDSPCTL
SFLINZ
N88 SFLEND
SFLSIZ(2)
SFLPAG(1)
PGMQUEUE SFLPGMQ
Das Displayfile ist folgendermaßen definiert:
Code:
DCL-F AUFAU7DF WORKSTN INFDS(WSDS) ALIAS USROPN;
Die beiden Felder fuer den Stack sowie PgmQ:
Code:
DCL-C MESSAGEFILE 'XXMSGF *LIBL';
DCL-S PgmQueue CHAR(10) INZ('MAIN');
DCL-S CallStack INT(10) INZ(0);
Der Prozeduraufruf für das API
Code:
DCL-PR API_QMHSNDPM EXTPGM('QMHSNDPM');
MessageID CHAR(7) CONST;
MessageFile CHAR(20) CONST;
MessageData CHAR(128) CONST;
MessageDataLenght INT(10) CONST;
MessageType CHAR(10) CONST;
CallStackEntry CHAR(10) CONST;
CallStackLevel INT(10) CONST;
MessageKey CHAR(4) CONST;
ErrorDS LIKEDS(API_ErrorDS);
END-PR;
Dieses wird eben aus folgender Prozedur aufgerufen:
Code:
DCL-PROC SndPgmMsgPrc;
DCL-PI SndPgmMsgPrc;
pMessageID CHAR(7) CONST;
pMessageFile CHAR(20) CONST;
pMessageData CHAR(128) CONST;
pMessageProgramQueue CHAR(10) CONST;
pMessageCallStack INT(10) CONST;
END-PI;
/INCLUDE GHP3MOD/QRPGLECPY,QMHSNDPM
DCL-S MessageKey CHAR(4) INZ;
//------------------------------------------------------------------------
API_QMHSNDPM ( pMessageID :
pMessageFile :
pMessageData :
%Size(pMessageData) :
'*INFO' :
pMessageProgramQueue :
pMessageCallStack :
MessageKey :
API_ErrorDS );
END-PROC;
Das DSPF wird in einer eigenen Prozedur ausgegeben:
Code:
DCL-PROC LoopFM_A;
Clear AUFAU7A0;
InitFM_A();
DoW ( PictureControl = FM_A );
Write AUFAU7A0;
Write AUFAU7ZC;
ExFmt AUFAU7A0;
ClrMsgPrc(PgmQueue :CallStack);
Select;
When ( WSDS.KeyPressed = KeyF03 );
PictureControl = FM_End;
When ( WSDS.KeyPressed = KeyF04 );
PromptFM_A();
When ( WSDS.KeyPressed = KeyEnter );
If CheckFM_A();
EndIf;
EndSl;
EndDo;
END-PROC;
Und folgendermaßen wird dann die Nachricht in der Prozedur CheckFM_A gesendet:
Code:
SndPgmMsgPrc('F000033' :MESSAGEFILE :Feld :PgmQueue :CallStack);
Lt. Joblog wird die Nachricht brav an die MAIN geschickt (wie bei den vorherigen ebenfalls)
Code:
Von Programm . . . . . . . . . : AUFAU7RG
Von Bibliothek . . . . . . . : TESTLIB
Von Modul . . . . . . . . . : AUFAU7RG
Von Prozedur . . . . . . . . : SNDPGMMSGPRC
Von Anweisung . . . . . . . : 550
An Programm . . . . . . . . . : AUFAU7RG
An Bibliothek . . . . . . . : TESTLIB
An Modul . . . . . . . . . . : AUFAU7RG
An Prozedur . . . . . . . . : MAIN
An Anweisung . . . . . . . . : 248
Wie gesagt, ich habs mittlerweile schon mit MAIN und * sowie CallStackEntry 0 sowie 1 (wo dann die Nachricht an die PEP geschickt wird) probiert. Weiters hab ich das Feld PGMQUEUE geteilt. Einmal im Subfile PGMQNAME mit 'MAIN' und die Nachricht hab ich an '*' geschickt. Gleicher "Erfolg".
Wie oben erwähnt, ich sehe den Wald vor lauter Bäume nicht mehr denn das Prinzip hat bei meinen vorherigen Programme (ohne totally free aber sonst gleichem Aufbau) tadellos funktioniert.
Und natürlich habe ich ein altes DSPF mit dem jetzigen verglichen sowie die Felder im Programm selbst. Vielleicht hat hier jemand eine Idee woran ich hier jetzt soooo gigantisch scheitere :-)
Dankeschön und Lg
-
Du kannst nur Nachrichten senden an Einträge, die zum Zeitpunkt des Sendens aktiv im Callstack sind.
Wenn du mal im Debugger schaust, auf welcher Ebene sich die Prozedur SndPgmMsgPrc zum Zeitpunkt des Sendens befindet, so musst du dann sicherstellen, dass die Prozedur LoopFM_A sich oberhalb deiner SndPgmMsgPrc befindet. Nun musst du nur noch den Stack durchzählen, wobei 0 deine eigene Prozedur ist, 1 die nächste darüber usw. (QMHSNDPM muss nicht mitgezählt werden), Callstackentry muss "*" sein.
Dann sollte es auch funktionieren.
-
Danke für die Info.
Sprich sollte lt. Stack das ganze die Nummer 2 bekommen.
Habs probiert aber leider wird meine Message auch nicht angezeigt.
Lt. Joblog geht die Nachricht brav an die Prozedur LoopFM_A().
Code:
Von Programm . . . . . . . . . : AUFAU7RG
Von Bibliothek . . . . . . . : TSTLIB
Von Modul . . . . . . . . . : AUFAU7RG
Von Prozedur . . . . . . . . : SNDPGMMSGPRC
Von Anweisung . . . . . . . : 541
An Programm . . . . . . . . . : AUFAU7RG
An Bibliothek . . . . . . . : TSTLIB
An Modul . . . . . . . . . . : AUFAU7RG
An Prozedur . . . . . . . . : LOOPFM_A
An Anweisung . . . . . . . . : 271
Grüße
Christian
-
Kommen wir zum 2. Problem:
SFLMSGQ
https://www.ibm.com/support/knowledg...mstdfsfpmq.htm
For Integrated Language Environment® (ILE) programs using the 276-byte parameter value, the format of the field data must be as follows:
- The first 256 bytes contains the ILE call message queue name. The call message queue name is the same as the ILE procedure name. The name must be left-aligned and padded with blanks.
- Bytes 257 through 266 will optionally contain the ILE module name. The name, when specified, must be left-aligned and padded with blanks. If no module name is provided, these bytes must be set to blanks.
- Bytes 267 through 276 will optionally contain the name of the ILE bound program name. The name, when specified, must be left-aligned and padded with blanks. If no bound program name is provided, these bytes must be set to blanks.
-
So, eine Nacht darüber geschlafen und hab den "Leger" gefunden.
Peinlich, peinlich. Ich hatte beim Record wo ich den EXFMT mach das OVERLAY vergessen
Jetzt funktioniert es wieder tadellos über den Stack 0 und PGMQ 'MAIN'
Dankeschön für die Hilfe und schönen Tag!
Lg
Christian
Similar Threads
-
By roko in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 23-01-17, 07:29
-
By Gimli in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 11-03-03, 10:16
-
By DEVJO in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 05-03-03, 07:18
-
By Gimli in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 04-03-03, 09:47
-
By Gimli in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 03-03-03, 10:23
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