Appel d'API AS400 en RPG pour lister les utilisateurs d'un groupe
Citation de GAYE OUSMANE le 7 juin 2012, 10 h 20 minBonjour ,
Ceci est mon premier poste sur Xdocs et qui j'en suis sure ne sera pas le dernier .
je dois écrire un programme en RPG IV pour lister les utilisateurs appartenant a un groupe donné.
j'ai besoin donc de savoir a quelle API faire appel et/ou un exemple de programme pour mieux comprendre.
Mon but final étant de proposer une interface écran pour activer ou désactiver un utilisateur d'un groupe.
Merci de votre aide :rolleyes:
Bonjour ,
Ceci est mon premier poste sur Xdocs et qui j'en suis sure ne sera pas le dernier .
je dois écrire un programme en RPG IV pour lister les utilisateurs appartenant a un groupe donné.
j'ai besoin donc de savoir a quelle API faire appel et/ou un exemple de programme pour mieux comprendre.
Mon but final étant de proposer une interface écran pour activer ou désactiver un utilisateur d'un groupe.
Merci de votre aide :rolleyes:
Citation de GAPIII le 7 juin 2012, 12 h 48 minDans Opérations Navigator, on doit pouvoir faire ça, non ?
Sinon, l'API QSYRAUTU devrait te convenir.
Dans Opérations Navigator, on doit pouvoir faire ça, non ?
Sinon, l'API QSYRAUTU devrait te convenir.
Citation de GAYE OUSMANE le 7 juin 2012, 13 h 17 minCitation de GAPIIIDans Opérations Navigator, on doit pouvoir faire ça, non ?
Sinon, l'API QSYRAUTU devrait te convenir.
Sous Navigator je n'est pas la possibilité de desactiver provisoirement un utilisateur.
Ce qui m'a été demander de faire c'est de concevoir une interface
pour un utilisateur n'ayant pas beaucoup de droit dans le système puis à l'aide d'un écran désactivé ou activer provisoirement le profile de l'utilisateur d'un groupe précis.
Un exemple de l'utilisation de l'API si possible
merci de m'aider
Citation de GAPIIIDans Opérations Navigator, on doit pouvoir faire ça, non ?
Sinon, l'API QSYRAUTU devrait te convenir.
Sous Navigator je n'est pas la possibilité de desactiver provisoirement un utilisateur.
Ce qui m'a été demander de faire c'est de concevoir une interface
pour un utilisateur n'ayant pas beaucoup de droit dans le système puis à l'aide d'un écran désactivé ou activer provisoirement le profile de l'utilisateur d'un groupe précis.
Un exemple de l'utilisation de l'API si possible
merci de m'aider
Citation de k2r400 le 7 juin 2012, 22 h 29 minProgramme de Carsten Flensburg récupéré ici : CLIQUER ICI
Dans cet exemple, il récupère les membres du groupe NOVAGRPIT.
Voici la doc de l'API : CLIQUER ICI
**
** Program . . : EXA512
** Description : Retrieve authorized users (QSYRAUTU) API example
** Author . . : Carsten Flensburg
**
**
** Compile and setup instructions:
** CrtRpgMod Module( EXA512 )
** DbgView( *LIST )
**
** CrtPgm Pgm( EXA512 )
** Module( EXA512 )
** ActGrp( *NEW )
**
**
**-- Control specification: --------------------------------------------**
H Option( *SrcStmt )
**-- System information:
D PgmSts SDs Qualified
D PgmNam *Proc
**-- API error data structure:
D ERRC0100 Ds Qualified
D BytPrv 10i 0 Inz( %Size( ERRC0100 ))
D BytAvl 10i 0
D MsgId 7a
D 1a
D MsgDta 128a
**-- Global variables:
D Idx s 10i 0
D BytAlc s 10i 0
D RcvVar s 65535a Based( pRcvVar )
**-- Global constants:
D PRF_NAM_GT c '0'
D PRF_NAM_GE c '1'
**-- Retrieve API parameters:D RtvApi Ds Qualified Inz
D GrpNam 10a
D SltCri 10a
**-- List information:
D RtnRcdFbi Ds Qualified Inz
D BytRtn 10i 0
D BytAvl 10i 0
D NbrPrf 10i 0
D EntLen 10i 0
**-- User information:
D AUTU0100 Ds Qualified Based( pAUTU0100 )
D UsrPrf 10a
D UsrGrpI 1a
D GrpMbrI 1a
**-- Retrieve authorized users:
D RtvAutUsr Pr ExtPgm( 'QSYRAUTU' )
D RcvVar 65535a Options( *VarSize )
D RcvVarLen 10i 0 Const
D RtnRcdFbi 16a
D FmtNam 8a Const
D SltCri 10a Const
D StrPrf 10a Const
D StrPrfOpt 1a Const
D GrpNam 10a Const
D Error 1024a Options( *VarSize )
D EndPrf 10a Const Options( *NoPass )**-- Entry parameters:
D EXA512 Pr
**
D EXA512 Pi/Free
RtvApi.SltCri = '*MEMBER';
// RtvApi.GrpNam = 'Insert Group Profile'
RtvApi.GrpNam = 'NOVAGRPIT';BytAlc = 4096;
pRcvVar = %Alloc( BytAlc );DoU RtnRcdFbi.BytAvl BytAlc;
BytAlc = RtnRcdFbi.BytAvl;
pRcvVar = %ReAlloc( pRcvVar: BytAlc );
EndIf;RtvAutUsr( RcvVar
: BytAlc
: RtnRcdFbi
: 'AUTU0100'
: RtvApi.SltCri
: '*FIRST'
: PRF_NAM_GE
: RtvApi.GrpNam
: ERRC0100
);If ERRC0100.BytAvl > *Zero;
Leave;
EndIf;
EndDo;If ERRC0100.BytAvl = *Zero;
ExSr GetPrfInf;
EndIf;*InLr = *On;
Return;BegSr GetPrfInf;
pAUTU0100 = pRcvVar;
For Idx = 1 to RtnRcdFbi.NbrPrf;
// Structure AUTU0100 now contains member user profile information...
If Idx < RtnRcdFbi.NbrPrf;
pAUTU0100 += RtnRcdFbi.EntLen;
EndIf;
EndFor;EndSr;
/End-Free
Ensuite, pour savoir si le profil est *ENABLED ou *DISABLED il suffit d'appeler l'API QSYRUSRIpour chacun des users récupérés.
Le statut (10a) est dans le format USRI0100, zone STATUS position 37.
CLIQUER ICICi-dessous le programme pour récupérer le statut de QPGMR
D GetUsrInf PR ExtPgm('QSYRUSRI')
D RcvVar 53
D RcvVarLen 9b 0
D Format 8 const
D UserPrf 10 const
D Error 1 const
D Receiver s 53 inz(' ')
D VarLength s 9b 0 inz(53)
D Msg s 40/free
//--------------------------------------------------------
// MAIN PROGRAM
//--------------------------------------------------------GetUsrInf(Receiver:VarLength:'USRI0200':'QPGMR':' ');
Statut = %Subst(Receiver:37:10);
Programme de Carsten Flensburg récupéré ici : CLIQUER ICI
Dans cet exemple, il récupère les membres du groupe NOVAGRPIT.
Voici la doc de l'API : CLIQUER ICI
**
** Program . . : EXA512
** Description : Retrieve authorized users (QSYRAUTU) API example
** Author . . : Carsten Flensburg
**
**
** Compile and setup instructions:
** CrtRpgMod Module( EXA512 )
** DbgView( *LIST )
**
** CrtPgm Pgm( EXA512 )
** Module( EXA512 )
** ActGrp( *NEW )
**
**
**-- Control specification: --------------------------------------------**
H Option( *SrcStmt )
**-- System information:
D PgmSts SDs Qualified
D PgmNam *Proc
**-- API error data structure:
D ERRC0100 Ds Qualified
D BytPrv 10i 0 Inz( %Size( ERRC0100 ))
D BytAvl 10i 0
D MsgId 7a
D 1a
D MsgDta 128a
**-- Global variables:
D Idx s 10i 0
D BytAlc s 10i 0
D RcvVar s 65535a Based( pRcvVar )
**-- Global constants:
D PRF_NAM_GT c '0'
D PRF_NAM_GE c '1'
**-- Retrieve API parameters:
D RtvApi Ds Qualified Inz
D GrpNam 10a
D SltCri 10a
**-- List information:
D RtnRcdFbi Ds Qualified Inz
D BytRtn 10i 0
D BytAvl 10i 0
D NbrPrf 10i 0
D EntLen 10i 0
**-- User information:
D AUTU0100 Ds Qualified Based( pAUTU0100 )
D UsrPrf 10a
D UsrGrpI 1a
D GrpMbrI 1a
**-- Retrieve authorized users:
D RtvAutUsr Pr ExtPgm( 'QSYRAUTU' )
D RcvVar 65535a Options( *VarSize )
D RcvVarLen 10i 0 Const
D RtnRcdFbi 16a
D FmtNam 8a Const
D SltCri 10a Const
D StrPrf 10a Const
D StrPrfOpt 1a Const
D GrpNam 10a Const
D Error 1024a Options( *VarSize )
D EndPrf 10a Const Options( *NoPass )
**-- Entry parameters:
D EXA512 Pr
**
D EXA512 Pi
/Free
RtvApi.SltCri = '*MEMBER';
// RtvApi.GrpNam = 'Insert Group Profile'
RtvApi.GrpNam = 'NOVAGRPIT';
BytAlc = 4096;
pRcvVar = %Alloc( BytAlc );
DoU RtnRcdFbi.BytAvl BytAlc;
BytAlc = RtnRcdFbi.BytAvl;
pRcvVar = %ReAlloc( pRcvVar: BytAlc );
EndIf;
RtvAutUsr( RcvVar
: BytAlc
: RtnRcdFbi
: 'AUTU0100'
: RtvApi.SltCri
: '*FIRST'
: PRF_NAM_GE
: RtvApi.GrpNam
: ERRC0100
);
If ERRC0100.BytAvl > *Zero;
Leave;
EndIf;
EndDo;
If ERRC0100.BytAvl = *Zero;
ExSr GetPrfInf;
EndIf;
*InLr = *On;
Return;
BegSr GetPrfInf;
pAUTU0100 = pRcvVar;
For Idx = 1 to RtnRcdFbi.NbrPrf;
// Structure AUTU0100 now contains member user profile information...
If Idx < RtnRcdFbi.NbrPrf;
pAUTU0100 += RtnRcdFbi.EntLen;
EndIf;
EndFor;
EndSr;
/End-Free
Ensuite, pour savoir si le profil est *ENABLED ou *DISABLED il suffit d'appeler l'API QSYRUSRI
pour chacun des users récupérés.
Le statut (10a) est dans le format USRI0100, zone STATUS position 37.
CLIQUER ICI
Ci-dessous le programme pour récupérer le statut de QPGMR
D GetUsrInf PR ExtPgm('QSYRUSRI')
D RcvVar 53
D RcvVarLen 9b 0
D Format 8 const
D UserPrf 10 const
D Error 1 const
D Receiver s 53 inz(' ')
D VarLength s 9b 0 inz(53)
D Msg s 40
/free
//--------------------------------------------------------
// MAIN PROGRAM
//--------------------------------------------------------
GetUsrInf(Receiver:VarLength:'USRI0200':'QPGMR':' ');
Statut = %Subst(Receiver:37:10);
Citation de GAYE OUSMANE le 8 juin 2012, 9 h 51 minCitation de k2r400Programme de Carsten Flensburg récupéré ici : CLIQUER ICI
Dans cet exemple, il récupère les membres du groupe NOVAGRPIT.
Voici la doc de l'API : CLIQUER ICI
**
** Program . . : EXA512
** Description : Retrieve authorized users (QSYRAUTU) API example
** Author . . : Carsten Flensburg
**
**
** Compile and setup instructions:
** CrtRpgMod Module( EXA512 )
** DbgView( *LIST )
**
** CrtPgm Pgm( EXA512 )
** Module( EXA512 )
** ActGrp( *NEW )
**
**
**-- Control specification: --------------------------------------------**
H Option( *SrcStmt )
**-- System information:
D PgmSts SDs Qualified
D PgmNam *Proc
**-- API error data structure:
D ERRC0100 Ds Qualified
D BytPrv 10i 0 Inz( %Size( ERRC0100 ))
D BytAvl 10i 0
D MsgId 7a
D 1a
D MsgDta 128a
**-- Global variables:
D Idx s 10i 0
D BytAlc s 10i 0
D RcvVar s 65535a Based( pRcvVar )
**-- Global constants:
D PRF_NAM_GT c '0'
D PRF_NAM_GE c '1'
**-- Retrieve API parameters:D RtvApi Ds Qualified Inz
D GrpNam 10a
D SltCri 10a
**-- List information:
D RtnRcdFbi Ds Qualified Inz
D BytRtn 10i 0
D BytAvl 10i 0
D NbrPrf 10i 0
D EntLen 10i 0
**-- User information:
D AUTU0100 Ds Qualified Based( pAUTU0100 )
D UsrPrf 10a
D UsrGrpI 1a
D GrpMbrI 1a
**-- Retrieve authorized users:
D RtvAutUsr Pr ExtPgm( 'QSYRAUTU' )
D RcvVar 65535a Options( *VarSize )
D RcvVarLen 10i 0 Const
D RtnRcdFbi 16a
D FmtNam 8a Const
D SltCri 10a Const
D StrPrf 10a Const
D StrPrfOpt 1a Const
D GrpNam 10a Const
D Error 1024a Options( *VarSize )
D EndPrf 10a Const Options( *NoPass )**-- Entry parameters:
D EXA512 Pr
**
D EXA512 Pi/Free
RtvApi.SltCri = '*MEMBER';
// RtvApi.GrpNam = 'Insert Group Profile'
RtvApi.GrpNam = 'NOVAGRPIT';BytAlc = 4096;
pRcvVar = %Alloc( BytAlc );DoU RtnRcdFbi.BytAvl BytAlc;
BytAlc = RtnRcdFbi.BytAvl;
pRcvVar = %ReAlloc( pRcvVar: BytAlc );
EndIf;RtvAutUsr( RcvVar
: BytAlc
: RtnRcdFbi
: 'AUTU0100'
: RtvApi.SltCri
: '*FIRST'
: PRF_NAM_GE
: RtvApi.GrpNam
: ERRC0100
);If ERRC0100.BytAvl > *Zero;
Leave;
EndIf;
EndDo;If ERRC0100.BytAvl = *Zero;
ExSr GetPrfInf;
EndIf;*InLr = *On;
Return;BegSr GetPrfInf;
pAUTU0100 = pRcvVar;
For Idx = 1 to RtnRcdFbi.NbrPrf;
// Structure AUTU0100 now contains member user profile information...
If Idx < RtnRcdFbi.NbrPrf;
pAUTU0100 += RtnRcdFbi.EntLen;
EndIf;
EndFor;EndSr;
/End-Free
Ensuite, pour savoir si le profil est *ENABLED ou *DISABLED il suffit d'appeler l'API QSYRUSRIpour chacun des users récupérés.
Le statut (10a) est dans le format USRI0100, zone STATUS position 37.
CLIQUER ICICi-dessous le programme pour récupérer le statut de QPGMR
D GetUsrInf PR ExtPgm('QSYRUSRI')
D RcvVar 53
D RcvVarLen 9b 0
D Format 8 const
D UserPrf 10 const
D Error 1 const
D Receiver s 53 inz(' ')
D VarLength s 9b 0 inz(53)
D Msg s 40/free
//--------------------------------------------------------
// MAIN PROGRAM
//--------------------------------------------------------GetUsrInf(Receiver:VarLength:'USRI0200':'QPGMR':' ');
Statut = %Subst(Receiver:37:10);Merci de votre aide. j'essaye de le mettre en oeuvre et je tiendrai au courant
encore merci
Citation de k2r400Programme de Carsten Flensburg récupéré ici : CLIQUER ICI
Dans cet exemple, il récupère les membres du groupe NOVAGRPIT.
Voici la doc de l'API : CLIQUER ICI
**
** Program . . : EXA512
** Description : Retrieve authorized users (QSYRAUTU) API example
** Author . . : Carsten Flensburg
**
**
** Compile and setup instructions:
** CrtRpgMod Module( EXA512 )
** DbgView( *LIST )
**
** CrtPgm Pgm( EXA512 )
** Module( EXA512 )
** ActGrp( *NEW )
**
**
**-- Control specification: --------------------------------------------**
H Option( *SrcStmt )
**-- System information:
D PgmSts SDs Qualified
D PgmNam *Proc
**-- API error data structure:
D ERRC0100 Ds Qualified
D BytPrv 10i 0 Inz( %Size( ERRC0100 ))
D BytAvl 10i 0
D MsgId 7a
D 1a
D MsgDta 128a
**-- Global variables:
D Idx s 10i 0
D BytAlc s 10i 0
D RcvVar s 65535a Based( pRcvVar )
**-- Global constants:
D PRF_NAM_GT c '0'
D PRF_NAM_GE c '1'
**-- Retrieve API parameters:D RtvApi Ds Qualified Inz
D GrpNam 10a
D SltCri 10a
**-- List information:
D RtnRcdFbi Ds Qualified Inz
D BytRtn 10i 0
D BytAvl 10i 0
D NbrPrf 10i 0
D EntLen 10i 0
**-- User information:
D AUTU0100 Ds Qualified Based( pAUTU0100 )
D UsrPrf 10a
D UsrGrpI 1a
D GrpMbrI 1a
**-- Retrieve authorized users:
D RtvAutUsr Pr ExtPgm( 'QSYRAUTU' )
D RcvVar 65535a Options( *VarSize )
D RcvVarLen 10i 0 Const
D RtnRcdFbi 16a
D FmtNam 8a Const
D SltCri 10a Const
D StrPrf 10a Const
D StrPrfOpt 1a Const
D GrpNam 10a Const
D Error 1024a Options( *VarSize )
D EndPrf 10a Const Options( *NoPass )**-- Entry parameters:
D EXA512 Pr
**
D EXA512 Pi/Free
RtvApi.SltCri = '*MEMBER';
// RtvApi.GrpNam = 'Insert Group Profile'
RtvApi.GrpNam = 'NOVAGRPIT';BytAlc = 4096;
pRcvVar = %Alloc( BytAlc );DoU RtnRcdFbi.BytAvl BytAlc;
BytAlc = RtnRcdFbi.BytAvl;
pRcvVar = %ReAlloc( pRcvVar: BytAlc );
EndIf;RtvAutUsr( RcvVar
: BytAlc
: RtnRcdFbi
: 'AUTU0100'
: RtvApi.SltCri
: '*FIRST'
: PRF_NAM_GE
: RtvApi.GrpNam
: ERRC0100
);If ERRC0100.BytAvl > *Zero;
Leave;
EndIf;
EndDo;If ERRC0100.BytAvl = *Zero;
ExSr GetPrfInf;
EndIf;*InLr = *On;
Return;BegSr GetPrfInf;
pAUTU0100 = pRcvVar;
For Idx = 1 to RtnRcdFbi.NbrPrf;
// Structure AUTU0100 now contains member user profile information...
If Idx < RtnRcdFbi.NbrPrf;
pAUTU0100 += RtnRcdFbi.EntLen;
EndIf;
EndFor;EndSr;
/End-Free
Ensuite, pour savoir si le profil est *ENABLED ou *DISABLED il suffit d'appeler l'API QSYRUSRIpour chacun des users récupérés.
Le statut (10a) est dans le format USRI0100, zone STATUS position 37.
CLIQUER ICICi-dessous le programme pour récupérer le statut de QPGMR
D GetUsrInf PR ExtPgm('QSYRUSRI')
D RcvVar 53
D RcvVarLen 9b 0
D Format 8 const
D UserPrf 10 const
D Error 1 const
D Receiver s 53 inz(' ')
D VarLength s 9b 0 inz(53)
D Msg s 40/free
//--------------------------------------------------------
// MAIN PROGRAM
//--------------------------------------------------------GetUsrInf(Receiver:VarLength:'USRI0200':'QPGMR':' ');
Statut = %Subst(Receiver:37:10);
Merci de votre aide. j'essaye de le mettre en oeuvre et je tiendrai au courant
encore merci
Citation de GAYE OUSMANE le 12 juin 2012, 11 h 04 minCode : sous-fichier GESTUSR.DSPF
A DSPSIZ(24 80 *DS3)
A* MSGLOC(27)
A CA03
A CF12
A R SFL01 SFL
A 08 SFLNXTCHG
A ZCDSEL 1A B 6 4
A LOGIN 10A O 6 7
A STATUT 10A O 6 20
A LIBELLE 40A O 6 34
A R FORC1 SFLCTL(SFL01)
A SFLSIZ(0020)
A SFLPAG(0019)
A N07 ROLLUP(02)
A OVERLAY
A 04 SFLDSP
A N04 ERASE(SFL01)
A 05 SFLDSPCTL
A 06 SFLCLR
A 07 SFLEND
A WRAN01 4S 0H SFLRCDNBR
A 2 12'GESTION DES UTILISATEURS DU POINTA-
A GE SYSPER'
A COLOR(WHT)
A DSPATR(RI)
A DSPATR(BL)
A 5 2'Opt '
A DSPATR(UL)
A COLOR(WHT)
A 5 7'Utilisateur'
A DSPATR(UL)
A COLOR(WHT)
A 5 20'Etat actuel '
A DSPATR(UL)
A COLOR(WHT)
A* 5 36'Détail -
A* '
A* DSPATR(UL)
A* COLOR(WHT)
A 4 2'A=Activé D=Desactivé '
A COLOR(BLU)
A 2 61DATE
A 1 61SYSNAME
A 3 61TIME
A 1 2USER
A R FORB1
A OVERLAY
A 21 3'F3=QUITTER'
A COLOR(BLU)
Code : programme de Carsten Flensburg modifier EXA512.RPGLE
**-- Control specification: __________________________________________
H Option(*SrcStmt : *nodebugio) dftactgrp(*no) alwnull(*usrctl)
FGESTUSR CF E WORKSTN SFILE(SFL01:WRAN01)**_____________________________________________________________________
**Declaration du Fichier ecran
**_____________________________________________________________________
**-- System information:
D PgmSts SDs Qualified
D PgmNam *Proc
**-- API error data structure:
D ERRC0100 Ds Qualified
D BytPrv 10i 0 Inz( %Size( ERRC0100 ))
D BytAvl 10i 0
D MsgId 7a
D 1a
D MsgDta 128a
**-- Global variables:
D Idx s 10i 0
D BytAlc s 10i 0
D RcvVar s 65535a Based( pRcvVar )
**-- Global constants:
D PRF_NAM_GT c '0'
D PRF_NAM_GE c '1'
**-- Retrieve API parameters:D RtvApi Ds Qualified Inz
D GrpNam 10a
D SltCri 10a
**-- List information:
D RtnRcdFbi Ds Qualified Inz
D BytRtn 10i 0
D BytAvl 10i 0
D NbrPrf 10i 0
D EntLen 10i 0
**-- User information:
D AUTU0100 Ds Qualified Based( pAUTU0100 )
D UsrPrf 10a
D UsrGrpI 1a
D GrpMbrI 1a
**-- Retrieve authorized users:
D RtvAutUsr Pr ExtPgm( 'QSYRAUTU' )
D RcvVar 65535a Options( *VarSize )
D RcvVarLen 10i 0 Const
D RtnRcdFbi 16a
D FmtNam 8a Const
D SltCri 10a Const
D StrPrf 10a Const
D StrPrfOpt 1a Const
D GrpNam 10a Const
D Error 1024a Options( *VarSize )
D EndPrf 10a Const Options( *NoPass )**-- Entry parameters:
D EXA512 Pr
**
D EXA512 Pi**_____________________________________________________
**
**_____________________________________________________
D GetUsrInf PR ExtPgm('QSYRUSRI')
D RcvVar 53
D RcvVarLen 9b 0
D Format 8 const
D UserPrf 10 const
D Error 1 const**_____________________________________________________
**Declaration de la procedure pour executer de commande
**_____________________________________________________
DQcmdExc PR EXTPGM('QCMDEXC')
D 256A Const options(*varsize)
D 15P 5 Const**_____________________________________________________
** Declaration des variable de travail standalone
**_____________________________________________________
* ici on test sur le groupe TESTGRP a vous de le modifié
D usrgrp s 10 inz('TESTGRP') Varying
D Quote S 1 inz('''')
D format s 8 inz('USRI0100') Varying
D Cmd s 256A VaryingD Receiver s 53 inz(' ')
D VarLength s 9b 0 inz(53)
D Msg s 40
D W_FIN_PGM S N INZ(*OFF)**Pointeur de recouvrement des indicateurs du sous fichier static
DIndPtr S * INZ(%ADDR(*IN))
D DS BASED(IndPtr)
D ROLLUP 2 2
D SFLDSP 4 4
D SFLDSPCTL 5 5
D SFLCLR 6 6
D SFLEND 7 7
D SFLNXTCHG 8 8
D FIN_SFL 70 70**_____________________________________________________
**_______________________________DEBUT PGM/Free
DOW NOT W_FIN_PGM ;Eval SFLDSPCTL = *ON ;
WRITE FORC1 ;
// WRITE FORB1;//_______________Initialisation sous fichier
EXSR INITSFIC ;
//_______________renvoi les profiles usr
EXSR RTVUSRS;// If ERRC0100.BytAvl = *Zero;
ExSr GetPrfInf;
// EndIf;//Touche F3=Fin Programme
If *INKC ;
Eval W_FIN_PGM = *ON ;
else;
ExSR Traitement;
ENDIF;ENDDO ;
*InLr = *On;
Return;
//___________________________________________________________FIN PGM//__________________________Insertion sous fichier
//________________________________________________
BegSr GetPrfInf;
//WRAN01 = 0;pAUTU0100 = pRcvVar;
For Idx = 1 to RtnRcdFbi.NbrPrf - 1 ;
//La Structure AUTU0100 contient les infos du profile usr
If Idx < RtnRcdFbi.NbrPrf;
pAUTU0100 += RtnRcdFbi.EntLen ;
// programme pour recuperer et afficher le statut
LOGIN = AUTU0100.UsrPrf ;
GetUsrInf(Receiver:VarLength:format:LOGIN:' ');
STATUT = %Subst(Receiver:37:10);
if (STATUT = '*DISABLED');
STATUT= 'Désactivé';
else ;
STATUT= 'Activé';
ENDIF;
EndIf;LOGIN = AUTU0100.UsrPrf;
// dsply (AUTU0100.UsrPrf + ' ' +statut );
// Insertion dans le sous fichier
Eval SFLDSP = *ON;
Eval WRAN01 += 1;
Eval ZCDSEL = *blank ;
WRITE SFL01 ;
Write FORB1;
EndFor;Exfmt FORC1; // Affichage de l'ecran
EndSr;BEGSR RTVUSRS;
RtvApi.SltCri = '*MEMBER';
// Renseigner votre groupe d'utilisateur
RtvApi.GrpNam = usrgrp;
BytAlc = 4096;
pRcvVar = %Alloc( BytAlc );
DoU RtnRcdFbi.BytAvl BytAlc;
BytAlc = RtnRcdFbi.BytAvl;
pRcvVar = %ReAlloc( pRcvVar: BytAlc );
EndIf;
RtvAutUsr( RcvVar
: BytAlc
: RtnRcdFbi
: 'AUTU0100'
: RtvApi.SltCri
: '*FIRST'
: PRF_NAM_GE
: RtvApi.GrpNam
: ERRC0100
);
If ERRC0100.BytAvl > *Zero;
Leave;
EndIf;
EndDo;
ENDSR;//__________________Effacement du sous fichier
//____________________________________________
BEGSR INITSFIC;
Eval WRAN01 = 0;
Eval SFLEND = *ON;
Eval SFLCLR = *ON;
Eval SFLDSP = *OFF;
Eval SFLDSPCTL = *OFF;
WRITE FORC1;
Eval SFLDSPCTL = *ON;
Eval SFLCLR = *OFF;
ENDSR;
//__________________Traitement apres selection
//____________________________________________
BEGSR Traitement ;
READC SFL01;
Dow not (%eof());
IF ZCDSEL *BLANK ;
Select;
When %trim(ZCDSEL) = 'A'; // Activer
// programme pour desactiver un profil utilisateur
Cmd = 'CHGUSRPRF USRPRF('+ LOGIN +') STATUS(*ENABLED)';
QcmdExc(cmd:%len(cmd));
When %trim(ZCDSEL) = 'D'; // Desactiver
Cmd = 'CHGUSRPRF USRPRF('+ LOGIN +') STATUS(*DISABLED)';
QcmdExc(cmd:%len(cmd));
Other;
Endsl;
ENDIF;ZCDSEL = *BLANK; // On efface la zone d'option A ou D
Update SFL01; // On met a jour le sous fichier
ReadC SFL01; // On lit l'enregistrement suivant
Enddo;
ENDSR ;
/End-Free
Merci a tous ceux qui m’ont permis de mettre en place ce programme
Ceux qui sont intéressés peuvent le modifier
Code : sous-fichier GESTUSR.DSPF
A DSPSIZ(24 80 *DS3)
A* MSGLOC(27)
A CA03
A CF12
A R SFL01 SFL
A 08 SFLNXTCHG
A ZCDSEL 1A B 6 4
A LOGIN 10A O 6 7
A STATUT 10A O 6 20
A LIBELLE 40A O 6 34
A R FORC1 SFLCTL(SFL01)
A SFLSIZ(0020)
A SFLPAG(0019)
A N07 ROLLUP(02)
A OVERLAY
A 04 SFLDSP
A N04 ERASE(SFL01)
A 05 SFLDSPCTL
A 06 SFLCLR
A 07 SFLEND
A WRAN01 4S 0H SFLRCDNBR
A 2 12'GESTION DES UTILISATEURS DU POINTA-
A GE SYSPER'
A COLOR(WHT)
A DSPATR(RI)
A DSPATR(BL)
A 5 2'Opt '
A DSPATR(UL)
A COLOR(WHT)
A 5 7'Utilisateur'
A DSPATR(UL)
A COLOR(WHT)
A 5 20'Etat actuel '
A DSPATR(UL)
A COLOR(WHT)
A* 5 36'Détail -
A* '
A* DSPATR(UL)
A* COLOR(WHT)
A 4 2'A=Activé D=Desactivé '
A COLOR(BLU)
A 2 61DATE
A 1 61SYSNAME
A 3 61TIME
A 1 2USER
A R FORB1
A OVERLAY
A 21 3'F3=QUITTER'
A COLOR(BLU)
Code : programme de Carsten Flensburg modifier EXA512.RPGLE
**-- Control specification: __________________________________________
H Option(*SrcStmt : *nodebugio) dftactgrp(*no) alwnull(*usrctl)
FGESTUSR CF E WORKSTN SFILE(SFL01:WRAN01)
**_____________________________________________________________________
**Declaration du Fichier ecran
**_____________________________________________________________________
**-- System information:
D PgmSts SDs Qualified
D PgmNam *Proc
**-- API error data structure:
D ERRC0100 Ds Qualified
D BytPrv 10i 0 Inz( %Size( ERRC0100 ))
D BytAvl 10i 0
D MsgId 7a
D 1a
D MsgDta 128a
**-- Global variables:
D Idx s 10i 0
D BytAlc s 10i 0
D RcvVar s 65535a Based( pRcvVar )
**-- Global constants:
D PRF_NAM_GT c '0'
D PRF_NAM_GE c '1'
**-- Retrieve API parameters:
D RtvApi Ds Qualified Inz
D GrpNam 10a
D SltCri 10a
**-- List information:
D RtnRcdFbi Ds Qualified Inz
D BytRtn 10i 0
D BytAvl 10i 0
D NbrPrf 10i 0
D EntLen 10i 0
**-- User information:
D AUTU0100 Ds Qualified Based( pAUTU0100 )
D UsrPrf 10a
D UsrGrpI 1a
D GrpMbrI 1a
**-- Retrieve authorized users:
D RtvAutUsr Pr ExtPgm( 'QSYRAUTU' )
D RcvVar 65535a Options( *VarSize )
D RcvVarLen 10i 0 Const
D RtnRcdFbi 16a
D FmtNam 8a Const
D SltCri 10a Const
D StrPrf 10a Const
D StrPrfOpt 1a Const
D GrpNam 10a Const
D Error 1024a Options( *VarSize )
D EndPrf 10a Const Options( *NoPass )
**-- Entry parameters:
D EXA512 Pr
**
D EXA512 Pi
**_____________________________________________________
**
**_____________________________________________________
D GetUsrInf PR ExtPgm('QSYRUSRI')
D RcvVar 53
D RcvVarLen 9b 0
D Format 8 const
D UserPrf 10 const
D Error 1 const
**_____________________________________________________
**Declaration de la procedure pour executer de commande
**_____________________________________________________
DQcmdExc PR EXTPGM('QCMDEXC')
D 256A Const options(*varsize)
D 15P 5 Const
**_____________________________________________________
** Declaration des variable de travail standalone
**_____________________________________________________
* ici on test sur le groupe TESTGRP a vous de le modifié
D usrgrp s 10 inz('TESTGRP') Varying
D Quote S 1 inz('''')
D format s 8 inz('USRI0100') Varying
D Cmd s 256A Varying
D Receiver s 53 inz(' ')
D VarLength s 9b 0 inz(53)
D Msg s 40
D W_FIN_PGM S N INZ(*OFF)
**Pointeur de recouvrement des indicateurs du sous fichier static
DIndPtr S * INZ(%ADDR(*IN))
D DS BASED(IndPtr)
D ROLLUP 2 2
D SFLDSP 4 4
D SFLDSPCTL 5 5
D SFLCLR 6 6
D SFLEND 7 7
D SFLNXTCHG 8 8
D FIN_SFL 70 70
**_____________________________________________________
**_______________________________DEBUT PGM
/Free
DOW NOT W_FIN_PGM ;
Eval SFLDSPCTL = *ON ;
WRITE FORC1 ;
// WRITE FORB1;
//_______________Initialisation sous fichier
EXSR INITSFIC ;
//_______________renvoi les profiles usr
EXSR RTVUSRS;
// If ERRC0100.BytAvl = *Zero;
ExSr GetPrfInf;
// EndIf;
//Touche F3=Fin Programme
If *INKC ;
Eval W_FIN_PGM = *ON ;
else;
ExSR Traitement;
ENDIF;
ENDDO ;
*InLr = *On;
Return;
//___________________________________________________________FIN PGM
//__________________________Insertion sous fichier
//________________________________________________
BegSr GetPrfInf;
//WRAN01 = 0;
pAUTU0100 = pRcvVar;
For Idx = 1 to RtnRcdFbi.NbrPrf - 1 ;
//La Structure AUTU0100 contient les infos du profile usr
If Idx < RtnRcdFbi.NbrPrf;
pAUTU0100 += RtnRcdFbi.EntLen ;
// programme pour recuperer et afficher le statut
LOGIN = AUTU0100.UsrPrf ;
GetUsrInf(Receiver:VarLength:format:LOGIN:' ');
STATUT = %Subst(Receiver:37:10);
if (STATUT = '*DISABLED');
STATUT= 'Désactivé';
else ;
STATUT= 'Activé';
ENDIF;
EndIf;
LOGIN = AUTU0100.UsrPrf;
// dsply (AUTU0100.UsrPrf + ' ' +statut );
// Insertion dans le sous fichier
Eval SFLDSP = *ON;
Eval WRAN01 += 1;
Eval ZCDSEL = *blank ;
WRITE SFL01 ;
Write FORB1;
EndFor;
Exfmt FORC1; // Affichage de l'ecran
EndSr;
BEGSR RTVUSRS;
RtvApi.SltCri = '*MEMBER';
// Renseigner votre groupe d'utilisateur
RtvApi.GrpNam = usrgrp;
BytAlc = 4096;
pRcvVar = %Alloc( BytAlc );
DoU RtnRcdFbi.BytAvl BytAlc;
BytAlc = RtnRcdFbi.BytAvl;
pRcvVar = %ReAlloc( pRcvVar: BytAlc );
EndIf;
RtvAutUsr( RcvVar
: BytAlc
: RtnRcdFbi
: 'AUTU0100'
: RtvApi.SltCri
: '*FIRST'
: PRF_NAM_GE
: RtvApi.GrpNam
: ERRC0100
);
If ERRC0100.BytAvl > *Zero;
Leave;
EndIf;
EndDo;
ENDSR;
//__________________Effacement du sous fichier
//____________________________________________
BEGSR INITSFIC;
Eval WRAN01 = 0;
Eval SFLEND = *ON;
Eval SFLCLR = *ON;
Eval SFLDSP = *OFF;
Eval SFLDSPCTL = *OFF;
WRITE FORC1;
Eval SFLDSPCTL = *ON;
Eval SFLCLR = *OFF;
ENDSR;
//__________________Traitement apres selection
//____________________________________________
BEGSR Traitement ;
READC SFL01;
Dow not (%eof());
IF ZCDSEL *BLANK ;
Select;
When %trim(ZCDSEL) = 'A'; // Activer
// programme pour desactiver un profil utilisateur
Cmd = 'CHGUSRPRF USRPRF('+ LOGIN +') STATUS(*ENABLED)';
QcmdExc(cmd:%len(cmd));
When %trim(ZCDSEL) = 'D'; // Desactiver
Cmd = 'CHGUSRPRF USRPRF('+ LOGIN +') STATUS(*DISABLED)';
QcmdExc(cmd:%len(cmd));
Other;
Endsl;
ENDIF;
ZCDSEL = *BLANK; // On efface la zone d'option A ou D
Update SFL01; // On met a jour le sous fichier
ReadC SFL01; // On lit l'enregistrement suivant
Enddo;
ENDSR ;
/End-Free
Merci a tous ceux qui m’ont permis de mettre en place ce programme
Ceux qui sont intéressés peuvent le modifier
Citation de GAYE OUSMANE le 12 juin 2012, 14 h 32 minJe viens de détecter une anomalie dans le programme
le premier utilisateur du groupe est ignoré
et j'ai du mal a cerné le problèmeaide sur l'API commande
Je viens de détecter une anomalie dans le programme
le premier utilisateur du groupe est ignoré
et j'ai du mal a cerné le problème
aide sur l'API commande
Citation de GAYE OUSMANE le 13 juin 2012, 11 h 20 minCitation de gayeousJe viens de détecter une anomalie dans le programme
le premier utilisateur du groupe est ignoré
et j'ai du mal a cerné le problèmeaide sur l'API commande
J'ai résolu le problème en créant un utilisateur bidon avec un profile commençant par AAAA
tous les moyens sont bon pour arriver a ses fins
Merci a tous
Citation de gayeousJe viens de détecter une anomalie dans le programme
le premier utilisateur du groupe est ignoré
et j'ai du mal a cerné le problèmeaide sur l'API commande
J'ai résolu le problème en créant un utilisateur bidon avec un profile commençant par AAAA
tous les moyens sont bon pour arriver a ses fins
Merci a tous
Citation de vazymimil le 13 juin 2012, 11 h 47 minCitation de gayeousJe viens de détecter une anomalie dans le programme
le premier utilisateur du groupe est ignoré
et j'ai du mal a cerné le problème
...
tous les moyens sont bon pour arriver a ses finsMerci a tous
le problème est là:
pAUTU0100 = pRcvVar;
For Idx = 1 to RtnRcdFbi.NbrPrf - 1 ;
//La Structure AUTU0100 contient les infos du profile usr
If Idx < RtnRcdFbi.NbrPrf;
pAUTU0100 += RtnRcdFbi.EntLen ;
D'abord tu initialises pAUTU0100 sur le premier utilisateur, puis tu le déplaces immédiatement au début dans ta boucle plutôt qu'a la fin.
Du coup le premier utilisateur passe à la trappe, et avec le If Idx < RtnRcdFbi.NbrPrf; tu dois avoir deux fois le dernier, non ?
Citation de gayeousJe viens de détecter une anomalie dans le programme
le premier utilisateur du groupe est ignoré
et j'ai du mal a cerné le problème
...
tous les moyens sont bon pour arriver a ses finsMerci a tous
le problème est là:
pAUTU0100 = pRcvVar;
For Idx = 1 to RtnRcdFbi.NbrPrf - 1 ;
//La Structure AUTU0100 contient les infos du profile usr
If Idx < RtnRcdFbi.NbrPrf;
pAUTU0100 += RtnRcdFbi.EntLen ;
D'abord tu initialises pAUTU0100 sur le premier utilisateur, puis tu le déplaces immédiatement au début dans ta boucle plutôt qu'a la fin.
Du coup le premier utilisateur passe à la trappe, et avec le If Idx < RtnRcdFbi.NbrPrf; tu dois avoir deux fois le dernier, non ?
Citation de Damned le 13 juin 2012, 14 h 41 minvazymimil à trouvé.
La ligne
pAUTU0100 += RtnRcdFbi.EntLen ;
doit passer juste avant le EndFor.De plus :
La boucle for est fausse :
For Idx = 1 to RtnRcdFbi.NbrPrf ;
pour avoir tous les utilisateurs.La condition
If Idx < RtnRcdFbi.NbrPrf;
est fausse et ne sert à rien, à supprimer.
vazymimil à trouvé.
La ligne pAUTU0100 += RtnRcdFbi.EntLen ;
doit passer juste avant le EndFor.
De plus :
La boucle for est fausse : For Idx = 1 to RtnRcdFbi.NbrPrf ;
pour avoir tous les utilisateurs.
La condition If Idx < RtnRcdFbi.NbrPrf;
est fausse et ne sert à rien, à supprimer.