added LSL2 stored procedures
This commit is contained in:
605
LSL2/STPROC/TEST_RUN_SERVICES.txt
Normal file
605
LSL2/STPROC/TEST_RUN_SERVICES.txt
Normal file
@ -0,0 +1,605 @@
|
||||
Compile function TEST_RUN_Services(@Service, @Params)
|
||||
#pragma precomp SRP_PreCompiler
|
||||
$insert LOGICAL
|
||||
$Insert APP_INSERTS
|
||||
$Insert TEST_WAFER_PROD_EQUATES
|
||||
$Insert TEST_WAFER_TYPES_DISPO_OPTIONS_EQUATES
|
||||
$Insert TEST_RUN_EQUATES
|
||||
$Insert TEST_RUN_WAFER_EQUATES
|
||||
$Insert TEST_RUN_OBJ_EQUATES
|
||||
|
||||
Declare function Nextkey, Error_Services, Environment_Services, OConv, Logging_Services, SRP_Hashtable
|
||||
Declare function SRP_Datetime, Database_Services, Test_Run_Services, File_Services, Status, delete, Insert
|
||||
Declare subroutine Database_Services, Btree.Extract, Error_Services, Logging_Services, Rlist, Test_Run_Services,
|
||||
|
||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\TEST_RUN_SERVICES\TestWaferProduct'
|
||||
LogDate = Oconv(Date(), 'D4/')
|
||||
LogTime = Oconv(Time(), 'MTS')
|
||||
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Material Log.csv'
|
||||
Headers = 'Logging DTM' : @FM : 'User' : @FM : 'Notes'
|
||||
objLogTWP = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
|
||||
|
||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\TEST_RUN_SERVICES\TestRun'
|
||||
LogDate = Oconv(Date(), 'D4/')
|
||||
LogTime = Oconv(Time(), 'MTS')
|
||||
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Material Log.csv'
|
||||
Headers = 'Logging DTM' : @FM : 'User' : @FM : 'Notes'
|
||||
objLogTR = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
|
||||
|
||||
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
|
||||
|
||||
GoToService
|
||||
|
||||
Return Response or ""
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// SERVICES
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
|
||||
//Test Wafer Product Methods - related to TEST_WAFER_PROD table
|
||||
|
||||
/*
|
||||
Create New Test Wafer Product
|
||||
Creates a new entry in the TEST_WAFER_PROD table.
|
||||
*/
|
||||
Service CreateNewTestWaferProduct(ProductName)
|
||||
If ProductName NE '' then
|
||||
//Check for existing
|
||||
table = 'TEST_WAFER_PROD'
|
||||
Open "DICT ":table To @DICT Else
|
||||
Error_Services('Add', 'Error opening Test wafer product table')
|
||||
Return
|
||||
End
|
||||
Column = "PART_NAME"
|
||||
Value = ProductName
|
||||
search_criteria = Column:@VM:Value:@FM
|
||||
keylist = ""
|
||||
option = ""
|
||||
flag = ""
|
||||
Btree.Extract(search_criteria, table, @DICT, keylist, option, flag)
|
||||
IF keylist EQ '' then
|
||||
NewTestWaferProdRec = ''
|
||||
NewTestWaferProdRec<TEST_WAFER_PROD_PART_NAME$> = ProductName
|
||||
NewTestWaferProdKey = Nextkey('TEST_WAFER_PROD')
|
||||
Database_Services('WriteDataRow', table, NewTestWaferProdKey, NewTestWaferProdRec)
|
||||
If Error_Services('NoError') then
|
||||
LogData = ''
|
||||
LogData<1, 1> = LoggingDTM
|
||||
LogData<1, 2> = @User4
|
||||
LogData<1, 3> = 'Successfully created new product type with ID of ' : NewTestWaferProdKey
|
||||
Logging_Services('AppendLog', objLogTWP, LogData, @FM, @VM)
|
||||
Response = NewTestWaferProdKey
|
||||
end else
|
||||
//Todo Add Logging for failure
|
||||
LogData = ''
|
||||
|
||||
LogData<1, 1> = LoggingDTM
|
||||
LogData<1, 2> = @User4
|
||||
LogData<1, 3> = 'Error Creating new test wafer product. ' : Error_Services('GetMessage')
|
||||
Logging_Services('AppendLog', objLogTWP, LogData, @FM, @VM)
|
||||
Response = ''
|
||||
end
|
||||
end else
|
||||
|
||||
LogData = ''
|
||||
LogData<1, 1> = LoggingDTM
|
||||
LogData<1, 2> = @User4
|
||||
LogData<1, 3> = 'Error Creating new test wafer product. Product already exists!'
|
||||
Logging_Services('AppendLog', objLogTWP, LogData, @FM, @VM)
|
||||
Error_Services('Add', 'Product already exists!')
|
||||
Response = ''
|
||||
end
|
||||
end else
|
||||
//Todo Add logging for failure
|
||||
LogData = ''
|
||||
LogData<1, 1> = LoggingDTM
|
||||
LogData<1, 2> = @User4
|
||||
LogData<1, 3> = 'Product name was missing'
|
||||
Logging_Services('AppendLog', objLogTWP, LogData, @FM, @VM)
|
||||
Error_Services('Add', 'Product name was missing')
|
||||
Response = ''
|
||||
end
|
||||
end service
|
||||
|
||||
Service DisableTWProd(TWProdKey)
|
||||
If TWProdKey NE '' then
|
||||
TWProdRec = Database_Services('ReadDataRow', 'TEST_WAFER_PROD', TWProdKey)
|
||||
TWProdRec<TEST_WAFER_PROD_SORT_ORDER$> = 0
|
||||
Database_Services('WriteDataRow', 'TEST_WAFER_PROD', TWProdKey, TWProdRec)
|
||||
end else
|
||||
Error_Services('Add', 'Error in TEST_RUN_SERVICES -> DisableTWProd: No TWProdKeySupplied')
|
||||
end
|
||||
end service
|
||||
|
||||
/*
|
||||
Add disposition option to a test wafer product
|
||||
Creates a new disposition entry in the TEST_WAFER_TYPES_DISPO_OPTION table, related to a TEST_WAFER_PROD record
|
||||
*/
|
||||
Service AddTestWaferProductDispo(TestWaferProdID, DispoName)
|
||||
If TestWaferProdID NE '' then
|
||||
IF DispoName NE '' then
|
||||
MatchingIDs = False$
|
||||
CurrentDispoIDs = XLATE('TEST_WAFER_PROD', TestWaferProdID, TEST_WAFER_PROD_WAFER_DISPO_IDS$, 'X')
|
||||
For i = 1 to DCount(CurrentDispoIDs, @VM)
|
||||
DispoID = CurrentDispoIDs<1, i>
|
||||
DispoDescription = Xlate('TEST_WAFER_TYPES_DISPO_OPTIONS', DispoID, TEST_WAFER_TYPES_DISPO_OPTIONS_DISPO_DESCRIPTION$, 'X')
|
||||
if DispoName EQ DispoDescription then MatchingIDs = true$
|
||||
Until MatchingIDs
|
||||
Next i
|
||||
if NOT(MatchingIDs) then
|
||||
NewTestWaferProdDispoRec = ''
|
||||
NewTestWaferProdDispoRec<TEST_WAFER_TYPES_DISPO_OPTIONS_TEST_WAFER_PROD_ID$> = TestWaferProdID
|
||||
NewTestWaferProdDispoRec<TEST_WAFER_TYPES_DISPO_OPTIONS_DISPO_DESCRIPTION$> = DispoName
|
||||
NewTestWaferProdDispoKey = Nextkey('TEST_WAFER_TYPES_DISPO_OPTIONS')
|
||||
Database_Services('WriteDataRow', 'TEST_WAFER_TYPES_DISPO_OPTIONS', NewTestWaferProdDispoKey, NewTestWaferProdDispoRec)
|
||||
If Error_Services('NoError') then
|
||||
LogData = ''
|
||||
LogData<1, 1> = LoggingDTM
|
||||
LogData<1, 2> = @User4
|
||||
LogData<1, 3> = 'Dispo added to ' : TestWaferProdID : '. The dispo key is ' : NewTestWaferProdDispoKey
|
||||
Logging_Services('AppendLog', objLogTWP, LogData, @FM, @VM)
|
||||
end else
|
||||
LogData = ''
|
||||
LogData<1, 1> = LoggingDTM
|
||||
LogData<1, 2> = @User4
|
||||
LogData<1, 3> = 'Error adding dispo to TW Prod, ' : Error_Services('GetMessage')
|
||||
Logging_Services('AppendLog', objLogTWP, LogData, @FM, @VM)
|
||||
end
|
||||
end else
|
||||
LogData = ''
|
||||
LogData<1, 1> = LoggingDTM
|
||||
LogData<1, 2> = @User4
|
||||
LogData<1, 3> = 'Error adding dispo to TW Prod. dispo option already existed.'
|
||||
Logging_Services('AppendLog', objLogTWP, LogData, @FM, @VM)
|
||||
Error_Services('Add', 'Error adding dispo to TW Prod. dispo option already existed.')
|
||||
end
|
||||
end else
|
||||
LogData = ''
|
||||
LogData<1, 1> = LoggingDTM
|
||||
LogData<1, 2> = @User4
|
||||
LogData<1, 3> = 'Error adding dispo to TW Prod. The dispo name was missing'
|
||||
Logging_Services('AppendLog', objLogTWP, LogData, @FM, @VM)
|
||||
end
|
||||
end else
|
||||
LogData = ''
|
||||
LogData<1, 1> = LoggingDTM
|
||||
LogData<1, 2> = @User4
|
||||
LogData<1, 3> = 'Error adding dispo to TW Prod. The product name was missing'
|
||||
Logging_Services('AppendLog', objLogTWP, LogData, @FM, @VM)
|
||||
end
|
||||
end service
|
||||
|
||||
Service DeleteTestWaferProductDispo(DispoID)
|
||||
If DispoID NE '' then
|
||||
If RowExists('TEST_WAFER_TYPES_DISPO_OPTIONS', DispoID) then
|
||||
Database_Services('DeleteDataRow', 'TEST_WAFER_TYPES_DISPO_OPTIONS', DispoID, True$, False$)
|
||||
end else
|
||||
errorMessage = 'Error deleting dispo to TW Prod. The dispo id was not found.'
|
||||
LogData = ''
|
||||
LogData<1, 1> = LoggingDTM
|
||||
LogData<1, 2> = @User4
|
||||
LogData<1, 3> = errorMessage
|
||||
Logging_Services('AppendLog', objLogTWP, LogData, @FM, @VM)
|
||||
Error_Services('Add', errorMessage)
|
||||
end
|
||||
end else
|
||||
errorMessage = 'Error deleting dispo to TW Prod. The dispo id was missing'
|
||||
LogData = ''
|
||||
LogData<1, 1> = LoggingDTM
|
||||
LogData<1, 2> = @User4
|
||||
LogData<1, 3> = errorMessage
|
||||
Logging_Services('AppendLog', objLogTWP, LogData, @FM, @VM)
|
||||
Error_Services('Add', errorMessage)
|
||||
end
|
||||
end service
|
||||
|
||||
Service GetAllTWProdKeysUnformatted()
|
||||
keylist = ''
|
||||
RList("SELECT TEST_WAFER_PROD WITH SORT_ORDER NE '' BY SORT_ORDER", 5, '', '', '')
|
||||
Done = False$
|
||||
Loop
|
||||
Readnext TWProdKey else Done = True$
|
||||
Until Done
|
||||
keylist<-1> = TWProdKey
|
||||
Repeat
|
||||
|
||||
Response = keylist
|
||||
end service
|
||||
|
||||
Service GetAllTWProdKeys(ShowSorted)
|
||||
keylist = ''
|
||||
ProdList = ''
|
||||
If ShowSorted then
|
||||
RList("SELECT TEST_WAFER_PROD WITH SORT_ORDER NE 0 AND WITH SORT_ORDER NE '' BY SORT_ORDER", 5, '', '', '')
|
||||
end else
|
||||
RList("SELECT TEST_WAFER_PROD BY SORT_ORDER", 5, '', '', '')
|
||||
end
|
||||
|
||||
Done = False$
|
||||
Loop
|
||||
Readnext TWProdKey else Done = True$
|
||||
Until Done
|
||||
keylist<1, -1> = TWProdKey
|
||||
Repeat
|
||||
for each ProdKey in keylist using @VM setting pPos
|
||||
ProdName = Xlate('TEST_WAFER_PROD', ProdKey, TEST_WAFER_PROD_PART_NAME$, 'X')
|
||||
if ProdName NE '' then
|
||||
ProdList<1, pPos> = ProdKey
|
||||
ProdList<2, pPos> = ProdName
|
||||
end
|
||||
Next ProdKey
|
||||
Response = ProdList
|
||||
end service
|
||||
|
||||
Service UpdateTWProdSortOrder(TWProdKey, NewOrder)
|
||||
//First get current sort order
|
||||
TWProdRec = Database_Services('ReadDataRow', 'TEST_WAFER_PROD', TWProdKey)
|
||||
OldSortOrder = TWProdRec<TEST_WAFER_PROD_SORT_ORDER$>
|
||||
AllTWProdsSorted = Test_Run_Services('GetAllTWProdKeysUnformatted')
|
||||
//Get rid of all zero value sort orders
|
||||
i = 1
|
||||
LOOP
|
||||
UNTIL AllTWProdsSorted<i> = ''
|
||||
currSortOrder = Xlate('TEST_WAFER_PROD', AllTWProdsSorted<i>, TEST_WAFER_PROD_SORT_ORDER$, 'X')
|
||||
If currSortOrder EQ 0 then
|
||||
//Remove it from the list of TWProds with Sorting enabled. The zero's will screw up the next part.
|
||||
AllTWProdsSorted = delete(AllTWProdsSorted, i, 0, 0)
|
||||
end
|
||||
i = i + 1
|
||||
REPEAT
|
||||
If NewOrder GT 0 then
|
||||
AllTWProdsSorted = Insert(AllTWProdsSorted, NewOrder, 0, 0, TWProdKey)
|
||||
//Locate the old order and remove it
|
||||
i = 1
|
||||
LOOP
|
||||
UNTIL AllTWProdsSorted<i> = ''
|
||||
If i NE NewOrder AND AllTWProdsSorted<i> EQ TWProdKey then
|
||||
//Remove it from the list of TWProds with Sorting enabled. The zero's will screw up the next part.
|
||||
AllTWProdsSorted = delete(AllTWProdsSorted, i, 0, 0)
|
||||
end
|
||||
i = i + 1
|
||||
REPEAT
|
||||
end else
|
||||
//Disabling
|
||||
Locate TWProdKey in AllTWProdsSorted using @FM setting tPos then
|
||||
AllTWProdsSorted = delete(AllTWProdsSorted, tPos, 0, 0)
|
||||
end
|
||||
TWProdRecToWrite = Database_Services('ReadDataRow', 'TEST_WAFER_PROD', TWProdKey)
|
||||
TWProdRecToWrite<TEST_WAFER_PROD_SORT_ORDER$> = 0
|
||||
Database_Services('WriteDataRow', 'TEST_WAFER_PROD', TWProdKey, TWProdRecToWrite, 1, 0, 1)
|
||||
end
|
||||
//Rewrite the entire sort order for all prods
|
||||
For each TWProd in AllTWProdsSorted using @FM setting SortOrder
|
||||
TWProdRecToWrite = Database_Services('ReadDataRow', 'TEST_WAFER_PROD', TWProd)
|
||||
TWProdRecToWrite<TEST_WAFER_PROD_SORT_ORDER$> = SortOrder
|
||||
Database_Services('WriteDataRow', 'TEST_WAFER_PROD', TWProd, TWProdRecToWrite, 1, 0, 1)
|
||||
Next TWProd
|
||||
end service
|
||||
|
||||
Service GetAllTestRunTypes()
|
||||
keylist = ''
|
||||
rtList = ''
|
||||
RList('SELECT TEST_RUN_TYPE BY RUN_TYPE', 5, '', '', '')
|
||||
Done = False$
|
||||
Loop
|
||||
Readnext RunTypeKey else Done = True$
|
||||
Until Done
|
||||
keylist<1, -1> = RunTypeKey
|
||||
Repeat
|
||||
for each RTKey in keylist using @VM setting rPos
|
||||
RunTypeName = Xlate('TEST_RUN_TYPE', RTKey, TEST_RUN_TYPE_RUN_TYPE$, 'X')
|
||||
if RunTypeName NE '' then
|
||||
rtList<1, rPos> = RTKey
|
||||
rtList<2, rPos> = RunTypeName
|
||||
end
|
||||
Next ProdKey
|
||||
Response = rtList
|
||||
end service
|
||||
|
||||
Service CreateTestRunRecord(RunTypeID, EqpType, EqpID, PSNo, RDSNo, UserID)
|
||||
Response = ''
|
||||
ErrorMessage = ''
|
||||
If RunTypeID NE '' AND EqpType NE '' AND EqpID NE '' AND UserID NE '' then
|
||||
RunDTM = SRP_Datetime('Now')
|
||||
TWRunRec = ''
|
||||
TWRunRec<TEST_RUN_RUN_DTM$> = RunDTM
|
||||
TWRunRec<TEST_RUN_RUN_TYPE_ID$> = RunTypeID
|
||||
TWRunRec<TEST_RUN_EQUIPMENT_ID$> = EqpID
|
||||
TWRunRec<TEST_RUN_EQUIPMENT_TYPE$> = EqpType
|
||||
TWRunRec<TEST_RUN_PROD_SPEC_ID$> = PSNo
|
||||
TWRunRec<TEST_RUN_LSL_USER_ID$> = UserID
|
||||
TWRunRec<TEST_RUN_RDS_ID$> = RDSNo
|
||||
TWRunKey = nextkey('TEST_RUN')
|
||||
Database_Services('WriteDataRow', 'TEST_RUN', TWRunKey, TWRunRec)
|
||||
If Error_Services('NoError') then
|
||||
LogData = ''
|
||||
LogData<1, 1> = LoggingDTM
|
||||
LogData<1, 2> = @User4
|
||||
LogData<1, 3> = 'Successfully created new TEST_RUN record with ID of ' : TWRunKey
|
||||
Logging_Services('AppendLog', objLogTR, LogData, @FM, @VM)
|
||||
Response = TWRunKey
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
If RunTypeID EQ '' then
|
||||
ErrorMessage := 'Run Type ID Missing. '
|
||||
end
|
||||
If EqpTypeID EQ '' then
|
||||
ErrorMessage := 'Equipment Type ID Missing. '
|
||||
end
|
||||
If EqpID EQ '' then
|
||||
ErrorMessage := 'Equipment ID Missing. '
|
||||
end
|
||||
If UserID EQ '' then
|
||||
ErrorMessage := 'User ID Missing. '
|
||||
end
|
||||
end
|
||||
If ErrorMessage NE '' then
|
||||
LogData = ''
|
||||
LogData<1, 1> = LoggingDTM
|
||||
LogData<1, 2> = @User4
|
||||
LogData<1, 3> = 'Error writing TEST_RUN Record ' : TWRunKey : ': ' : ErrorMessage
|
||||
Logging_Services('AppendLog', objLogTR, LogData, @FM, @VM)
|
||||
Response = ''
|
||||
end
|
||||
end service
|
||||
|
||||
Service CreateTestRunWaferRecord(TestRunID, TWPartID, TWUsageTypeID, SourceLotID)
|
||||
ErrorMessage = ''
|
||||
If TestRunID NE '' AND TWPartID NE '' then
|
||||
If RowExists('TEST_RUN', TestRunID) then
|
||||
TRWaferRec = ''
|
||||
TRWaferRec<TEST_RUN_WAFER_TEST_RUN_ID$> = TestRunID
|
||||
TRWaferRec<TEST_RUN_WAFER_TEST_WAFER_PROD_ID$> = TWPartID
|
||||
TRWaferRec<TEST_RUN_WAFER_TEST_USAGE_TYPE_ID$> = TWUsageTypeID
|
||||
TRWaferRec<TEST_RUN_WAFER_SOURCE_LOT_ID$> = SourceLotID
|
||||
TRWaferKey = Nextkey('TEST_RUN_WAFER')
|
||||
Database_Services('WriteDataRow', 'TEST_RUN_WAFER', TRWaferKey, TRWaferRec)
|
||||
|
||||
If Error_Services('NoError') AND RowExists('TEST_RUN_WAFER', TRWaferKey) then
|
||||
LogData = ''
|
||||
LogData<1, 1> = LoggingDTM
|
||||
LogData<1, 2> = @User4
|
||||
LogData<1, 3> = 'Successfully wrote ' : TRWaferKey : ' to the TEST_RUN_WAFER table.'
|
||||
Logging_Services('AppendLog', objLogTR, LogData, @FM, @VM)
|
||||
//Increment Usage in TEST_WAFER_PROD Record
|
||||
Test_Run_Services('IncrementTWProdUsage', TWPartID)
|
||||
Response = TRWaferKey
|
||||
end else
|
||||
ErrorMessage := 'Error writing TEST_RUN_WAFER record with key of ' : TRWaferKey '. '
|
||||
end
|
||||
end else
|
||||
ErrorMessage := 'Unable to find parent TEST_RUN record. '
|
||||
end
|
||||
end else
|
||||
If TestRunID EQ '' then
|
||||
ErrorMessage := 'TestRunID parameter was not passed to CreateTestRunWaferRecord method. '
|
||||
end
|
||||
If TWPartID EQ '' then
|
||||
ErrorMessage := 'TWPartID parameter was not passed to CreateTestRunWaferRecord method. '
|
||||
end
|
||||
end
|
||||
If ErrorMessage NE '' then
|
||||
LogData = ''
|
||||
LogData<1, 1> = LoggingDTM
|
||||
LogData<1, 2> = @User4
|
||||
LogData<1, 3> = 'Error Writing ' : TWRunKey : ' to the TEST_RUN_WAFER table. ' : ErrorMessage
|
||||
Logging_Services('AppendLog', objLogTR, LogData, @FM, @VM)
|
||||
end
|
||||
end service
|
||||
|
||||
Service GetTestRunById(TestRunID)
|
||||
If TestRunID NE '' then
|
||||
If RowExists('TEST_RUN', TestRunID) then
|
||||
TRRec = Database_Services('ReadDataRow', 'TEST_RUN', TestRunID)
|
||||
Response = TRRec
|
||||
end else
|
||||
Error_Services('Add', 'Test Run ID does not exist in TEST_RUN table')
|
||||
end
|
||||
end else
|
||||
Error_Services('Add', 'Test Run ID parameter was not passed to routine.')
|
||||
end
|
||||
end service
|
||||
|
||||
Service IncrementTWProdUsage(TWProdKey)
|
||||
If TWProdKey NE '' then
|
||||
TWProdRec = Database_Services('ReadDataRow', 'TEST_WAFER_PROD', TWProdKey)
|
||||
TWProdRec<TEST_WAFER_PROD_USAGE$> = TWProdRec<TEST_WAFER_PROD_USAGE$> + 1
|
||||
Database_Services('WriteDataRow', 'TEST_WAFER_PROD', TWProdKey, TWProdRec)
|
||||
end
|
||||
end service
|
||||
|
||||
Service GetTestRunObj(TestRunID)
|
||||
TestRunObj = ''
|
||||
TestRunRec = Test_Run_Services('GetTestRunById', TestRunID)
|
||||
//Start getting translated values for object
|
||||
TestRunObj<TEST_RUN_OBJ_TEST_RUN_ID$> = TestRunID
|
||||
TestRunObj<TEST_RUN_OBJ_RUN_DTM$> = OConv(TestRunRec<TEST_RUN_RUN_DTM$>, 'DT')
|
||||
TestRunObj<TEST_RUN_OBJ_RUN_TYPE$> = Xlate('TEST_RUN_TYPE', TestRunRec<TEST_RUN_RUN_TYPE_ID$>, TEST_RUN_TYPE_RUN_TYPE$, 'X')
|
||||
TestRunObj<TEST_RUN_OBJ_EQUIPMENT_ID$> = TestRunRec<TEST_RUN_EQUIPMENT_ID$>
|
||||
EqpType = TestRunRec<TEST_RUN_EQUIPMENT_TYPE$>
|
||||
Begin Case
|
||||
Case EqpType EQ 'R'
|
||||
TestRunObj<TEST_RUN_OBJ_EQUIPMENT_TYPE$> = 'Reactor'
|
||||
Case EqpType EQ 'T'
|
||||
TestRunObj<TEST_RUN_OBJ_EQUIPMENT_TYPE$> = 'Non-Reactor'
|
||||
End Case
|
||||
TestRunObj<TEST_RUN_OBJ_PROD_SPEC_ID$> = TestRunRec<TEST_RUN_PROD_SPEC_ID$>
|
||||
TestRunObj<TEST_RUN_OBJ_LSL_USER_ID$> = TestRunRec<TEST_RUN_LSL_USER_ID$>
|
||||
TestRunObj<TEST_RUN_OBJ_RDS_ID$> = TestRunRec<TEST_RUN_RDS_ID$>
|
||||
|
||||
TWKeys = TestRunRec<TEST_RUN_TEST_RUN_WAFER_IDS$>
|
||||
TWUsageProds = ''
|
||||
TWUsageQtys = ''
|
||||
for each TWKey in TWKeys using @VM setting tPos
|
||||
TRWRec = Test_Run_Services('GetTestRunWaferByID', TWKey)
|
||||
TestWaferProdName = XLATE('TEST_WAFER_PROD', TRWRec<TEST_RUN_WAFER_TEST_WAFER_PROD_ID$>, TEST_WAFER_PROD_PART_NAME$, 'X')
|
||||
Locate TestWaferProdName in TWUsageProds setting iPos then
|
||||
TWUsageProds<1,iPos> = TestWaferProdName
|
||||
TWUsageQtys<1,iPos> = TWUsageQtys<1,iPos> + 1
|
||||
end else
|
||||
TWUsageProds<1,-1> = TestWaferProdName
|
||||
TWUsageQtys<1,-1> = 1
|
||||
end
|
||||
Next TWKey
|
||||
TestRunObj<TEST_RUN_OBJ_TEST_RUN_WAFER_PRODS$> = TWUsageProds
|
||||
TestRunObj<TEST_RUN_OBJ_TEST_RUN_WAFER_PRODS_QTYS$> = TWUsageQtys
|
||||
|
||||
Response = TestRunObj
|
||||
end service
|
||||
|
||||
Service GetTestWaferUsageByDateSpan(StartDtm, StopDtm)
|
||||
|
||||
TestWaferData = ''
|
||||
if StopDTM EQ '' then
|
||||
StopDTM = SRP_Datetime('Now')
|
||||
end
|
||||
If StartDTM EQ '' then
|
||||
StartDTM = SRP_Datetime('AddDays', StopDtm, -30)
|
||||
end
|
||||
//Get a list of Test Run keys
|
||||
TestRunKeys = Test_Run_Services('GetTestRunKeysByDateSpan', StartDtm, StopDtm)
|
||||
|
||||
For each TestRunKey in TestRunKeys using @VM setting tPos
|
||||
//Get all Product usages and their quantities
|
||||
TestRunRec = Database_Services('ReadDataRow', 'TEST_RUN', TestRunKey)
|
||||
TWUsageKeys = TestRunRec<TEST_RUN_TEST_RUN_WAFER_IDS$>
|
||||
TWUsageData = ''
|
||||
for each TWUsageKey in TWUsageKeys using @VM setting twPos
|
||||
TWProdTypeKey = Xlate('TEST_RUN_WAFER', TWUsageKey, TEST_RUN_WAFER_TEST_WAFER_PROD_ID$, 'X')
|
||||
TWProdType = Xlate('TEST_WAFER_PROD', TWProdTypeKey, TEST_WAFER_PROD_PART_NAME$, 'X')
|
||||
Locate TWProdType in TWUsageData<1> using @VM setting twuPos then
|
||||
TWUsageData<2, twuPos> = TWUsageData<2, twuPos> + 1
|
||||
end else
|
||||
TWUsageData<1, -1> = TWProdType
|
||||
TWUsageData<2, -1> = 1
|
||||
end
|
||||
|
||||
|
||||
Next TWUsageKey
|
||||
|
||||
For each TWUsage in TWUsageData<1> using @VM setting aPos
|
||||
TWLine = ''
|
||||
TWLine<1, TEST_RUN_OBJ_TEST_RUN_ID$> = TestRunKey
|
||||
TWLine<1, TEST_RUN_OBJ_RUN_DTM$> = OConv(TestRunRec<TEST_RUN_RUN_DTM$>, 'DT')
|
||||
TWLine<1, TEST_RUN_OBJ_RUN_TYPE$> = XLATE('TEST_RUN_TYPE', TestRunRec<TEST_RUN_RUN_TYPE_ID$>, 'RUN_TYPE', 'X')
|
||||
TWLine<1, TEST_RUN_OBJ_EQUIPMENT_ID$> = TestRunRec<TEST_RUN_EQUIPMENT_ID$>
|
||||
TWLine<1, TEST_RUN_OBJ_EQUIPMENT_TYPE$> = TestRunRec<TEST_RUN_EQUIPMENT_TYPE$>
|
||||
TWLine<1, TEST_RUN_OBJ_PROD_SPEC_ID$> = TestRunRec<TEST_RUN_PROD_SPEC_ID$>
|
||||
TWLine<1, TEST_RUN_OBJ_LSL_USER_ID$> = TestRunRec<TEST_RUN_LSL_USER_ID$>
|
||||
TWLine<1, TEST_RUN_OBJ_RDS_ID$> = TestRunRec<TEST_RUN_RDS_ID$>
|
||||
TWLine<1, TEST_RUN_OBJ_TEST_RUN_WAFER_PRODS$> = TWUsage
|
||||
TWLine<1, TEST_RUN_OBJ_TEST_RUN_WAFER_PRODS_QTYS$> = TWUsageData<2, aPos>
|
||||
TestWaferData<-1> = TWLine
|
||||
Next TWUsage
|
||||
Next TestRunKey
|
||||
|
||||
Response = TestWaferData
|
||||
end service
|
||||
|
||||
Service GetTestRunKeysByDateSpan(StartDtm, StopDtm)
|
||||
Begin Case
|
||||
Case StartDTM EQ '' AND StopDTM EQ ''
|
||||
//Set search date for last 24 hour period
|
||||
StopDTM = SRP_Datetime('Now')
|
||||
StartDTM = SRP_Datetime('AddHours', StopDTM, -24)
|
||||
Case StartDTM EQ '' AND StopDTM NE ''
|
||||
//Set search start date 24 hours prior to stopDTM
|
||||
StartDTM = SRP_Datetime('AddHours', StopDTM, -24)
|
||||
Case StartDTM NE '' AND StopDTM EQ ''
|
||||
//Set search start date to current dtm
|
||||
StopDTM = SRP_Datetime('Now')
|
||||
End Case
|
||||
|
||||
table = "TEST_RUN"
|
||||
Open "DICT ":table To @DICT Else
|
||||
Error_Services('Add', 'Error opening TEST_RUN dictionary')
|
||||
End
|
||||
If Error_Services('NoError') then
|
||||
srch_strng = "RUN_DTM":@VM:StartDTM:'~':StopDTM:@FM
|
||||
keylist = ""
|
||||
option = ""
|
||||
flag = ""
|
||||
Btree.Extract(srch_strng, table, @DICT, keylist, option, flag)
|
||||
Response = keylist
|
||||
end
|
||||
|
||||
|
||||
|
||||
end service
|
||||
|
||||
Service GetTestRunKeysByEqp(EquipType, EquipID)
|
||||
|
||||
end service
|
||||
|
||||
Service GetTestRunKeysByEqpType(EqpType)
|
||||
|
||||
end service
|
||||
|
||||
Service GetTestRunKeysByPSN(PSNo)
|
||||
|
||||
end service
|
||||
|
||||
Service GetTestRunKeysByRDS(RDSNo)
|
||||
|
||||
end service
|
||||
|
||||
Service GetTestRunWaferByID(TRWaferID)
|
||||
If TRWaferID NE '' then
|
||||
If RowExists('TEST_RUN_WAFER', TRWaferID) then
|
||||
Response = Database_Services('ReadDataRow', 'TEST_RUN_WAFER', TRWaferID)
|
||||
If Error_Services('HasError') then
|
||||
Response = ''
|
||||
Error_Services('Add', 'Error reading TEST_RUN_WAFER record with ID ' : TRWaferID)
|
||||
end
|
||||
end else
|
||||
Error_Services('Add', 'No TEST_RUN_WAFER record found that matches key value.')
|
||||
end
|
||||
end else
|
||||
Error_Services('Add', 'TRWaferID was null')
|
||||
end
|
||||
end service
|
||||
|
||||
Service GetTestRunWaferKeysByProdID(ProdID)
|
||||
|
||||
end service
|
||||
|
||||
Service GenerateTWCSVReport(StartDTM, StopDTM, SavePath)
|
||||
If SavePath NE '' then
|
||||
CSVData = 'ID' : @VM : 'Run Time' : @VM : 'Test Run Type' : @VM : 'Equipment ID' : @VM : 'Equipment Type' : @VM : 'PSN' : @VM : 'User' : @VM : 'RDS' : @VM : 'Test Wafer Type' : @VM : 'Wfr Qty' : @FM
|
||||
CSVData := Test_Run_Services('GetTestWaferUsageByDateSpan', StartDTM, StopDTM)
|
||||
swap @VM with ',' in CSVData
|
||||
swap @FM with CRLF$ in CSVData
|
||||
If Not(File_Services('CheckFileExtension', SavePath, 'csv')) then
|
||||
SavePath = SavePath : '.csv'
|
||||
end
|
||||
OSWrite CSVData To SavePath
|
||||
WriteFailure = Status()
|
||||
If WriteFailure then
|
||||
Begin Case
|
||||
Case WriteFailure EQ 1
|
||||
Error_Services('Add', 'Error in TEST_RUN_SERVICES -> GenerateTWCSVReport, Bad OS filename.')
|
||||
Case WriteFailure EQ 2
|
||||
Error_Services('Add', 'Error in TEST_RUN_SERVICES -> GenerateTWCSVReport, Access denied by operating system.')
|
||||
Case WriteFailure EQ 3
|
||||
Error_Services('Add', 'Error in TEST_RUN_SERVICES -> GenerateTWCSVReport, Disk or directory full.')
|
||||
Case WriteFailure EQ 4
|
||||
Error_Services('Add', 'Error in TEST_RUN_SERVICES -> GenerateTWCSVReport, File does not exist.')
|
||||
Case WriteFailure EQ 5
|
||||
Error_Services('Add', 'Error in TEST_RUN_SERVICES -> GenerateTWCSVReport, Unknown error.')
|
||||
Case WriteFailure EQ 6
|
||||
Error_Services('Add', 'Error in TEST_RUN_SERVICES -> GenerateTWCSVReport, Attempt to write to a read-only file.')
|
||||
End Case
|
||||
end
|
||||
end else
|
||||
Error_Services('Add', 'Error in TEST_RUN_SERVICES -> GenerateTWCSVReport, No SavePath provided.')
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user