DSN8MPT
THIS MODULE BUILDS A PROJECT ACTIVITY LIST, COMPOSED OF A SELECTED PROJECT AND ITS ESTIMATED AND/OR STAFFED ACTIVITIES.
DSN8MPT: PROC REORDER; 00010000
/********************************************************************* 00020000
* * 00030000
* MODULE NAME = DSN8MPT * 00040000
* * 00050000
* DESCRIPTIVE NAME = DB2 SAMPLE APPLICATION * 00060000
* PROJECT ACTIVITY LIST - DETAIL MODULE * 00070000
* PL/I * 00080000
* PROJECT * 00090000
* * 00100000
* COPYRIGHT = 5740-XYR (C) COPYRIGHT IBM CORP 1982, 1989 * 00110000
* REFER TO COPYRIGHT INSTRUCTIONS FORM NUMBER G120-2083 * 00120000
* * 00130000
* STATUS = VERSION 2 RELEASE 2, LEVEL 0 * 00140000
* * 00150000
* FUNCTION = THIS MODULE BUILDS A PROJECT ACTIVITY LIST, * 00160000
* COMPOSED OF A SELECTED PROJECT AND ITS * 00170000
* ESTIMATED AND/OR STAFFED ACTIVITIES. * 00180000
* * 00190000
* THE SELECTED PROJECT CAN BE SPECIFIED * 00200000
* IN SEVERAL WAYS: * 00210000
* THROUGH A 'NEW' REQUEST * 00220000
* . IT CAN BE SPECIFIED IN SECONDARY SELECTION * 00230000
* . IT CAN BE THE ONLY IN SECONDARY SELECTION * 00240000
* THROUGH A 'SCROLL' REQUEST * 00250000
* . IT IS THE SAME AS LAST TIME * 00260000
* ('NEXT' FUNCTION) * 00270000
* * 00280000
* NOTES = * 00290000
* DEPENDENCIES = NONE * 00300000
* RESTRICTIONS = THE VALID OPTIONS ARE: * 00310000
* P - D - AL - DI,DN,EI,EN,PI,PN,RI,RN * 00320000
* * 00330000
* MODULE TYPE = * 00340000
* PROCESSOR = DB2 PRECOMPILER, PL/I OPTIMIZER * 00350000
* MODULE SIZE = SEE LINK-EDIT * 00360000
* ATTRIBUTES = REUSABLE * 00370000
* * 00380000
* ENTRY POINT = DSN8MPT * 00390000
* PURPOSE = SEE FUNCTION * 00400000
* LINKAGE = MODULE CALLED BY DSN8MPM * 00410000
* * 00420000
* INPUT = PARAMETERS EXPLICITLY PASSED TO THIS FUNCTION: * 00430000
* COMMON AREA. * 00440000
* * 00450000
* SYMBOLIC LABEL/NAME = PCONVSTA.MAXSEL * 00460000
* DESCRIPTION = NUMBER OF SELECTIONS * 00470000
* * 00480000
* SYMBOLIC LABEL/NAME = COMPARM .NEWREQ * 00490000
* DESCRIPTION = Y-NEW REQUEST * 00500000
* N-OLD REQUEST * 00510000
* * 00520000
* SYMBOLIC LABEL/NAME = OUTAREA .OUTPUT * 00530000
* DESCRIPTION = SECONDARY SELECTION OUTPUT * 00540000
* OR 'LAST TIME' DETAIL OUTPUT * 00550000
* * 00560000
* SYMBOLIC LABEL/NAME = INAREA * 00570000
* DESCRIPTION = USER INPUT * 00580000
* * 00590000
* SYMBOLIC LABEL/NAME = DSN8MP_POS.MPTSAVE * 00600000
* DESCRIPTION = SAVED DATA FROM 'LAST TIME' * 00610000
* * 00620000
* * 00630000
* OUTPUT = PARAMETERS EXPLICITLY RETURNED: * 00640000
* COMMON AREA. * 00650000
* * 00660000
* SYMBOLIC LABEL/NAME = PCONVSTA.PREV * 00670000
* DESCRIPTION = 'D' * 00680000
* * 00690000
* SYMBOLIC LABEL/NAME = OUTAREA .OUTPUT * 00700000
* DESCRIPTION = SCREEN DETAIL OUTPUT * 00710000
* * 00720000
* EXIT-NORMAL = * 00730000
* * 00740000
* EXIT-ERROR = * 00750000
* * 00760000
* RETURN CODE = NONE * 00770000
* * 00780000
* ABEND CODES = NONE * 00790000
* * 00800000
* ERROR-MESSAGES = * 00810000
* DSN8018I 'CURRENT' DEPARTMENT NOT FOUND * 00820000
* DSN8019E 'HIGHER' DEPARTMENT DOES NOT EXIST * 00830000
* DSN8038I 'CURRENT' PROJECT NOT FOUND * 00840000
* DSN8056I NO MORE DATA TO DISPLAY * 00850000
* DSN8066E UNSUPPORTED PFK OR LOGIC ERROR * 00860000
* DSN8070E VITAL DATA IS MISSING IN * 00870000
* TABLE 'TOPTVAL' * 00880000
* DSN8073E SPECIFIED LINE-NUMBER NOT FOUND IN * 00890000
* PREVIOUS SCREEN * 00900000
* * 00910000
* * 00920000
* EXTERNAL REFERENCES = * 00930000
* ROUTINES/SERVICES = * 00940000
* DSN8MPG = ERROR MESSAGE ROUTINE * 00950000
* * 00960000
* DATA-AREAS = * 00970000
* DSN8MPEM = DCLGEN FOR VEMP - EMPLOYEE TABLE * 00980000
* DSN8MPPJ = DCLGEN FOR VPROJ - PROJECT TABLE * 00990000
* DSN8MPSA = DCLGEN FOR VSTAFACT - STAFFING LIST TABLE * 01000000
* DSN8MPOV = DCLGEN FOR VOPTVAL - OPTIONS VALIDATION TABLE * 01010000
* DSN8MPDT = DCLGEN FOR VDSPTXT - DISPLAY AREA TEXT TABLE * 01020000
* DSN8MPCA = SAMPLE APPLICATION COMMUNICATIONS AREA * 01030000
* DSN8MPDH = CURSOR FOR DISPLAY AREA TEXT * 01040000
* DSN8MPSL = CURSOR FOR PROJECT STAFFING LIST * 01050000
* * 01060000
* CONTROL-BLOCKS = * 01070000
* SQLCA = SQL COMMUNICATION AREA * 01080000
* * 01090000
* TABLES = NONE * 01100000
* * 01110000
* CHANGE-ACTIVITY = NONE * 01120000
* * 01130000
* * 01140000
* *PSEUDOCODE* * 01150000
* * 01160000
* PROCEDURE * 01170000
* MAIN PROCESSING. * 01180000
* SQL-GET TEXTLINES (HEADER, INFO AND PFK) FROM TABLE VOPTVAL * 01190000
* IF NOT FOUND, ERROR('070E') * 01200000
* IF NEW REQUEST THEN * 01210000
* IF MAX SELECTION IS 1 THEN SELECTED-LINE = '01' * 01220000
* ELSE GET SELECTED-LINE FROM INPUT DATA * 01230000
* FIND SELECTED PROJECT IN PREVIOUS SCREEN * 01240000
* IF NOT FOUND, ERROR('073E') * 01250000
* SQL-FETCH DISPLAY AREA HEADER LINES FROM VDSPTXT USING DH * 01260000
* IF NEW REQUEST THEN * 01270000
* CLEAR SAVED SCROLLING LIMITS * 01280000
* CALL BUILD-PROJECT-LINE * 01290000
* CALL BUILD-DISPLAY-ASCENDING * 01300000
* ELSE * 01310000
* FIND SELECTED PROJECT IN PREVIOUS SCREEN * 01320000
* SELECT PFK VALUE * 01330000
* WHEN('08' OR 'NEXT') CALL BUILD-DISPLAY-ASCENDING * 01340000
* OTHERWISE ERROR('066E') * 01350000
* RETURN TO CALLER (OF DSN8MPT) * 01360000
* * 01370000
* ERROR AND MESSAGE HANDLER. * 01380000
* SQL-GET MESSAGE TEXT FROM DSN8MPG FOR GIVEN ARGUMENT * 01390000
* IF NOT FOUND, BUILD MESSAGE TEXT * 01400000
* RETURN TO CALLER (OF DSN8MPT) * 01410000
* * 01420000
* BUILD-PROJECT-LINE. * 01430000
* SQL-GET PROJECT DATA FOR 'CURRENT' PROJECT * 01440000
* FROM TABLE VPROJ * 01450000
* IF 'CURRENT' PROJECT NOT FOUND, ERROR('037I') * 01460000
* MOVE PROJECT DATA TO PROJECT LINE IN DISPLAY AREA * 01470000
* SQL-GET EMPLOYEE DATA FOR RESPONSIBLE EMPLOYEE * 01480000
* FROM TABLE VEMP * 01490000
* IF FOUND, MOVE EMPLOYEE NAME TO PROJECT LINE IN DISPLAY AREA * 01500000
* RETURN TO CALLER * 01510000
* * 01520000
* BUILD-DISPLAY-ASCENDING. * 01530000
* SQL-OPEN CURSOR SLA * 01540000
* DO WHILE(MORE DATA AND THERE IS ROOM IN DISPLAY AREA) * 01550000
* SQL-FETCH INTO PSTAFACT USING SLA * 01560000
* IF FIRST TIME * 01570000
* CLEAR DISPLAY AREA (EXCEPT HEADERS) * 01580000
* SELECT RECORD TYPE * 01590000
* WHEN('1') PUT ESTIMATE DATA (MAY BE NULL) * 01600000
* WHEN('2') PUT STAFFING DATA (MAY BE NULL) * 01610000
* MOVE CURRENT LINE * 01620000
* END * 01630000
* IF NO DATA FOUND, MESSAGE('056I') * 01640000
* SAVE LIMIT VALUE FOR NEXT TIME SCROLLING * 01650000
* SQL-CLOSE CURSOR SLA * 01660000
* IF THERE IS SAME ACTIVITY ON TWO CONSECUTIVE LINES, * 01670000
* BLANK THE SECOND ONE * 01680000
* RETURN TO CALLER * 01690000
* END. * 01700000
*-------------------------------------------------------------------*/01710000
01720000
/********************************************************/ 01730000
/* ** FIELDS SENT TO MESSAGE ROUTINE */ 01740000
/********************************************************/ 01750000
01760000
DCL MODULE CHAR (07) INIT ('DSN8MPT'); 01770000
DCL OUTMSG CHAR (69); 01780000
01790000
/********************************************************************/ 01800000
/* ** BUILT-IN FUNCTIONS */ 01810000
/********************************************************************/ 01820000
DCL 01830000
(ADDR, 01840000
HBOUND, 01850000
HIGH, 01860000
LENGTH, 01870000
LOW, 01880000
SUBSTR) BUILTIN; 01890000
01900000
/********************************************************************/ 01910000
/* ** PROGRAM VARIABLES */ 01920000
/********************************************************************/ 01930000
01940000
DCL 01950000
TOPLINE FIXED BIN(31), /* TOP LINE ON SCREEN */ 01960000
BOTLINE FIXED BIN(31), /* BOTTOM LINE ON SCREEN */ 01970000
CURRLINE FIXED BIN(31), /* CURRENT LINE ON SCREEN */ 01980000
I FIXED BIN(31), 01990000
CURRLINE_PTR PTR, /* CURRENT LINE POINTER */ 02000000
PREV_ACTNO FIXED DEC(5), 02010000
LINE_SELECT_C CHAR(2), 02020000
LINE_SELECT_P PIC'99' DEF LINE_SELECT_C; 02030000
%SKIP(2);02040000
/***************************************************************/ 02050000
/* ARRAY USED TO RECOGNIZE 'NULL'- VALUES FOR SPECIFIC FIELDS */ 02060000
/* IN THE 'PSTAFACT' STRUCTURE */ 02070000
/***************************************************************/ 02080000
02090000
DCL 02100000
NULL_INDICATORS(11) FIXED BIN(15); 02110000
%PAGE;02120000
/***************************************************************/ 02130000
/* THREE OVERLAYS USED TO PLACE OUTPUT DATA CORRECT ON SCREEN */ 02140000
/***************************************************************/ 02150000
02160000
DCL 02170000
1 PROJ_LINE BASED(CURRLINE_PTR), /* PROJECT */ 02180000
3 P1NO CHAR( 6), 02190000
3 X11 CHAR( 1), 02200000
3 P1NA CHAR(24), 02210000
3 X12 CHAR( 1), 02220000
3 P1ST CHAR(10), 02230000
3 X13 CHAR( 1), 02240000
3 P1EN CHAR(10), 02250000
3 X14 CHAR( 2), 02260000
3 P1ES PIC'ZZV.99', 02270000
3 X15 CHAR( 3), 02280000
3 P1RE CHAR(16); 02290000
%SKIP(2);02300000
DCL 02310000
1 ESTM_LINE BASED(CURRLINE_PTR), /* ACTIVITY ESTIMATE */ 02320000
3 X21 CHAR( 1), 02330000
3 E1NO PIC'ZZZZZ', 02340000
3 X22 CHAR( 1), 02350000
3 E1NA CHAR(23), 02360000
3 X23 CHAR( 2), 02370000
3 E1ST CHAR(10), 02380000
3 X24 CHAR( 1), 02390000
3 E1EN CHAR(10), 02400000
3 X25 CHAR( 2), 02410000
3 E1ES PIC'ZZV.ZZ', 02420000
3 X26 CHAR(20); 02430000
%SKIP(2);02440000
DCL 02450000
1 STAF_LINE BASED(CURRLINE_PTR), /* STAFFING */ 02460000
3 X31 CHAR( 1), 02470000
3 S1NO PIC'ZZZZZ', 02480000
3 X32 CHAR( 1), 02490000
3 S1NA CHAR(23), 02500000
3 X33 CHAR( 2), 02510000
3 S1ST CHAR(10), 02520000
3 X34 CHAR( 1), 02530000
3 S1EN CHAR(10), 02540000
3 X35 CHAR( 3), 02550000
3 S1AL PIC'ZZV.99', 02560000
3 X36 CHAR( 2), 02570000
3 S1RE CHAR(16), 02580000
3 X37 CHAR( 1); 02590000
%PAGE;02600000
/***************************************************************/ 02610000
/* ** INITIALIZE CONTROL FIELD TO DETAIL HANDLER */ 02620000
/* ** INITIALIZE MODULE TO DSN8MPD */ 02630000
/***************************************************************/ 02640000
02650000
PCONVSTA.PREV = 'D'; /*INITIALIZE CONTROL FIELD*/ 02660000
DSN8_MODULE_NAME.MAJOR = 'DSN8MPT'; /*INITIALIZE MODULE NAME */ 02670000
DSN8_MODULE_NAME.MINOR = ''; /* CLEAR ROUTINE NAME */ 02680000
02690000
/*************************************************************/ 02700000
/* ** RETRIEVE HEADING LINE, PFKEY DESCRIPTION, AND MESSAGE */ 02710000
/*************************************************************/ 02720000
02730000
EXEC SQL SELECT * /* RETRIEVE INFORMATION */ 02740000
02750000
INTO :POPTVAL 02760000
FROM VOPTVAL 02770000
WHERE MAJSYS = :INAREA.MAJSYS 02780000
AND ACTION = :INAREA.ACTION 02790000
AND OBJFLD = :INAREA.OBJFLD 02800002
AND SCRTYPE = 'D'; 02810000
%SKIP(2);02820000
IF SQLCODE^=0 THEN 02830000
/* SOME VITAL DATA IS MISSING IN */ 02840000
/* THE PROGRAM RELATED TABLE */ 02850000
/* PRINT ERROR MESSAGE */ 02860000
02870000
DO; 02880000
CALL DSN8MPG (MODULE, '070E', OUTMSG); 02890000
CALL ERROR_HANDLER; /* WITHOUT RETURNING*/ 02900000
END; 02910000
02920000
/*********************************************************/ 02930000
/* ** PUT DATA IN THE SCREEN */ 02940000
/*********************************************************/ 02950000
02960000
PCONVSTA.LASTSCR = 'DSN8001'; 02970000
PCONVSTA.TITLE = POPTVAL.HEADTXT; /* OBTAIN HEADING */ 02980000
PCONVSTA.MSG = POPTVAL.INFOTXT; /* OBTAIN MESSAGE INFO. */ 02990000
PCONVSTA.PFKTEXT = POPTVAL.PFKTXT; /* OBTAIN PFKEY INFO. */ 03000000
%PAGE;03010000
03020000
/* SET UP INDEX FOR THE BOTTOMLINE */ 03030000
/* IN THE DISPLAY AREA */ 03040000
03050000
BOTLINE = HBOUND(PCONVSTA.LINE,1); 03060000
03070000
/*********************************************************/ 03080000
/* ** DETERMINE IF NEW REQUEST */ 03090000
/* ** IF SO, PREVIOUS REQUEST WAS SECONDARY SEL */ 03100000
/*********************************************************/ 03110000
03120000
IF COMPARM.NEWREQ='Y' THEN /* NEW REQUEST ? */ 03130000
DO; 03140000
IF PCONVSTA.MAXSEL=1 THEN 03150000
LINE_SELECT_C = '01'; /* SPECIFIED LINE NO. = '01'*/ 03160000
03170000
ELSE /* ELSE */ 03180000
/* GET SPECIFIED LINE NO. */ 03190000
/* FROM INPUT DATA */ 03200000
03210000
DO; 03220000
LINE_SELECT_C = SUBSTR(COMPARM.INAREA.DATA,1,2); 03230000
PCONVSTA.OUTAREA.DATA = ''; 03240000
END; 03250000
%SKIP(2);03260000
DO I=1 TO HBOUND(DSN8MP2_POS.LINENO,1); 03270000
IF LINE_SELECT_P = DSN8MP2_POS(I).LINENO THEN 03280000
LEAVE; 03290000
END; 03300000
%SKIP(2);03310000
IF I>HBOUND(DSN8MP2_POS.LINENO,1) THEN 03320000
03330000
/* THE SPECIFIED LINE NO. WAS NOT */ 03340000
/* FOUND IN THE PREVIOUS SCREEN */ 03350000
DO; /* PRINT ERROR MESSAGE */ 03360000
CALL DSN8MPG (MODULE, '073E', OUTMSG); 03370000
CALL ERROR_HANDLER; /* WITHOUT RETURNING*/ 03380000
END; 03390000
%SKIP(2);03400000
/* SAVE SELECTED PROJECT NUMBER*/ 03410000
03420000
PSTAFACT.PROJNO = DSN8MP2_POS(I).PROJNUM; 03430000
END; 03440000
%PAGE;03450000
/**********************************************************/ 03460000
/* ** USING THE SQL-CURSOR 'DH' */ 03470000
/* ** GET HEATING LINES FOR DISPLAY AREA */ 03480000
/**********************************************************/ 03490000
03500000
EXEC SQL OPEN DH; /* OPEN DH CURSOR */ 03510000
03520000
DO I=1 TO BOTLINE UNTIL(SQLCODE^=0); /* GET HEATING LINES */ 03530000
EXEC SQL FETCH DH 03540000
INTO :PDSPTXT.DSPLINE, :PDSPTXT.LINENO; 03550000
IF SQLCODE=0 THEN 03560000
PCONVSTA.LINE(I) = PDSPTXT.DSPLINE; 03570000
END; 03580000
EXEC SQL CLOSE DH; /* CLOSE DH CURSOR */ 03590000
03600000
/* TOPLINE IS THE FIRST AVAILABLE */ 03610000
TOPLINE = I; /* LINE IN THE DISPLAY AREA */ 03620000
CURRLINE_PTR = ADDR(PCONVSTA.LINE(TOPLINE)); 03630000
%PAGE;03640000
IF COMPARM.NEWREQ='Y' THEN 03650000
/* THIS IS A NEW REQUEST, SO MAKE */ 03660000
/* SURE WE DON'T LIMIT OUT SEARCH */ 03670000
DO; 03680000
MPTSAVE.ACTMIN = 0; 03690000
MPTSAVE.NULMIN = 0; 03700000
MPTSAVE.STDMIN = '1601-01-01'; 03710000
MPTSAVE.TYPMIN = LOW(LENGTH(TYPMIN)); 03720000
MPTSAVE.EMPMIN = LOW(LENGTH(EMPMIN)); 03730000
03740000
CALL BUILD_PROJECT_LINE; /* BUILD THE PROJECT LINE */ 03750000
CALL BUILD_DISPLAY_ASCENDING; /* BUILD DISPLAY AREA */ 03760000
END; 03770000
ELSE 03780000
/* THIS IS AN ANSWER (SHOULD BE A */ 03790000
/* SCROLL REQUEST) SO WE SAVE THE */ 03800000
/* CURRENT PROJECT */ 03810000
/* FROM THE PREVIOUS SCREEN */ 03820000
DO; 03830000
PSTAFACT.PROJNO = CURRLINE_PTR->PROJ_LINE.P1NO; 03840000
03850000
/* DETERMINE THE SCROLL REQUEST */ 03860000
/* AND CALL CORRESPONDING ROUTINE */ 03870000
SELECT; 03880000
WHEN(COMPARM.PFKIN='08', /*PFKEY 8 OR NEXT*/ 03890000
SUBSTR(COMPARM.DATA,1,4)='NEXT') 03900000
CALL BUILD_DISPLAY_ASCENDING; 03910000
03920000
/* UNSUPPORTED PFK OR LOGIC ERROR */ 03930000
OTHERWISE /* PRINT ERROR MESSAGE */ 03940000
DO; 03950000
CALL DSN8MPG (MODULE, '066E', OUTMSG); 03960000
CALL ERROR_HANDLER; /* WITHOUT RETURNING*/ 03970000
END; 03980000
END; 03990000
END; 04000000
%PAGE;04010000
BUILD_PROJECT_LINE: 04020000
PROC REORDER; 04030000
DSN8_MODULE_NAME.MINOR = 'PROJLINE'; 04040000
EXEC SQL SELECT * 04050000
INTO :PPROJ:PNULLS_INDS 04060000
FROM VPROJ 04070000
WHERE PROJNO=:PSTAFACT.PROJNO; 04080000
%SKIP(2);04090000
IF SQLCODE^=0 THEN 04100000
DO; 04110000
CALL DSN8MPG (MODULE, '038I', OUTMSG); 04120000
CALL ERROR_HANDLER; /* WITHOUT RETURNING*/ 04130000
END; 04140000
%SKIP(2);04150000
PROJ_LINE = ''; 04160000
PROJ_LINE.P1NO = PPROJ.PROJNO; 04170000
PROJ_LINE.P1NA = PPROJ.PROJNAME; 04180000
04190000
/********************************************************************/ 04200000
/* IF THE NULL INDICATOR FOR THE START DATE IS 0, THE VALUE IS NOT */ 04210000
/* NULL. SET THE START DATE TO THE RETRIEVE VALUE. IF THE NULL */ 04220000
/* INDICATOR IS -1 THEN THE VALUE IS NULL. SET THE START DATE TO */ 04230000
/* BLANKS. */ 04240000
/********************************************************************/ 04250000
04260000
IF PNULLS_INDS(6) = 0 THEN 04270000
PROJ_LINE.P1ST = PPROJ.PRSTDATE; 04280000
ELSE 04290000
PROJ_LINE.P1ST = BLKDATE; 04300000
04310000
/********************************************************************/ 04320000
/* IF THE NULL INDICATOR FOR THE END DATE IS 0, THE VALUE IS NOT */ 04330000
/* NULL. SET THE START DATE TO THE RETRIEVE VALUE. IF THE NULL */ 04340000
/* INDICATOR IS -1 THEN THE VALUE IS NULL. SET THE END DATE TO */ 04350000
/* BLANKS. */ 04360000
/********************************************************************/ 04370000
04380000
IF PNULLS_INDS(7) = 0 THEN 04390000
PROJ_LINE.P1EN = PPROJ.PRENDATE; 04400000
ELSE 04410000
PROJ_LINE.P1EN = BLKDATE; 04420000
PROJ_LINE.P1ES = PPROJ.PRSTAFF; 04430000
%SKIP(2);04440000
/* HERE WE CAN PUT CODE TO FIND THE */ 04450000
/* RESPONSIBLE EMPLOYEE FOR THE PROJECT*/ 04460000
04470000
/*************************************************************/ 04480000
/* ** GET THE RESPONSIBLE EMPLOYEE */ 04490000
/* ** FROM TABLE VEMP */ 04500000
/*************************************************************/ 04510000
04520000
EXEC SQL SELECT * 04530000
INTO :PEMP.EMPNO, 04540000
:PEMP.FIRSTNME, 04550000
:PEMP.MIDINIT, 04560000
:PEMP.LASTNAME, 04570000
:PEMP.WORKDEPT:NULL_IND1 04580000
FROM VEMP 04590000
WHERE EMPNO=:PPROJ.RESPEMP; 04600000
%SKIP(2);04610000
IF SQLCODE=0 THEN 04620000
DO; 04630000
IF NULL_IND1 = -1 THEN 04640000
PEMP.WORKDEPT = ' '; 04650000
PROJ_LINE.P1RE = PEMP.LASTNAME||' '|| 04660000
SUBSTR(PEMP.FIRSTNME,1,1)|| 04670000
PEMP.MIDINIT; 04680000
END; 04690000
%SKIP(2);04700000
END /* OF PROCEDURE BUILD_PROJECT_LINE */; 04710000
%PAGE;04720000
/**********************************************************/ 04730000
/* ** BUILD DISPLAY AREA */ 04740000
/**********************************************************/ 04750000
%SKIP(2);04760000
BUILD_DISPLAY_ASCENDING: 04770000
PROC REORDER; 04780000
%SKIP(2);04790000
DSN8_MODULE_NAME.MINOR = 'BUILD_A'; /* GET ROUTINE NAME */ 04800000
%SKIP(2);04810000
EXEC SQL OPEN SLA; /* OPEN SLA CURSOR */ 04820000
04830000
/* LEAVE PROJECT LINE AND ONE MORE */ 04840000
/* BLANK IN THE DISPLAY AREA */ 04850000
04860000
CURRLINE = TOPLINE+2; 04870000
/* WE WILL SELECT DATA AS LONG AS */ 04880000
/* THERE IS ROOM IN DISPLAY AREA */ 04890000
DO WHILE( CURRLINE<=BOTLINE & SQLCODE=0 ); 04900000
%SKIP(2);04910000
EXEC SQL FETCH SLA 04920000
INTO :PSTAFACT :NULL_INDICATORS; 04930000
%SKIP(2);04940000
IF SQLCODE=0 THEN 04950000
/* WE HAVE FOUND SOME DATA SO WE */ 04960000
/* ADDRESS CURRENT AND NEXT LINES */ 04970000
04980000
DO; 04990000
CURRLINE_PTR = ADDR(PCONVSTA.LINE(CURRLINE)); 05000000
%SKIP(2);05010000
05020000
/*************************************************************/ 05030000
/* ** THIS ROUTINE IS ONLY PERFORMED THE FIRST TIME AND IT...*/ 05040000
/* ** CLEARS THE DISPLAY AREA */ 05050000
/* ** PUTS LEFT SIDE DEPARTMENT AND MANAGER IN PLACE */ 05060000
/* ** SAVES DATA FOR FUTURE SCROLLING */ 05070000
/*************************************************************/ 05080000
05090000
IF CURRLINE=TOPLINE+2 THEN 05100000
05110000
/* CLEAR DISPLAY AREA */ 05120000
05130000
DO I=TOPLINE+1 TO BOTLINE; 05140000
PCONVSTA.LINE(I) = ''; 05150000
END; 05160000
%SKIP(2);05170000
/*********************************************************/ 05180000
/* ** IF '1'- DATA IS ESTIMATE */ 05190000
/* ** THERE MAY BE 'NULL'-VALUES, */ 05200000
/* ** SO WE MUST TEST THE INDICATORS */ 05210000
/*********************************************************/ 05220000
05230000
SELECT( PSTAFACT.TYPE ); 05240000
WHEN('1') 05250000
DO; 05260000
ESTM_LINE.E1NO = PSTAFACT.ACTNO; 05270000
ESTM_LINE.E1NA = PSTAFACT.ACTDESC; 05280000
IF NULL_INDICATORS(9)=0 THEN 05290000
ESTM_LINE.E1ST = PSTAFACT.STDATE; 05300000
ELSE 05310000
ESTM_LINE.E1ST = BLKDATE; 05320000
IF NULL_INDICATORS(10)=0 THEN 05330000
ESTM_LINE.E1EN = PSTAFACT.ENDATE; 05340000
ELSE 05350000
ESTM_LINE.E1EN = BLKDATE; 05360000
IF NULL_INDICATORS(8)=0 THEN 05370000
ESTM_LINE.E1ES = PSTAFACT.EMPTIME; 05380000
ELSE 05390000
ESTM_LINE.E1ES = 0; 05400000
END; 05410000
%SKIP(2);05420000
/*********************************************************/ 05430000
/* ** IF '2'- DATA IS STAFFING */ 05440000
/* ** THERE MAY BE 'NULL'-VALUES, */ 05450000
/* ** SO WE MUST TEST THE INDICATORS */ 05460000
/*********************************************************/ 05470000
WHEN('2') 05480000
DO; 05490000
STAF_LINE.S1NO = PSTAFACT.ACTNO; 05500000
STAF_LINE.S1NA = PSTAFACT.ACTDESC; 05510000
IF NULL_INDICATORS(9)=0 THEN 05520000
STAF_LINE.S1ST = PSTAFACT.STDATE; 05530000
ELSE 05540000
STAF_LINE.S1ST = '0000-00-00'; 05550000
IF NULL_INDICATORS(10)=0 THEN 05560000
STAF_LINE.S1EN = PSTAFACT.ENDATE; 05570000
ELSE 05580000
STAF_LINE.S1EN = BLKDATE; 05590000
IF NULL_INDICATORS(8)=0 THEN 05600000
STAF_LINE.S1AL = PSTAFACT.EMPTIME; 05610000
ELSE 05620000
STAF_LINE.S1AL = 0; 05630000
STAF_LINE.S1AL = PSTAFACT.EMPTIME; 05640000
STAF_LINE.S1RE = PSTAFACT.LASTNAME||' '|| 05650000
SUBSTR(PSTAFACT.FIRSTNME,1,1)|| 05660000
PSTAFACT.MIDINIT; 05670000
END; 05680000
%SKIP(2);05690000
/* IGNORE IF TYPE IS NOT '1'1 OR '2'*/ 05700000
OTHERWISE; 05710000
END; 05720000
/* MOVE CURRENT LINE FOR NEXT TIME */ 05730000
CURRLINE = CURRLINE+1; 05740000
END; 05750000
END; 05760000
%SKIP(2);05770000
/****************************************************************/ 05780000
/* ** IF '3'- NO DATA FOUND */ 05790000
/* ** MOVE CURRENT LINE TO BOTTOM LINE (TERMINATE) */ 05800000
/****************************************************************/ 05810000
IF CURRLINE=TOPLINE+2 THEN 05820000
/* NO DATA FOUND, SO SETUP */ 05830000
/* FOR NEXT TIME SCROLLING */ 05840000
/* GO AND GIVE ERROR-MESSAGE*/ 05850000
DO; 05860000
05870000
MPTSAVE.ACTMIN = 32767; 05880000
MPTSAVE.NULMIN = 32767; 05890000
MPTSAVE.STDMIN = '9999-12-31'; 05900000
MPTSAVE.TYPMIN = HIGH(LENGTH(TYPMIN)); 05910000
MPTSAVE.EMPMIN = HIGH(LENGTH(EMPMIN)); 05920000
CALL DSN8MPG (MODULE, '056I', OUTMSG); 05930000
CALL ERROR_HANDLER; /* WITHOUT RETURNING */ 05940000
END; 05950000
%SKIP(2);05960000
IF SQLCODE^=0 THEN 05970000
05980000
/* WE HAVE REACHED END OF SEARCH */ 05990000
/* SAVE FOR NEXT TIME SCROLLING */ 06000000
DO; 06010000
MPTSAVE.ACTMIN = 32767; 06020000
MPTSAVE.NULMIN = 32767; 06030000
MPTSAVE.STDMIN = '9999-12-31'; 06040000
MPTSAVE.TYPMIN = HIGH(LENGTH(TYPMIN)); 06050000
MPTSAVE.EMPMIN = HIGH(LENGTH(EMPMIN)); 06060000
END; 06070000
%SKIP(2);06080000
ELSE 06090000
/* LAST DATA FOUND WILL BE SAVED */ 06100000
/* FOR NEXT TIME SCROLLING */ 06110000
DO; 06120000
MPTSAVE.ACTMIN = PSTAFACT.ACTNO; 06130000
MPTSAVE.NULMIN = PSTAFACT.ACTNO; 06140000
IF NULL_INDICATORS(9)=0 THEN 06150000
MPTSAVE.STDMIN = PSTAFACT.STDATE; 06160000
ELSE 06170000
DO; 06180000
MPTSAVE.STDMIN = '9999-12-31'; 06190000
MPTSAVE.NULMIN = 32767; 06200000
END; 06210000
MPTSAVE.TYPMIN = PSTAFACT.TYPE; 06220000
MPTSAVE.EMPMIN = PSTAFACT.EMPNO; 06230000
END; 06240000
%SKIP(2);06250000
EXEC SQL CLOSE SLA; /*CLOSE SLA CURSOR */ 06260000
%SKIP(2);06270000
06280000
/* IF WE HAVE THE SAME ACTIVITY ON */ 06290000
/* TWO CONSECUTIVE LINES WE WILL */ 06300000
/* BLANK OUT THE SECOND ONE */ 06310000
PREV_ACTNO = 0; 06320000
DO CURRLINE=TOPLINE+2 TO BOTLINE; 06330000
CURRLINE_PTR = ADDR(PCONVSTA.LINE(CURRLINE)); 06340000
IF ESTM_LINE.E1NO=PREV_ACTNO THEN 06350000
DO; 06360000
ESTM_LINE.E1NO = 0; 06370000
ESTM_LINE.E1NA = ''; 06380000
END; 06390000
ELSE 06400000
PREV_ACTNO = ESTM_LINE.E1NO; 06410000
END; 06420000
%SKIP(2);06430000
END; /* OF PROCEDURE BUILD_DISPLAY_ASCENDING */ 06440000
%PAGE;06450000
/**********************************************************/ 06460000
/* ** GETS ERROR TEXT AND PRINTS ERROR MESSAGES */ 06470000
/**********************************************************/ 06480000
ERROR_HANDLER: PROC; 06490000
DSN8_MODULE_NAME.MINOR = 'ERROR_H'; /* GET ROUTINE NAME */ 06500000
06510000
/* MESSAGE TEXT FOUND */ 06520000
/* PRINT MESSAGE */ 06530000
PCONVSTA.MSG = OUTMSG; 06540000
GOTO END_OF_DSN8MPT; 06550000
END; /* OF PROCEDURE ERROR_HANDLER */ 06560000
%SKIP(2);06570000
END_OF_DSN8MPT:; 06580000
%SKIP(2);06590000
DSN8_MODULE_NAME.MINOR = 'FINISHED'; /* FINISHED */ 06600000
%SKIP(2);06610000
END DSN8MPT; 06620000