added LSL2 stored procedures
This commit is contained in:
867
LSL2/STPROC/NDW_GAN_PROD_SPEC_EVENTS.txt
Normal file
867
LSL2/STPROC/NDW_GAN_PROD_SPEC_EVENTS.txt
Normal file
@ -0,0 +1,867 @@
|
||||
Compile function NDW_GAN_PROD_SPEC_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_GaN_Prod_Spec_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)
|
||||
12/03/19 djs Created initial commuter module.
|
||||
06/06/20 djs Cutover to CR-004 and CR-005
|
||||
|
||||
***********************************************************************************************************************/
|
||||
#pragma precomp SRP_PreCompiler
|
||||
#window NDW_GAN_PROD_SPEC
|
||||
|
||||
declare subroutine set_list_box_data, utility, obj_Appwindow, Comm_Prod_Spec_SI, Set_Property, ErrMsg
|
||||
declare subroutine Database_Services, Start_Window
|
||||
declare function set_property, fieldcount, center_window, send_event, prod_spec_comm
|
||||
declare function memberof, SQL_Services, SRP_Array, Datetime, Database_Services, Error_Services
|
||||
$insert quote_spec_equ
|
||||
$insert lsl_common
|
||||
$insert PS_Equates
|
||||
|
||||
$INSERT MSG_EQUATES
|
||||
$INSERT SECURITY_RIGHTS_EQU
|
||||
$INSERT POPUP_EQUATES
|
||||
$INSERT LOGICAL
|
||||
$INSERT RDS_EQU
|
||||
$INSERT REACT_RUN_EQUATES
|
||||
$INSERT GAN_PARAMS_EQUATES
|
||||
$INSERT PROD_SPEC_EQUATES
|
||||
$INSERT GAN_PARAM_CONFIG_EQUATES
|
||||
|
||||
EQU SUB_INFO$ TO 1
|
||||
EQU EPI_INFO$ TO 2
|
||||
EQU ADDL_INFO$ TO 3
|
||||
EQU NEW_DEV$ TO 4
|
||||
EQU PRE_PROD$ TO 5
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// EVENT HANDLERS
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
$insert APP_INSERTS
|
||||
|
||||
Declare subroutine Set_Property
|
||||
Declare function Get_Property, Form_Services
|
||||
|
||||
SubclassInfo = Form_Services('FindSubclassControl')
|
||||
Subclass = SubclassInfo<1>
|
||||
|
||||
// The purpose of this line is to prevent the SRP Editor from throwing a warning when compiling.
|
||||
If Not(Assigned(Param8)) then Param8 = ''
|
||||
|
||||
// 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)
|
||||
|
||||
RDSWarnFlag = FALSE$
|
||||
SpecInstFlag = FALSE$
|
||||
|
||||
SaveCheckControls = ''
|
||||
|
||||
Set_Property(@WINDOW:'.GROUP_3','ENABLED',0)
|
||||
|
||||
Set_Property(@WINDOW, '@HOLDVAR', CreateParam)
|
||||
|
||||
SubstrateInfo = field( CreateParam, char(244), 1 )
|
||||
EpiInfo = field( CreateParam, char(244), 2 )
|
||||
AddlInfo = field( CreateParam, char(244), 3 )
|
||||
NDInfo = field( CreateParam, char(244), 4 )
|
||||
PPInfo = field( CreateParam, char(244), 5 )
|
||||
|
||||
CONVERT @SVM TO '' IN EpiInfo
|
||||
|
||||
|
||||
* WE KNOW THAT WE NO LONGER HAVE SEP LAYERS BUT DO ALLOW SAME LAYERS
|
||||
* SO COUNT CHAR(248)
|
||||
|
||||
NumLayers = fieldcount(EpiInfo,char(247))
|
||||
FirstLayer = field( EpiInfo, char(247), 1 )
|
||||
|
||||
ButtonText = Get_Property(@Window:'.SAME_REACTOR_BUTTON', 'TEXT')
|
||||
Set_Property(@Window:'.SAME_REACTOR_BUTTON', 'TEXT', fieldcount( FirstLayer, char(248) ):' ':ButtonText)
|
||||
FirstLayer = field(FirstLayer,char(248),1)
|
||||
|
||||
Void = set_property( @window, '@CurSepLayer', 1 )
|
||||
Void = set_property( @window, '@EpiInfo', EpiInfo )
|
||||
Void = set_property( @window, '@OrigEpiInfo', EpiInfo )
|
||||
***********************************************************************
|
||||
Controls = 'SUB_ORIENTATION/SUB_TYPE/SUB_WAFERSIZE/SUB_RESISTIVITY/SUB_REST_UNITS/'
|
||||
Controls:= 'SUB_DOPANT/SUB_PRE_CLEAN/SUB_BL1_DOPANT/SUB_BL2_DOPANT/'
|
||||
Controls:= 'SUB_OXIDE/SUB_POST_CLEAN/SUB_BACKSEAL/SUB_WAFERMFG/SUB_SUBSTRATETYPE/'
|
||||
Controls:= 'SUB_INSTRUCTIONS/BLANK_NOT_USED/SUB_WAF_SUP_BY/SPEC_TYPE/SUB_POLISH/SUB_PRODUCTS/'
|
||||
*Controls:= 'SUB_BL3_DOPANT/SUB_OXIDE_ANG/PRE_AKRION_RECIPE/POST_AKRION_RECIPE/SUB_THICKNESS'
|
||||
Controls:= 'SUB_BL3_DOPANT/SUB_OXIDE_ANG/PRECLEAN_AKRIONRECIPES/POSTCLEAN_AKRIONRECIPES/SUB_THICKNESS'
|
||||
|
||||
* SUB WAFER MFG HAS BEEN MOVED TO THE PSN MAIN WINDOW TO ALLOW MULTIPLE MFGS FOR DIFFERENT SUB PART NUMS
|
||||
* 3/6/01 BRYCE MEEK IF ADDING A NEW FIELD TO THIS WINDOW "SUB_WAFERMFG" IS AVAIL JUST RENAME
|
||||
* THE CONTROL "SUB_WAFERMFG" ON THE FORM WILL BE SET TO INVISIBLE
|
||||
|
||||
swap '/' with @rm:@window:'.' in Controls
|
||||
Controls = @window:'.':Controls
|
||||
SaveCheckControls = Controls
|
||||
Void = set_property( @window, '@SubControls', Controls )
|
||||
SubPromptCnt = fieldcount( Controls, @rm )
|
||||
* so set_property does not propagate
|
||||
ValueCnt = fieldcount( SubstrateInfo, @vm )
|
||||
if ValueCnt < SubPromptCnt then
|
||||
SubstrateInfo := str( @vm, SubPromptCnt-ValueCnt - (SubstrateInfo='') )
|
||||
end
|
||||
* ok
|
||||
if SubstrateInfo<1,QSSubProduct$> = '' then
|
||||
* DEFAULT TO SILICON EPI ON THE PRODUCT
|
||||
SubstrateInfo<1,QSSubProduct$> = 'SiEpi'
|
||||
end
|
||||
if SubstrateInfo<1,QSSubSubstrate$> = '' then
|
||||
* DEFAULT TO SILICON FOR THE SUBSTRATE
|
||||
SubstrateInfo<1,QSSubSubstrate$> = 'Silicon'
|
||||
end
|
||||
Void = set_property( @window, '@OrigSubstrateInfo', SubstrateInfo )
|
||||
convert @vm to @rm in SubstrateInfo
|
||||
Void = set_property( Controls, 'INVALUE', SubstrateInfo )
|
||||
***********************************************************************
|
||||
* now load the additional information
|
||||
Controls = 'PROVEIN_INST/STRESS_MEASURE/TRANS_MEASURE/STRESS_MIN/'
|
||||
Controls:= 'STRESS_MAX/TRANS_SPEC/'
|
||||
|
||||
swap '/' with @rm:@window:'.' in Controls
|
||||
Controls = @window:'.':Controls
|
||||
SaveCheckControls := @rm:@window:'.PROVEIN_INST':@rm:@window:'.STRESS_MEASURE'
|
||||
SaveCheckControls := @rm:@window:'.TRANS_MEASURE':@rm:@window:'.STRESS_MIN'
|
||||
SaveCheckControls := @rm:@window:'.STRESS_MAX':@rm:@window:'.TRANS_SPEC'
|
||||
Void = set_property( @window, '@AddlControls', Controls )
|
||||
AddlPromptCnt = fieldcount( Controls, @rm )
|
||||
* so set_property does not propagate
|
||||
ValueCnt = fieldcount( AddlInfo, @vm )
|
||||
if ValueCnt < AddlPromptCnt then
|
||||
AddlInfo := str( @vm, AddlPromptCnt-ValueCnt - (AddlInfo = '') )
|
||||
end
|
||||
*
|
||||
Void = set_property( @window, '@OrigAddlInfo', AddlInfo )
|
||||
convert @vm to @rm in AddlInfo
|
||||
Void = set_property( Controls, 'INVALUE', AddlInfo )
|
||||
|
||||
|
||||
***********************************************************************
|
||||
|
||||
* now load the EPI specific prompts
|
||||
|
||||
Controls = 'EPI_CONC_MIN_THICK/EPI_CONC_MAX_THICK/EPI_CONC_UNITS/'
|
||||
Controls:= 'EPI_RES_MIN_THICK/EPI_RES_MAX_THICK/EPI_RES_UNITS/EPI_MIN_THICK/'
|
||||
Controls:= 'EPI_MAX_THICK/EPI_THICK_UNITS/EPI_DOPANT/EPI_RECIPE/EPI_RECIPE_NAME/'
|
||||
Controls:= 'EPI_THICKMEASURE/EPI_RESMEASURE/EPI_CONMEASURE'
|
||||
|
||||
swap '/' with @rm:@window:'.' in Controls
|
||||
Controls = @window:'.':Controls
|
||||
SaveCheckControls = Controls:@rm:SaveCheckControls
|
||||
Void = set_property( @window, '@EpiControls', Controls )
|
||||
|
||||
EpiPromptCnt = fieldcount( Controls, @rm )
|
||||
Void = set_property( @window, '@EpiPromptCnt', EpiPromptCnt )
|
||||
ValueCnt = fieldcount( FirstLayer, @vm )
|
||||
* so set_property does not propagate
|
||||
if ValueCnt < EpiPromptCnt then
|
||||
FirstLayer := str( @vm, EpiPromptCnt-ValueCnt - (FirstLayer = '') )
|
||||
end
|
||||
* ok
|
||||
convert @vm to @rm in FirstLayer
|
||||
Void = set_property( Controls, 'INVALUE':@rm:'INVALUE':@rm:'INVALUE', FirstLayer )
|
||||
*Void = set_property( Controls, 'INVALUE', FirstLayer ) ;* Changes 1/27/2009 JCH
|
||||
Void = set_property( @window, '@SaveCheckControls', SaveCheckControls )
|
||||
Void = set_property( @window, '@SaveCheckControlData', get_property( SaveCheckControls, 'INVALUE' ) )
|
||||
*
|
||||
***********************************************************************
|
||||
* now load the new development specific prompts
|
||||
Controls = 'ND_INST_OBS/ND_EXP_PLAN/ND_TEST_RESULTS/ND_SPECIAL_INST'
|
||||
swap '/' with @rm:@window:'.' in Controls
|
||||
Controls = @window:'.':Controls
|
||||
Void = set_property( @window, '@NDControls', Controls )
|
||||
NDPromptCnt = fieldcount( Controls, @rm )
|
||||
Void = set_property( @window, '@NDPromptCnt', NDPromptCnt )
|
||||
ValueCnt = fieldcount( NDInfo, @vm )
|
||||
* so set_property does not propagate
|
||||
if ValueCnt < NDPromptCnt then
|
||||
NDInfo := str( @vm, NDPromptCnt-ValueCnt - (NDInfo = '') )
|
||||
end
|
||||
Void = set_property( @window, '@OrigNDInfo', NDInfo )
|
||||
convert @vm to @rm in NDInfo
|
||||
Void = set_property( Controls, 'INVALUE', NDInfo )
|
||||
***********************************************************************
|
||||
* now load the pre production specific prompts
|
||||
Controls = 'PP_INST_OBS/PP_SPECIAL_INST/PP_PROVEIN_INST'
|
||||
swap '/' with @rm:@window:'.' in Controls
|
||||
Controls = @window:'.':Controls
|
||||
Void = set_property( @window, '@PPControls', Controls )
|
||||
PPPromptCnt = fieldcount( Controls, @rm )
|
||||
Void = set_property( @window, '@PPPromptCnt', PPPromptCnt )
|
||||
ValueCnt = fieldcount( PPInfo, @vm )
|
||||
* so set_property does not propagate
|
||||
if ValueCnt < PPPromptCnt then
|
||||
PPInfo := str( @vm, PPPromptCnt-ValueCnt - (PPInfo = '') )
|
||||
end
|
||||
Void = set_property( @window, '@OrigPPInfo', PPInfo )
|
||||
convert @vm to @rm in PPInfo
|
||||
Void = set_property( Controls, 'INVALUE', PPInfo )
|
||||
***********************************************************************
|
||||
set_list_box_data( @window )
|
||||
|
||||
void = Set_Property(@WINDOW:'.EPI_CONC_UNITS','LIST','cm-3')
|
||||
void = Set_Property(@WINDOW:'.EPI_RES_UNITS','LIST','ê-cm':@FM:'ê/Ü')
|
||||
void = Set_Property(@WINDOW:'.EPI_THICK_UNITS','LIST','æm':@FM:'Â')
|
||||
|
||||
GoSub Setup_OLE_Controls
|
||||
FormSize = ''
|
||||
SRP_Show_Window(@Window, '', 'C', 'C', 1, '', False$, False$, FormSize)
|
||||
|
||||
End Event
|
||||
|
||||
|
||||
Event WINDOW.CLOSE(CancelFlag)
|
||||
|
||||
Set_Property(@Window:'.OLE_TAB', "OLE.FlickerFree", False$)
|
||||
Savewarn = Get_Property(@Window, '@SAVEWARN')
|
||||
If Savewarn EQ True$ then
|
||||
// Send message
|
||||
Message = 'Would you like to save your changes?'
|
||||
MsgStruct = ''
|
||||
MsgStruct<MTEXT$> = Message
|
||||
MsgStruct<MTYPE$> = 'BNYC'
|
||||
Response = Msg(@Window, MsgStruct)
|
||||
Begin Case
|
||||
Case Response EQ 1
|
||||
// User clicked yes
|
||||
// Save changes
|
||||
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4 : @FM : 'GAN_PARAMETERS')
|
||||
Valid = Response<1>
|
||||
If (Valid EQ True$) then
|
||||
GoSub SaveParameters
|
||||
Eventflow = 1
|
||||
end else
|
||||
Eventflow = 0
|
||||
end
|
||||
Case Response EQ 0
|
||||
// User clicked no
|
||||
Eventflow = 1
|
||||
Case Response EQ Char(27)
|
||||
// User click cancel or clicked the escape button
|
||||
Eventflow = 0
|
||||
End Case
|
||||
|
||||
end else
|
||||
Eventflow = 1
|
||||
end
|
||||
|
||||
end event
|
||||
|
||||
|
||||
Event WINDOW.OMNIEVENT(Message, Param1, Param2, Param3, Param4)
|
||||
|
||||
If Message _EQC 'EnableImportButton' then
|
||||
GoSub EnableImportButton
|
||||
end
|
||||
|
||||
end event
|
||||
|
||||
|
||||
Event PUB_PARAM_MANAGER.CLICK()
|
||||
|
||||
PSNo = Get_Property('PROD_SPEC.PROD_SPEC_ID', 'TEXT')
|
||||
rv = Start_Window('NDW_GAN_PARAM_MANAGER', @Window, PSNo)
|
||||
|
||||
end event
|
||||
|
||||
|
||||
Event PUB_IMPORT_CP.CLICK()
|
||||
|
||||
GoSub UpdateLimits
|
||||
GoSub HideTabs
|
||||
GoSub FillDispStageCtrl
|
||||
GoSub ColorTabs
|
||||
GoSub EnableSaveButton
|
||||
GoSub EnableSavewarn
|
||||
GoSub EnableImportButton
|
||||
|
||||
end event
|
||||
|
||||
|
||||
Event PUB_SAVE.CLICK()
|
||||
|
||||
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4 : @FM : 'GAN_PARAMETERS')
|
||||
Valid = Response<1>
|
||||
If (Valid EQ True$) then
|
||||
GoSub SaveParameters
|
||||
GoSub ResetColorArrays
|
||||
GoSub FillDispStageCtrl
|
||||
GoSub DisplayTimestamps
|
||||
GoSub EnableImportButton
|
||||
Set_Property(@Window, '@SAVEWARN', False$)
|
||||
Set_Property(@Window:'.PUB_SAVE', 'ENABLED', False$)
|
||||
ParameterList = Get_Property(@Window, '@VALUE_LIST')
|
||||
Set_Property(@Window, '@ORIG_VALUE_LIST', ParameterList)
|
||||
Set_Property(@Window, '@ORIG_MET_LIST', NewParamNameList)
|
||||
GoSub ColorTabs
|
||||
end else
|
||||
Return 0
|
||||
end
|
||||
|
||||
end event
|
||||
|
||||
|
||||
Event OLE_TAB.SelChanged(Index, PrevIndex)
|
||||
|
||||
GoSub FillDispStageCtrl
|
||||
|
||||
end event
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Internal GoSubs
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
Setup_OLE_Controls:
|
||||
|
||||
GoSub SetupTabCtrl
|
||||
GoSub SetupDispStageCtrl
|
||||
GoSub ReadCurrParams
|
||||
GoSub FillDispStageCtrl
|
||||
GoSub ColorTabs
|
||||
GoSub HideTabs
|
||||
GoSub EnableSaveButton
|
||||
GoSub EnableImportButton
|
||||
GoSub DisplayTimestamps
|
||||
|
||||
return
|
||||
|
||||
|
||||
ResetColorArrays:
|
||||
|
||||
PSNo = Get_Property('PROD_SPEC.PROD_SPEC_ID', 'TEXT')
|
||||
PartNo = Get_Property(@Window, '@CURR_PART_NO')
|
||||
GaNParamStages = Get_Property(@Window, '@GAN_PARAM_STAGES')
|
||||
CellColorArray = ''
|
||||
For each Stage in GaNParamStages using @VM setting TabIndex
|
||||
GaNParamConfigKey = PSNo:'*':PartNo:'*':Stage
|
||||
GaNParamConfigRec = Database_Services('ReadDataRow', 'GAN_PARAM_CONFIG', GaNParamConfigKey)
|
||||
ParamNames = GaNParamConfigRec<GAN_PARAM_CONFIG.PARAM_NAME$>
|
||||
For each ParamName in ParamNames using @VM setting RowPos
|
||||
CellColorArray<TabIndex, RowPos, 1> = 'None'
|
||||
CellColorArray<TabIndex, RowPos, 2> = 'None'
|
||||
CellColorArray<TabIndex, RowPos, 3> = 'None'
|
||||
CellColorArray<TabIndex, RowPos, 4> = 'None'
|
||||
CellColorArray<TabIndex, RowPos, 5> = 'None'
|
||||
Next ParamName
|
||||
Next Stage
|
||||
Set_Property(@Window, '@COLOR_ARRAY', CellColorArray)
|
||||
|
||||
return
|
||||
|
||||
|
||||
DisplayTimestamps:
|
||||
|
||||
PSNo = Get_Property('PROD_SPEC.PROD_SPEC_ID', 'TEXT')
|
||||
If PSNo NE '' then
|
||||
ProdSpecRec = Database_Services('ReadDataRow', 'PROD_SPEC', PSNo)
|
||||
RevCPDTM = ProdSpecRec<PROD_SPEC_GAN_REV_CP_DTM$>
|
||||
RevOIDTM = ProdSpecRec<PROD_SPEC_GAN_REV_OI_DTM$>
|
||||
RevUser = ProdSpecRec<PROD_SPEC_GAN_REV_USER$>
|
||||
RevCPDTM = OConv(RevCPDTM, 'DT2/^H')
|
||||
RevOIDTM = OConv(RevOIDTM, 'DT2/^H')
|
||||
Set_Property(@Window:'.TXT_OI_DTM', 'TEXT', RevOIDTM)
|
||||
Set_Property(@Window:'.TXT_CP_DTM', 'TEXT', RevCPDTM)
|
||||
Set_Property(@Window:'.TXT_USER', 'TEXT', OConv(RevUser, '[XLATE_CONV,LSL_USERS*FIRST_LAST]'))
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
|
||||
SetupTabCtrl:
|
||||
|
||||
PSNo = Get_Property('PROD_SPEC.PROD_SPEC_ID', 'TEXT')
|
||||
|
||||
PartNos = Xlate('PROD_SPEC', PSNo, 'PROD_VER_EPI_PART_NO', 'X')
|
||||
NumPartNos = DCount(PartNos, @VM)
|
||||
CurrPartNo = Field(PartNos, @VM, NumPartNos)
|
||||
Set_Property(@Window, '@CURR_PART_NO', CurrPartNo)
|
||||
GaNParamStages = Xlate('APP_INFO', 'GAN_PARAM_STAGES', '', 'X')
|
||||
TabCtrl = @Window:'.OLE_TAB'
|
||||
Set_Property(TabCtrl, "OLE.TabCount", 12)
|
||||
Convert @VM to ',' in GaNParamStages
|
||||
Set_Property(TabCtrl, "OLE.CaptionList", GaNParamStages)
|
||||
FontArray = 'Segoe UI':@SVM:9:@SVM:700
|
||||
Set_Property(TabCtrl, "OLE.Font", FontArray)
|
||||
Set_Property(TabCtrl, "OLE.SelectFont", FontArray)
|
||||
|
||||
// Qualify OLE events that we want to intercept
|
||||
Qualifier = ''
|
||||
Qualifier<1> = 1
|
||||
Qualifier<4> = 0 ; * process synchronously (i.e. immediately)
|
||||
Send_Message(TabCtrl, 'QUALIFY_EVENT', 'OLE.SelChanged', Qualifier)
|
||||
|
||||
Set_Property(TabCtrl, "OLE.FlickerFree", True$)
|
||||
|
||||
return
|
||||
|
||||
|
||||
UpdateLimits:
|
||||
|
||||
PSNo = Get_Property('PROD_SPEC.PROD_SPEC_ID', 'TEXT')
|
||||
If PSNo NE '' then
|
||||
CurrDTM = DateTime()
|
||||
PartNos = Xlate('PROD_SPEC', PSNo, 'PROD_VER_EPI_PART_NO', 'X')
|
||||
NumPartNos = DCount(PartNos, @VM)
|
||||
CurrPartNo = Field(PartNos, @VM, NumPartNos)
|
||||
If CurrPartNo EQ 'U014' then CurrPartNo = 'G5HTMV675AA'
|
||||
Query = "SELECT [Parameter] " |
|
||||
: ",[LSL] " |
|
||||
: ",[Target] " |
|
||||
: ",[USL] " |
|
||||
: "FROM [ControlPlans].[dbo].[Part_Parameter] " |
|
||||
: "WHERE [Part] = '":CurrPartNo:"' " |
|
||||
: "ORDER BY [Parameter]"
|
||||
* Response = SQL_Services_DJS('PostSQLRequest', 'iqsdms1', Query)
|
||||
Response = SQL_Services('PostSQLRequest', 'IQSDMS1', Query)
|
||||
Convert @FM to @VM in Response
|
||||
Convert @RM to @FM in Response
|
||||
|
||||
Response = SRP_Array('Rotate', Response, @FM, @VM)
|
||||
ResponseParamList = Response<1>
|
||||
|
||||
// Get Control Plan data
|
||||
GaNParamKeys = Xlate('PROD_SPEC', PSNo, 'GAN_PARAM_KEYS', 'X')
|
||||
Stages = Database_Services('ReadDataRow', 'APP_INFO', 'GAN_PARAM_STAGES', 'X')
|
||||
ParameterList = ''
|
||||
ParamNameList = ''
|
||||
CellColorArray = ''
|
||||
|
||||
For each Stage in Stages using @VM setting TabIndex
|
||||
|
||||
MetType = Stage
|
||||
GaNParamConfigKey = PSNo:'*':CurrPartNo:'*':MetType
|
||||
GaNParamConfigRec = Database_Services('ReadDataRow', 'GAN_PARAM_CONFIG', GaNParamConfigKey)
|
||||
If Error_Services('NoError') then
|
||||
ConfigMetNames = GaNParamConfigRec<GAN_PARAM_CONFIG.MET_NAME$>
|
||||
ConfigParams = GaNParamConfigRec<GAN_PARAM_CONFIG.PARAM_NAME$>
|
||||
EnabledArray = GaNParamConfigRec<GAN_PARAM_CONFIG.ENABLED$>
|
||||
CurrVals = Get_Property(@Window, '@ORIG_VALUE_LIST')<TabIndex>
|
||||
CurrNames = Get_Property(@Window, '@ORIG_MET_LIST')<TabIndex>
|
||||
For each ParamName in ConfigParams using @VM setting RowPos
|
||||
ParamEnabled = EnabledArray<0, RowPos>
|
||||
If ParamEnabled EQ True$ then
|
||||
NextRow = DCount(ParamNameList<TabIndex>, @VM) + 1
|
||||
ParamNameList<TabIndex, NextRow> = ConfigMetNames<0, RowPos>
|
||||
Locate ParamName in CurrNames using @VM setting CurrRow then
|
||||
Locate ParamName in ResponseParamList using @VM setting vPos then
|
||||
NewLSL = Response<2, vPos>
|
||||
NewTarget = Response<3, vPos>
|
||||
NewUSL = Response<4, vPos>
|
||||
PrevLSL = CurrVals<0, CurrRow, 1>
|
||||
PrevTarget = CurrVals<0, CurrRow, 2>
|
||||
PrevUSL = CurrVals<0, CurrRow, 3>
|
||||
|
||||
If (PrevLSL EQ NewLSL) then
|
||||
CellColorArray<TabIndex, NextRow, 1> = 'None'
|
||||
end else
|
||||
CellColorArray<TabIndex, NextRow, 1> = 'Yellow'
|
||||
end
|
||||
If (PrevTarget EQ NewTarget) then
|
||||
CellColorArray<TabIndex, NextRow, 2> = 'None'
|
||||
end else
|
||||
CellColorArray<TabIndex, NextRow, 2> = 'Yellow'
|
||||
end
|
||||
If (PrevUSL EQ NewUSL) then
|
||||
CellColorArray<TabIndex, NextRow, 3> = 'None'
|
||||
end else
|
||||
CellColorArray<TabIndex, NextRow, 3> = 'Yellow'
|
||||
end
|
||||
|
||||
ParameterList<TabIndex, NextRow, 1> = NewLSL
|
||||
ParameterList<TabIndex, NextRow, 2> = NewTarget
|
||||
ParameterList<TabIndex, NextRow, 3> = NewUSL
|
||||
end else
|
||||
ParameterList<TabIndex, NextRow, 1> = 'None'
|
||||
ParameterList<TabIndex, NextRow, 2> = 'None'
|
||||
ParameterList<TabIndex, NextRow, 3> = 'None'
|
||||
end
|
||||
end else
|
||||
// New parameter being added
|
||||
Locate ParamName in ResponseParamList using @VM setting vPos then
|
||||
NewLSL = Response<2, vPos>
|
||||
NewTarget = Response<3, vPos>
|
||||
NewUSL = Response<4, vPos>
|
||||
ParameterList<TabIndex, NextRow, 1> = NewLSL
|
||||
ParameterList<TabIndex, NextRow, 2> = NewTarget
|
||||
ParameterList<TabIndex, NextRow, 3> = NewUSL
|
||||
CellColorArray<TabIndex, NextRow, 1> = 'Yellow'
|
||||
CellColorArray<TabIndex, NextRow, 2> = 'Yellow'
|
||||
CellColorArray<TabIndex, NextRow, 3> = 'Yellow'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Next ParamName
|
||||
end
|
||||
Next Stage
|
||||
end
|
||||
|
||||
Set_Property(@Window, '@NAME_LIST', ParamNameList)
|
||||
Set_Property(@Window, '@VALUE_LIST', ParameterList)
|
||||
Set_Property(@Window, '@COLOR_ARRAY', CellColorArray)
|
||||
|
||||
return
|
||||
|
||||
|
||||
SetupDispStageCtrl:
|
||||
|
||||
DispStageCtrl = @Window:'.OLE_DISP_STAGE_EDT'
|
||||
HeaderRowTitles = 'LSL':@VM:'Target':@VM:'USL'
|
||||
DispStageDimArray = 5:@FM:1
|
||||
Set_Property(DispStageCtrl, "OLE.Dimension", DispStageDimArray)
|
||||
Set_Property(DispStageCtrl, "OLE.TitleList", HeaderRowTitles)
|
||||
|
||||
HeaderFontArray = 'Segoe UI':@SVM:8:@SVM:700
|
||||
Set_Property(DispStageCtrl, "OLE.HeaderFont[All; All]", HeaderFontArray)
|
||||
HeaderColArray = 180:@FM:True$:@FM:False$:@FM:False$
|
||||
Set_Property(DispStageCtrl, "OLE.HeaderColumn[1]", HeaderColArray)
|
||||
|
||||
Set_Property(DispStageCtrl, "OLE.HeaderText[1; 1]", "Metrology Limits")
|
||||
|
||||
// Disable resizing of columns as there is no need for this on this form
|
||||
StageColSize = Get_Property(DispStageCtrl, "OLE.DataColumn[1]")
|
||||
StageColSize<1> = 100
|
||||
StageColSize<3> = False$
|
||||
Set_Property(DispStageCtrl, "OLE.DataColumn[All]", StageColSize)
|
||||
Set_Property(DispStageCtrl, "OLE.CellProtection[All; All]", 'Read Only')
|
||||
|
||||
return
|
||||
|
||||
|
||||
ReadCurrParams:
|
||||
|
||||
PSNo = Get_Property('PROD_SPEC.PROD_SPEC_ID', 'TEXT')
|
||||
If PSNo NE '' then
|
||||
GaNParamStages = Xlate('APP_INFO', 'GAN_PARAM_STAGES', '', 'X')
|
||||
Set_Property(@Window, '@GAN_PARAM_STAGES', GaNParamStages)
|
||||
|
||||
GaNParamKeys = Xlate('PROD_SPEC', PSNo, 'GAN_PARAM_KEYS', 'X')
|
||||
ParameterList = ''
|
||||
ParamNameList = ''
|
||||
MetNameList = ''
|
||||
For each GaNParamKey in GaNParamKeys using @VM
|
||||
MetType = Field(GaNParamKey, '*', 2)
|
||||
Locate MetType in GaNParamStages using @VM setting TabPos then
|
||||
|
||||
GaNParamRec = Database_Services('ReadDataRow', 'GAN_PARAMS', GaNParamKey)
|
||||
PartNo = Field(GaNParamKey, '*', 1)
|
||||
|
||||
ParamNames = GaNParamRec<GAN_PARAMS.PARAM_NAME$>
|
||||
MetNames = GaNParamRec<GAN_PARAMS.MET_NAME$>
|
||||
|
||||
For each ParamName in ParamNames using @VM setting RowPos
|
||||
|
||||
MetNameList<TabPos, RowPos> = ParamName
|
||||
ParamNameList<TabPos, RowPos> = MetNames<0, RowPos>
|
||||
ParameterList<TabPos, RowPos, 1> = GaNParamRec<GAN_PARAMS.LSL$, RowPos>
|
||||
ParameterList<TabPos, RowPos, 2> = GaNParamRec<GAN_PARAMS.TARGET$, RowPos>
|
||||
ParameterList<TabPos, RowPos, 3> = GaNParamRec<GAN_PARAMS.USL$, RowPos>
|
||||
|
||||
Next ParamName
|
||||
|
||||
end
|
||||
Next GaNParamKey
|
||||
Set_Property(@Window, '@NAME_LIST', ParamNameList)
|
||||
Set_Property(@Window, '@VALUE_LIST', ParameterList)
|
||||
Set_Property(@Window, '@ORIG_VALUE_LIST', ParameterList)
|
||||
Set_Property(@Window, '@ORIG_MET_LIST', MetNameList)
|
||||
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
|
||||
FillDispStageCtrl:
|
||||
|
||||
DispStageCtrl = @Window:'.OLE_DISP_STAGE_EDT'
|
||||
TabCtrl = @Window:'.OLE_TAB'
|
||||
TabIndex = Get_Property(TabCtrl, 'OLE.SelectedTab')
|
||||
HeaderTitles = Get_Property(@Window, '@NAME_LIST')<TabIndex>
|
||||
ParameterList = Get_Property(@Window, '@VALUE_LIST')<TabIndex>
|
||||
CellColorArray = Get_Property(@Window, '@COLOR_ARRAY')<TabIndex>
|
||||
NumCols = 3
|
||||
NumRows = DCount(ParameterList, @VM)
|
||||
DispStageDimArray = NumCols:@FM:NumRows
|
||||
Set_Property(DispStageCtrl, "OLE.Dimension", DispStageDimArray)
|
||||
Convert @VM to @FM in ParameterList
|
||||
Convert @SVM to @VM in ParameterList
|
||||
Set_Property(@Window:'.OLE_DISP_STAGE_EDT', 'OLE.LIST', ParameterList)
|
||||
|
||||
Convert @VM to @FM in HeaderTitles
|
||||
Convert @SVM to @VM in HeaderTitles
|
||||
For each HeaderTitle in HeaderTitles using @FM setting RowIndex
|
||||
Set_Property(DispStageCtrl, "OLE.HeaderText[1; ":RowIndex + 1:"]", HeaderTitle)
|
||||
Next HeaderTitle
|
||||
|
||||
Set_Property(DispStageCtrl, "OLE.HeaderAlignment[1; 2-":NumRows + 1:"]", 'C':@FM:'L':@FM:'L')
|
||||
Set_Property(DispStageCtrl, "OLE.CellAlignment[All; All]", 'C':@FM:'R':@FM:'L')
|
||||
Set_Property(DispStageCtrl, "OLE.HeaderAlignment[All; 1]", 'C':@FM:'C':@FM:'L')
|
||||
|
||||
GoSub ColorCells
|
||||
|
||||
return
|
||||
|
||||
|
||||
EnableSaveButton:
|
||||
|
||||
ChangeDetected = False$
|
||||
OrigVals = Get_Property(@Window, '@ORIG_VALUE_LIST')
|
||||
CurrVals = Get_Property(@Window, '@VALUE_LIST')
|
||||
ChangeDetected = (OrigVals NE CurrVals)
|
||||
Set_Property(@Window:'.PUB_SAVE', 'ENABLED', ChangeDetected)
|
||||
|
||||
return
|
||||
|
||||
|
||||
EnableImportButton:
|
||||
|
||||
NameList = Get_Property(@Window, '@NAME_LIST')
|
||||
ChangeDetected = False$
|
||||
PSNo = Get_Property('PROD_SPEC.PROD_SPEC_ID', 'TEXT')
|
||||
CurrPartNo = Get_Property(@Window, '@CURR_PART_NO')
|
||||
Stages = Get_Property(@Window, '@GAN_PARAM_STAGES')
|
||||
DataToImport = False$
|
||||
For each Stage in Stages using @VM setting TabIndex
|
||||
ThisNameList = NameList<TabIndex>
|
||||
GaNParamConfigKey = PSNo:'*':CurrPartNo:'*':Stage
|
||||
GaNParamConfigRec = Database_Services('ReadDataRow', 'GAN_PARAM_CONFIG', GaNParamConfigKey)
|
||||
If Error_Services('NoError') then
|
||||
MetNames = GaNParamConfigRec<GAN_PARAMS.MET_NAME$>
|
||||
EnabledArray = GaNParamConfigRec<GAN_PARAM_CONFIG.ENABLED$>
|
||||
If MetNames NE '' then
|
||||
For each MetName in MetNames using @VM setting vPos
|
||||
Enabled = EnabledArray<0, vPos>
|
||||
If Enabled EQ True$ then
|
||||
Locate MetName in ThisNameList using @VM setting nPos else
|
||||
ChangeDetected = True$
|
||||
end
|
||||
end else
|
||||
Locate MetName in ThisNameList using @VM setting nPos then
|
||||
ChangeDetected = True$
|
||||
end
|
||||
end
|
||||
Until ChangeDetected EQ True$
|
||||
Next MetName
|
||||
end
|
||||
end
|
||||
Until ChangeDetected EQ True$
|
||||
Next Stage
|
||||
Set_Property(@Window:'.PUB_IMPORT_CP', 'ENABLED', ChangeDetected)
|
||||
|
||||
return
|
||||
|
||||
|
||||
ColorCells:
|
||||
|
||||
DispStageCtrl = @Window:'.OLE_DISP_STAGE_EDT'
|
||||
DimArray = Get_Property(DispStageCtrl, "OLE.Dimension")
|
||||
NumCols = DimArray<1>
|
||||
NumRows = DimArray<2>
|
||||
For Row = 1 to NumRows
|
||||
For Col = 1 to NumCols
|
||||
CellColor = CellColorArray<0, Row, Col>
|
||||
Set_Property(DispStageCtrl, 'OLE.CellColors[':Col:';':Row:']', @FM:CellColor)
|
||||
Next Col
|
||||
Next Row
|
||||
|
||||
return
|
||||
|
||||
|
||||
ColorTabs:
|
||||
|
||||
ChangeDetected = False$
|
||||
OrigVals = Get_Property(@Window, '@ORIG_VALUE_LIST')
|
||||
CurrVals = Get_Property(@Window, '@VALUE_LIST')
|
||||
GaNParamStages = Get_Property(@Window, '@GAN_PARAM_STAGES')
|
||||
For each Stage in GaNParamStages using @VM setting TabIndex
|
||||
ThisOrigVals = OrigVals<TabIndex>
|
||||
ThisCurrVals = CurrVals<TabIndex>
|
||||
GoSub ColorTab
|
||||
Next Stage
|
||||
|
||||
return
|
||||
|
||||
|
||||
HideTabs:
|
||||
|
||||
SelTabIndex = Get_Property(@Window:".OLE_TAB", "OLE.SelectedTab")
|
||||
GaNParamStages = Get_Property(@Window, '@GAN_PARAM_STAGES')
|
||||
NameArray = Get_Property(@Window, '@NAME_LIST')
|
||||
For each Stage in GaNParamStages using @VM setting TabIndex
|
||||
ThisNameArray = NameArray<TabIndex>
|
||||
GoSub HideTab
|
||||
Next Stage
|
||||
|
||||
SelTabVisible = Get_Property(@Window:'.OLE_TAB', 'OLE.TabVisible[':SelTabIndex:']')
|
||||
If SelTabVisible EQ False$ then
|
||||
For TabIndex = 1 to 12
|
||||
TabVisible = Get_Property(@Window:'.OLE_TAB', 'OLE.TabVisible[':TabIndex:']')
|
||||
Until TabVisible EQ True$
|
||||
Next TabIndex
|
||||
If TabVisible EQ True$ then Set_Property(@Window:".OLE_TAB", "OLE.SelectedTab", TabIndex)
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
|
||||
HideTab:
|
||||
|
||||
If ThisNameArray EQ '' then
|
||||
Set_Property(@Window:'.OLE_TAB', 'OLE.TabVisible[':TabIndex:']', False$)
|
||||
end else
|
||||
Set_Property(@Window:'.OLE_TAB', 'OLE.TabVisible[':TabIndex:']', True$)
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
|
||||
ColorTab:
|
||||
|
||||
ChangeDetected = (ThisOrigVals NE ThisCurrVals)
|
||||
If ChangeDetected EQ False$ then
|
||||
Colors = ""
|
||||
Colors<1, 2> = "None"
|
||||
Colors<2, 2> = "None"
|
||||
Colors<3, 2> = "None"
|
||||
Colors<4, 1> = "None"
|
||||
Colors<4, 2> = "None"
|
||||
Colors<5> = "None"
|
||||
Set_Property(TabCtrl, "OLE.TabColors[":TabIndex:"]", Colors)
|
||||
end else
|
||||
Colors = ""
|
||||
Colors<1, 2> = "Vertical(Gradient(Yellow L=80, Yellow L=90), Border(Yellow))"
|
||||
Colors<2, 2> = "Vertical(Gradient(Yellow L=90, Yellow L=95), Border(Yellow))"
|
||||
Colors<3, 2> = "Vertical(Gradient(Yellow L=85, Yellow L=95), Border(Yellow))"
|
||||
Colors<4, 1> = "Gray"
|
||||
Colors<4, 2> = "Vertical(Gradient(Gray L=80, Gray L=90), Border(Gray))"
|
||||
Colors<5> = "Vertical(Gradient(Yellow L=95, Yellow L=80), Border(Yellow))"
|
||||
Set_Property(TabCtrl, "OLE.TabColors[":TabIndex:"]", Colors)
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
|
||||
EnableSavewarn:
|
||||
|
||||
OrigVals = Get_Property(@Window, '@ORIG_VALUE_LIST')
|
||||
CurrVals = Get_Property(@Window, '@VALUE_LIST')
|
||||
ChangeDetected = (OrigVals NE CurrVals)
|
||||
Set_Property(@Window, '@SAVEWARN', ChangeDetected)
|
||||
|
||||
return
|
||||
|
||||
|
||||
SaveParameters:
|
||||
|
||||
PSNo = Get_Property('PROD_SPEC.PROD_SPEC_ID', 'TEXT')
|
||||
PartNo = Get_Property(@Window, '@CURR_PART_NO')
|
||||
If ( (PSNo NE '') and (PartNo NE '') ) then
|
||||
CurrDTM = DateTime()
|
||||
// Get Control Plan data
|
||||
NewGaNParamKeys = ''
|
||||
ProdSpecRec = Database_Services('ReadDataRow', 'PROD_SPEC', PSNo)
|
||||
GaNParamKeys = ProdSpecRec<PROD_SPEC_GAN_PARAM_KEYS$>
|
||||
GaNParamStages = Database_Services('ReadDataRow', 'APP_INFO', 'GAN_PARAM_STAGES')
|
||||
NewParamNameList = ''
|
||||
|
||||
For each GaNParamStage in GaNParamStages using @VM setting TabIndex
|
||||
MetType = GaNParamStage
|
||||
GaNParamConfigKey = PSNo:'*':PartNo:'*':MetType
|
||||
GaNParamConfigRec = Database_Services('ReadDataRow', 'GAN_PARAM_CONFIG', GaNParamConfigKey)
|
||||
MetNames = GaNParamConfigRec<GAN_PARAM_CONFIG.MET_NAME$>
|
||||
ParamNames = GaNParamConfigRec<GAN_PARAM_CONFIG.PARAM_NAME$>
|
||||
HeaderTitles = Get_Property(@Window, '@NAME_LIST')<TabIndex>
|
||||
ParameterList = Get_Property(@Window, '@VALUE_LIST')<TabIndex>
|
||||
|
||||
If ParameterList NE '' then
|
||||
// Create new GaN Param record.
|
||||
GaNParamRec = ''
|
||||
For each ParamName in HeaderTitles using @VM setting RowPos
|
||||
Locate ParamName in MetNames using @VM setting vPos then
|
||||
NewParamNameList<TabIndex, RowPos> = ParamNames<0, vPos>
|
||||
GaNParamRec<GAN_PARAMS.MET_NAME$, RowPos> = MetNames<0, vPos>
|
||||
GaNParamRec<GAN_PARAMS.PARAM_NAME$, RowPos> = ParamNames<0, vPos>
|
||||
GaNParamRec<GAN_PARAMS.LSL$, RowPos> = ParameterList<0, RowPos, 1>
|
||||
GaNParamRec<GAN_PARAMS.TARGET$, RowPos> = ParameterList<0, RowPos, 2>
|
||||
GaNParamRec<GAN_PARAMS.USL$, RowPos> = ParameterList<0, RowPos, 3>
|
||||
end
|
||||
Next ParamName
|
||||
|
||||
NewGaNParamKey = PartNo:'*':MetType:'*':CurrDTM
|
||||
NewGaNParamKeys<0, -1> = NewGaNParamKey
|
||||
Database_Services('WriteDataRow', 'GAN_PARAMS', NewGaNParamKey, GaNParamRec, True$, False$, True$)
|
||||
end
|
||||
|
||||
Next GaNParamStage
|
||||
|
||||
Query = "SELECT [Stamp] " |
|
||||
: "FROM [ControlPlans].[dbo].[Part_Parameter] " |
|
||||
: "WHERE [Part] = 'U012' " |
|
||||
: "GROUP BY [Stamp]"
|
||||
|
||||
* ControlPlanDTM = SQL_Services_DJS('PostSQLRequest', 'iqsdms1', Query)
|
||||
ControlPlanDTM = SQL_Services('PostSQLRequest', 'IQSDMS1', Query)
|
||||
ControlPlanDTM[-3, 1] = ''
|
||||
ControlPlanDTM = IConv(ControlPlanDTM, "DT")
|
||||
|
||||
ProdSpecRec<PROD_SPEC_GAN_PARAM_KEYS$> = NewGaNParamKeys
|
||||
ProdSpecRec<PROD_SPEC_GAN_REV_CP_DTM$> = ControlPlanDTM
|
||||
ProdSpecRec<PROD_SPEC_GAN_REV_OI_DTM$> = CurrDTM
|
||||
ProdSpecRec<PROD_SPEC_GAN_REV_USER$> = @User4
|
||||
Database_Services('WriteDataRow', 'PROD_SPEC', PSNo, ProdSpecRec, True$, False$, True$)
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
|
Reference in New Issue
Block a user