open-insight/LSL2/STPROC/NDW_TEST_RUN_EVENTS.txt
2024-03-25 14:46:21 -07:00

286 lines
12 KiB
Plaintext

Compile function NDW_TEST_RUN_EVENTS(CtrlEntId, Event, @PARAMS)
#pragma precomp SRP_PreCompiler
#window NDW_TEST_RUN
Declare function Get_Property, Test_Run_Services, Database_Services, Reactor_Services, Tool_Services, Test_Run_Services
Declare subroutine Set_Property, Test_Run_Services
$Insert RDS_EQUATES
$Insert TEST_RUN_TYPE_EQUATES
$Insert APP_INSERTS
$Insert LOGICAL
TWTableOLECtrl = @Window : '.OLE_TW_USAGE_TABLE'
// Update the arguments so that the OpenInsight OLE event will treate the ActiveX event as a native event handler.
If Event EQ 'OLE' then
Transfer Event to OIEvent
Transfer Param1 to Event
Transfer Param2 to Param1
Transfer Param3 to Param2
* Transfer Param4 to Param3
* Transfer Param5 to Param4
* Transfer Param6 to Param5
* Transfer Param7 to Param6
* Transfer Param8 to Param7
end
GoToEvent Event for CtrlEntId else
// Event not implemented
end
Return EventFlow or 1
//-----------------------------------------------------------------------------
// EVENT HANDLERS
//-----------------------------------------------------------------------------
Event WINDOW.CREATE(CreateParam)
GoSub SetupOLEControls
GoSub FillFormMasterData
EventFlow = 1
//push
End Event
Event EDL_RDS.CHANGED(NewData)
RDSNo = NewData
If Len(RDSNo) GE 6 then
If RowExists('RDS', RDSNo) then
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
PSN = RDSRec<RDS_PROD_SPEC_ID$>
ReactorNo = RDSRec<RDS_REACTOR$>
If PSN NE '' then
Set_Property(@Window : '.EDL_PSN', 'TEXT', PSN)
Set_Property(@Window : '.EDL_PSN', 'ENABLED', -1)
end
If ReactorNo NE '' then
Set_Property(@Window : '.CMB_EQUIP_TYPE', 'VALUE', 'Reactor')
Set_Property(@Window : '.CMB_EQUIP_TYPE', 'ENABLED', -1)
Set_Property(@Window : '.CMB_EQUIPMENT_ID', 'TEXT', ReactorNo)
Set_Property(@Window : '.CMB_EQUIPMENT_ID', 'ENABLED', -1)
end
end
end else
Set_Property(@Window : '.EDL_PSN', 'TEXT', '')
Set_Property(@Window : '.EDL_PSN', 'ENABLED', True$)
Set_Property(@Window : '.CMB_EQUIPMENT_ID', 'TEXT', '')
Set_Property(@Window : '.CMB_EQUIPMENT_ID', 'ENABLED', True$)
Set_Property(@Window : '.CMB_EQUIP_TYPE', 'ENABLED', True$)
end
end event
Event CMB_EQUIP_TYPE.CHANGED(Selection)
Begin Case
Case Selection EQ 'Reactor'
EqpOpts = Get_Property(@Window , '@REACTOR_OPTS', 'TEXT')
Case Selection EQ 'Non-Reactor'
EqpOpts = Get_Property(@Window , '@NON_REACTOR_OPTS', 'TEXT')
Case 0
EqpOpts = Get_Property(@Window , '@REACTOR_OPTS', 'TEXT')
End Case
Set_Property(@Window : '.CMB_EQUIPMENT_ID', 'LIST', EqpOpts)
end event
Event PUB_ADD_ROW.CLICK()
Index = Send_Message(TWTableOLECtrl, "OLE.InsertRecords", -1, 1)
end event
Event PUB_DELETE_ROW.CLICK()
//Get currently selected Row
SelectedCell = Get_Property(TWTableOLECtrl, 'OLE.SelPos')
If SelectedCell then
SelectedRow = SelectedCell<2>
rv = Send_Message(TWTableOLECtrl, "OLE.DeleteRecords", SelectedRow, 1)
end
end event
Event PUB_SUBMIT.CLICK()
NotReadyReason = ''
//Gather all field information
ReasonForTest = Get_Property(@Window : '.CMB_TEST_TYPE', 'TEXT')
RelatedRDS = Get_Property(@Window : '.EDL_RDS', 'TEXT')
RelatedPSN = Get_Property(@Window : '.EDL_PSN', 'TEXT')
EquipmentType = Get_Property(@Window : '.CMB_EQUIP_TYPE', 'TEXT')
EquipmentID = Get_Property(@Window : '.CMB_EQUIPMENT_ID', 'TEXT')
//Translate selection to IDs. Get Run Type ID
SelRunTypeID = '';*Test Run Obj variable
RunTypeOpts = Get_Property(@Window, '@RUN_TYPE_OPTS')
Locate ReasonForTest in RunTypeOpts<2> using @VM setting rPos then
SelRunTypeID = RunTypeOpts<1, rPos>
end else
NotReadyReason := 'Must select a valid run type reason.' : CRLF$
end
//Translate Equipment Type. R for Reactor, T for non-reactor
SelEquipType = '';*Test Run Obj variable
Begin Case
Case EquipmentType EQ 'Reactor'
SelEquipType = 'R'
Case EquipmentType EQ 'Non-Reactor'
SelEquipType = 'T'
End Case
//Get Test wafer usage data from table
TWProdOpts = Get_Property(@Window, '@TW_PROD_OPTS')
TWUsageData = Get_Property(TWTableOLECtrl, 'OLE.RecordData[All]')
ProdUsages = ''
for each TWRow in TWUsageData using @FM
ProdID = ''
Quantity = TWRow<1,2>
ProdName = TWRow<1,1>
Locate ProdName in TWProdOpts<2> setting tPos then
ProdID = TWProdOpts<1, tPos>
ProdUsages<-1> = ProdID : @VM : Quantity
end else
NotReadyReason := 'Invalid Product ID ' : ProdName : ' selected.' : CRLF$
end
Next TWRow
If NotReadyReason EQ '' then
NewTWRunKey = Test_Run_Services('CreateTestRunRecord', SelRunTypeID, SelEquipType, EquipmentID, RelatedPSN, RelatedRDS, @User4)
If Error_Services('NoError') AND RowExists('TEST_RUN', NewTWRunKey) then
for each Prod in ProdUsages using @FM setting pPos
for i = 1 to Prod<1,2>
TWPartID = Prod<1,1>
TRWaferKey = Test_Run_Services('CreateTestRunWaferRecord', NewTWRunKey, TWPartID)
If RowExists('TEST_RUN_WAFER', TRWaferKey) then
//Do Nothing for now.
end else
msg(@Window, 'Error writing Test Run data! Please try again or contact FI for support.')
end
Next i
Next Prod
If Error_Services('NoError') then
Msg(@Window, 'Test Run Created Successfully!')
Post_Event(@Window, 'CLOSE')
end
end else
msg(@Window, 'Error writing Test Run data! Please try again or contact FI for support.')
end
end else
Msg(@Window, NotReadyReason)
end
end event
Event PUB_CANCEL.CLICK()
Post_Event(@Window, 'CLOSE')
end event
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ClearFormData:
Set_Property(@Window : '.CMB_TEST_TYPE', 'TEXT', '')
Set_Property(@Window : '.EDL_RDS', 'TEXT', '')
Set_Property(@Window : '.EDL_PSN', 'TEXT', '')
Set_Property(@Window : '.CMB_EQUIP_TYPE', 'TEXT', 'Reactor')
Set_Property(@Window : '.CMB_EQUIPMENT_ID', 'TEXT', '')
Set_Property(TWTableOLECtrl, 'OLE.RecordData[All]', '')
return
FillFormMasterData:
//Get Test run type options. Populate to CMB_TEST_TYPE
TestRunTypeList = Test_Run_Services('GetAllTestRunTypes')
Set_Property(@Window, '@RUN_TYPE_OPTS', TestRunTypeList)
TestRunTypeOpts = ''
for each TestRunID in TestRunTypeList<1> using @VM setting tPos
TestRunName = TestRunTypeList<2, tPos>
TestRunTypeOpts<-1> = TestRunName
Next TestRunID
Set_Property(@Window : '.CMB_TEST_TYPE', 'LIST', TestRunTypeOpts)
//Get Tool and Reactor Identifiers and buffer them in user defined window properties @REACTOR_OPTS and @NON_REACTOR_OPTS
//Reactors
ReactorOpts = Reactor_Services('GetReactorNumbers')
Set_Property(@Window : '.EDT_REACTORS', 'TEXT', ReactorOpts)
Set_Property(@Window, '@REACTOR_OPTS', ReactorOpts)
//Non Reactors
NonReactorOpts = Tool_Services('GetAllTools')
swap @VM with @FM in NonReactorOpts
Set_Property(@Window : '.EDT_NON_REACTORS', 'TEXT', NonReactorOpts)
Set_Property(@Window, '@NON_REACTOR_OPTS', NonReactorOpts)
//Then set the inital combo list to be filled with reactors because that is the default.
Set_Property(@Window : '.CMB_EQUIPMENT_ID', 'LIST', ReactorOpts)
//Get TW Products and store them in user defined window property @TW_PROD_OPTS
Prods = Test_Run_Services('GetAllTWProdKeys', 1)
Set_Property(@Window, '@TW_PROD_OPTS', Prods)
//Add Product options to the OLE_TW_USAGE_TABLE
ProdOpts = Prods<2>
swap @VM with @STM in ProdOpts
TWProdOpts<1> = 'COB'
Set_Property(TWTableOLECtrl, "OLE.CellType[1; ALL]", ProdOpts)
TypeData = ''
TypeData<1> = "Combo"
TypeData<2, 1> = 'Prod Name'
TypeData<2, 2> = "L"
TypeData<2, 3> = ProdOpts
TypeData<2, 4> = 1 ;// column 2 contains the values we care about
TypeData<2, 5> = 1 ;// auto fill on
TypeData<2, 6> = 0 ;// case sensitive off
TypeData<2, 7> = 10 ;// 10 visible rows max
TypeData<2, 8> = 0 ;// Don't fire the OnOptionClick
TypeData<2, 9> = 1 ;// Reduce the list to partial matches
TypeData<2, 10> = 0 ;// Only show the drop down when the user types
TypeData<2, 11> = 0 ;// Do not use LIST Format
TypeData<2, 12> = 1 ;// Autofill on first names
TypeData<2, 13> = 1 ;// Hide dropdown when user clears cell
TypeData<2, 14> = 0 ;// Let navigation keys show the drop down
TypeData<2, 15> = 0 ;// Show the drop down regardless of the cell's contents
TypeData<2, 16> = 0 ;// Show the drop down during autofill
TypeData<2, 17> = 1 ;// Remove selection when user backspaces/deletes
TypeData<2, 18> = 0 ;// Show Popup while in read only mode
TypeData<2, 19> = 1 ;// Show Popup When Navigating
TypeData<2, 20> = 1 ;// Always Tab Out on Enter
TypeData<2, 21> = -1 ;// Always show the dropdown above when close to the screen bottom
Set_Property(TWTableOLECtrl, "OLE.CellType[1; All]", TypeData)
return
SetupOLEControls:
Set_Property(TWTableOLECtrl, "OLE.AllowInserts", 0)
Set_Property(TWTableOLECtrl, "OLE.BlankRowManagement", 1:@FM:0)
Set_Property(TWTableOLECtrl, "OLE.Dimension", 2);*Define number of columns
//Set Column width of tw prod column
ColSizeArray = ''
ColSizeArray<1> = 150
Set_Property(TWTableOLECtrl, "OLE.DataColumn[All]", ColSizeArray)
//Set Column Header Titles
HeaderTitles = 'Test Wafer Prod':@VM:'Quantity'; *Define the column header titles
Set_Property(TWTableOLECtrl, "OLE.TitleList", HeaderTitles); *Set the column titles
//Sets column header to be invisible
Set_Property(TWTableOLECtrl, "OLE.HeaderColumn[1]", '':@FM:False$)
//Set first field as a dropdown
TWProdOpts = Get_Property(TWTableOLECtrl, "OLE.CellType[1; ALL]")
//Cell Default coloring
CellColors = ""
CellColors<4> = 'LightCyan'
Set_Property(TWTableOLECtrl, "OLE.CellSelColors[All; All]", CellColors)
//Selection Properties
SelArray = ''
SelArray<8> = True$
Set_Property(TWTableOLECtrl, "OLE.SelectionStyle", SelArray)
//Maintains SelPos on lostfocus
Set_Property(TWTableOLECtrl, 'OLE.Redraw', False$)
Set_Property(TWTableOLECtrl, "OLE.ResetSelPos", False$)
//Qualify OLE Events
Qualifier = ''
Qualifier<1> = 1
Qualifier<4> = 0 ; * process synchronously (i.e. immediately)
Send_Message(TWTableOLECtrl, 'QUALIFY_EVENT', 'OLE.OnLostFocus', Qualifier)
return