From de67e45c9a8a46cbd16ef5a88ae575c102e639f4 Mon Sep 17 00:00:00 2001 From: "Infineon\\StieberD" Date: Tue, 24 Jun 2025 09:32:00 -0700 Subject: [PATCH] updated WRITE_PRE action to not use GetStackTrace and to notify FI of field name being cleared --- LSL2/STPROC/WO_MAT_ACTIONS.txt | 120 +++++++++++++-------------------- 1 file changed, 48 insertions(+), 72 deletions(-) diff --git a/LSL2/STPROC/WO_MAT_ACTIONS.txt b/LSL2/STPROC/WO_MAT_ACTIONS.txt index 7fb1669..4f5aa60 100644 --- a/LSL2/STPROC/WO_MAT_ACTIONS.txt +++ b/LSL2/STPROC/WO_MAT_ACTIONS.txt @@ -46,6 +46,7 @@ Function WO_MAT_Actions(Action, CalcColName, FSList, Handle, Name, FMC, Record, $insert APP_INSERTS $insert FILE.SYSTEM.EQUATES +$insert DICT_EQUATES $insert ACTION_SETUP $insert WO_MAT_EQUATES $insert WO_LOG_EQUATES @@ -265,77 +266,55 @@ return WRITE_RECORD_PRE: - - WOMatKeyID = Name - OrigRDSNo = OrigRecord - NewRDSNo = Record - OrigLotNo = OrigRecord - NewLotNo = Record - OrigWfrQty = OrigRecord - NewWfrQty = Record - OrigCustPartNo = OrigRecord - NewCustPartNo = Record - OrigSubPartNo = OrigRecord - NewSubPartNo = Record - OrigInvActions = OrigRecord - OrigNumActions = DCount(OrigInvActions, @VM) - NewInvActions = Record - NewNumActions = DCount(NewInvActions, @VM) - OrigSlotNos = OrigRecord - OrigNumSlotNos = DCount(OrigSlotNos, @VM) - NewSlotNos = Record - NewNumSlotNos = DCount(NewSlotNos, @VM) - OrigRxDtm = OrigRecord - NewRxDtm = Record - OrigRxBy = OrigRecord - NewRxBy = Record - OrigRelDtm = OrigRecord - NewRelDtm = Record - OrigRelBy = OrigRecord - NewRelBy = Record - OrigSubVendCd = OrigRecord - NewSubVendCd = Record - OrigCassShipQty = OrigRecord - NewCassShipQty = Record - OrigShipShort = OrigRecord - NewShipShort = Record - OrigMuWaferFlag = OrigRecord - NewMuWaferFlag = Record - - If ( ( (OrigRDSNo NE '') and (NewRDSNo EQ '') ) or ( (OrigLotNo NE '') and (NewLotNo EQ '') ) | - or ( (OrigWfrQty NE '') and (NewWfrQty EQ '') ) or ( (OrigCustPartNo NE '') and (NewCustPartNo EQ '') ) | - or ( (OrigSubPartNo NE '') and (NewSubPartNo EQ '') ) or (OrigNumActions GT NewNumActions) | - or (OrigNumSlotNos GT NewNumSlotNos) or ( (OrigRxDtm NE '') and (NewRxDtm EQ '') ) | - or ( (OrigRxBy NE '') and (NewRxBy EQ '') ) or ( (OrigRelDtm NE '') and (NewRelDtm EQ '') ) | - or ( (OrigRelBy NE '') and (NewRelBy EQ '') ) or ( (OrigSubVendCd NE '') and (NewSubVendCd EQ '') ) | - or ( (OrigCassShipQty NE '') and (NewCassShipQty EQ '') ) or ( (OrigShipShort NE '') and (NewShipShort EQ '') ) | - or ( (OrigMuWaferFlag NE '') and (NewMuWaferFlag EQ '') ) ) then - - Stack = Error_Services('GetStackTrace') - Recipients = '' - SentFrom = 'SYSTEM' - Subject = 'WO_MAT_ACTIONS WRITE_PRE Blocked' - Message = OConv(Datetime(), 'DT2/^H') - Message<2> = 'Computer: ':@Station - Message<3> = 'User: ':@User4 - Message<4> = 'WO_MAT key: ':Name - Message<5> = 'Message: Write operation failed due to readonly field being cleared.' - Message<6> = Stack - Swap @FM with \0D0A\ in Message - Swap @VM with ',' in Message - AttachWindow = 'WO_MAT' - AttachKey = Name - SendToGroup = 'OI_SYSADMIN' - Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup - obj_Notes('Create',Parms) + WOMatKeyID = Name + + CriticalFields = WO_MAT_RDS_NO$:@VM:WO_MAT_LOT_NO$:@VM:WO_MAT_WAFER_QTY$:@VM:WO_MAT_CUST_PART_NO$:@VM + CriticalFields := WO_MAT_SUB_PART_NO$:@VM:WO_MAT_INV_ACTION$:@VM:WO_MAT_SLOT_NO$:@VM:WO_MAT_RX_DTM$:@VM + CriticalFields := WO_MAT_RX_BY$:@VM:WO_MAT_REL_DTM$:@VM:WO_MAT_REL_BY$:@VM:WO_MAT_SUB_VEND_CD$:@VM + CriticalFields := WO_MAT_CASS_SHIP_QTY$:@VM:WO_MAT_SHIP_SHORT$:@VM:WO_MAT_MU_WAFER_FLAG$ + + Continue = True$ + For each CriticalField in CriticalFields using @VM setting vPos - OrigFileError = 104:': Write operation failed due to readonly field being cleared.' - Status = 0 - Record = '' - ActionFlow = ACTION_STOP$ - - end else + If ( ( (OrigRecord NE '') and (Record EQ '') ) or ( DCount(OrigRecord, @VM) ) ) then + WOMatFieldNos = Xlate('DICT.WO_MAT', '%FIELDS%', DICT_PART$, 'X') + WOMatFieldNames = Xlate('DICT.WO_MAT', '%FIELDS%', DICT_DISPLAY$, 'X') + Locate CriticalField in WOMatFieldNos using @VM setting FieldNo then + CriticalFieldName = WOMatFieldNames<0, FieldNo> + end else + CriticalFieldName = 'Error determining field name' + end + Recipients = '' + SentFrom = 'SYSTEM' + Subject = 'WO_MAT_ACTIONS WRITE_PRE Blocked' + Message = OConv(Datetime(), 'DT2/^H') + Message<2> = 'Computer: ':@Station + Message<3> = 'User: ':@User4 + Message<4> = 'WO_MAT key: ':Name + NoteMessage = 'Message: Write operation failed due to readonly field ':CriticalField + NoteMessage := ' (':CriticalFieldName:') being cleared.' + Message<5> = NoteMessage + Message<6> = 'Call Stack:':CRLF$:RetStack() + Swap @FM with \0D0A\ in Message + Swap @VM with ',' in Message + AttachWindow = 'WO_MAT' + AttachKey = Name + SendToGroup = 'OI_SYSADMIN' + + Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup + obj_Notes('Create',Parms) + + OrigFileError = 104:': Write operation failed due to readonly field being cleared.' + Status = 0 + Record = '' + ActionFlow = ACTION_STOP$ + Continue = False$ + end + Until (Continue EQ False$) + Next CriticalField + + If Continue then WaferQty = Record If ( (WaferQty LT 0) or (WaferQty GT 25) ) then @@ -628,9 +607,7 @@ WRITE_RECORD_PRE: Null End Case end - end - return @@ -952,4 +929,3 @@ Restore_System_Variables: return -