modified CLEAN_INSP_ACTIONS WRITE action to post to transaction queue and proc queue
This commit is contained in:
committed by
Stieber Daniel (CSC FI SPS MESLEO)
parent
bcdfbe0534
commit
7b386fe856
@ -76,7 +76,7 @@ $insert WO_MAT_EQUATES
|
|||||||
Equ Comma$ to ','
|
Equ Comma$ to ','
|
||||||
|
|
||||||
Declare function Error_Services, Database_Services, Environment_Services, QA_Services, RDS_Services, MemberOf
|
Declare function Error_Services, Database_Services, Environment_Services, QA_Services, RDS_Services, MemberOf
|
||||||
Declare subroutine Error_Services, Database_Services, Post_Metrology_Manual_Data_Entry_Log
|
Declare subroutine Error_Services, Database_Services, Post_Metrology_Manual_Data_Entry_Log, Service_Services
|
||||||
Declare subroutine Qa_Services
|
Declare subroutine Qa_Services
|
||||||
|
|
||||||
If KeyID then GoSub Initialize_System_Variables
|
If KeyID then GoSub Initialize_System_Variables
|
||||||
@ -799,96 +799,15 @@ WRITE_RECORD:
|
|||||||
|
|
||||||
WONo = Record<CLEAN_INSP_WO_NO$>
|
WONo = Record<CLEAN_INSP_WO_NO$>
|
||||||
ReactType = Xlate('WO_LOG', WONo, 'REACT_TYPE', 'X')
|
ReactType = Xlate('WO_LOG', WONo, 'REACT_TYPE', 'X')
|
||||||
EpiPro = (ReactType EQ 'EPP')
|
|
||||||
GaN = (ReactType EQ 'GAN')
|
|
||||||
NonEpiPro = ( (ReactType NE 'EPP') and (ReactType NE 'GAN') )
|
NonEpiPro = ( (ReactType NE 'EPP') and (ReactType NE 'GAN') )
|
||||||
Stage = Record<CLEAN_INSP_STAGE$>
|
Stage = Record<CLEAN_INSP_STAGE$>
|
||||||
|
|
||||||
If Stage EQ 'LWI' then
|
If Stage EQ 'LWI' then
|
||||||
RDSNo = Record<CLEAN_INSP_RDS_NO$>
|
Service_Services('PostProcedure', 'CLEAN_INSP_SERVICES', 'UpdatePostCISampleQty':@VM:Name)
|
||||||
PostCIKey = Xlate('RDS', RDSNo, 'POST_CI_NO', 'X')
|
|
||||||
If PostCIKey NE '' then
|
|
||||||
FailedWafers = Record<CLEAN_INSP_FAILED_WAFERS$>
|
|
||||||
If FailedWafers NE '' then
|
|
||||||
NewPostSpecSampleQty = Sum(FailedWafers)
|
|
||||||
PostCIRec = Database_Services('ReadDataRow', 'CLEAN_INSP', PostCIKey)
|
|
||||||
PostSpecRecipes = PostCIRec<CLEAN_INSP_SPEC_SURFSCAN_RECIPE$>
|
|
||||||
NumRecipes = DCount(PostSpecRecipes, @VM)
|
|
||||||
If NumRecipes GT 0 then
|
|
||||||
For RecipeIndex = 1 to NumRecipes
|
|
||||||
CurrSpec = PostCIRec<CLEAN_INSP_SPEC_SS_SAMP_QTY$, RecipeIndex>
|
|
||||||
If ( (CurrSpec EQ '') or (CurrSpec LT NewPostSpecSampleQty) ) then
|
|
||||||
PostCIRec<CLEAN_INSP_SPEC_SS_SAMP_QTY$, RecipeIndex> = NewPostSpecSampleQty
|
|
||||||
end
|
|
||||||
Next RecipeIndex
|
|
||||||
Database_Services('WriteDataRow', 'CLEAN_INSP', PostCIKey, PostCIRec, True$, False$, True$)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
If NonEpiPro then
|
If NonEpiPro then
|
||||||
// Sync up Insp, Clean, and SurfScan signatures with WO_MAT signature profile
|
|
||||||
Stage = {STAGE}
|
|
||||||
|
|
||||||
WOMatKey = {WO_MAT_KEY}
|
WOMatKey = {WO_MAT_KEY}
|
||||||
// Update failed wafer list
|
Service_Services('PostProcedure', 'QA_SERVICES', 'UpdateFailedWafers':@VM:WOMatKey)
|
||||||
QA_Services('UpdateFailedWafers', WOMatKey)
|
Service_Services('PostProcedure', 'CLEAN_INSP_SERVICES', 'PushSigProfileToWoMat':@VM:Name)
|
||||||
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
|
||||||
WOMatSigProf = WOMatRec<WO_MAT_SIG_PROFILE$>
|
|
||||||
WOMatSigs = WOMatRec<WO_MAT_SIGNATURE$>
|
|
||||||
WOMatSigDTMs = WOMatRec<WO_MAT_SIG_DTM$>
|
|
||||||
|
|
||||||
OrigInspSig = OrigRecord<CLEAN_INSP_INSP_SIG$>
|
|
||||||
OrigInspSigDTM = OrigRecord<CLEAN_INSP_INSP_SIG_DTM$>
|
|
||||||
InspSig = Record<CLEAN_INSP_INSP_SIG$>
|
|
||||||
InspSigDTM = Record<CLEAN_INSP_INSP_SIG_DTM$>
|
|
||||||
|
|
||||||
OrigCleanSig = OrigRecord<CLEAN_INSP_CLEAN_SIG$>
|
|
||||||
OrigCleanSigDTM = OrigRecord<CLEAN_INSP_CLEAN_SIG_DTM$>
|
|
||||||
CleanSig = Record<CLEAN_INSP_CLEAN_SIG$>
|
|
||||||
CleanSigDTM = Record<CLEAN_INSP_CLEAN_SIG_DTM$>
|
|
||||||
|
|
||||||
OrigScanSig = OrigRecord<CLEAN_INSP_SCAN_SIG$>
|
|
||||||
OrigScanSigDTM = OrigRecord<CLEAN_INSP_SCAN_SIG_DTM$>
|
|
||||||
ScanSig = Record<CLEAN_INSP_SCAN_SIG$>
|
|
||||||
ScanSigDTM = Record<CLEAN_INSP_SCAN_SIG_DTM$>
|
|
||||||
|
|
||||||
SigProfUpdate = False$
|
|
||||||
|
|
||||||
If ( (OrigInspSig NE InspSig) or (OrigInspSigDTM NE InspSigDTM) ) then
|
|
||||||
WOMatStage = '1':Stage:'I'
|
|
||||||
Locate WOMatStage in WOMatSigProf using @VM setting vPos then
|
|
||||||
WOMatSigs<0, vPos> = InspSig[-1, 'B':@VM]
|
|
||||||
WOMatSigDTMs<0, vPos> = InspSigDTM[-1, 'B':@VM]
|
|
||||||
SigProfUpdate = True$
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
If ( (OrigCleanSig NE CleanSig) or (OrigCleanSigDTM NE CleanSigDTM) ) then
|
|
||||||
WOMatStage = '1':Stage:'C'
|
|
||||||
Locate WOMatStage in WOMatSigProf using @VM setting vPos then
|
|
||||||
WOMatSigs<0, vPos> = CleanSig[-1, 'B':@VM]
|
|
||||||
WOMatSigDTMs<0, vPos> = CleanSigDTM[-1, 'B':@VM]
|
|
||||||
SigProfUpdate = True$
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
If ( (OrigScanSig NE ScanSig) or (OrigScanSigDTM NE ScanSigDTM) ) then
|
|
||||||
WOMatStage = '1':Stage:'S'
|
|
||||||
Locate WOMatStage in WOMatSigProf using @VM setting vPos then
|
|
||||||
WOMatSigs<0, vPos> = ScanSig[-1, 'B':@VM]
|
|
||||||
WOMatSigDTMs<0, vPos> = ScanSigDTM[-1, 'B':@VM]
|
|
||||||
SigProfUpdate = True$
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
If SigProfUpdate then
|
|
||||||
NumSteps = DCount(WOMatSigProf, @VM)
|
|
||||||
WOMatRec<WO_MAT_SIGNATURE$> = Field(WOMatSigs, @VM, 1, NumSteps)
|
|
||||||
WOMatRec<WO_MAT_SIG_DTM$> = Field(WOMatSigDTMs, @VM, 1, NumSteps)
|
|
||||||
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, True$)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return
|
return
|
||||||
|
@ -56,7 +56,8 @@ $Insert PRS_STAGE_EQUATES
|
|||||||
$Insert WO_MAT_EQUATES
|
$Insert WO_MAT_EQUATES
|
||||||
|
|
||||||
Declare function Database_Services, SRP_JSON, Error_Services, obj_Clean_Insp
|
Declare function Database_Services, SRP_JSON, Error_Services, obj_Clean_Insp
|
||||||
Declare subroutine Database_Services, SRP_JSON, Error_Services, obj_React_Run, Clean_Insp_Services, React_Run_Services, Btree.Extract
|
Declare subroutine Database_Services, SRP_JSON, Error_Services, obj_React_Run, Clean_Insp_Services, React_Run_Services
|
||||||
|
Declare subroutine Transaction_Services, Btree.Extract
|
||||||
|
|
||||||
GoToService
|
GoToService
|
||||||
|
|
||||||
@ -439,11 +440,13 @@ Service UpdateAllCleanInsp(WOMatKey)
|
|||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// This service functions as a means to get the latest CINo for a specified RDS No where the defectivity measurements took place
|
// This service functions as a means to get the latest CINo for a specified RDS No where the defectivity measurements took place
|
||||||
// This is specifically used to have the latest defectivity data
|
// This is specifically used to have the latest defectivity data
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
Service GetLatestDefectCINoByRDSId(RDSNo)
|
Service GetLatestDefectCINoByRDSId(RDSNo)
|
||||||
|
|
||||||
LatestCINo = ''
|
LatestCINo = ''
|
||||||
LatestInspDtm = ''
|
LatestInspDtm = ''
|
||||||
Open 'DICT CLEAN_INSP' to @DICT then
|
Open 'DICT CLEAN_INSP' to @DICT then
|
||||||
@ -464,6 +467,130 @@ Service GetLatestDefectCINoByRDSId(RDSNo)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
Response = LatestCINo
|
Response = LatestCINo
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
Service PushSigProfileToWoMat(CleanInspKey)
|
||||||
|
|
||||||
|
ErrorMsg = ''
|
||||||
|
If (CleanInspKey NE '') then
|
||||||
|
If RowExists('CLEAN_INSP', CleanInspKey) then
|
||||||
|
Record = Database_Services('ReadDataRow', 'CLEAN_INSP', CleanInspKey)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
WONo = Record<CLEAN_INSP_WO_NO$>
|
||||||
|
ReactType = Xlate('WO_LOG', WONo, 'REACT_TYPE', 'X')
|
||||||
|
NonEpiPro = ( (ReactType NE 'EPP') and (ReactType NE 'GAN') )
|
||||||
|
If NonEpiPro then
|
||||||
|
// Sync up Insp, Clean, and SurfScan signatures with WO_MAT signature profile
|
||||||
|
Stage = Record<CLEAN_INSP_STAGE$>
|
||||||
|
WOMatKey = Xlate('CLEAN_INSP', CleanInspKey, 'WO_MAT_KEY', 'X')
|
||||||
|
If WOMatKey NE '' then
|
||||||
|
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
WOMatSigProf = WOMatRec<WO_MAT_SIG_PROFILE$>
|
||||||
|
WOMatSigs = WOMatRec<WO_MAT_SIGNATURE$>
|
||||||
|
WOMatSigDTMs = WOMatRec<WO_MAT_SIG_DTM$>
|
||||||
|
|
||||||
|
InspSig = Record<CLEAN_INSP_INSP_SIG$>
|
||||||
|
InspSigDTM = Record<CLEAN_INSP_INSP_SIG_DTM$>
|
||||||
|
CleanSig = Record<CLEAN_INSP_CLEAN_SIG$>
|
||||||
|
CleanSigDTM = Record<CLEAN_INSP_CLEAN_SIG_DTM$>
|
||||||
|
ScanSig = Record<CLEAN_INSP_SCAN_SIG$>
|
||||||
|
ScanSigDTM = Record<CLEAN_INSP_SCAN_SIG_DTM$>
|
||||||
|
|
||||||
|
WOMatStage = '1':Stage:'I'
|
||||||
|
Locate WOMatStage in WOMatSigProf using @VM setting vPos then
|
||||||
|
WOMatSigs<0, vPos> = InspSig[-1, 'B':@VM]
|
||||||
|
WOMatSigDTMs<0, vPos> = InspSigDTM[-1, 'B':@VM]
|
||||||
|
end
|
||||||
|
|
||||||
|
WOMatStage = '1':Stage:'C'
|
||||||
|
Locate WOMatStage in WOMatSigProf using @VM setting vPos then
|
||||||
|
WOMatSigs<0, vPos> = CleanSig[-1, 'B':@VM]
|
||||||
|
WOMatSigDTMs<0, vPos> = CleanSigDTM[-1, 'B':@VM]
|
||||||
|
end
|
||||||
|
|
||||||
|
WOMatStage = '1':Stage:'S'
|
||||||
|
Locate WOMatStage in WOMatSigProf using @VM setting vPos then
|
||||||
|
WOMatSigs<0, vPos> = ScanSig[-1, 'B':@VM]
|
||||||
|
WOMatSigDTMs<0, vPos> = ScanSigDTM[-1, 'B':@VM]
|
||||||
|
end
|
||||||
|
|
||||||
|
NumSteps = DCount(WOMatSigProf, @VM)
|
||||||
|
WOMatSigs = Field(WOMatSigs, @VM, 1, NumSteps)
|
||||||
|
WOMatSigDTMs = Field(WOMatSigDTMs, @VM, 1, NumSteps)
|
||||||
|
Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIGNATURE$, WOMatSigs)
|
||||||
|
Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIG_DTM$, WOMatSigDTMs)
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Error message: ':Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Null WO_MAT_KEY returned for CLEAN_INSP ':CleanInspKey:'.'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Error message: ':Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. CLEAN_INSP ':CleanInspKey:' does not exist.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Null CleanInspKey passed into service.'
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg NE '' then Error_Services('Add', ErrorMsg)
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
Service UpdatePostCISampleQty(CleanInspKey)
|
||||||
|
|
||||||
|
ErrorMsg = ''
|
||||||
|
If CleanInspKey NE '' then
|
||||||
|
If RowExists('CLEAN_INSP', CleanInspKey) then
|
||||||
|
Record = Database_Services('ReadDataRow', 'CLEAN_INSP', CleanInspKey)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Stage = Record<CLEAN_INSP_STAGE$>
|
||||||
|
If Stage EQ 'LWI' then
|
||||||
|
RDSNo = Record<CLEAN_INSP_RDS_NO$>
|
||||||
|
PostCIKey = Xlate('RDS', RDSNo, 'POST_CI_NO', 'X')
|
||||||
|
If PostCIKey NE '' then
|
||||||
|
FailedWafers = Record<CLEAN_INSP_FAILED_WAFERS$>
|
||||||
|
If FailedWafers NE '' then
|
||||||
|
NewPostSpecSampleQty = Sum(FailedWafers)
|
||||||
|
PostCIRec = Database_Services('ReadDataRow', 'CLEAN_INSP', PostCIKey)
|
||||||
|
PostSpecRecipes = PostCIRec<CLEAN_INSP_SPEC_SURFSCAN_RECIPE$>
|
||||||
|
NumRecipes = DCount(PostSpecRecipes, @VM)
|
||||||
|
If NumRecipes GT 0 then
|
||||||
|
UpdatePostRec = False$
|
||||||
|
For RecipeIndex = 1 to NumRecipes
|
||||||
|
CurrSpec = PostCIRec<CLEAN_INSP_SPEC_SS_SAMP_QTY$, RecipeIndex>
|
||||||
|
If ( (CurrSpec EQ '') or (CurrSpec LT NewPostSpecSampleQty) ) then
|
||||||
|
UpdatePostRec = True$
|
||||||
|
PostCIRec<CLEAN_INSP_SPEC_SS_SAMP_QTY$, RecipeIndex> = NewPostSpecSampleQty
|
||||||
|
end
|
||||||
|
Next RecipeIndex
|
||||||
|
If UpdatePostRec then
|
||||||
|
PostCISpecSampQty = PostCIRec<CLEAN_INSP_SPEC_SS_SAMP_QTY$>
|
||||||
|
Transaction_Services('PostWriteFieldTransaction', 'CLEAN_INSP', PostCIKey, CLEAN_INSP_SPEC_SS_SAMP_QTY$, PostCISpecSampQty)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Error message: ':Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. CLEAN_INSP ':CleanInspKey:' does not exist.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Null CleanInspKey passed into service.'
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg NE '' then Error_Services('Add', ErrorMsg)
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Reference in New Issue
Block a user