-
Was hindert dich daran?
Du solltest die Parameter als VARYING definieren, so dass du hier die Länge abfragen kannst.
D MyMsgBox PR
D Text 32765 varying const
D Title 132 varying const
Mehr als 32K Text liest sowieso niemand .
Was den Titel angeht, so kannst du dir in der QTEMP dynamisch eine MSGF anlegen und per
ADD/CHGMSGD (oder dem API dazu) einer festen Nachricht immer den Titel zuordnen.
-
Ich hätte das schon versucht,
Code:
D DSPTXTMSG PR
D InString 65535A
D InTitle 27 options(*nopass)
D*
D DSPTXTMSG PI
D InString 65535A
D InTitle 27 options(*nopass)
D*
D MyMsgBox PR extpgm('QUILNGTX')
D Text 32765 varying const
D Title 132 varying const
DMsgBox pr extpgm('QUILNGTX')
D LngTxt 65535A
D TextLen 10i 0 const
D TxtTitle 7a
D TxtMsgF 20a
D ErrCode 16a
MsgBox(Text: %len(Text): Title: MessageF: Error);
MyMsgBox(Text:Title);
aber bekomme die Fehlermeldung:
Code:
Nachrichten-ID . . . . : RNQ0202 Bewertung . . . . . . : 99
Nachrichtenart . . . . : Anfrage
Sendedatum . . . . . . : 14.06.12 Sendezeit . . . . . . : 12:04:48
Nachricht . . . : Der Aufruf an *LIBL/QUILNGTX wurde fehlerhaft beendet (C G
D F).
Ursache . . . . : RPG-Prozedur DSPTXTMSG in Programm H_TESTOBJ/DSPTXTMSG hat
bei Anweisung 007601 Programm oder Prozedur *LIBL/QUILNGTX aufgerufen; der
Aufruf wurde fehlerhaft beendet. Ist der Name *N, handelte es sich bei dem
Aufruf um einen Bindeaufruf nach Prozedurzeiger.
Fehlerbeseitigung: Das Jobprotokoll auf weitere Informationen zur
Fehlerursache prüfen und den für die Programmpflege verantwortlichen
Benutzer benachrichtigen.
Auswahlmöglichkeiten . . . . . . . . . . . . . . . . . . . . . . . . . :
D -- Einen RPG-formatierten Speicherauszug erstellen.
S -- Einen Systemspeicherauszug erstellen.
Was mache ich beim Aufruf Falsch?
Ist das API nur für MSGF oder ist es anderes auch nutzbar?
Dank im Voraus
-
ErrCode ist eine Struktur, die korrekt initialisiert werden muss:
d ErrCode ds qualified inz
d BytesAvalable 10I 0
d BytesReturn 10I 0
d MsgId 7
d Reserve 1
d MsgDta 512 <= kann beliebig sein
Für die Prozedurdefinition:
D pErrCode likeds(errCode)
c/free
ErrCode.BytesAvail = %size(ErrCode);
errCode.BytesReturn = *Zero;
callpr ... (...:ErrCode);
if (errCode.bytesReturn > *Zero);
// Fehler in ErrCode.MsgId
endif;
-
Ich hätte das so umgesetzt wie oben beschrieben, aber es funktioniert leider nicht.
Was mache ich falsch?
Code:
/TITLE
H dftactgrp(*no) actgrp('QILE')
H option(*srcstmt:*nodebugio)
H DECEDIT('0,') DATEDIT(*YMD)
H datfmt(*iso)
D* externe prozedur einer Messagebox
D DSPTXTMSG PR
D InString 65535A
D InTitle 132 options(*nopass)
D*
D DSPTXTMSG PI
D InString 65535A
D InTitle 132 options(*nopass)
D*
D MSGBOX PR EXTPGM('QUILNGTX')
D ParmTEXT 65535 varying const
D ParmTitle 132 varying const
D pErrCode LIKEDS(ErrCode)
D
D ErrCode DS QUALIFIED
D BytesAvalable 10I 0 INZ(*ZEROS)
D BytesReturn 10I 0 INZ(*ZEROS)
D MSGID 7 INZ(*BLANKS)
D RESERVE 1 INZ(X'00')
D EXCEPTDATA 65500 INZ(*BLANKS)
D
D MSGTEXT S 65535 VARYING
D MSGTITLE s 132 varying inz(*blank)
/FREE
ErrCode.BytesAvalable = %size(ErrCode);
ErrCode.BytesReturn = *ZEROS;
IF %parms = 1;
MSGTEXT = inString;
ENDIF;
IF %parms = 2;
MSGTEXT = inString;
MSGTITLE = %trimr(inTitle);
ENDIF;
MSGTEXT = '+
D -- Einen RPG-formatierten Speicherauszug erstellen. +
S -- Einen Systemspeicherauszug erstellen.';
callp MSGBOX(MSGTEXT: MSGTITLE: ErrCode);
Return;
/END-FREE
-
Du musst das API schon mit ALLEN REQUIRED! Parametern aufrufen und kannst nicht einfach irgendwo was weglassen!
Das war/ist meine Prozedur, die bereits seit ein paar Jahrhunderten problemlos läuft:
1. Parameter und Referenz-Datenstrukturen:
Code:
D DspWdwTxt PR ExtPgm('QUILNGTX')
D ParmText 65535 const options(*VarSize)
D ParmLenText 10I 0 const
D ParmMsgId 7A const
D ParmQualMsgFile...
D 20A const
D ParmError1 likeDS(DS_Error1)
* Error Datenstruktur
D DS_Error1 DS Qualified
D ByteProv 10I 0 inz(%Size(DS_Error1))
D ByteAvail 10I 0 inz(*Zeros)
D MsgId 7 inz(*Blanks)
D Reserved 1 inz(x'00')
D ExceptData 256 inz(*Blanks)
2. Aufruf aus RPG
Code:
H DEBUG
*-----------------------------------------------------------------*
D/COPY QPROLESRC,DSPWDWTXT
D BspText S 65535 varying
*-----------------------------------------------------------------*
/Free
BspText = 'Dies soll nur ein kurzer Text sein, um das +
API QUILNGTX auszuprobieren! +
Das UIM API QUILNGTX (Display Long Text) stellt eine +
einfache Möglichkeit dar, einen beliebigen Text +
in einem Fenster anzuzeigen. +
Das Erstellen einer Display-File +
ist dazu nicht erforderlich.';
DspWdwTxt(BspText: %Len(BspText): *Blanks: *Blanks: DS_Error1);
*InLR = *On;
/End-Free
3. Wrapper Procedure:
3.1. Prototyp
Code:
D DspWDW PR ExtProc('DSPWDW')
D ParmText 65535 const varying
3.2. Wrapper Prozedur
Code:
H DEBUG NoMain
*-----------------------------------------------------------------*
D/COPY QPROLESRC,DSPWDWTXT
*------------------------------------------------------------------*
P DspWDW B Export
D DspWdW PI
D ParmText 65535 const varying
/Free
DspWdWTxt(ParmText: %Len(ParmText): *Blanks: *Blanks: DS_Error1);
Return;
/End-Free
3.3. Aufruf Wrapper Prozedur
Code:
H DEBUG
*------------------------------------------------------------------*
D/COPY QPROLESRC,DSPWDWTXT
D BspText S 65535 const varying
*-------------------------------------------------------------------*
/Free
BspText = 'Dies soll nur ein kurzer Text sein, um das +
API QUILNGTX auszuprobieren!';
DspWDW(BspText);
DspWDW('Der Text kann auch direkt übergeben werden.');
*INLR = *ON;
/End-Free
Birgitta
-
Danke für die ausführliche Infos.
Eine allerletzte Frage:
Kann ich auch einen Zeilenumbruch einarbeiten?
Mit
D CrLf C const(x'0D25')
hat es leider nicht funktioniert.
-
Versuche es mal mit "/N".
Similar Threads
-
By Koelch400 in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 15-08-02, 09:53
-
By hpw in forum NEWSboard Windows
Antworten: 6
Letzter Beitrag: 12-02-02, 15:27
-
By sirdidi in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 11-01-02, 12:12
-
By Arbi in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 16-10-01, 19:06
-
By Burgy Zapp in forum NEWSboard Server Software
Antworten: 0
Letzter Beitrag: 03-04-01, 19:07
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