added LSL2 stored procedures
This commit is contained in:
661
LSL2/STPROC/DEVELOPMENT_SERVICES.txt
Normal file
661
LSL2/STPROC/DEVELOPMENT_SERVICES.txt
Normal file
@ -0,0 +1,661 @@
|
||||
Compile function Development_Services(@Service, @Params)
|
||||
#pragma precomp SRP_PreCompiler
|
||||
|
||||
$INSERT SERVICE_SETUP
|
||||
$INSERT POPUP_EQUATES
|
||||
$INSERT LOGICAL
|
||||
$INSERT MSG_EQUATES
|
||||
$INSERT APPCOLORS
|
||||
$INSERT WM_IN_EQUATES
|
||||
$INSERT WM_OUT_EQUATES
|
||||
$INSERT WO_LOG_EQU
|
||||
$INSERT WO_STEP_EQU
|
||||
$INSERT WO_MAT_EQUATES
|
||||
$INSERT ORDER_EQU
|
||||
$INSERT RDS_EQUATES
|
||||
$INSERT PROD_SPEC_EQU
|
||||
$INSERT NOTIFICATION_EQU
|
||||
$INSERT LSL_USERS_EQU
|
||||
$INSERT SECURITY_RIGHTS_EQU
|
||||
$INSERT RTI_LH_INFO_EQUATES
|
||||
$INSERT WO_MAT_QA_EQUATES
|
||||
$INSERT CUST_EPI_PART_EQUATES
|
||||
$INSERT PRS_STAGE_EQUATES
|
||||
$INSERT RLIST_EQUATES
|
||||
$INSERT CLEAN_INSP_EQUATES
|
||||
$INSERT TOOL_PARMS_EQUATES
|
||||
$INSERT SERVICES_EQUATES
|
||||
|
||||
EQU COL$QA_MET_PHASE_MIN TO 17
|
||||
|
||||
Equ Tab$ to \09\
|
||||
Equ CRLF$ to \0D0A\
|
||||
Equ LF$ to \0A\
|
||||
Equ Comma$ to ','
|
||||
|
||||
Declare subroutine Set_Property, Set_Status, ErrMsg, Set_Property, obj_AppWindow, Send_Message, Logging_Services
|
||||
Declare subroutine Btree.Extract, Send_Event, Security_Err_Msg, Forward_Event, End_Window, Start_Window
|
||||
Declare subroutine EditCell, obj_NCR, obj_Notes, Post_Event, obj_WO_Mat, obj_WO_Mat_Log, obj_WO_Wfr, obj_Tables, obj_RDS
|
||||
Declare subroutine Error_Services, RDS_Services, Dialog_Box, Insert, Unlock, QA_Services, Validate, Development_Services
|
||||
Declare subroutine Update_Index, Database_Services, Messaging_Services
|
||||
Declare function Get_Property, Get_Status, Popup, Send_Message, Msg, Security_Check, Dialog_Box, RowExists, Utility
|
||||
Declare function Dialog_Box, obj_WO_Log, obj_NCR, Check_Notes, obj_MUWafers, obj_WO_Mat, Error_Services, RDS_Services
|
||||
Declare function MemberOf, obj_Tables, obj_RDS, Environment_Services, Logging_Services, Material_Services, ErrMsg
|
||||
Declare function Work_Order_Services, RetStack, Min, Max, Obj_Prod_Spec, Insert, SRP_Trim, Xlate, Obj_Wo_Mat
|
||||
Declare function Security_Services, QA_Services, Database_Services, RowExists, Rti_Lh_Info, UNICODE_ANSI, UNICODE_UTF8
|
||||
Declare function index, Httpclient_Services, SRP_Encode, SRP_Decode, DirList, Obj_Rds_Test, Tool_Parms_Services
|
||||
Declare function SQL_Services, RDS_Services, Obj_WM_out, Schedule_Services, Obj_Tool, SRP_Sort_Array
|
||||
Declare function Development_Services
|
||||
|
||||
GoToService
|
||||
|
||||
Return Response or ""
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Service Parameter Options
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
Options PROJECTS = 'HGCV'
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// SERVICES
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
|
||||
Service UpdateProdCI()
|
||||
|
||||
* ConvRecipes = '6IN_PTYPE ROTR,6IN_THIN ROTR,6IN_THICK ROTR,8IN_THIN ROTR,8IN_THICK ROTR,IFX_ROTR,8IN_IFX_ROTR,' |
|
||||
* : 'EPISIL,GEN5_ROTR,AS_IFX_ROTR'
|
||||
* FailRecipes = '6IN100_ROTR,6IN100_ROTR,6IN100_ROTR,8IN100_ROTR,8IN100_ROTR,IFX100_ROTR,IFX100_ROTR,EPISIL_100,' |
|
||||
* : 'GEN5_100ROTR,AS_IFX100_ROTR'
|
||||
|
||||
ConvRecipes = '6IN_PTYPE ROTR'
|
||||
FailRecipes = '6IN_PTYPE_100'
|
||||
RemoveRecipes = '6IN100_ROTR'
|
||||
|
||||
Query = "SELECT WO_MAT WITH CURR_STATUS EQ 'REL' OR WITH CURR_STATUS EQ 'VER' OR WITH CURR_STATUS EQ 'UNLOAD' " |
|
||||
: "OR WITH CURR_STATUS EQ 'LOAD' OR WITH CURR_STATUS EQ 'NCR' OR WITH CURR_STATUS EQ 'LWIS' OR WITH " |
|
||||
: "CURR_STATUS EQ 'LWII' OR WITH CURR_STATUS EQ 'RX' OR WITH CURR_STATUS EQ 'HOLD'"
|
||||
|
||||
GoSub ClearCursors
|
||||
Rlist(Query, Target_ActiveList$, '', '', '')
|
||||
|
||||
If @RecCount GT 0 then
|
||||
Open 'CLEAN_INSP' to hCI then
|
||||
EOF = False$
|
||||
Loop
|
||||
ReadNext KeyID else EOF = True$
|
||||
RDSNo = Xlate('WO_MAT', KeyID, 'RDS_NO', 'X')
|
||||
If RDSNo GT 200000 and RDSNo LT 900000 then
|
||||
CINo = Xlate('RDS', RDSNo, 'LWI_CI_NO', 'X')
|
||||
If RowExists('CLEAN_INSP', CINo) then
|
||||
Read CIRec from hCI, CINo then
|
||||
CIRecipes = CIRec<CLEAN_INSP_SPEC_SURFSCAN_RECIPE$>
|
||||
CIHaze = CIRec<CLEAN_INSP_SPEC_SURF_HAZE$>
|
||||
CIDefects = CIRec<CLEAN_INSP_SPEC_SURF_DEFECTS$>
|
||||
For each Recipe in ConvRecipes using ',' setting Pos
|
||||
Locate Recipe in CIRecipes using @VM setting vPos then
|
||||
Locate Recipe in ConvRecipes using ',' setting rPos then
|
||||
FailRecipe = Field(FailRecipes, ',', rPos, 1)
|
||||
RemoveRecipe = Field(RemoveRecipes, ',', rPos, 1)
|
||||
Locate FailRecipe in CIRecipes using @VM setting fPos then
|
||||
CIHaze<0, fPos> = CIHaze<0, vPos>
|
||||
CIDefects<0, fPos> = CIDefects<0, vPos>
|
||||
end else
|
||||
CIRecipes<0, -1> = FailRecipe
|
||||
CIHaze<0, -1> = CIHaze<0, vPos>
|
||||
CIDefects<0, -1> = CIDefects<0, vPos>
|
||||
end
|
||||
Locate RemoveRecipe in CIRecipes using @VM setting RemPos then
|
||||
CIRecipes = Delete(CIRecipes, 0, RemPos, 0)
|
||||
CIHaze = Delete(CIHaze, 0, RemPos, 0)
|
||||
CIDefects = Delete(CIDefects, 0, RemPos, 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
Next Recipe
|
||||
CIRec<CLEAN_INSP_SPEC_SURFSCAN_RECIPE$> = CIRecipes
|
||||
CIRec<CLEAN_INSP_SPEC_SURF_HAZE$> = CIHaze
|
||||
CIRec<CLEAN_INSP_SPEC_SURF_DEFECTS$> = CIDefects
|
||||
Write CIRec on hCI, CINo else
|
||||
ErrMsg('Error updating CLEAN_INSP record ':CINo)
|
||||
end
|
||||
end else
|
||||
ErrMsg('Error reading CLEAN_INSP record ':CINo)
|
||||
end
|
||||
end
|
||||
end
|
||||
Until EOF
|
||||
Repeat
|
||||
end
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service UpdateROTRPSNs()
|
||||
|
||||
* ConvRecipes = '6IN_PTYPE ROTR,6IN_THIN ROTR,6IN_THICK ROTR,8IN_THIN ROTR,8IN_THICK ROTR,IFX_ROTR,8IN_IFX_ROTR,' |
|
||||
* : 'EPISIL,GEN5_ROTR,AS_IFX_ROTR'
|
||||
* FailRecipes = '6IN100_ROTR,6IN100_ROTR,6IN100_ROTR,8IN100_ROTR,8IN100_ROTR,IFX100_ROTR,IFX100_ROTR,EPISIL_100,' |
|
||||
* : 'GEN5_100ROTR,AS_IFX100_ROTR'
|
||||
|
||||
ConvRecipes = '6IN_PTYPE ROTR'
|
||||
FailRecipes = '6IN_PTYPE_100'
|
||||
RemoveRecipes = '6IN100_ROTR'
|
||||
|
||||
Pos = ''
|
||||
Query = 'SELECT PRS_STAGE WITH STAGE EQ "LWI" AND WITH SURFSCAN_RECIPE CONTAINING '
|
||||
For each Recipe in ConvRecipes using ',' setting Pos
|
||||
If Pos GT 1 then
|
||||
Query := ' OR WITH STAGE EQ "LWI" AND WITH SURFSCAN_RECIPE CONTAINING ':Quote(Recipe)
|
||||
end else
|
||||
Query := Quote(Recipe)
|
||||
end
|
||||
Next Recipe
|
||||
GoSub ClearCursors
|
||||
Rlist(Query, Target_ActiveList$, '', '', '')
|
||||
|
||||
If @RecCount GT 0 then
|
||||
Open 'PRS_STAGE' to hPRS then
|
||||
EOF = False$
|
||||
Loop
|
||||
ReadNext KeyID else EOF = True$
|
||||
Read PRSRec from hPRS, KeyID then
|
||||
PRSRecipes = PRSRec<PRS_STAGE_SURFSCAN_RECIPE$>
|
||||
PRSHaze = PRSRec<PRS_STAGE_SURF_HAZE$>
|
||||
PRSDefects = PRSRec<PRS_STAGE_SURF_DEFECTS$>
|
||||
PRSSample = PRSRec<PRS_STAGE_SS_SAMP_QTY$>
|
||||
SampleSize = 25
|
||||
For each Recipe in ConvRecipes using ',' setting Pos
|
||||
Locate Recipe in PRSRecipes using @VM setting vPos then
|
||||
Locate Recipe in ConvRecipes using ',' setting rPos then
|
||||
FailRecipe = Field(FailRecipes, ',', rPos, 1)
|
||||
RemoveRecipe = Field(RemoveRecipes, ',', rPos, 1)
|
||||
Locate FailRecipe in PRSRecipes using @VM setting fPos then
|
||||
PRSHaze<0, fPos> = PRSHaze<0, vPos>
|
||||
PRSDefects<0, fPos> = PRSDefects<0, vPos>
|
||||
PRSSample<0, fPos> = SampleSize
|
||||
end else
|
||||
PRSRecipes<0, -1> = FailRecipe
|
||||
PRSHaze<0, -1> = PRSHaze<0, vPos>
|
||||
PRSDefects<0, -1> = PRSDefects<0, vPos>
|
||||
PRSSample<0, -1> = SampleSize
|
||||
end
|
||||
Locate RemoveRecipe in PRSRecipes using @VM setting RemPos then
|
||||
PRSRecipes = Delete(PRSRecipes, 0, RemPos, 0)
|
||||
PRSHaze = Delete(PRSHaze, 0, RemPos, 0)
|
||||
PRSDefects = Delete(PRSDefects, 0, RemPos, 0)
|
||||
PRSSample = Delete(PRSSample, 0, RemPos, 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
Next Recipe
|
||||
PRSRec<PRS_STAGE_SURFSCAN_RECIPE$> = PRSRecipes
|
||||
PRSRec<PRS_STAGE_SURF_HAZE$> = PRSHaze
|
||||
PRSRec<PRS_STAGE_SURF_DEFECTS$> = PRSDefects
|
||||
PRSRec<PRS_STAGE_SS_SAMP_QTY$> = PRSSample
|
||||
Write PRSRec on hPRS, KeyID else
|
||||
ErrMsg('Error updating PRS_STAGE SurfScan recipes for record ':KeyID)
|
||||
end
|
||||
end else
|
||||
ErrMsg('Error reading PRS_STAGE SurfScan recipes for record ':KeyID)
|
||||
end
|
||||
|
||||
Until EOF
|
||||
Repeat
|
||||
end
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service GetProjectStatus(ProjectName=PROJECTS)
|
||||
|
||||
// Initialize ProjectStatus to false to be safe.
|
||||
ProjectStatus = False$
|
||||
ProjectStatus = Xlate('DEVELOPMENT', ProjectName, 'STATUS', 'X')
|
||||
Response = ProjectStatus
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service DeployProject(ProjectName=PROJECTS)
|
||||
|
||||
ServiceName = 'Deploy':ProjectName
|
||||
Development_Services(ServiceName)
|
||||
Database_Services('ActivateRecord', 'DEVELOPMENT', ProjectName)
|
||||
{STATUS} = True$
|
||||
{START_DTM} = Date():'.':Time()
|
||||
{END_DTM} = ''
|
||||
Database_Services('WriteDataRow', 'DEVELOPMENT', ProjectName, @Record)
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service RollbackProject(ProjectName=PROJECTS)
|
||||
|
||||
ServiceName = 'Rollback':ProjectName
|
||||
Development_Services(ServiceName)
|
||||
Database_Services('ActivateRecord', 'DEVELOPMENT', ProjectName)
|
||||
{STATUS} = False$
|
||||
{END_DTM} = Date():'.':Time()
|
||||
Database_Services('WriteDataRow', 'DEVELOPMENT', ProjectName, @Record)
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service DeployHGCV()
|
||||
debug
|
||||
! Get list of work orders in production today.
|
||||
SchedEvents = Schedule_Services('GetScheduleEvents', (date() - 7), (date() + 7))
|
||||
WOList = ''
|
||||
For each Row in SchedEvents using @FM
|
||||
ThisWO = Field(Row<1,2>, '*', 1)
|
||||
Locate ThisWO in WOList using @VM setting vPos else
|
||||
If ThisWO NE '' then WOList<1,-1> = ThisWO
|
||||
end
|
||||
Next Row
|
||||
|
||||
! Get list of WO_MAT_QA records in production today.
|
||||
Table = 'WO_MAT_QA'
|
||||
Open 'DICT.':Table to @DICT then
|
||||
Query = 'WO_NO':@VM:WOList:@FM
|
||||
KeyList = ''
|
||||
Option = ''
|
||||
Flag = ''
|
||||
Btree.Extract(Query, Table, @DICT, KeyList, Option, Flag)
|
||||
end
|
||||
|
||||
Database_Services('WriteDataRow', 'SYSLISTS', 'HGCV_UAT', KeyList, True$, False$, True$)
|
||||
|
||||
! Update UNLOAD PSNs with the new PROD naming convention introduced in the HgCV Project
|
||||
! We have to use a traditional select here because the PRS_STAGE_KEY column does not have a Btree index on it
|
||||
Cursor = ''
|
||||
EOF = False$
|
||||
Query = "SELECT PROD_SPEC WITH PRS_STAGE_KEY CONTAINING 'UNLOAD' AND WITH STATUS EQ 'A'"
|
||||
GoSub ClearCursors
|
||||
Rlist(Query, Target_ActiveList$, '', '', '')
|
||||
Loop
|
||||
While EOF EQ False$
|
||||
ReadNext PSN else EOF = True$
|
||||
If PSN NE '' then
|
||||
PRSStageKey = PSN:'*UNLOAD'
|
||||
If RowExists('PRS_STAGE', PRSStageKey) then
|
||||
PRSStageRec = Database_Services('ReadDataRow', 'PRS_STAGE', PRSStageKey)
|
||||
MetTests = PRSStageRec<PRS_STAGE_MET_TEST$>
|
||||
ThickRecipeFound = False$
|
||||
RHORecipeFound = False$
|
||||
Locate 'THICK_ONLY' in MetTests using @VM setting vPos then
|
||||
MetRecipes = PRSStageRec<PRS_STAGE_MET_RECIPE$>
|
||||
ThickOnlyRecipe = MetRecipes<0, vPos>
|
||||
ThickOnlyRecipe = Trim(ThickOnlyRecipe)
|
||||
ThickRecipeFound = True$
|
||||
NewProdRecipe = ''
|
||||
Begin Case
|
||||
Case ThickOnlyRecipe EQ 'thin6inch'
|
||||
NewProdRecipe = 'PROD_thin6'
|
||||
Case ThickOnlyRecipe EQ '8inch'
|
||||
NewProdRecipe = 'PROD_8inch'
|
||||
Case ThickOnlyRecipe EQ 'thin8inch'
|
||||
NewProdRecipe = 'PROD_thin8'
|
||||
Case ThickOnlyRecipe EQ 'IRC6in_6mm'
|
||||
NewProdRecipe = 'PROD_IRC6'
|
||||
Case ThickOnlyRecipe EQ 'Wacker'
|
||||
NewProdRecipe = 'PROD_Wack'
|
||||
Case ThickOnlyRecipe EQ '8IN_INF'
|
||||
NewProdRecipe = 'PROD_INF'
|
||||
Case ThickOnlyRecipe EQ '6inTHICK'
|
||||
NewProdRecipe = 'PROD_IRC6'
|
||||
Case ThickOnlyRecipe = 'EP_8IN9PT'
|
||||
NewProdRecipe = 'PROD_8inch'
|
||||
Case Otherwise$
|
||||
// Unexpected THICK_ONLY recipe name -> proceed to next PSN
|
||||
ThickRecipeFound = False$
|
||||
End Case
|
||||
end
|
||||
|
||||
Locate 'LW_RHO' in MetTests using @VM setting vPos then
|
||||
MetRecipes = PRSStageRec<PRS_STAGE_MET_RECIPE_PATTERN$>
|
||||
LWRHORecipe = MetRecipes<0, vPos>
|
||||
LWRHORecipe = Trim(LWRHORecipe)
|
||||
RHORecipeFound = True$
|
||||
NewProdRecipe = ''
|
||||
Begin Case
|
||||
Case LWRHORecipe EQ 'IRC6mm'
|
||||
NewProdRecipe = 'PROD_IRC6mm'
|
||||
Case LWRHORecipe EQ '10PT_5mm'
|
||||
NewProdRecipe = 'PROD_10PT_5mm'
|
||||
Case Otherwise$
|
||||
// Unexpected LW_RHO recipe name -> proceed to next PSN
|
||||
RHORecipeFound = False$
|
||||
End Case
|
||||
end
|
||||
|
||||
If (ThickRecipeFound EQ True$) then
|
||||
MetRecipes<0, vPos> = NewProdRecipe
|
||||
PRSStageRec<PRS_STAGE_MET_RECIPE$> = MetRecipes
|
||||
Database_Services('WriteDataRow', 'PRS_STAGE', PRSStageKey, PRSStageRec)
|
||||
end
|
||||
|
||||
If (RHORecipeFound EQ True$) then
|
||||
MetRecipes<0, vPos> = NewProdRecipe
|
||||
PRSStageRec<PRS_STAGE_MET_RECIPE_PATTERN$> = MetRecipes
|
||||
Database_Services('WriteDataRow', 'PRS_STAGE', PRSStageKey, PRSStageRec, True$, False$, True$)
|
||||
end
|
||||
end
|
||||
end
|
||||
Repeat
|
||||
|
||||
! Update all WO_MAT_QA records currently in production.
|
||||
HgCVList = Database_Services('ReadDataRow', 'SYSLISTS', 'HGCV_UAT')
|
||||
|
||||
For each WoMatQAKey in HgCVList using @VM
|
||||
If WOMatQAKey EQ '167798*67' then debug
|
||||
Database_Services('ActivateRecord', 'WO_MAT_QA', WoMatQAKey)
|
||||
Profiles = {PROFILE}
|
||||
ThickRecipeFound = False$
|
||||
RHORecipeFound = False$
|
||||
Locate '1THICK_ONLY' in Profiles using @VM setting vPos then
|
||||
ThickPos = vPos
|
||||
MetRecipes = {RECIPE}
|
||||
ThickOnlyRecipe = MetRecipes<0, vPos>
|
||||
ThickOnlyRecipe = Trim(ThickOnlyRecipe)
|
||||
ThickRecipeFound = True$
|
||||
NewProdRecipe = ''
|
||||
Begin Case
|
||||
Case ThickOnlyRecipe EQ 'thin6inch'
|
||||
NewProdRecipe = 'PROD_thin6'
|
||||
Case ThickOnlyRecipe EQ '8inch'
|
||||
NewProdRecipe = 'PROD_8inch'
|
||||
Case ThickOnlyRecipe EQ 'thin8inch'
|
||||
NewProdRecipe = 'PROD_thin8'
|
||||
Case ThickOnlyRecipe EQ 'IRC6in_6mm'
|
||||
NewProdRecipe = 'PROD_IRC6'
|
||||
Case ThickOnlyRecipe EQ 'Wacker'
|
||||
NewProdRecipe = 'PROD_Wack'
|
||||
Case ThickOnlyRecipe EQ '8IN_INF'
|
||||
NewProdRecipe = 'PROD_INF'
|
||||
Case ThickOnlyRecipe EQ '6inTHICK'
|
||||
NewProdRecipe = 'PROD_IRC6'
|
||||
Case ThickOnlyRecipe = 'EP_8IN9PT'
|
||||
NewProdRecipe = 'PROD_8inch'
|
||||
Case Otherwise$
|
||||
// Unexpected THICK_ONLY recipe name -> proceed to next PSN
|
||||
ThickRecipeFound = False$
|
||||
End Case
|
||||
|
||||
end
|
||||
|
||||
Locate '1LW_RHO' in Profiles using @VM setting vPos then
|
||||
RHOPos = vPos
|
||||
MetRecipes = {RECIPE_PATTERN}
|
||||
LWRHORecipe = MetRecipes<0, vPos>
|
||||
LWRHORecipe = Trim(LWRHORecipe)
|
||||
RHORecipeFound = True$
|
||||
NewProdRecipe = ''
|
||||
Begin Case
|
||||
Case LWRHORecipe EQ 'IRC6mm'
|
||||
NewProdRecipe = 'PROD_IRC6mm'
|
||||
Case LWRHORecipe EQ '10PT_5mm'
|
||||
NewProdRecipe = 'PROD_10PT_5mm'
|
||||
Case Otherwise$
|
||||
// Unexpected 1LW_RHO pattern name -> proceed to next PSN
|
||||
RHORecipeFound = False$
|
||||
End Case
|
||||
end
|
||||
|
||||
If (ThickRecipeFound EQ True$) then
|
||||
MetRecipes<0, ThickPos> = NewProdRecipe
|
||||
{RECIPE} = MetRecipes
|
||||
Database_Services('WriteDataRow', 'WO_MAT_QA', WoMatQAKey, @Record, True$, False$, True$)
|
||||
end
|
||||
|
||||
If (RHORecipeFound EQ True$) then
|
||||
MetRecipes<0, RHOPos> = NewProdRecipe
|
||||
{RECIPE_PATTERN} = MetRecipes
|
||||
Database_Services('WriteDataRow', 'WO_MAT_QA', WoMatQAKey, @Record, True$, False$, True$)
|
||||
end
|
||||
|
||||
Next WoMatQAKey
|
||||
|
||||
End Service
|
||||
|
||||
|
||||
Service RollbackHGCV()
|
||||
|
||||
! Get list of work orders in production today.
|
||||
SchedEvents = Schedule_Services('GetScheduleEvents', date(), date())
|
||||
WOList = ''
|
||||
For each Row in SchedEvents using @FM
|
||||
ThisWO = Field(Row<1,2>, '*', 1)
|
||||
Locate ThisWO in WOList using @VM setting vPos else
|
||||
WOList<1,-1> = ThisWO
|
||||
end
|
||||
Next Row
|
||||
|
||||
! Get list of WO_MAT_QA records in production today.
|
||||
Table = 'WO_MAT_QA'
|
||||
Open 'DICT.':Table to @DICT then
|
||||
Query = 'WO_NO':@VM:WOList:@FM
|
||||
KeyList = ''
|
||||
Option = ''
|
||||
Flag = ''
|
||||
Btree.Extract(Query, Table, @DICT, KeyList, Option, Flag)
|
||||
end
|
||||
|
||||
Database_Services('WriteDataRow', 'SYSLISTS', 'HGCV_UAT', KeyList, True$, False$, True$)
|
||||
|
||||
! Rollback UNLOAD PSNs to their original naming convention (i.e. without 'PROD_')
|
||||
! We have to use a traditional select here because the PRS_STAGE_KEY column does not have a Btree index on it
|
||||
Cursor = ''
|
||||
EOF = False$
|
||||
Query = "SELECT PROD_SPEC WITH PRS_STAGE_KEY CONTAINING 'UNLOAD' AND WITH STATUS EQ 'A'"
|
||||
GoSub ClearCursors
|
||||
Rlist(Query, Target_ActiveList$, '', '', '')
|
||||
Loop
|
||||
While EOF EQ False$
|
||||
ReadNext PSN else EOF = True$
|
||||
If PSN NE '' then
|
||||
PRSStageKey = PSN:'*UNLOAD'
|
||||
If RowExists('PRS_STAGE', PRSStageKey) then
|
||||
PRSStageRec = Database_Services('ReadDataRow', 'PRS_STAGE', PRSStageKey)
|
||||
MetTests = PRSStageRec<PRS_STAGE_MET_TEST$>
|
||||
ThickRecipeFound = False$
|
||||
RHORecipeFound = False$
|
||||
Locate 'THICK_ONLY' in MetTests using @VM setting vPos then
|
||||
MetRecipes = PRSStageRec<PRS_STAGE_MET_RECIPE$>
|
||||
ThickOnlyRecipe = MetRecipes<0, vPos>
|
||||
ThickOnlyRecipe = Trim(ThickOnlyRecipe)
|
||||
ThickRecipeFound = True$
|
||||
NewProdRecipe = ''
|
||||
Begin Case
|
||||
Case ThickOnlyRecipe EQ 'PROD_thin6'
|
||||
NewProdRecipe = 'thin6inch'
|
||||
Case ThickOnlyRecipe EQ 'PROD_8inch'
|
||||
NewProdRecipe = '8inch'
|
||||
Case ThickOnlyRecipe EQ 'PROD_thin8'
|
||||
NewProdRecipe = 'thin8inch'
|
||||
Case ThickOnlyRecipe EQ 'PROD_IRC6'
|
||||
NewProdRecipe = 'IRC6in_6mm'
|
||||
Case ThickOnlyRecipe EQ 'PROD_Wack'
|
||||
NewProdRecipe = 'Wacker'
|
||||
Case ThickOnlyRecipe EQ 'PROD_INF'
|
||||
NewProdRecipe = '8IN_INF'
|
||||
Case Otherwise$
|
||||
// Unexpected THICK_ONLY recipe name -> proceed to next PSN
|
||||
ThickRecipeFound = False$
|
||||
End Case
|
||||
end
|
||||
|
||||
* Locate 'LW_RHO' in MetTests using @VM setting vPos then
|
||||
* MetRecipes = PRSStageRec<PRS_STAGE_MET_RECIPE$>
|
||||
* LWRHORecipe = MetRecipes<0, vPos>
|
||||
* LWRHORecipe = Trim(LWRHORecipe)
|
||||
* RHORecipeFound = True$
|
||||
* NewProdRecipe = ''
|
||||
* Begin Case
|
||||
* Case LWRHORecipe EQ 'PROD_IRC6mm'
|
||||
* NewProdRecipe = 'IRC6mm'
|
||||
* Case Otherwise$
|
||||
* // Unexpected LW_RHO recipe name -> proceed to next PSN
|
||||
* RHORecipeFound = False$
|
||||
* End Case
|
||||
* end
|
||||
|
||||
If (ThickRecipeFound EQ True$) then
|
||||
// or (RHORecipeFound EQ True$) then
|
||||
MetRecipes<0, vPos> = NewProdRecipe
|
||||
PRSStageRec<PRS_STAGE_MET_RECIPE$> = MetRecipes
|
||||
Database_Services('WriteDataRow', 'PRS_STAGE', PRSStageKey, PRSStageRec)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
Repeat
|
||||
|
||||
! Revert all WO_MAT_QA records currently in production.
|
||||
HgCVList = Database_Services('ReadDataRow', 'SYSLISTS', 'HGCV_UAT')
|
||||
|
||||
For each WoMatQAKey in HgCVList using @VM
|
||||
Database_Services('ActivateRecord', 'WO_MAT_QA', WoMatQAKey)
|
||||
Profiles = {PROFILE}
|
||||
ThickRecipeFound = False$
|
||||
RHORecipeFound = False$
|
||||
Locate '1THICK_ONLY' in Profiles using @VM setting vPos then
|
||||
MetRecipes = {RECIPE}
|
||||
ThickOnlyRecipe = MetRecipes<0, vPos>
|
||||
ThickOnlyRecipe = Trim(ThickOnlyRecipe)
|
||||
ThickRecipeFound = True$
|
||||
NewProdRecipe = ''
|
||||
Begin Case
|
||||
Case ThickOnlyRecipe EQ 'PROD_thin6'
|
||||
NewProdRecipe = 'thin6inch'
|
||||
Case ThickOnlyRecipe EQ 'PROD_8inch'
|
||||
NewProdRecipe = '8inch'
|
||||
Case ThickOnlyRecipe EQ 'PROD_thin8'
|
||||
NewProdRecipe = 'thin8inch'
|
||||
Case ThickOnlyRecipe EQ 'PROD_IRC6'
|
||||
NewProdRecipe = 'IRC6in_6mm'
|
||||
Case ThickOnlyRecipe EQ 'PROD_Wack'
|
||||
NewProdRecipe = 'Wacker'
|
||||
Case ThickOnlyRecipe EQ 'PROD_INF'
|
||||
NewProdRecipe = '8IN_INF'
|
||||
Case Otherwise$
|
||||
// Unexpected THICK_ONLY recipe name -> proceed to next PSN
|
||||
ThickRecipeFound = False$
|
||||
End Case
|
||||
end
|
||||
|
||||
* Locate '1LW_RHO' in Profiles using @VM setting vPos then
|
||||
* MetRecipes = {RECIPE}
|
||||
* LWRHORecipe = MetRecipes<0, vPos>
|
||||
* LWRHORecipe = Trim(LWRHORecipe)
|
||||
* RHORecipeFound = True$
|
||||
* NewProdRecipe = ''
|
||||
* Begin Case
|
||||
* Case LWRHORecipe EQ 'PROD_IRC6mm'
|
||||
* NewProdRecipe = 'IRC6mm'
|
||||
* Case Otherwise$
|
||||
* // Unexpected 1LW_RHO recipe name -> proceed to next PSN
|
||||
* RHORecipeFound = False$
|
||||
* End Case
|
||||
* end
|
||||
|
||||
If (ThickRecipeFound EQ True$) then
|
||||
//or (RHORecipeFound EQ True$) then
|
||||
MetRecipes<0, vPos> = NewProdRecipe
|
||||
{RECIPE} = MetRecipes
|
||||
Database_Services('WriteDataRow', 'WO_MAT_QA', WoMatQAKey, @Record, True$, False$, True$)
|
||||
end
|
||||
|
||||
Next WoMatQAKey
|
||||
|
||||
End Service
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
// SetupDevServices
|
||||
//
|
||||
// This service can be used to setup the development servers services after a restore from production.
|
||||
// Only the bare necesseties are turned on to prevent individual development instances from potentially stepping
|
||||
// on each other (e.g. SHARED_TEST and JONATHAN_O instance trying to import a metrology file simultaneously).
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service SetupDevServices()
|
||||
|
||||
DevAppServices = 'Email Server'
|
||||
|
||||
DevDBServices = 'Barcode Scan Postings':@VM:'Log Transaction Postings':@VM:'Validate Authentication Requests':@VM
|
||||
DevDBServices := 'Process UCL Requests':@VM:'Process ROTR Requests':@VM:'Process Wafer Image Requests':@VM
|
||||
DevDBServices := 'Process SQL Requests'
|
||||
|
||||
Query = "SELECT SERVICES"
|
||||
|
||||
GoSub ClearCursors
|
||||
Rlist(Query, Target_ActiveList$, '', '', '')
|
||||
|
||||
If @RecCount GT 0 then
|
||||
Open 'SERVICES' to hServices then
|
||||
EOF = False$
|
||||
Loop
|
||||
ReadNext ServiceName else EOF = True$
|
||||
ServiceRec = Database_Services('ReadDataRow', 'SERVICES', ServiceName)
|
||||
Server = ServiceRec<SERVICES.SERVER$>
|
||||
Begin Case
|
||||
Case ( (Server _EQC 'MESSA005') or (Server _EQC 'MESSA012') )
|
||||
// App Servers
|
||||
Locate ServiceName in DevAppServices using @VM setting vPos then
|
||||
ServiceRec<SERVICES.SERVER$> = 'MESSA012'
|
||||
ServiceRec<SERVICES.ACTIVE$> = True$
|
||||
end else
|
||||
ServiceRec<SERVICES.SERVER$> = 'MESSA012'
|
||||
ServiceRec<SERVICES.ACTIVE$> = False$
|
||||
end
|
||||
|
||||
Case ( (Server _EQC 'MESSA01EC') or (Server _EQC 'MESTSA01EC') )
|
||||
// DB Servers
|
||||
Locate ServiceName in DevDBServices using @VM setting vPos then
|
||||
ServiceRec<SERVICES.SERVER$> = 'MESTSA01EC'
|
||||
ServiceRec<SERVICES.ACTIVE$> = True$
|
||||
end else
|
||||
ServiceRec<SERVICES.SERVER$> = 'MESTSA01EC'
|
||||
ServiceRec<SERVICES.ACTIVE$> = False$
|
||||
end
|
||||
End Case
|
||||
Database_Services('WriteDataRow', 'SERVICES', ServiceName, ServiceRec, True$, False$, True$)
|
||||
Until EOF
|
||||
Repeat
|
||||
end
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service DeployRoutine(StoredProcNames)
|
||||
|
||||
If StoredProcNames NE '' then
|
||||
For each StoredProcName in StoredProcNames using @FM setting fPos
|
||||
SysObjKey = '$':StoredProcName:'*LSL2'
|
||||
If RowExists('SYSOBJ', SysObjKey) then
|
||||
Messaging_Services('SendMessage', 'RunProcedure', 'Request', '', 'All', 'RTP27,':StoredProcName, '', '', '')
|
||||
end else
|
||||
Error_Services('Add', 'Error in ':Service:' service. Stored procedure ':StoredProcName:' does not exist!')
|
||||
end
|
||||
Next StoredProcName
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Internal GoSubs
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
ClearCursors:
|
||||
For counter = 0 to 8
|
||||
ClearSelect counter
|
||||
Next counter
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user