Previous Topic: 10.5.3 Modify #VCAEXIT - Define _USRUSEG MacroNext Topic: 10.5.5 Adapting Techniques for HSM Exits


10.5.4 Establish VCAACRT for User Data Elements


The _USRUSEG macro is called during Phase 1 of the DAY090 job
step as the routine builds WORK3.VCADAA00 and WORK.EXTDAA00
from the raw VCC records. The modification to VCAGENIN
described in Section 10.5.2 caused CA MICS to add the user
data elements to the generated macros:

    o    DAALEN
    o    DAAKEEP
    o    DAAFMT

Therefore, now that the user data has had its length and
format defined, has been extracted by means of the INPUT
statements in the _USRUSEG macro, and has been kept as a
variable on the WORK3.VCADAA00 file, you must now finalize
what you want to do with the accounting information obtained
from the RACF installation data.

In the example below, the VCA Account Code variables are
populated with data from RACF:

 IF FILEID = 'VCADAA' THEN DO;
   VCAACT3 = 'ZFROMRACF';
   VCAACT2 = WRKUSR01;         /* ACCOUNT CODE FROM RACF */
   IF VCAACT2 = '********' OR
      VCAACT2 = '*RACFERR' THEN DO;
        VCAACT3 = 'W' || DAAUCJOB;
        VCAACT2 = PUT(DAAUCJOB,$USRJOB.);
        IF VCAACT2 = '********' THEN DO;
             /* SEE IF CREATED VIA TSO */
          VCAACT2 = PUT(DAAUCJOB,$USRUSER.);
          IF VCAACT2 = '********' THEN DO;
            VCAACT3 = 'W*NOMATCH';
          END;
        END;
   END;
   VCAACT1 = PUT(VCAACT2,$USRBILL.);
 END;

The following notes may help to explain the above logic.
Please bear in mind that this is only one possible
implementation. Like all user exits, you are responsible
for developing and testing.

o   There are 3 levels of account codes:
    o    VCAACT3 represents a USERID or an individual
    o    VCAACT2 represents the department to which the
         USERID is assigned
    o    VCAACT1 represents the division to which the
         department is assigned.
o   VCAACT3 is set to an arbitrary string (ZFROMRACF)
    to indicate that the department (account code) will
    be assigned from RACF data.
o   VCAACT2 is assigned from DAAARACF. This is the account
    code read earlier from the _USRUSEG macro.
o   If the RACF administrator had not supplied the department
    account code as the installation data (INSTDATA) when
    setting up the GROUP PROFILE, then the previously
    discussed exits result in the VCAACT2 value being set to
    '********' or '*RACFERR'.
o   If that is the case, then:
    o    VCAACT3 is set to the value of the creating JOBNAME
         prefixed by an arbitrary character of 'W'.
    o    A PROC FORMAT table called $USRJOB is searched for a
         match on the creating JOBNAME.  Obviously, this
         presumes you validate JOBNAMEs and maintain this
         table to handle these RACF exceptions.  The search
         returns the departmental account code or an
         arbitrary string of all '********'.
    o    If not found in the $USRJOB table, a search of
         another table, $USRUSER, is done presuming the
         creating JOBNAME is a TSO USERID. If found, then
         the VCAACT2 variable is set to the departmental
         account code for that user. Note that this implies
         you have a job that can be run periodically or as
         new users are assigned which builds the PROC FORMAT
         which relates USERIDs to departments.
         If a USERID cannot be found, then we leave VCAACT2
         set to all '*' and set VCAACT3 to an arbitrary
         string of 'W*NOMATCH'.
    o    Finally, VCAACT1 (the division) is determined by
         using the department account number (VCAACT2) as a
         search argument into a table (PROC FORMAT) called
         $USRBILL.