Sometimes you have a table that captures user profiles. Obviously, if the user profile is deleted, there is nothing to delete these table entries. And sometimes, auditors can see this as a problem.
There are several ways of handling this, one of which is to make use of the QSYRUSRI API.
The Retrieve User Information (QSYRUSRI) API provides information about a user profile. This API provides information similar to the Retrieve User Profile (RTVUSRPRF) command or the Display User Profile (DSPUSRPRF) command when *BASIC is specified for the type parameter.
The following sample program makes use of the fact that, if a user profile has been deleted, the API returns blanks in all for the user profile name, previous sign-on date and time and all other text fields.
// --------------------------------------------------------------------
// Program : DSPUSRI
// Description : Display User Profile information
// : Experiments with the QSYRUSRI API
// --------------------------------------------------------------------
ctl-opt main(Main) dftactgrp(*no) actgrp(*new) bnddir('QC2LE');
// --------------------------------------------------------------------
// Prototype declarations
// --------------------------------------------------------------------
dcl-pr Main extpgm('DSPUSRI');
UserID char(10) const;
end-pr;
dcl-pr RtvUsrInf extpgm('QSYRUSRI');
RtnVariable char(2000) options(*varsize);
RtnVarLen int(10) const;
APIFMT char(8) const;
UserID char(10) const;
Error char(1) const;
end-pr;
// --------------------------------------------------------------------
// Main Procedure
// --------------------------------------------------------------------
dcl-proc Main;
dcl-pi Main;
UserID char(10) const;
end-pi;
// ----------------------------------------------------------------
// Data structures
// ----------------------------------------------------------------
dcl-ds F1 qualified inz;
BytesRtn int(10);
BytesAvail int(10) inz(%size(F1));
UserProfile char(10) inz;
LastSignon char(13) inz;
res1 char(1) inz;
BadSignons int(10) inz;
Status char(10) inz;
PwdChange char(8) inz;
NoPassword char(1) inz;
res2 char(1) inz;
PasswordExpInt int(10) inz;
PasswordExpires char(8) inz;
DaysToPassExp int(10) inz;
PasswordExpired char(1) inz;
DspSignOn char(10) inz;
LocalPassword char(1) inz;
end-ds;
// ----------------------------------------------------------------
// Standalone fields
// ----------------------------------------------------------------
dcl-s OutText char(50);
// ----------------------------------------------------------------
// Procedure mainline
// ----------------------------------------------------------------
// Retrieve the user profile
RtvUsrInf(F1: %size(F1): 'USRI0100': UserID: ' ');
if F1.UserProfile = *blank and F1.LastSignon = *blank;
OutText = %trim(UserID) + ' has gone';
else;
OutText = %trim(UserID) + ' is still here';
endif;
dsply OutText;
end-proc;
// --------------------------------------------------------------------
You can call this program with the user ID as a parameter and it will display a message indicating whether or not the user profile exists. Extending it to do something useful is a pretty straightforward process.
