Typical DCL Command Procedure to run the program :
$!
$! AM-CLOSE-MATR.COM
$!
$! Description: Produces batch transactions to close matriculation
$! records on students.
$!
$ SET NOVERIFY
$ SAY :== "WRITE SYS$OUTPUT"
$ CL
$!
$ SAY "This process will produce transactions to close matriculation"
$ SAY "records on students."
$ SAY "These transactions will be processed overnight."
$ SAY " "
$ SAY "(AM-CLOSE-MATR)"
$ SAY " "
$!
$! Prompt for term
$!
$ENTER_PARM_TERM:
$ READ SYS$COMMAND/TIME=60/END=EXIT/ERROR=EXIT/PROMPT= -
"Enter the term to run this process for >>> " TERMIN
$ LEN_TERMIN = F$LENGTH(TERMIN)
$ IF LEN_TERMIN .NE. 5 THEN GOTO ENTER_PARM_TERM
$ TYP_TERMIN = F$TYPE(TERMIN)
$ IF TYP_TERMIN .NES. "INTEGER" THEN GOTO ENTER_PARM_TERM
$!
$! Create and execute the FOCUS command procedure.
$!
$ NAME = F$GETJPI("","USERNAME")
$ COM_FILE = "SYS$LOGIN:FOCTEMP.COM"
$!
$ OPEN/WRITE output_file 'COM_FILE'
$!
$ WRITE output_file "$ DEFINE FOC$DIR1 SI$DATA"
$ WRITE output_file "$ DEFINE FOC$DIR2 SI$FEX,SI$MFD"
$ WRITE output_file "$ SET DEFAULT SYS$LOGIN"
$ WRITE output_file "$ FOCUS"
$ WRITE output_file "EXEC SI$FOCUS:AM-CLOSE-MATR TERM=" + TERMIN
$ WRITE output_file "FIN"
$ WRITE output_file "$ EXIT"
$!
$ CLOSE output_file
$ SAY ""
$ SAY "Please wait...
$ SAY ""
$ SUBMIT/NOPRINT/NOTIFY 'COM_FILE'
$ SYNCHRONIZE FOCTEMP
$!
$! MOVE RESULTING BATCH TRANSACTIONS TO MAINTENANCE CYCLE FEED FILE.
$!
$ CONVERT/APPEND SYS$LOGIN:MATRFIX.FTM SI$DATA:AIB2FL.DAT
$!
$! CLEAN UP.
$!
$ DELETE/LOG SYS$LOGIN:*.FTM;*
$ DELETE/LOG SYS$LOGIN:*.MAS;*
$ DELETE/LOG SYS$LOGIN:*.WP;*
$ DELETE/LOG SYS$LOGIN:FOCTEMP.COM;*
$!
$EXIT:
$!
$ SAY " "
$ SAY "All done..."
$ SAY " "
$!
$ SET DEFAULT SYS$LOGIN
$ EXIT
FOCUS program :
-*begin doc
-*
-*FEX: AM-CLOSE-MATR
-*
-* This FOCUS request will create the batch transactions to close
-* matriculation records on students; those who did not attend for
-* the input term.
-*
-*INPUT
-* TERM : Enrollment Term
-*
-*end doc
-**********************************************************************
SET PAGE = NOPAGE
SET LINES = 999999
JOIN CLEAR *
FILEDEF MATRFIX DISK MATRFIX.FTM APPEND LREC 80 RECFM F
-*
-* Create The Batch Header
-*
DEFINE FILE AAFILE
BATCH_HEADER1/A40 = '$$$MSC501 MATRICULATE FX YAM ';
BATCH_HEADER2/A40 = ' ';
END
TABLE FILE AAFILE
PRINT BATCH_HEADER1 AS ''
BATCH_HEADER2 AS ''
BY STU_ID NOPRINT
ON TABLE SAVE AS MATRFIX
IF RECORDLIMIT EQ 1
END
-*
-* Get all open matriculations.
-*
TABLE FILE AAFILE
PRINT COLLEGE AP_DEG MAJOR ENTRY_TERM BY STU_ID
ON TABLE HOLD AS AATEMP1
WHERE ENTRY_TERM LE '&TERM';
WHERE EXIT_TERM GT '&TERM';
WHERE EXIT_ACTION NE 'GD';
WHERE AA060_ORDER LE AP_CNTR;
END
-*
-* Get the term array for each student selected above; this will
-* show the terms a student was active in.
-*
JOIN STU_ID IN AATEMP1 TO STU_ID IN AAFILE AS J1
TABLE FILE AATEMP1
PRINT COLLEGE AP_DEG MAJOR ENTRY_TERM TERM_STAT_ARRAY_1
BY STU_ID
ON TABLE HOLD AS AATEMP2
WHERE TERM_STAT_ARRAY_1 NE '';
END
-*
-* Create the join keys to hook to the RTFILE.
-*
DEFINE FILE AATEMP2
JN_KEY/A14=(TERM_STAT_ARRAY_1|STU_ID);
COLLEGE_MATR/A3=COLLEGE;
END
TABLE FILE AATEMP2
PRINT COLLEGE_MATR AP_DEG MAJOR ENTRY_TERM TERM_STAT_ARRAY_1 STU_ID
BY JN_KEY
ON TABLE HOLD AS AATEMP3
END
-*
-* Looks at open matriculations who have the major information
-* listed as primary on screen 111.
-*
-* Join to RTFILE to get college, degree, and major information
-* for each term a student was active in {primary major}.
-*
JOIN JN_KEY IN AATEMP3 TO KEY IN RTFILE AS J2
TABLE FILE AATEMP3
PRINT COLLEGE DEGREE MAJOR_1 ENTRY_TERM
BY STU_ID
BY COLLEGE_MATR
BY AP_DEG
BY MAJOR
BY HIGHEST TERM
ON TABLE HOLD AS AATEMP4
END
-*
-* Selection criteria to create a link between a student's
-* matriculation and their enrollment history {primary major}.
-*
DEFINE FILE AATEMP4
CHK_FLD_MJR/A11=(COLLEGE|DEGREE|MAJOR_1);
CHK_FLD_MAT/A11=(COLLEGE_MATR|AP_DEG|MAJOR);
-*
THS_REC/A1=IF (((CHK_FLD_MJR NE LAST CHK_FLD_MJR) OR
(CHK_FLD_MAT NE LAST CHK_FLD_MAT)) AND
(STU_ID EQ LAST STU_ID) AND (COLLEGE_MATR EQ COLLEGE) AND
(AP_DEG EQ DEGREE) AND (MAJOR EQ MAJOR_1)) OR
(STU_ID NE LAST STU_ID) THEN 'Y' ELSE 'N';
END
TABLE FILE AATEMP4
PRINT COLLEGE_MATR AP_DEG MAJOR ENTRY_TERM
COLLEGE DEGREE MAJOR_1 TERM
BY STU_ID
ON TABLE HOLD AS AATEMP5
WHERE THS_REC EQ 'Y';
END
-*
-* Select remaining records whose matriculation data is the same
-* as term data {primary major}.
-*
DEFINE FILE AATEMP5
CHK_PROG/A11=COLLEGE_MATR|AP_DEG|MAJOR;
END
TABLE FILE AATEMP5
PRINT COLLEGE_MATR AP_DEG MAJOR
COLLEGE DEGREE MAJOR_1 ENTRY_TERM
BY STU_ID
BY CHK_PROG
BY HIGHEST TERM
ON TABLE HOLD AS AATEMP6
WHERE (COLLEGE_MATR EQ COLLEGE) AND (AP_DEG EQ DEGREE) AND
(MAJOR EQ MAJOR_1);
END
-*
-* Get most recent term that a student was registered in degree
-* associated with matriculation {primary major}.
-*
DEFINE FILE AATEMP6
THS_REC/A1=IF (STU_ID NE LAST STU_ID) OR ((STU_ID EQ LAST STU_ID) AND
(CHK_PROG NE LAST CHK_PROG)) THEN 'Y'
ELSE 'N';
END
TABLE FILE AATEMP6
PRINT COLLEGE_MATR AP_DEG MAJOR ENTRY_TERM
COLLEGE DEGREE MAJOR_1 TERM
BY STU_ID
ON TABLE HOLD AS AATEMP7
WHERE THS_REC EQ 'Y';
END
-*
-* Looks at open matriculations who have the major information
-* listed as secondary on screen 111.
-*
-* Join to RTFILE to get college, degree, and major information
-* for each term a student was active in {secondary major}.
-*
JOIN CLEAR *
JOIN JN_KEY IN AATEMP3 TO KEY IN RTFILE AS J3
TABLE FILE AATEMP3
PRINT COLLEGE_SEC DEGREE_SEC MAJOR_1_SEC ENTRY_TERM
BY STU_ID
BY COLLEGE_MATR
BY AP_DEG
BY MAJOR
BY HIGHEST TERM
ON TABLE HOLD AS AATEMP10
WHERE MAJOR_1_SEC NE '';
END
-*
-* Selection criteria to create a link between a student's
-* matriculation and their enrollment history {secondary major}.
-*
DEFINE FILE AATEMP10
CHK_FLD_MJR/A11=(COLLEGE_SEC|DEGREE_SEC|MAJOR_1_SEC);
CHK_FLD_MAT/A11=(COLLEGE_MATR|AP_DEG|MAJOR);
-*
THS_REC/A1=IF (((CHK_FLD_MJR NE LAST CHK_FLD_MJR) OR
(CHK_FLD_MAT NE LAST CHK_FLD_MAT)) AND
(STU_ID EQ LAST STU_ID) AND (COLLEGE_MATR EQ COLLEGE_SEC) AND
(AP_DEG EQ DEGREE_SEC) AND (MAJOR EQ MAJOR_1_SEC)) OR
(STU_ID NE LAST STU_ID) THEN 'Y' ELSE 'N';
END
TABLE FILE AATEMP10
PRINT COLLEGE_MATR AP_DEG MAJOR ENTRY_TERM
COLLEGE_SEC DEGREE_SEC MAJOR_1_SEC TERM
BY STU_ID
ON TABLE HOLD AS AATEMP11
WHERE THS_REC EQ 'Y';
END
-*
-* Select remaining records whose matriculation data is the same
-* as term data {secondary major}.
-*
DEFINE FILE AATEMP11
CHK_PROG/A11=COLLEGE_MATR|AP_DEG|MAJOR;
END
TABLE FILE AATEMP11
PRINT COLLEGE_MATR AP_DEG MAJOR ENTRY_TERM
COLLEGE_SEC DEGREE_SEC MAJOR_1_SEC
BY STU_ID
BY CHK_PROG
BY HIGHEST TERM
ON TABLE HOLD AS AATEMP12
WHERE (COLLEGE_MATR EQ COLLEGE_SEC) AND (AP_DEG EQ DEGREE_SEC) AND
(MAJOR EQ MAJOR_1_SEC);
END
-*
-* Get most recent term that a student was registered in degree
-* associated with matriculation {secondary major}.
-*
DEFINE FILE AATEMP12
THS_REC/A1=IF (STU_ID NE LAST STU_ID) OR ((STU_ID EQ LAST STU_ID) AND
(CHK_PROG NE LAST CHK_PROG)) THEN 'Y'
ELSE 'N';
END
TABLE FILE AATEMP12
PRINT COLLEGE_MATR AP_DEG MAJOR ENTRY_TERM
COLLEGE_SEC DEGREE_SEC MAJOR_1_SEC TERM
BY STU_ID
ON TABLE HOLD AS AATEMP13
WHERE THS_REC EQ 'Y';
END
-*
-* Combine two files {primary and secondary data}.
-*
-RUN
-VMS COPY AATEMP7.FTM,AATEMP13.FTM AATEMP14.FTM
-*
-* Sort file so most recent term is first for each student.
-*
FILEDEF AATEMP13 DISK AATEMP14.FTM
DEFINE FILE AATEMP13
CHK_PROG/A11=COLLEGE_MATR|AP_DEG|MAJOR;
END
TABLE FILE AATEMP13
PRINT COLLEGE_MATR AP_DEG MAJOR ENTRY_TERM
COLLEGE_SEC DEGREE_SEC MAJOR_1_SEC
BY STU_ID
BY CHK_PROG
BY HIGHEST TERM
ON TABLE HOLD AS AATEMP15
END
-*
-* Get most recent term that a student was registered in degree
-* associated with matriculation {all majors}.
-*
DEFINE FILE AATEMP15
THS_REC/A1=IF (STU_ID NE LAST STU_ID) OR ((STU_ID EQ LAST STU_ID) AND
(CHK_PROG NE LAST CHK_PROG)) THEN 'Y'
ELSE 'N';
END
TABLE FILE AATEMP15
PRINT COLLEGE_MATR AP_DEG MAJOR ENTRY_TERM
COLLEGE_SEC DEGREE_SEC MAJOR_1_SEC TERM
BY STU_ID
ON TABLE HOLD AS AATEMP16
WHERE THS_REC EQ 'Y';
END
-*
-* Select those whose last enrollment term within the matriculation
-* is before the input term.
-*
TABLE FILE AATEMP16
PRINT COLLEGE_MATR AP_DEG MAJOR ENTRY_TERM
COLLEGE_SEC DEGREE_SEC MAJOR_1_SEC TERM
BY STU_ID
ON TABLE HOLD AS AATEMP17
WHERE TERM LT '&TERM';
END
-*
-* Create the batch transaction to close the matriculation on screen 110.
-*
DEFINE FILE AATEMP17
WHICH_TERM/A5=IF TERM LT ENTRY_TERM THEN ENTRY_TERM ELSE TERM;
BTH_TRANS/A80 = ('15C'|STU_ID|' '|ENTRY_TERM|COLLEGE_MATR|AP_DEG|
MAJOR|' '|WHICH_TERM|'EP');
END
TABLE FILE AATEMP17
PRINT BTH_TRANS AS '' BY STU_ID NOPRINT
ON TABLE SAVE AS MATRFIX
END
-*
-* Close matriculation records on students who never enrolled.
-* That is, there are no entries on screen 1E1.
-*
-* Select students who did register.
-*
JOIN CLEAR *
JOIN STU_ID IN AATEMP1 TO STU_ID IN AAFILE AS J1
TABLE FILE AATEMP1
PRINT TERM_STAT_ARRAY_1 BY STU_ID
ON TABLE HOLD AS AATEMP18
WHERE TERM_STAT_ARRAY_1 NE '';
END
-*
-* Remove duplicates.
-*
DEFINE FILE AATEMP18
THS_REC/A1=IF STU_ID NE LAST STU_ID THEN 'Y' ELSE 'N';
END
TABLE FILE AATEMP18
PRINT TERM_STAT_ARRAY_1 BY STU_ID
ON TABLE HOLD AS AATEMP19
WHERE THS_REC EQ 'Y';
END
-*
-* Select students who never enrolled.
-*
MATCH FILE AATEMP1
PRINT COLLEGE AP_DEG MAJOR ENTRY_TERM BY STU_ID
RUN
FILE AATEMP19
PRINT TERM_STAT_ARRAY_1 BY STU_ID
AFTER MATCH HOLD OLD-NOT-NEW
END
-RUN
-*
-* Create the batch transaction to close the matriculation on screen 110.
-*
DEFINE FILE HOLD
BTH_TRANS/A80 = ('15C'|STU_ID|' '|ENTRY_TERM|COLLEGE|AP_DEG|
MAJOR|' '|ENTRY_TERM|'EP');
END
TABLE FILE HOLD
PRINT BTH_TRANS AS '' BY STU_ID NOPRINT
ON TABLE SAVE AS MATRFIX
END
JOIN CLEAR *
This page hosted by
Get your own Free Homepage