Merged PR 21151: Return To Fab Operations and Processing
This commit is contained in:
parent
b607432be4
commit
aabd4c3a91
@ -35,9 +35,11 @@ $Insert RDS_TEST_EQUATES
|
||||
$Insert RDS_TEST_PROP_EQUATES
|
||||
$Insert PRS_LAYER_EQU
|
||||
|
||||
Options SpecTypes = 'CLEAN', 'SURFSCAN', 'THICK', 'THICKA', 'RES', 'SRES', 'CRES', 'CONC'
|
||||
|
||||
Declare function Database_Services, Psn_Services, obj_Prod_Spec, Error_Services, SRP_JSON, Cust_Epi_Part_Services
|
||||
Declare function Prod_Ver_Services, PRS_Stage_Services
|
||||
Declare subroutine Database_Services, Psn_Services, Error_Services, SRP_JSON
|
||||
Declare function Prod_Ver_Services, PRS_Stage_Services, SRP_Array
|
||||
Declare subroutine Database_Services, Psn_Services, Error_Services, SRP_JSON, Extract_Si_Keys
|
||||
|
||||
GoToService else
|
||||
Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
|
||||
@ -72,6 +74,216 @@ Service InitializeCritParams(PSNo)
|
||||
end service
|
||||
|
||||
|
||||
Service GetRecipes(PSNo)
|
||||
|
||||
ErrorMsg = ''
|
||||
Recipes = ''
|
||||
If PSNo NE '' then
|
||||
If RowExists('PROD_SPEC', PSNo) then
|
||||
PropKeys = ''
|
||||
Extract_Si_Keys('PRS_PROP', 'PS_NO', PSNo, PropKeys)
|
||||
Recipes = Xlate('PRS_PROP', PropKeys, 'MET_RECIPE', 'X')
|
||||
PRSStageKeys = ''
|
||||
Extract_Si_Keys('PRS_STAGE', 'PS_NO', PSNo, PRSStageKeys)
|
||||
Recipes<0, -1> = Xlate('PRS_STAGE', PRSStageKeys, 'MET_RECIPE', 'X')
|
||||
Recipes<0, -1> = Xlate('PRS_STAGE', PRSStageKeys, 'SURFSCAN_RECIPE', 'X')
|
||||
Recipes<0, -1> = @VM : Xlate('PRS_STAGE', PRSStageKeys, 'CLEAN_RECIPE', 'X')
|
||||
Recipes = SRP_Array('Clean', Recipes, 'TrimAndMakeUnique', @VM)
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. PROD_SPEC record "':PSNo:'" does not exist.'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Null PSNo passed into service.'
|
||||
end
|
||||
|
||||
If ErrorMsg EQ '' then
|
||||
Response = Recipes
|
||||
end else
|
||||
Error_Services('Add', ErrorMsg)
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
Service GetAllMetrologyRecipes(PSNo, GetSurfscan, GetClean, GetRes, GetThick)
|
||||
|
||||
Recipes = ''
|
||||
If GetSurfscan EQ '' then GetSurfscan = True$
|
||||
If GetClean EQ '' then GetClean = True$
|
||||
If GetRes EQ '' then GetRes = True$
|
||||
If GetThick EQ '' then GetThick = True$
|
||||
|
||||
If GetSurfscan then Recipes := PSN_Services('GetSurfscanRecipes', PSNo) : @FM
|
||||
If GetClean then Recipes := PSN_Services('GetCleanRecipes', PSNo) :@FM
|
||||
If GetRes then Recipes := PSN_Services('GetResRecipes', PSNo) :@FM
|
||||
If GetThick then Recipes := PSN_Services('GetThicknessRecipes', PSNo)
|
||||
|
||||
Recipes = SRP_Array('Clean', Recipes, 'TrimAndMakeUnique', @FM)
|
||||
Response = Recipes
|
||||
|
||||
end service
|
||||
|
||||
Service GetSurfscanRecipes(PSNo)
|
||||
|
||||
Recipes = ''
|
||||
If PSNo NE '' then
|
||||
If RowExists('PROD_SPEC', PSNo) then
|
||||
PropKeys = ''
|
||||
Extract_Si_Keys('PRS_PROP', 'PS_NO', PSNo, PropKeys)
|
||||
PRSStageKeys = ''
|
||||
Extract_Si_Keys('PRS_STAGE', 'PS_NO', PSNo, PRSStageKeys)
|
||||
for each PRSStageKey in PRSStageKeys using @VM setting pPos
|
||||
Stage = Xlate('PRS_STAGE', PRSStageKey, 'STAGE', 'X')
|
||||
TencorRecipes = Xlate('PRS_STAGE', PRSStageKey, 'SURFSCAN_RECIPE', 'X')
|
||||
for each Recipe in TencorRecipes using @VM
|
||||
ToolClass = 'TENCOR'
|
||||
Recipes<-1> = ToolClass : @VM : Recipe : @VM : Stage
|
||||
Next TencorRecipe
|
||||
Next PRSStageKey
|
||||
Recipes = SRP_Array('Clean', Recipes, 'TrimAndMakeUnique', @FM)
|
||||
end
|
||||
end
|
||||
Response = Recipes
|
||||
|
||||
end service
|
||||
|
||||
Service GetCleanRecipes(PSNo)
|
||||
|
||||
Recipes = ''
|
||||
If PSNo NE '' then
|
||||
If RowExists('PROD_SPEC', PSNo) then
|
||||
PropKeys = ''
|
||||
Extract_Si_Keys('PRS_PROP', 'PS_NO', PSNo, PropKeys)
|
||||
PRSStageKeys = ''
|
||||
Extract_Si_Keys('PRS_STAGE', 'PS_NO', PSNo, PRSStageKeys)
|
||||
for each PRSStageKey in PRSStageKeys using @VM setting pPos
|
||||
Stage = Xlate('PRS_STAGE', PRSStageKey, 'STAGE', 'X')
|
||||
CleanRecipes = Xlate('PRS_STAGE', PRSStageKey, 'CLEAN_RECIPE', 'X')
|
||||
for each Recipe in CleanRecipes using @VM
|
||||
ToolClass = 'CLEAN'
|
||||
Recipes<-1> = ToolClass : @VM : Recipe : @VM : Stage
|
||||
Next TencorRecipe
|
||||
Next PRSStageKey
|
||||
Recipes = SRP_Array('Clean', Recipes, 'TrimAndMakeUnique', @FM)
|
||||
end
|
||||
end
|
||||
Response = Recipes
|
||||
|
||||
end service
|
||||
|
||||
Service GetThicknessRecipes(PSNo)
|
||||
|
||||
ErrorMsg = ''
|
||||
Recipes = ''
|
||||
If PSNo NE '' then
|
||||
If RowExists('PROD_SPEC', PSNo) then
|
||||
//First get QA Recipes
|
||||
PropKeys = ''
|
||||
Extract_Si_Keys('PRS_PROP', 'PS_NO', PSNo, PropKeys)
|
||||
Recipes = ''
|
||||
PRSStageKeys = ''
|
||||
Extract_Si_Keys('PRS_STAGE', 'PS_NO', PSNo, PRSStageKeys)
|
||||
for each PRSStageKey in PRSStageKeys using @VM setting pPos
|
||||
Stage = Xlate('PRS_STAGE', PRSStageKey, 'STAGE', 'X')
|
||||
PRSStageRecipes = Xlate('PRS_STAGE', PRSStageKey, 'MET_RECIPE', 'X')
|
||||
for each PRSStageRecipe in PRSStageRecipes using @VM setting rPos
|
||||
PropType = Xlate('PRS_STAGE', PRSStageKey, 'MET_PROP', 'X')<1, rPos>
|
||||
If PropType EQ 'THICK' OR PropType EQ 'THICKA' then
|
||||
Recipe = PRSStageRecipe
|
||||
ToolClass = 'FTIR'
|
||||
Recipes<-1> = ToolClass : @VM : Recipe : @VM : Stage
|
||||
end
|
||||
Next PRSStageRecipe
|
||||
Next PRSStageKey
|
||||
//Next get Rathole recipes
|
||||
SpecEpiData = XLATE('PROD_SPEC', PSNo, 'SPEC_EPI', 'X')
|
||||
swap @VM with @FM in SpecEpiData
|
||||
swap '~' with @VM in SpecEpiData
|
||||
ThicknessData = SpecEpiData<13>
|
||||
ToolClass = ThicknessData<1, 1>
|
||||
Recipe = ThicknessData<1, 3>
|
||||
Stage = 'RDS_TEST'
|
||||
If ToolClass EQ 'FTIR' OR ToolClass EQ 'ADE' then
|
||||
Recipes<-1> = ToolClass : @VM : Recipe : @VM : Stage
|
||||
end
|
||||
// Remove any duplicate entries
|
||||
Recipes = SRP_Array('Clean', Recipes, 'TrimAndMakeUnique', @FM)
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. PROD_SPEC record "':PSNo:'" does not exist.'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Null PSNo passed into service.'
|
||||
end
|
||||
|
||||
If ErrorMsg EQ '' then
|
||||
Response = Recipes
|
||||
end else
|
||||
Error_Services('Add', ErrorMsg)
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
Service GetResRecipes(PSNo)
|
||||
|
||||
ErrorMsg = ''
|
||||
Recipes = ''
|
||||
If PSNo NE '' then
|
||||
If RowExists('PROD_SPEC', PSNo) then
|
||||
//First get QA Recipes
|
||||
PropKeys = ''
|
||||
Extract_Si_Keys('PRS_PROP', 'PS_NO', PSNo, PropKeys)
|
||||
Recipes = ''
|
||||
PRSStageKeys = ''
|
||||
Extract_Si_Keys('PRS_STAGE', 'PS_NO', PSNo, PRSStageKeys)
|
||||
for each PRSStageKey in PRSStageKeys using @VM setting pPos
|
||||
Stage = Xlate('PRS_STAGE', PRSStageKey, 'STAGE', 'X')
|
||||
PRSStageRecipes = Xlate('PRS_STAGE', PRSStageKey, 'MET_RECIPE', 'X')
|
||||
for each PRSStageRecipe in PRSStageRecipes using @VM setting rPos
|
||||
PropType = Xlate('PRS_STAGE', PRSStageKey, 'MET_PROP', 'X')<1, rPos>
|
||||
ToolClass = Xlate('PRS_STAGE', PRSStageKey, 'MET_TOOL_CLASS', 'X')<1, rPos>
|
||||
If PropType EQ 'RES' OR PropType EQ 'SRES' OR PropType EQ 'CRES' OR PropType EQ 'CONC' then
|
||||
Recipe = PRSStageRecipe
|
||||
ToolClass = ToolClass
|
||||
Recipes<-1> = ToolClass : @VM : Recipe : @VM : Stage
|
||||
end
|
||||
Next PRSStageRecipe
|
||||
Next PRSStageKey
|
||||
//Next get Rathole recipes
|
||||
Stage = 'RDS_TEST'
|
||||
SpecEpiData = XLATE('PROD_SPEC', PSNo, 'SPEC_EPI', 'X')
|
||||
swap @VM with @FM in SpecEpiData
|
||||
swap '~' with @VM in SpecEpiData
|
||||
ResData1 = SpecEpiData<19>
|
||||
|
||||
If ResData1 NE '' then
|
||||
ToolClass = ResData1<1, 1>
|
||||
Recipe = ResData1<1, 3>
|
||||
Recipes<-1> = ToolClass : @VM : Recipe : @VM : Stage
|
||||
end
|
||||
|
||||
ResData2 = SpecEpiData<14>
|
||||
If ResData2 NE '' then
|
||||
ToolClass = ResData2<1, 1>
|
||||
Recipe = ResData2<1, 3>
|
||||
Recipes<-1> = ToolClass : @VM : Recipe : @VM : Stage
|
||||
end
|
||||
|
||||
// Remove any duplicate entries
|
||||
Recipes = SRP_Array('Clean', Recipes, 'TrimAndMakeUnique', @FM)
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. PROD_SPEC record "':PSNo:'" does not exist.'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Null PSNo passed into service.'
|
||||
end
|
||||
|
||||
If ErrorMsg EQ '' then
|
||||
Response = Recipes
|
||||
end else
|
||||
Error_Services('Add', ErrorMsg)
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
Service CheckPSNStages(PSNo, Stage)
|
||||
|
||||
Begin Case
|
||||
@ -950,3 +1162,8 @@ CheckAdHoc:
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user