Fil d’Ariane du forum – Vous êtes ici :ForumForums techniques: AS/400Sous-fichier de message dans une …
Vous devez vous identifier pour créer des messages et des sujets.

Sous-fichier de message dans une fenêtre avec un sous-fichier.

Bonjour,

Avez-vous déjà réussi à utiliser une sous-fichier de message dans une fenêtre qui gère déjà un sous-fichier?

C'est la 2me fois que je me retrouve devant cette problématique. Les messages ne s'affichent pas dans la dernière ligne de la fenêtre. Si cela avait été dans une fenêtre avec un simple Record, cela aurait fonctionné.

Ils sont bien visibles dans la joblog.

Le dspf:

A DSPSIZ(*DS4)
A PRINT
A HELP
A HLPPNLGRP('BXL011P' BXL011P)
A HLPTITLE('Aide générale -
A Créer un lien IODA')
A ALTHELP(CA01)
A INDARA
A CF10
A CF12
A R MENUTIT
A ASSUME
A 1 2' '
A R WINDOWEDGE
A WINDOW(4 25 18 79 *NOMSGLIN)
A WDWTITLE((*TEXT 'F1=Aide F10=Valida-
A tion F12=Précédent') (*COLOR BLU) +
A *BOTTOM)
A R SFLLGTCHF SFL
A HNREC 10 0H
A ZSNBATIM 2 O 7 6
A ZSNESCAL 2 O 7 9
A ZSNETAGE 2 O 7 12
A ZSNPOSIT 2 O 7 15
A ZSEMPCR 8 O 7 18
A ZSOOCCUP 28 O 7 27
A ZSTREFCL 20 O 7 56
A OPT 2 B 7 2
A R SCTLLGTCHF SFLCTL(SFLLGTCHF) WINDOW(WINDOWEDGE)
A RTNCSRLOC(&WLICSR &WZOCSR &WPRCSR)
A OVERLAY
A PUTOVR
A N07 ROLLUP(02)
A N04 ERASE(SFLLGTCHF)
A 04 SFLDSP
A 05 SFLDSPCTL
A 06 SFLCLR
A 07 SFLEND
A SFLSIZ(10)
A SFLPAG(9)
A SFLCSRRRN(&WRACSR)
A WRACSR 5S 0H
A WRAN01 4S 0H SFLRCDNBR
A ZPGM 10 O 2 2
A OVRDTA
A 1 34'Ajout d''un lien'
A COLOR(WHT)
A ZJOB 28 O 1 2
A OVRDTA
A WLICSR 10A H
A WZOCSR 10A H
A WPRCSR 4S 0H
A WLIGN 3S 0H
A WCOLN 3S 0H
A ZDATE L O 1 67DATFMT(*EUR)
A ZHEUR T O 2 68TIMFMT(*EUR)
A 5 56'Ref. Logement client'
A COLOR(WHT)
A DSPATR(UL)
A 3 2'Aff.'
A COLOR(WHT)
A ZCODUEXR 8N 0O 3 7
A 3 16'Lgt relève'
A COLOR(WHT)
A ZNBATIM 2 O 3 27
A ZNESCAL 2 O 3 30
A ZNETAGE 2 O 3 33
A ZNPOSIT 2 O 3 36
A 5 2'Opt'
A COLOR(WHT)
A DSPATR(UL)
A 5 6'B.'
A COLOR(WHT)
A DSPATR(UL)
A 5 9'E.'
A COLOR(WHT)
A DSPATR(UL)
A 5 12'E.'
A COLOR(WHT)
A DSPATR(UL)
A 5 18'Emp'
A COLOR(WHT)
A DSPATR(UL)
A 5 27'Occupant'
A COLOR(WHT)
A DSPATR(UL)
A 5 15'P.'
A COLOR(WHT)
A DSPATR(UL)
A ZFNBATIM 2 B 6 6
A ZFNESCAL 2 B 6 9
A ZFNETAGE 2 B 6 12
A ZFNPOSIT 2 B 6 15
A ZFEMPCR 8 B 6 18
A ZFOOCCUP 28 B 6 27
A ZFTREFCL 20 B 6 56
A 4 2'Option :'
A COLOR(BLU)
A 4 11'1=Sélectionner'
A COLOR(BLU)
A 4 26'5=Afficher'
A COLOR(BLU)
A 3 48'Aff. chauffage'
A COLOR(WHT)
A ZCODUEXT 8N 0O 3 63
A 2 33'entre 2 logements'
A COLOR(WHT)
A R WMGSFL SFL
A SFLMSGRCD(16)
A WMGKEY SFLMSGKEY
A WPGMQ SFLPGMQ
A R WMGCTL SFLCTL(WMGSFL)
A SFLSIZ(2)
A SFLPAG(1)
A OVERLAY
A 10 SFLINZ
A SFLDSP
A SFLDSPCTL
A 09 SFLEND(*PLUS)
A WINDOW(WINDOWEDGE)
A WPGMQ SFLPGMQ

Le source du RPG:

**FREE

// Option de compilation et de programme
ctl-opt datedit(*ymd) decedit('0,');
ctl-opt option(*nodebugio:*srcstmt:*nounref) CCSIDCVT(*LIST);
ctl-opt bnddir('SERVICE');

// Déclaration des fichiers
dcl-f Bxl011e Workstn sfile(SFLLGTCHF:WRAN01) Indds(Indicateurs);

// Touches de fonction
/copy qcpysrc,fonction

// inherited variables
// héritage des types
/copy QCPYSRC,INH32766

// External subprocedures prototypes globales
// Prototype des fonctions générales
/Copy Qcpysrc,Utiproc

// Prototype des fonctions générales
/Copy Qcpysrc,Multiappr

Dcl-pr Constitution_requete Char(5000) Extproc('BXL012R');
p_Code_unite_exploitation Like(r_Code_Unite_Exploit);
p_ZFNBATIM like(r_Numero_batiment);
p_ZNESCAL like(r_Numero_escalier);
p_ZFNETAGE like(r_Numero_etage);
p_ZFNPOSIT like(r_Numero_position);
p_ZFEMPCR like(r_Emplacement_lgt_chf);
p_ZFOOCCUP like(r_nom_occupant);
p_ZFTREFCL like(r_Reference_lgt_client);
END-Pr;

Dcl-pr Gestion_message Extpgm('ENVMSG01');
P_TYP Char(1);
P_FIM Char(10);
P_MID Char(7);
P_MDT Char(99);
End-pr;

// Internal subprocedures prototypes globales
// Prototype sous-procédures internes globales
// dcl-pr proc_int varchar(150);
// donnees1 packed(10:0);
// end-pr;

// Global data-structures
// Structures de données globales
dcl-ds Ds_filtre Likerec(SCTLLGTCHF);

// Sauvegarde du contenu des filtres
dcl-ds Ds_memo_filtre Inz;
g_memo_ZFNBATIM like(ZFNBATIM);
g_memo_ZNESCAL like(ZFNESCAL);
g_memo_ZFNETAGE like(ZFNETAGE);
g_memo_ZFNPOSIT like(ZFNPOSIT);
g_memo_ZFEMPCR like(ZFEMPCR);
g_memo_ZFOOCCUP like(ZFOOCCUP);
g_memo_ZFTREFCL like(ZFTREFCL);
end-ds;
// global variables
// variables globales
dcl-s g_Code_unite_exploitation_Base2 like(r_Code_unite_exploit);

// Gestion des messages
Dcl-s P_TYP Char(1);
Dcl-s P_FICM Char(10);
Dcl-s P_MGID Char(7);
Dcl-s P_MGDT Char(99);

// Indicateur de validation OK
Dcl-s g_validation Ind Inz(*Off);

// Program status data structure
// Data Structure d'information programme
/copy qcpysrc,psds

// Constantes globales
Dcl-c c_Non_trouve 100;

// Définition de l'Interface de la procédure
// Paramètres d'appel
// Procedure-Interface definition
// dcl-pi programme;
// paramentre char(5);
// paramsortie packed(9:6);
// END-Pi;

// local functions prototypes
// prototypes fonctions locales
// dcl-pr sous_proc1 ind;
// donnees2 char(150);
// end-pr;

// Indicateurs
// Indicateurs renommés avec Indara et INDDS
dcl-ds Indicateurs;
Pagedown Ind Pos(02);
Sfldsp Ind Pos(04);
Sfldspctl Ind Pos(05);
Sflclr Ind Pos(06);
Sflend Ind Pos(07);
Sflend_Msgf Ind Pos(09);
Sflinz_Msgf Ind Pos(10);
END-DS;

// constants
// constantes
dcl-c c_nom_programme 'BXL011R';
dcl-c Sflpage 9;

// main function
// Procédure principale

Dcl-pi Creation_lien_logement Extproc('BXL011R');
p_Code_unite_exploitation Like(r_Code_unite_exploit);
p_Numero_batiment Like(r_Numero_batiment);
p_Numero_escalier Like(r_Numero_escalier);
p_Numero_etage Like(r_Numero_etage);
p_Numero_position Like(r_Numero_position);
End-pi;
// indicateur de fin de programme
*inlr = *on;
monitor;

// Initialisation du sous-fichier de messages
WPGMQ=c_nom_programme;
WMGKEY='CC01';
Sflend_Msgf = *ON;
Sflinz_Msgf = *ON;

// Initialisation de l'entête
Loadsflt( p_Code_unite_exploitation
:p_Numero_batiment
:p_Numero_escalier
:p_Numero_etage
:p_Numero_position
:g_Code_unite_exploitation_Base2);

// Initialisation de l'écran
Clearsfl(g_Code_unite_exploitation_Base2);

// Chargement initial du sous-fichier
Loadsfl();

Dou Annuler
Or g_validation;
// La date et l'heure sont mises à jour à chaque affichage de l'écran
ZDATE = %Date();
Zheur = %Time();

// On écrit la définition de la fenêtre
Write WINDOWEDGE;
WRITE SCTLLGTCHF;

// Ecriture des messages
WRITE WMGCTL;

// On attend l'appui sur une touche
Read SCTLLGTCHF;

// Effacement des sous-fichiers de messages
P_TYP = '3';
Gestion_message( P_TYP
:P_FICM
:P_MGID
:P_MGDT);
P_TYP = '1';

Select;
When Exit;
Leave;
When Pagedown;
Loadsfl();
When Ds_filtre <> Ds_Memo_filtre;
Ds_Memo_filtre = Ds_Filtre;
Clearsfl(p_Code_unite_exploitation);
Loadsfl();
When Valider;
Readsfl();
Other;
Readsfl();
Clearsfl(p_Code_unite_exploitation);
Loadsfl();
ENDSL;

ENDDO;
on-error;
dump(a);
gest_erreur();
endmon;

Fermeture_curseur();

Return;

// les sous-routines
// traitement de l'écran
// begsr sr1;

// endsr;

// --------------------------------------------------
// Procedure name: Clearsfl
// Purpose: - Efface les sous-fichier pour créer
// une nouvelle liste
// Returns:
// --------------------------------------------------
DCL-PROC Clearsfl ;
Dcl-pi *n;
p_Code_unite_exploitation Like(r_Code_unite_exploit);
END-PI;

Sfldsp = *Off;
Sfldspctl = *Off;
Sflclr = *On;
Write SCTLLGTCHF;
Sflclr= *Off;
WRAN01 = 0;
Creation_curseur_dynamique( p_Code_unite_exploitation
:ZFNBATIM
:ZFNESCAL
:ZFNETAGE
:ZFNPOSIT
:ZFEMPCR
:ZFOOCCUP
:ZFTREFCL);

END-PROC ;

// --------------------------------------------------
// Procedure name: Loadsfl
// Purpose: Charger la prochaine page du sous-fichier
// Returns:
// --------------------------------------------------
DCL-PROC Loadsfl ;

Dcl-s x Packed(2:0);

Sflend = *Off;

For x = 1 to Sflpage;
EXEC SQL
FETCH curseur_lien_lgt_chauffage
INTO :zsnbatim,
:zsnescal,
:zsnetage,
:zsnposit,
:zsempcr,
:zsooccup,
:zstrefcl;

If Sqlcode = c_Non_trouve;
Sflend= *On;
Leave;
ENDIF;

WRAN01+=1;
Opt = *Blanks;
Write SFLLGTCHF;
Endfor;

Sfldsp = (WRAN01 > 0);
Sfldspctl = *On;
return ;
END-PROC ;

// --------------------------------------------------
// Procedure name: readsfl
// Purpose: Gestion des options faites sur les enregistrements ...
// du sous-fichier
// Returns:
// --------------------------------------------------
DCL-PROC readsfl ;

Dcl-s l_Comptage_option_1 Packed(4:0) Inz(0);
Dcl-s l_Anomalie Ind Inz(*Off);

Dou %eof;
Readc SFLLGTCHF;

Select;
When %Eof;
Leave;
When %Trim(Opt) = '1';
l_Comptage_option_1+=1;

If l_Comptage_option_1 > 1;
P_TYP='1';
P_FICM='BAMSGF';
P_MGID='OPT0002';
P_MGDT=*Blank;
Gestion_message( P_TYP
:P_FICM
:P_MGID
:P_MGDT);
Endif;

// Envoie d'un message informant l'utilisateur que l'option 1 doit être valider par F10
If not valider;
l_anomalie=*on;
P_TYP='1';
P_FICM='BAMSGF';
P_MGID='IOD0003';
P_MGDT=*Blank;
Gestion_message( P_TYP
:P_FICM
:P_MGID
:P_MGDT);
Else;
Attachement( Zcoduexr
:Znbatim
:Znescal
:Znetage
:Znposit
:Zcoduext
:Zsnbatim
:Zsnescal
:Zsnetage
:Zsnposit);
Endif;

When %Trim(Opt) = '5';
Afficher_Lgt();
Endsl;

enddo;
return ;
END-PROC ;

// --------------------------------------------------
// Procedure name: Creation_curseur_dynamique
// Purpose: Création du curseur dynamique, sa déclaration et son ouver...
// ture
// Returns:
// --------------------------------------------------
dcl-proc Creation_curseur_dynamique;
Dcl-pi *n;
p_Code_unite_exploitation Like(r_Code_unite_exploit);
p_ZFNBATIM like(ZFNBATIM);
p_ZNESCAL like(ZFNESCAL);
p_ZFNETAGE like(ZFNETAGE);
p_ZFNPOSIT like(ZFNPOSIT);
p_ZFEMPCR like(ZFEMPCR);
p_ZFOOCCUP like(ZFOOCCUP);
p_ZFTREFCL like(ZFTREFCL);
END-PI;
// Your local fields go here
Dcl-s l_requete Char(5000);

// Appel à la procédure de constitution de la requête
l_requete=Constitution_requete( p_Code_unite_exploitation
:p_ZFNBATIM
:p_ZNESCAL
:p_ZFNETAGE
:p_ZFNPOSIT
:p_ZFEMPCR
:p_ZFOOCCUP
:p_ZFTREFCL
);

// Fermeture SQL du curseur dynamique servant à charger le sous-fichier
Fermeture_curseur();

// Préparation de la requête SQL dynamique
EXEC SQL
PREPARE Filtre FROM :L_Requete;

EXEC SQL
DECLARE Curseur_lien_lgt_chauffage DYNAMIC SCROLL CURSOR FOR Filtre;

EXEC SQL
OPEN Curseur_lien_lgt_chauffage;

return;
end-proc;

// --------------------------------------------------
// Procedure name: Fermeture_curseur
// Purpose: Fermeture SQL du curseur dynamique servant à charger le so...
// us-fichier
// Returns:
// --------------------------------------------------
dcl-proc Fermeture_curseur;

// Fermeture du curseur pour le reconstituer en fonction des nouveau filtre
EXEC SQL
CLOSE Curseur_lien_lgt_chauffage;

return;
end-proc;

// --------------------------------------------------
// Procedure name: Attachement
// Purpose: Generated by Extract Procedure Wizard
// Returns:
// --------------------------------------------------
dcl-proc Attachement;
dcl-pi *n;
p_Code_unite_exploitation_releve packed(8) const;
p_Numero_batiment_releve char(2) const;
p_Numero_escalier_releve char(2) const;
p_Numero_etage_releve char(2) const;
p_Numero_position_releve char(2) const;
p_Code_unite_exploitation_thermique packed(8) const;
p_Numero_batiment_thermique char(2) const;
p_Numero_escalier_thermique char(2) const;
p_Numero_etage_thermique char(2) const;
p_Numero_position_thermique char(2) const;
end-pi;

// Variables locales
Dcl-s l_Base_releve Char(1) Inz('R');
Dcl-s l_Base_thermique Char(1) Inz('T');

// Data Structure locale
DCL-DS CaughtMessage LikeDs(Base_CaughtMessage);

// Calculation specifications
Monitor;
Affectation_lien_lgts_Detail( p_Code_unite_exploitation_releve
:p_Numero_batiment_releve
:p_Numero_escalier_releve
:p_Numero_etage_releve
:p_Numero_position_releve
:l_Base_releve
:p_Code_unite_exploitation_thermique
:p_Numero_batiment_thermique
:p_Numero_escalier_thermique
:p_Numero_etage_thermique
:p_Numero_position_thermique
:l_Base_thermique);
g_validation = *On;
On-error;
CaughtMessage = Msg_catch();
P_TYP='1';
P_FICM=CaughtMessage.MsgFileName;
P_MGID=CaughtMessage.MsgId;
P_MGDT=CaughtMessage.Msgdata;
Gestion_message( P_TYP
:P_FICM
:P_MGID
:P_MGDT);
g_validation=*Off;
Endmon;

return;
end-proc;

// --------------------------------------------------
// Procedure name: Afficher_Lgt
// Purpose: Generated by Extract Procedure Wizard
// Returns:
// --------------------------------------------------
dcl-proc Afficher_Lgt;
// Local fields

// Calculation specifications

return;
end-proc;

// --------------------------------------------------
// Procedure name: Loadsflt
// Purpose: Alimentation de l'entête contenu dans le format de contrôl...
// e du sous-fichier
// Returns:
// Parameter: p_Code_unite_exploitation => Numéro d'unité d'exploitati...
// on de RELEVE
// Parameter: p_Numero_batiment => Numéro de bâtiment du logement RELEVE...
// que nous souhaitons lié
// Parameter: p_Numero_escalier => Numéro d'escalier ou entrée du logeme...
// nt RELEVE que nous souhaitons lié
// Parameter: p_Numero_etage => Numéro d'étage du logement RELEVE que no...
// us souhaitons lié
// Parameter: p_Numero_position => Numéro de position du logement RELEVE...
// que nous souhaitons lié
// --------------------------------------------------
dcl-proc Loadsflt;
dcl-pi *N;
p_Code_unite_exploitation LIKE(r_Code_unite_exploit);
p_Numero_batiment LIKE(r_Numero_batiment);
p_Numero_escalier LIKE(r_Numero_escalier);
p_Numero_etage LIKE(r_Numero_etage);
p_Numero_position LIKE(r_Numero_position);
p_Code_unite_exploitation_Base2 LIKE(r_Code_unite_exploit);
end-pi;
// Local fields
Dcl-s l_Code_unite_exploitation_Base2 LIKE(r_Code_unite_exploit);
// Calculation specifications

Exec sql
SELECT a.coduex
INTO :l_code_unite_exploitation_base2
FROM bfbase.bnxuep a
WHERE EXISTS (
SELECT 1
FROM bfbase.bnxuep b
WHERE b.coduex = :p_Code_unite_exploitation
AND a.cidmcu = b.cidmcu
AND b.cbaseu = 'R')
AND a.cbaseu = 'T';

// Alimentation des champs de l'entête
Zpgm = Procedure;
Zjob = %Char(JOB_NUM) + '/' + %Trim(User) + '/' + %Trim(JOB_NAME);
Zcoduexr = p_Code_unite_exploitation;
Zcoduext = l_code_unite_exploitation_base2;
Znbatim = p_Numero_batiment;
Znescal = p_Numero_escalier;
Znetage = p_Numero_etage;
Znposit = p_Numero_position;

p_Code_unite_exploitation_Base2 = l_Code_unite_exploitation_Base2;

return;
end-proc;

Bonjour

Il s'affiche sur la ligne 16 parce que vous mettez SFLMSGRCD(16), en mettant SFLMSGRCD(18) il s'affichera sur la dernière ligne, ou je n'ai pas saisi la question ?

Bonjour,

Désolé pour ce retour tardif, si la fenêtre fait 16 lignes de hauteur, la dernière ligne pour la ligne de message est dessous (18)? Je vais tester pour voir.

 

Attention WINDOW(4 25 18 79 *NOMSGLIN) indique 18 lignes utiles, le cadre ne compte pas :

The number of window-lines within the window. The window-lines can be no more than the available lines for the display size minus 2. This is because the upper and lower window borders each occupy one line.

https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_74/rzakc/rzakcmstzwindow.htm

Ce devait être plutôt un problème de callstack qu'autre chose. Plutôt qu'utiliser un programme CL pour envoyer les messages, j'ai utilisé l'API programme QMHSNDPM.

Fichiers téléversés :