357 lines
13 KiB
Plaintext
357 lines
13 KiB
Plaintext
Compile function NDW_TEST_RUN_EVENTS(CtrlEntId, Event, @PARAMS)
|
|
/***********************************************************************************************************************
|
|
|
|
This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
|
|
permission from Infineon.
|
|
|
|
Name : NDW_Test_Run_Events
|
|
|
|
Description : This function acts as a commuter module for all events related to this window.
|
|
|
|
Notes : Commuter Modules are automatically called from the Promoted_Events function which is called by the
|
|
application-specific promoted event handler. This makes it possible to add QuickEvents that need to
|
|
execute Basic+ logic without having use the Form Designer to make the association, although this is
|
|
limited to the events which are currently promoted.
|
|
|
|
If the form needs to call the commuter module directly then the QuickEvent parameters should be
|
|
formatted like this:
|
|
|
|
'@SELF','@EVENT',['@PARAM1','@PARAMx']
|
|
|
|
Parameters :
|
|
CtrlEntId [in] -- The fully qualified name of the control calling the promoted event
|
|
Event [in] -- The event being executed. See the Notes section regarding "PRE" events
|
|
Param1-15 [in] -- Additional event parameter holders
|
|
EventFlow [out] -- Set to 1 or 0 so the calling event knows whether or not to chain forward. See comments in
|
|
EVENT_SETUP insert
|
|
|
|
History : (Date, Initials, Notes)
|
|
06/05/24 djs Updated commuter module to keep form open after clicking submit button. (backlog req. 849)
|
|
|
|
***********************************************************************************************************************/
|
|
#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, PlaceDialog
|
|
|
|
$Insert EVENT_SETUP
|
|
$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)
|
|
PlaceDialog(-2, -2)
|
|
Set_Property(@Window, 'VISIBLE', 1)
|
|
GoSub SetupOLEControls
|
|
GoSub FillFormMasterData
|
|
EventFlow = 1
|
|
PlaceDialog(-2, -2)
|
|
|
|
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>
|
|
If Quantity NE '' AND ProdName NE '' then
|
|
if Num(Quantity) AND Quantity GT 0 then
|
|
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
|
|
end else
|
|
NotReadyReason := 'Quantity for Product ID ' : ProdName : ' was not a number or was a negative number.' : CRLF$
|
|
end
|
|
|
|
end else
|
|
Begin Case
|
|
Case Quantity NE ''
|
|
NotReadyReason := 'Prod. not selected..' : CRLF$
|
|
Case ProdName NE ''
|
|
NotReadyReason := 'Qty for ' : ProdName : ' is blank' : CRLF$
|
|
End Case
|
|
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, @USER4)
|
|
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!')
|
|
GoSub ClearFormData
|
|
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(@Window : '.OLE_TW_USAGE_TABLE', 'OLE.RecordData[All]', '')
|
|
Set_Property(@Window : '.OLE_TW_USAGE_TABLE', 'OLE.Dimension', 2:@FM:1)
|
|
|
|
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
|
|
|
|
|
|
|