[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    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.
    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

  2. #2
    Registriert seit
    Apr 2012
    Beiträge
    360
    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

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    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;
    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

  4. #4
    Registriert seit
    Apr 2012
    Beiträge
    360
    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

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    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
    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

  6. #6
    Registriert seit
    Apr 2012
    Beiträge
    360
    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.

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Versuche es mal mit "/N".
    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

Similar Threads

  1. SDA: Std Drucker im Menü anzeigen lassen?
    By Koelch400 in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 15-08-02, 09:53
  2. Fußzeile in Windowsubfile anzeigen
    By hpw in forum NEWSboard Windows
    Antworten: 6
    Letzter Beitrag: 12-02-02, 15:27
  3. Ftp-Verbindungen anzeigen
    By sirdidi in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 11-01-02, 12:12
  4. Mit C++ AS400 Prozesse anzeigen??
    By Arbi in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 16-10-01, 19:06
  5. Zeichensatz anzeigen
    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
  •