COMPILE FUNCTION obj_React_Event(Method,Parms) /* Methods for REACT_EVENT table 01/10/2007 JCH - Initial Coding Properties: Methods: Find() ;* Lookup Reactor Event key */ DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Dialog_Box DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, Btree.Extract, ErrMsg DECLARE SUBROUTINE obj_Notes, Send_Info $INSERT MSG_EQUATES $INSERT REACT_EVENT_EQUATES $INSERT REACT_MODE_EQUATES $INSERT REACT_ESC_EQUATES $INSERT REACTOR_LOG_EQUATES $INSERT REACTOR_EQUATES $INSERT REACT_READS_EQUATES EQU CRLF$ TO \0D0A\ EQU TAB$ TO CHAR(9):CHAR(9) ErrTitle = 'Error in Stored Procedure "obj_React_Event"' ErrorMsg = '' ErrCode = '' IF NOT(ASSIGNED(Method)) THEN ErrorMsg = 'Unassigned parameter "Method" passed to subroutine' IF NOT(ASSIGNED(Parms)) THEN Parms = '' IF ErrorMsg NE '' THEN Set_Status(-1,ErrTitle:@SVM:ErrorMsg) RETURN '' END Result = '' BEGIN CASE CASE Method = 'Find' ; GOSUB Find CASE Method = 'Create' ; GOSUB Create CASE Method = 'SetStopDTM' ; GOSUB SetStopDTM CASE Method = 'EventTypeNote' ; GOSUB EventTypeNote CASE 1 ErrorMsg = 'Unknown Method ':QUOTE(Method):' passed to routine.' END CASE IF ErrorMsg NE '' THEN Set_Status(-1,ErrTitle:@SVM:ErrorMsg) RETURN '' END RETURN Result * * * * * * * Find: * * * * * * * ReactEventKeys = Dialog_Box( 'DIALOG_REACT_EVENT_QUERY', @WINDOW, '' ) Result = ReactEventKeys RETURN * * * * * * * Create: * * * * * * * ReactNo = Parms[1,@RM] EventDTM = Parms[COL2()+1,@RM] EventType = Parms[COL2()+1,@RM] LoggedBy = Parms[COL2()+1,@RM] Comment = Parms[COL2()+1,@RM] NewMode = Parms[COL2()+1,@RM] EventMode = Parms[COL2()+1,@RM] IF ReactNo = '' THEN ErrorMsg = 'Null parameter "ReactNo" passed to routine. (':Method:')' IF EventDTM = '' THEN ErrorMsg = 'Null parameter "EventDTM" passed to routine. (':Method:')' IF EventType = '' THEN ErrorMsg = 'Null parameter "EventType" passed to routine. (':Method:')' IF LoggedBy = '' THEN LoggedBy = @USER4 thisEventDTM = ICONV(EventDTM,'DT') IF thisEventDTM = '' THEN ErrorMsg = 'Ivalid Data ':QUOTE(EventDTM):' passed in "EventDTM" parameter. (':Method:')' END IF ErrorMsg NE '' THEN RETURN ReactEventKey = ReactNo:'*':thisEventDTM ReactEventRec = XLATE('REACT_EVENT',ReactEventKey,'','X') EscHrs = XLATE('REACTOR',ReactNo,'ACT_ESC_HRS','X') WONo = XLATE('CONFIG','WO_DAILY_SCHED':ReactNo,2,'X') LastRdDTM = XLATE('REACTOR',ReactNo,REACTOR_LAST_READ_WFRS_DTM$,'X') LastWfrRead = XLATE('REACT_READS',ReactNo:'*':LastRdDTM,REACT_READS_WAFER_CNT$,'X') WONo = WONo[1,' '] IF NewMode NE '' THEN ReactMode = NewMode ;* Mode Change END ELSE ReactMode = EventMode ;* Current Mode END ReactEventRec = LoggedBy ReactEventRec = EventType ReactEventRec = ReactMode ReactEventRec = WONo ReactEventRec = EscHrs ReactEventRec = Comment ReactEventRec = 1 ReactEventRec = LastRdDTM ReactEventRec = LastWfrRead OtParms = 'REACT_EVENT':@RM:ReactEventKey:@RM:@RM:ReactEventRec obj_Tables('WriteRec',OtParms) RETURN * * * * * * * SetStopDTM: * * * * * * * ReactNo = Parms[1,@RM] EventDTM = Parms[COL2()+1,@RM] StopDTM = Parms[COL2()+1,@RM] IF ReactNo = '' THEN ErrorMsg = 'Null parameter "ReactNo" passed to routine. (':Method:')' IF EventDTM = '' THEN ErrorMsg = 'Null parameter "EventDTM" passed to routine. (':Method:')' IF StopDTM = '' THEN ErrorMsg = 'Null parameter "StopDTM" passed to routine. (':Method:')' thisEventDTM = ICONV(EventDTM,'DT') IF thisEventDTM = '' THEN ErrorMsg = 'Ivalid Data ':QUOTE(EventDTM):' passed in "EventDTM" parameter. (':Method:')' END thisStopDTM = ICONV(StopDTM,'DT') IF thisStopDTM = '' THEN ErrorMsg = 'Ivalid Data ':QUOTE(StopDTM):' passed in "StopDTM" parameter. (':Method:')' END IF ErrorMsg NE '' THEN RETURN ReactEventKey = ReactNo:'*':thisEventDTM OtParms = 'REACT_EVENT':@RM:ReactEventKey ReactEventRec = obj_Tables('ReadRec',OtParms) ;* Locks and reads record for update IF Get_Status(errCode) THEN DEBUG ReactEventRec = thisStopDTM *OtParms = FieldStore(OtParms,@RM,4,0,ReactEventRec) ;* Put record in 4th field of OtParms *obj_Tables('WriteRec',OtParms) RETURN * * * * * * * EventTypeNote: * * * * * * * ReactEventKey = Parms[1,@RM] ReactEventRec = Parms[COL2()+1,@RM] IF ReactEventKey = '' THEN RETURN IF ReactEventRec = '' THEN ReactEventRec = XLATE('REACT_EVENT',ReactEventKey,'','X') END IF ReactEventRec = '' THEN RETURN Types = '' TypeUsers = '' TypeNotes = '' IF ReactEventRec NE '' THEN Types = ReactEventRec TypeUsers = OCONV(ReactEventRec,'[XLATE_CONV,LSL_USERS*FIRST_LAST]') TypeNotes = ReactEventRec SWAP CRLF$ WITH @TM IN TypeNotes Result = Types:@FM:TypeNotes:@FM:TypeUsers RETURN END IF ReactEventRec NE '' THEN ModeKey = ReactEventRec ModeRec = XLATE('REACT_MODE',ModeKey,'','X') Mode = OCONV(ModeRec,'[REACT_MODE_CONV]') StartNote = ModeRec StartUser = ModeRec StartUser = OCONV(StartUser,'[XLATE_CONV,LSL_USERS*FIRST_LAST]') Note = 'Mode: ':Mode:@TM:OCONV(ModeRec,'T#100') IF Types = '' THEN Types = 'MODE' TypeUsers = StartUser TypeNotes = Note END ELSE Types = 'COMB' TypeUsers = StartUser TypeNotes := @TM:STR('- ',20):@TM:Note END END IF ReactEventRec NE '' THEN LogKey = ReactEventRec LogUser = XLATE('REACTOR_LOG',LogKey,REACTOR_LOG_ENTRY_ID$,'X') LogUser = OCONV(LogUser,'[XLATE_CONV,LSL_USERS*FIRST_LAST]') Note = XLATE('REACTOR_LOG',LogKey,REACTOR_LOG_NOTES$,'X') * Data coming in with CRLF$ delimiters, T# formatting doesn't deal well with this. * Divide into Items and text format them individually and reassemble it SWAP CRLF$ WITH @VM IN Note FormattedNote = '' ItemCnt = COUNT(Note,@VM) + (Note NE '') FOR N = 1 TO ItemCnt Item = Note<1,N> FormattedNote<1,N> = OCONV(Item,'T#100') NEXT N CONVERT @VM TO @TM IN FormattedNote Note = FormattedNote IF Types = '' THEN Types = 'MTC' TypeUsers = LogUser TypeNotes = Note END ELSE Types = 'COMB' TypeUsers = LogUser TypeNotes := @TM:STR('- ',20):@TM:Note END END IF ReactEventRec NE '' THEN LogKey = ReactEventRec LogUser = XLATE('REACTOR_LOG',LogKey,REACTOR_LOG_ENTRY_ID$,'X') LogUser = OCONV(LogUser,'[XLATE_CONV,LSL_USERS*FIRST_LAST]') Note = XLATE('REACTOR_LOG',LogKey,REACTOR_LOG_NOTES$,'X') * Data coming in with CRLF$ delimiters, T# formatting doesn't deal well with this. * Divide into Items and text format them individually and reassemble it SWAP CRLF$ WITH @VM IN Note FormattedNote = '' ItemCnt = COUNT(Note,@VM) + (Note NE '') FOR N = 1 TO ItemCnt Item = Note<1,N> FormattedNote<1,N> = OCONV(Item,'T#100') NEXT N CONVERT @VM TO @TM IN FormattedNote Note = FormattedNote IF Types = '' THEN Types = 'PD' TypeUsers = LogUser TypeNotes = Note END ELSE Types = 'COMB' TypeUsers = LogUser TypeNotes := @TM:STR('- ',20):@TM:Note END END IF ReactEventRec NE '' THEN EscKey = ReactEventRec EscUser = XLATE('REACT_ESC',EscKey,REACT_ESC_START_USER$,'X') EscUser = OCONV(EscUser,'[XLATE_CONV,LSL_USERS*FIRST_LAST]') Note = XLATE('REACT_ESC',EscKey,REACT_ESC_START_REASON$,'X') SWAP CRLF$ WITH @VM IN Note FormattedNote = '' ItemCnt = COUNT(Note,@VM) + (Note NE '') FOR N = 1 TO ItemCnt Item = Note<1,N> FormattedNote<1,N> = OCONV(Item,'T#100') NEXT N CONVERT @VM TO @TM IN FormattedNote Note = FormattedNote IF Types = '' THEN Types = 'ESTR' TypeUsers = EscUser TypeNotes = Note END ELSE Types = 'COMB' TypeUsers = EscUser TypeNotes := @TM:STR('- ',20):@TM:Note END END IF ReactEventRec NE '' THEN EscKey = ReactEventRec EscUser = XLATE('REACT_ESC',EscKey,REACT_ESC_STOP_USER$,'X') EscUser = OCONV(EscUser,'[XLATE_CONV,LSL_USERS*FIRST_LAST]') Note = XLATE('REACT_ESC',EscKey,REACT_ESC_STOP_REASON$,'X') SWAP CRLF$ WITH @VM IN Note FormattedNote = '' ItemCnt = COUNT(Note,@VM) + (Note NE '') FOR N = 1 TO ItemCnt Item = Note<1,N> FormattedNote<1,N> = OCONV(Item,'T#100') NEXT N CONVERT @VM TO @TM IN FormattedNote Note = FormattedNote IF Types = '' THEN Types = 'ESTP' TypeUsers = EscUser TypeNotes = Note END ELSE Types = 'COMB' TypeUsers = EscUser TypeNotes := @TM:STR('- ',20):@TM:Note END END Result = Types:@FM:TypeNotes:@FM:TypeUsers RETURN