Function Test_Daniel3_DEV() #pragma precomp SRP_PreCompiler 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, FTP_Services 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, Obj_WO_Mat_QA, Fmt, Yield, WinYield, Sleepery, Qa_Services, Reactor_Services Declare subroutine Obj_Post_Log, GaN_Services, Excel_Services, obj_WO_React, Activate_Save_Select, Reduce, FSMsg Declare subroutine SRP_Stopwatch, Copy_Record_To_SQL 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, ICONV Declare function Development_Services, Obj_WO_Mat_QA, SRP_Join_Arrays, NextKey, Obj_Prod_Spec, FTP_Services, SQL_Format Declare function DateTime, GaN_Services, SRP_Array, Excel_Services, EpiPro_Services, Repository, RTI_Task_Submit Declare function RTI_Task_Status, Rds_Services Declare subroutine SRP_Stopwatch, Btree.Extract $INSERT POPUP_EQUATES $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 LOGICAL $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 SCHEDULE_EQU $Insert SCHED_DET_EQUATES $Insert SCHEDULER_EQUATES $Insert NCR_EQUATES $Insert REACT_RUN_EQUATES $Insert TOOL_EQUATES $Insert TOOL_LOG_EQUATES $Insert PM_EQUATES $Insert WO_WFR_EQUATES $Insert DICT_EQUATES $Insert RTI_DEBUG_COMMON $Insert PRINTSETUP_EQUATES // Reduce modes (for Select statement) Equ NEW_EXIST$ To 0 Equ NEXT_CUR$ To 1 Equ ADD_EXIST$ To 2 EQU COL$QA_MET_PHASE_MIN TO 17 Equ Tab$ to \09\ Equ CRLF$ to \0D0A\ Equ LF$ to \0A\ Equ Comma$ to ',' LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\SQL_Backlog' LogDate = Oconv(Date(), 'D4/') LogTime = Oconv(Time(), 'MTS') LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Quarantine Log.csv' Headers = 'Logging DTM' : @FM : 'Debug Info' objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$) LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM Main: LogData = LoggingDTM : @RM : SPStatus@ : @RM : SPStatCode@ : @RM : Curr_Program@ : @RM : CallDepth@ : @RM : LineNo@ : @RM : CallStack@ Swap @RM with @FM in LogData Logging_Services('AppendLog', objLog, LogData, @RM, @FM) return TaskID = RTI_Task_Submit('', 'TEST_DANIEL', '', '', '', '') If TaskID NE 0 then Done = False$ TaskResponse = '' Loop Status = RTI_Task_Status(TaskID, TaskResponse) If (Status EQ 'COMPLETED') OR (Status EQ 'ERROR') then Done = True$ Until Done Repeat end else // Track if task id wasn't created at all. end StatusError = Get_Status(errCode) If (Index(errCode, 'SHELLEXECUTE', 1)) NE 0 then StatusError = 0 return * retval = Utility("PRINTSETUP") IF NOT(ASSIGNED(PrinterID)) THEN PrinterID = '' IF NOT(ASSIGNED(RetDefault)) THEN RetDefault = '' Printers = '' Default = '' IF @User4 EQ 'DAN_CR' then debug //PrintCount = PrintSetupNew(Printers,Default) ;* OI routine returns printer names, driver, port information //end else PrintCount = PrintSetup(PRN_GET$,'',Printers,Default) ;* OI routine returns printer names, driver, port information //end DefPrinter = Default[1,','] DefPort = FIELD(Default,',',3) DefLine = DefPrinter:' on ':DefPort * If Default NE 'Microsoft XPS Document Writer,winspool,Ne00:' then * Null PrintSetup(PRN_SET$, 'Microsoft XPS Document Writer,winspool,Ne00:') * end return // Import 6 inch Excel spreadsheet RetainFilepath = 'D:\Apps\Temp\6in-IFEPI GaN Retain Inventory.xlsx' * RetainFilepath = 'D:\Apps\Temp\8in-IFEpi GaN Retain Inventory.xlsx' * RetainFilepath = 'D:\Apps\Temp\Sample.xlsx' RetainExcelHandle = Excel_Services('OpenDocument', RetainFilepath) RetainWorksheet = 'Sheet1' NumExcelRows = Excel_Services('GetNumRows', RetainExcelHandle, RetainWorksheet) Open 'DICT.REACT_RUN' to @DICT then For ExcelRow = 2 to NumExcelRows RunID = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'A', ExcelRow) ) Convert @Upper.Case to @Lower.Case in RunID RDSNo = '' Column = 'GAN_RUN_ID' SearchString = Column:@VM:RunID:@FM Btree.Extract(SearchString, 'REACT_RUN', @DICT, RDSNo) If RDSNo NE '' then ReactRunRec = Database_Services('ReadDataRow', 'REACT_RUN', RDSNo) If Error_Services('NoError') then RRRecipe = ReactRunRec RRPart = Xlate('REACT_RUN', RDSNo, 'EPI_PART_NO', 'X') RRScribes = Xlate('REACT_RUN', RDSNo, 'WFR_SCRIBES', 'X') InWfrIDs = ReactRunRec * Read the data from the Excel retain spreadsheet * Recipe = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'B', ExcelRow) ) Pocket = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'C', ExcelRow) ) If Pocket _NEC 'ref' then Scribe = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'D', ExcelRow) ) Grade = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'E', ExcelRow) ) Part = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'F', ExcelRow) ) WorkOrder = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'G', ExcelRow) ) RetainBox = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'H', ExcelRow) ) RetainSlot = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'I', ExcelRow) ) Operator = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'J', ExcelRow) ) RetainDTM = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'K', ExcelRow) ) CurrLoc = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'L', ExcelRow) ) Status = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'M', ExcelRow) ) Comment = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'N', ExcelRow) ) Begin Case Case Operator _EQC 'AH' RetainSig = 'ANTHONY_H' Case Operator _EQC 'SB' RetainSig = 'SYEDA_B' Case Operator _EQC 'PM' RetainSig = 'PEYTON_M' Case Operator _EQC 'JL' RetainSig = 'JAVIER_L' Case Operator _EQC 'PS' RetainSig = 'PRISCILA_S' Case Operator _EQC 'NC' RetainSig = 'NIKOLAS_C' Case Operator _EQC 'HG' RetainSig = 'HECTOR_G' Case Operator _EQC 'ES' RetainSig = 'ESTEBAN_S' Case Operator _EQC 'AD' RetainSig = 'ALIYAH_D' Case Operator _EQC 'LB' RetainSig = 'LACEY_B' Case Operator _EQC 'IP' RetainSig = 'IAN_P' Case Operator _EQC 'RC' RetainSig = 'RYAN_C' Case Operator _EQC 'GR' RetainSig = 'GEORGE_R' Case Operator _EQC 'AH/JL' RetainSig = 'ANTHONY_H' Case Operator _EQC 'NC/JL' RetainSig = 'NIKOLAS_C' Case Operator _EQC 'SW' RetainSig = 'STEVEN_W' Case Otherwise$ RetainSig = '' End Case // Truncate DTM to just the date, then convert to internal format RetainDate = RetainDTM[1, 'F '] RetainDate = IConv(RetainDate, 'D') * Clean the data * // Format the Recipe Convert @Lower.Case to @Upper.Case in Recipe // Format the Pocket If Pocket[1, 1] NE '0' then Pocket = '0':Pocket // Format the Scribe Convert @Lower.Case to @Upper.Case in Scribe // Format the Grade Begin Case Case Grade _EQC 'aborted' Grade = 'Aborted' Case Grade _EQC 'CT' Grade = 'CT' Case ( (Grade _EQC 'Eng test') or (Grade _EQC 'Eng test') or (Grade _EQC 'Engtest') or (Grade _EQC 'Test') ) Grade = 'Eng Test' Case Grade _EQC 'Eq Failure' Grade = 'EQ Failure' Case Grade _EQC 'Mechanical' Grade = 'Mechanical' Case Grade _EQC 'NA' Grade = 'NA' Case Grade _EQC 'retain' Grade = 'Retain' Case Grade _EQC 'scrap' Grade = 'Scrap' Case Grade _EQC 'Terminated' Grade = 'Terminated' Case Grade _EQC '' Grade = '' Case Otherwise$ Null End Case // Format the Part No Convert @Lower.Case to @Upper.Case in Part // Format the Current Location Begin Case Case CurrLoc _EQC 'Cleanroom' CurrLoc = 'Cleanroom' Case ( (CurrLoc _EQC 'Wafer Destroyed') or (CurrLoc _EQC 'Wafers Destroyed') or (CurrLoc _EQC 'Wasfer Destroyed') ) CurrLoc = 'Wafer Destroyed' Case CurrLoc _EQC 'Warehouse' CurrLoc = 'Warehouse' End Case * Write the data to the WO_WFR record * WfrIndex = Pocket + 0 ; // Convert string to integer and trim 0 padding RRScribe = RRScribes<0, WfrIndex> WfrID = InWfrIDs<0, WfrIndex> WOWfrRec = Database_Services('ReadDataRow', 'WO_WFR', WfrID) If Error_Services('NoError') then * WOWfrRec = Grade * WOWfrRec = RunID * WOWfrRec = Pocket * WOWfrRec = Scribe * WOWfrRec = RetainBox * WOWfrRec = RetainSlot * WOWfrRec = CurrLoc * WOWfrRec = Comment * WOWfrRec = Status * WOWfrRec = RetainSig WOWfrRec = RetainDate Database_Services('WriteDataRow', 'WO_WFR', WfrID, WOWfrRec, True$, False$, True$) end end end end Next ExcelRow end Excel_Services('CloseDocument', RetainExcelHandle) // Import 8 inch Excel spreadsheet RetainFilepath = 'D:\Apps\Temp\8in-IFEpi GaN Retain Inventory.xlsx' RetainExcelHandle = Excel_Services('OpenDocument', RetainFilepath) RetainWorksheet = 'Sheet1' NumExcelRows = Excel_Services('GetNumRows', RetainExcelHandle, RetainWorksheet) Open 'DICT.REACT_RUN' to @DICT then For ExcelRow = 2 to NumExcelRows RunID = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'A', ExcelRow) ) Convert @Upper.Case to @Lower.Case in RunID RDSNo = '' Column = 'GAN_RUN_ID' SearchString = Column:@VM:RunID:@FM Btree.Extract(SearchString, 'REACT_RUN', @DICT, RDSNo) If RDSNo NE '' then ReactRunRec = Database_Services('ReadDataRow', 'REACT_RUN', RDSNo) If Error_Services('NoError') then RRRecipe = ReactRunRec RRPart = Xlate('REACT_RUN', RDSNo, 'EPI_PART_NO', 'X') RRScribes = Xlate('REACT_RUN', RDSNo, 'WFR_SCRIBES', 'X') InWfrIDs = ReactRunRec * Read the data from the Excel retain spreadsheet * Recipe = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'B', ExcelRow) ) Pocket = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'C', ExcelRow) ) If Pocket _NEC 'ref' then Scribe = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'D', ExcelRow) ) Grade = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'E', ExcelRow) ) Part = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'F', ExcelRow) ) WorkOrder = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'G', ExcelRow) ) RetainBox = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'H', ExcelRow) ) RetainSlot = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'I', ExcelRow) ) Operator = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'J', ExcelRow) ) RetainDate = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'K', ExcelRow) ) CurrLoc = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'L', ExcelRow) ) Status = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'M', ExcelRow) ) Comment = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'N', ExcelRow) ) Begin Case Case Operator _EQC 'AH' RetainSig = 'ANTHONY_H' Case Operator _EQC 'SB' RetainSig = 'SYEDA_B' Case Operator _EQC 'PM' RetainSig = 'PEYTON_M' Case Operator _EQC 'JL' RetainSig = 'JAVIER_L' Case Operator _EQC 'PS' RetainSig = 'PRISCILA_S' Case Operator _EQC 'NC' RetainSig = 'NIKOLAS_C' Case Operator _EQC 'HG' RetainSig = 'HECTOR_G' Case Operator _EQC 'ES' RetainSig = 'ESTEBAN_S' Case Operator _EQC 'AD' RetainSig = 'ALIYAH_D' Case Operator _EQC 'LB' RetainSig = 'LACEY_B' Case Operator _EQC 'IP' RetainSig = 'IAN_P' Case Operator _EQC 'RC' RetainSig = 'RYAN_C' Case Operator _EQC 'GR' RetainSig = 'GEORGE_R' Case Operator _EQC 'AH/JL' RetainSig = 'ANTHONY_H' Case Operator _EQC 'NC/JL' RetainSig = 'NIKOLAS_C' Case Operator _EQC 'SW' RetainSig = 'STEVEN_W' Case Otherwise$ RetainSig = '' End Case // Truncate DTM to just the date, then convert to internal format RetainDate = RetainDTM[1, 'F '] RetainDate = IConv(RetainDate, 'D') * Clean the data * // Format the Recipe Convert @Lower.Case to @Upper.Case in Recipe // Format the Pocket If Pocket[1, 1] NE '0' then Pocket = '0':Pocket // Format the Scribe Convert @Lower.Case to @Upper.Case in Scribe // Format the Grade Begin Case Case Grade _EQC 'aborted' Grade = 'Aborted' Case Grade _EQC 'CT' Grade = 'CT' Case ( (Grade _EQC 'Eng test') or (Grade _EQC 'Eng test') or (Grade _EQC 'Engtest') or (Grade _EQC 'Test') ) Grade = 'Eng Test' Case Grade _EQC 'Eq Failure' Grade = 'EQ Failure' Case Grade _EQC 'Mechanical' Grade = 'Mechanical' Case Grade _EQC 'NA' Grade = 'NA' Case Grade _EQC 'retain' Grade = 'Retain' Case Grade _EQC 'scrap' Grade = 'Scrap' Case Grade _EQC 'Terminated' Grade = 'Terminated' Case Grade _EQC '' Grade = '' Case Otherwise$ Null End Case // Format the Part No Convert @Lower.Case to @Upper.Case in Part // Format the Current Location Begin Case Case CurrLoc _EQC 'Cleanroom' CurrLoc = 'Cleanroom' Case ( (CurrLoc _EQC 'Wafer Destroyed') or (CurrLoc _EQC 'Wafers Destroyed') or (CurrLoc _EQC 'Wasfer Destroyed') ) CurrLoc = 'Wafer Destroyed' Case CurrLoc _EQC 'Warehouse' CurrLoc = 'Warehouse' End Case * Write the data to the WO_WFR record * WfrIndex = Pocket + 0 ; // Convert string to integer and trim 0 padding RRScribe = RRScribes<0, WfrIndex> WfrID = InWfrIDs<0, WfrIndex> WOWfrRec = Database_Services('ReadDataRow', 'WO_WFR', WfrID) If Error_Services('NoError') then * WOWfrRec = Grade * WOWfrRec = RunID * WOWfrRec = Pocket * WOWfrRec = Scribe * WOWfrRec = RetainBox * WOWfrRec = RetainSlot * WOWfrRec = CurrLoc * WOWfrRec = Comment * WOWfrRec = Status * WOWfrRec = RetainSig WOWfrRec = RetainDate Database_Services('WriteDataRow', 'WO_WFR', WfrID, WOWfrRec, True$, False$, True$) end end end end Next ExcelRow end Excel_Services('CloseDocument', RetainExcelHandle) return