Compare commits

1 Commits

Author SHA1 Message Date
2ed3fe1feb http, hurl for api testing
txt for metrology proof

settings for vscode
2025-08-05 09:14:06 -07:00
172 changed files with 28415 additions and 45966 deletions

1
.gitignore vendored
View File

@ -1,4 +1,3 @@
LSL2/STPROC/TEST_DANIEL*.txt LSL2/STPROC/TEST_DANIEL*.txt
LSL2/STPROC/TEST_DAKOTA.txt LSL2/STPROC/TEST_DAKOTA.txt
LSL2/STPROC/JONATHAN_SERVICES.txt LSL2/STPROC/JONATHAN_SERVICES.txt
LSL2/STPROC/CHASE_SERVICES.txt

16
.vscode/.http vendored Normal file
View File

@ -0,0 +1,16 @@
###
GET https://messa020ec.infineon.com/api/oiWizard/reactors
Accept: application/json
###
GET https://messa020ec.infineon.com/api/oiWizard/materials/rds/1000416
Accept: application/json
###
GET https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV3/1750770474/header
Accept: application/json
###

29
.vscode/.hurl vendored Normal file
View File

@ -0,0 +1,29 @@
###
GET https://messa020ec.infineon.com/api/oiWizard/reactors
Accept: application/json
HTTP 200
[Asserts]
header "Content-Type" == "application/hal+json"
###
GET https://messa020ec.infineon.com/api/oiWizard/materials/rds/1000416
Accept: application/json
HTTP 200
[Asserts]
header "Content-Type" == "application/hal+json"
###
GET https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV3/1750770474/header
Accept: application/json
HTTP 200
[Asserts]
header "Content-Type" == "application/json; charset=utf-8"
jsonpath "$.TotalRows" == 1
###

234
.vscode/.txt vendored Normal file
View File

@ -0,0 +1,234 @@
// T:\met08resisrp2100\06_SourceCode\met08resisrp2100\Adaptation\FileHandlers\OpenInsight\FileRead.cs
// x.Date // 001
// x.Employee // 002
// x.Recipe // 003
// x.Reactor // 004
// x.RDS // 005
// x.PSN // 006
// x.Layer // 007
// x.Zone // 008
// T:\met08anlysdifaast230\06_SourceCode\met08anlysdifaast230\Adaptation\FileHandlers\OpenInsight\FileRead.cs
// x.PSN // 001
// x.Reactor // 002
// logistics.MesEntity // 003
// x.RDS // 004
// x.Recipe // 005
// x.Employee // 006
// x.SlotNumber // 007
// T:\met08thftirstratus\06_SourceCode\met08thftirstratus\Adaptation\FileHandlers\OpenInsight\FileRead.cs
// "Stratus_" // 001
// x.Date // 002
// logistics.JobID // 003
// "FQA Thickness" // 004
// x.Employee // 005
// x.Recipe // 006
// x.Reactor // 007
// x.RDS // 008
// x.PSN // 009
// x.Lot // 010
// x.Cassette // 011
// x.MeanThickness // 012
// descriptions[i].Slot // 013
// descriptions[i].Mean // 014
// T:\met08thftirqs408m\06_SourceCode\met08thftirqs408m\Adaptation\FileHandlers\OpenInsight\FileRead.cs
// Bio-Rad UniqueId // 001
// Date // 002
// ThicknessFourteenCriticalPointsAverage // 003
// Recipe // 004
// Reactor // 005
// RDS // 006
// PSN // 007
// Layer // 008
// Zone // 009
// Cassette // 010
// Wafer // 011
// RVThickness // 012
// Position // 013
// Thickness // 014
// T:\met08resimapcde\06_SourceCode\met08resimapcde\Adaptation\FileHandlers\OpenInsight\FileRead.cs
// x.UniqueId // 001
// x.Run // 002
// x.Date // 003
// x.Lot // 004
// x.Recipe // 005
// x.Reactor // 006
// x.RDS // 007
// x.PSN // 008
// x.Layer // 009
// x.Zone // 010
// logistics.MesEntity // 011
// x.Employee // 012
// x.Engineer // 013
// x.DLRatio // 014
// x.Temp // 015
// x.AutoOptimizeGain // 016
// x.AutoProbeHeightSet // 017
// x.DataReject // 018
// x.FileName // 019
// x.Avg // 020
// x.StdDev // 021
// x.SemiRadial // 022
// description.Pt // 023
// description.R // 024
// description.T // 025
// description.Rs // 026
// description.Merit // 027
// T:\met08resihgcv\06_SourceCode\met08resihgcv\Adaptation\FileHandlers\OpenInsight\FileRead.cs
// x.UniqueId // 001
// logistics.MesEntity // 002
// x.Reactor // 003
// x.RDS // 004
// x.PSN // 005
// x.Layer // 006
// x.Zone // 007
// x.Wafer // 008
// x.Lot // 009
// x.Plan // 010
// x.Date // 011
// x.WaferSize // 012
// x.Ccomp // 013
// x.Area // 014
// x.CondType // 015
// x.Model // 016
// x.StartVoltage // 017
// x.StopVoltage // 018
// x.RampRate // 019
// x.GLimit // 020
// x.SetupFile // 021
// x.SetupFile // 022
// x.Folder // 023
// x.Pattern // 024
// x.RhoMethod // 025
// x.NAvgMean // 026
// x.NAvgStdDev // 027
// x.NAvgRadialGradient // 028
// x.NslMean // 029
// x.NslStdDev // 030
// x.NslRadialGradient // 031
// x.VdMean // 032
// x.VdStdDev // 033
// x.VdRadialGradient // 034
// x.FlatZMean // 035
// x.FlatZStdDev // 036
// x.FlatZRadialGradient // 037
// x.RhoAvgMean // 038
// x.RhoAvgStdDev // 039
// x.RhoAvgRadialGradient // 040
// x.RhoslMean // 041
// x.RhoslStdDev // 042
// x.RhoslRadialGradient // 043
// x.PhaseMean // 044
// x.PhaseStdDev // 045
// x.PhaseRadialGradient // 046
// x.GradeMean // 047
// x.GradeStdDev // 048
// x.GradeRadialGradient // 049
// x.RsMean // 050
// x.RsStdDev // 051
// x.RsRadialGradient // 052
// description.Index // 053
// description.NAvg // 054
// description.Nsl // 055
// description.Vd // 056
// description.FlatZ // 057
// description.RhoAvg // 058
// description.Rhosl // 059
// description.Phase // 060
// description.Grade // 061
// T:\met08ddupsfs6420\06_SourceCode\met08ddupsfs6420\Adaptation\FileHandlers\OpenInsight\FileRead.cs
// x.AreaCountAvg // 001 - AreaCountAvg
// x.AreaCountMax // 002 - AreaCountMax
// x.AreaCountMin // 003 - AreaCountMin
// x.AreaCountStdDev // 004 - AreaCountStdDev
// x.AreaTotalAvg // 005 - AreaTotalAvg
// x.AreaTotalMax // 006 - AreaTotalMax
// x.AreaTotalMin // 007 - AreaTotalMin
// x.AreaTotalStdDev // 008 - AreaTotalStdDev
// x.Date // 009 -
// x.HazeAverageAvg // 010 - Haze Average
// x.HazeAverageMax // 011 -
// x.HazeAverageMin // 012 -
// x.HazeAverageStdDev // 013 -
// x.HazeRegionAvg // 014 -
// x.HazeRegionMax // 015 -
// x.HazeRegionMin // 016 -
// x.HazeRegionStdDev // 017 -
// x.Lot // 018 -
// x.LPDCM2Avg // 019 -
// x.LPDCM2Max // 020 -
// x.LPDCM2Min // 021 -
// x.LPDCM2StdDev // 022 -
// x.LPDCountAvg // 023 -
// x.LPDCountMax // 024 -
// x.LPDCM2Min // 025 -
// x.LPDCountStdDev // 026 -
// x.Employee // 027 -
// x.RDS // 028 - Lot
// x.Reactor // 029 - Process
// x.Recipe // 030 - Part
// x.ScratchCountAvg // 031 - Scratch Count
// x.ScratchCountMax // 032 -
// x.ScratchCountMin // 033 -
// x.ScratchTotalStdDev // 034 -
// x.ScratchTotalAvg // 035 - Scratch Length
// x.ScratchTotalMax // 036 -
// x.ScratchTotalMin // 037 -
// x.ScratchTotalStdDev // 038 -
// x.SumOfDefectsAvg // 039 - Average Sum of Defects
// x.SumOfDefectsMax // 040 - Max Sum of Defects
// x.SumOfDefectsMin // 041 - Min Sum of Defects
// x.SumOfDefectsStdDev // 042 - SumOfDefectsStdDev
// logistics.MesEntity // 043 -
// T:\met08ddupsp1tbi\06_SourceCode\met08ddupsp1tbi\Adaptation\FileHandlers\OpenInsight\FileRead.cs
// x.DcnLpdMin // 001 -
// x.DcnLpdMax // 002 -
// x.DcnLpdMean // 003 - DCN LPD
// x.DcnAreaCountMin // 004 -
// x.DcnAreaCountMax // 005 -
// x.DcnAreaCountMean // 006 - DCN Area
// x.DcnAreaMin // 007 -
// x.DcnAreaMax // 008 -
// x.Date // 009 -
// x.DcnHazeAvgMean // 010 - Haze Average
// string.Empty // 011 -
// string.Empty // 012 -
// string.Empty // 013 -
// string.Empty // 014 -
// string.Empty // 015 -
// string.Empty // 016 -
// string.Empty // 017 -
// string.Empty // 018 -
// string.Empty // 019 -
// string.Empty // 020 -
// string.Empty // 021 -
// string.Empty // 022 -
// string.Empty // 023 -
// string.Empty // 024 -
// string.Empty // 025 -
// string.Empty // 026 -
// string.Empty // 027 -
// x.RDS // 028 - Lot
// x.Reactor // 029 - Process
// x.Recipe // 030 - Part
// x.DcnScrMean // 031 - Scratch Count
// string.Empty // 032 -
// string.Empty // 033 -
// string.Empty // 034 -
// x.DcnMicroScrMean // 035 - Scratch Length
// string.Empty // 036 -
// string.Empty // 037 -
// string.Empty // 038 -
// x.DcnAllMean // 039 - Average Sum of Defects
// x.DcnAllMax // 040 - Max Sum of defects
// x.DcnAllMin // 041 - Min Sum of Defects
// string.Empty // 042 -
// logistics.MesEntity // 043 -
// x.DcnAreaMean // 044 - DCN MM2

6
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,6 @@
{
"files.associations": {
"*.txt": "vb",
},
"cSpell.words": []
}

View File

@ -46,53 +46,52 @@
"<1,37>": "6MACTRONIX #3", "<1,37>": "6MACTRONIX #3",
"<1,38>": "6MACTRONIX #4", "<1,38>": "6MACTRONIX #4",
"<1,39>": "8INLESS", "<1,39>": "8INLESS",
"<1,40>": "BAGGER1", "<1,40>": "8INLESS2",
"<1,41>": "BAGGER2", "<1,41>": "BAGGER1",
"<1,42>": "BAGGER3", "<1,42>": "BAGGER2",
"<1,43>": "BAGGER4", "<1,43>": "BAGGER3",
"<1,44>": "PACK1", "<1,44>": "BAGGER4",
"<1,45>": "PACK2", "<1,45>": "6INFF01",
"<1,46>": "6INFF01", "<1,46>": "6INFF02",
"<1,47>": "6INFF02", "<1,47>": "6INFF03",
"<1,48>": "6INFF03", "<1,48>": "6INFF04",
"<1,49>": "6INFF04", "<1,49>": "6INFF05",
"<1,50>": "6INFF05", "<1,50>": "6INFF06",
"<1,51>": "6INFF06", "<1,51>": "6INFF07",
"<1,52>": "6INFF07", "<1,52>": "6INFF08",
"<1,53>": "6INFF08", "<1,53>": "6INFF09",
"<1,54>": "6INFF09", "<1,54>": "6INFF10",
"<1,55>": "6INFF10", "<1,55>": "8INNF01",
"<1,56>": "8INNF01", "<1,56>": "8INNF02",
"<1,57>": "8INNF02", "<1,57>": "8INNF03",
"<1,58>": "8INNF03", "<1,58>": "8INNF04",
"<1,59>": "8INNF04", "<1,59>": "8INNF05",
"<1,60>": "8INNF05", "<1,60>": "8INFF01",
"<1,61>": "8INFF01", "<1,61>": "8INFF02",
"<1,62>": "8INFF02", "<1,62>": "8INFF03",
"<1,63>": "8INFF03", "<1,63>": "8INFF04",
"<1,64>": "8INFF04", "<1,64>": "MACTRONIX #1",
"<1,65>": "MACTRONIX #1", "<1,65>": "MACTRONIX #2 ",
"<1,66>": "MACTRONIX #2 ", "<1,66>": "MACTRONIX #3",
"<1,67>": "MACTRONIX #3", "<1,67>": "MACTRONIX #4",
"<1,68>": "MACTRONIX #4", "<1,68>": "MACTRONIX #5",
"<1,69>": "MACTRONIX #5", "<1,69>": "MACTRONIX #6",
"<1,70>": "MACTRONIX #6", "<1,70>": "MACTRONIX #7",
"<1,71>": "MACTRONIX #7", "<1,71>": "TALL_PITCH1",
"<1,72>": "TALL_PITCH1", "<1,72>": "TALL_PITCH2",
"<1,73>": "TALL_PITCH2", "<1,73>": "TALL_PITCH3",
"<1,74>": "TALL_PITCH3", "<1,74>": "TALL_PITCH4",
"<1,75>": "TALL_PITCH4", "<1,75>": "WC6INCH1",
"<1,76>": "WC6INCH1", "<1,76>": "WC6INCH2",
"<1,77>": "WC6INCH2", "<1,77>": "WC6INCH3",
"<1,78>": "WC6INCH3", "<1,78>": "WC6INCH4",
"<1,79>": "WC6INCH4", "<1,79>": "WC8INCH1",
"<1,80>": "WC8INCH1", "<1,80>": "WC8INCH2",
"<1,81>": "WC8INCH2", "<1,81>": "WC8INCH3",
"<1,82>": "WC8INCH3", "<1,82>": "ELLP01",
"<1,83>": "ELLP01", "<1,83>": "LEAKCHK01",
"<1,84>": "LEAKCHK01", "<1,84>": "LEAKCHK02",
"<1,85>": "LEAKCHK02", "<1,85>": "TBI #1"
"<1,86>": "TBI #1"
} }
} }
} }

View File

@ -5,7 +5,7 @@
}, },
"body": { "body": {
"record1": { "record1": {
"<1>": "declare function prod_spec_comm\r\ndeclare subroutine forward_event\r\n\r\nforward_event(NewData)\r\nVoid = prod_spec_comm( \"LOAD_TOOL_RECIPE\" )\r\nVoid = prod_spec_comm( \"LOAD_TOOL_PATTERN\" )\r\nRETURN 0\r\n" "<1>": "declare function prod_spec_comm\r\ndeclare subroutine forward_event\r\n\r\nforward_event(NewData)\r\nVoid = prod_spec_comm( \"LOAD_TOOL_RECIPE\" )\r\nRETURN 0\r\n"
} }
} }
} }

View File

@ -5,7 +5,7 @@
}, },
"body": { "body": {
"record1": { "record1": {
"<1>": "$INSERT RECIPE_EQU\r\n$insert TOOL_CLASS_EQUATES\r\n\r\nDECLARE SUBROUTINE Set_List_Box_data, Set_Property\r\nDECLARE FUNCTION Center_Window, Prod_Spec_Comm\r\n\r\nEQU MI$TOOL\t\t\tTO 1\r\nEQU MI$TYPE\t\t\tTO 2\r\nEQU MI$RECIPE\t\tTO 3\r\nEQU MI$FREQ\t\t\tTO 4\r\nEQU MI$PROVE_TYPE\tTO 5\r\nEQU MI$FIRST_CHECK\tTO 6\r\nEQU MI$LAST_CHECK\tTO 7\r\nEQU MI$SPC\t\t\tTO 8\r\nEQU MI$OVERGROW\t\tTO 9\r\nEQU MI$EXP_TW_QTY\tTO 10\r\nEQU MI$PATTERN\t\tTO 11\r\n\r\nIF INDEX( CreateParam, 'CENTER', 1 ) THEN\r\n void = center_window( @window )\r\nEND ELSE\r\n Void = Set_Property( @window, 'VISIBLE', 1 )\r\nEND\r\n\r\nMeasureInfo\t= FIELD( CreateParam, CHAR(245), 1 )\t\t;* 1st passed parameter\r\n\r\nCtrls = @WINDOW:'.TOOL':@RM\t\t\t\t; Props = 'TEXT':@RM\t\t; Vals = FIELD(MeasureInfo,'~',MI$TOOL):@RM\r\nCtrls := @WINDOW:'.TYPE':@RM\t\t\t\t; Props := 'TEXT':@RM\t\t; Vals := FIELD(MeasureInfo,'~',MI$TYPE):@RM\r\nCtrls := @WINDOW:'.RECIPE':@RM\t\t\t\t; Props := 'TEXT':@RM\t\t; Vals := FIELD(MeasureInfo,'~',MI$RECIPE):@RM\r\nCtrls := @WINDOW:'.FREQ':@RM\t\t\t\t; Props := 'TEXT':@RM\t\t; Vals := FIELD(MeasureInfo,'~',MI$FREQ):@RM\r\nCtrls := @WINDOW:'.PROVE_TYPE':@RM\t\t\t; Props := 'TEXT':@RM\t\t; Vals := FIELD(MeasureInfo,'~',MI$PROVE_TYPE):@RM\r\nCtrls := @WINDOW:'.FIRST_CHECK':@RM\t\t\t; Props := 'CHECK':@RM\t\t; Vals := FIELD(MeasureInfo,'~',MI$FIRST_CHECK):@RM\r\nCtrls := @WINDOW:'.LAST_CHECK':@RM\t\t\t; Props := 'CHECK':@RM\t\t; Vals := FIELD(MeasureInfo,'~',MI$LAST_CHECK):@RM\r\nCtrls := @WINDOW:'.SPC':@RM\t\t\t\t\t; Props := 'CHECK':@RM\t\t; Vals := FIELD(MeasureInfo,'~',MI$SPC):@RM\r\nCtrls := @WINDOW:'.OVERGROW':@RM\t\t\t; Props := 'CHECK':@RM\t\t; Vals := FIELD(MeasureInfo,'~',MI$OVERGROW):@RM\r\nCtrls := @WINDOW:'.EXPECTED_TW_QTY':@RM\t\t; Props := 'TEXT':@RM\t\t; Vals := FIELD(MeasureInfo,'~',MI$EXP_TW_QTY):@RM\r\nCtrls := @WINDOW:'.PATTERN'\t\t\t\t\t; Props := 'TEXT'\t\t\t; Vals := FIELD(MeasureInfo,'~',MI$PATTERN)\r\n\r\nSet_Property(Ctrls,Props,Vals)\r\nSet_Property(@WINDOW, '@Controls',Ctrls)\r\nSet_Property(@WINDOW, '@Props',Props)\r\n\r\nType = FIELD(CreateParam,CHAR(245),2)\t\t;* 2nd passed parameter\r\n\r\nIF Type = 'RES' THEN\r\n\tvoid = Set_Property(@WINDOW:'.OVERGROW','VISIBLE',1)\r\nEND ELSE\r\n\tvoid = Set_Property(@WINDOW:'.OVERGROW','VISIBLE',0)\r\nEND\r\n\r\nTypeOut = FIELD(CreateParam,CHAR(245),3)\t\t\t;* 3rd passed parameter\r\n\r\nTitle = Get_Property(@WINDOW,'TEXT')\r\nTitle := TypeOut:' ':Title\r\nSet_Property(@WINDOW,'TEXT',Title)\r\n\r\nToolList = XLATE('LISTBOX_CONFIG',Type:'MEASURETOOL','','X')\r\nCONVERT @VM TO @FM IN ToolList\r\nSet_Property(@WINDOW:'.TOOL','LIST',ToolList)\r\n\r\nTool = Get_Property(@WINDOW:'.TOOL', 'TEXT' )\r\nCONVERT @LOWER_CASE TO @UPPER_CASE IN Tool\r\n\r\nRecipeList = XLATE( 'TOOL_CLASS', Tool, TOOL_CLASS_RECIPES$, 'X' )\r\nCONVERT @VM To @FM IN RecipeList\r\n\r\nIF RecipeList NE '' THEN\r\n\tSet_Property(@WINDOW:'.RECIPE','LIST',RecipeList)\r\nEnd\r\n\r\nPatternList = Xlate('TOOL_CLASS', Tool, TOOL_CLASS_PATTERN$, 'X')\r\nCONVERT @VM To @FM IN PatternList\r\n\r\nIf PatternList Ne '' Then\r\n Set_Property(@Window:'.PATTERN', 'LIST', PatternList)\r\nEnd\r\n\r\nRETURN 1\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n" "<1>": "$INSERT RECIPE_EQU\r\n\r\nDECLARE SUBROUTINE Set_List_Box_data, Set_Property\r\nDECLARE FUNCTION Center_Window, Prod_Spec_Comm\r\n\r\nEQU MI$TOOL\t\t\tTO 1\r\nEQU MI$TYPE\t\t\tTO 2\r\nEQU MI$RECIPE\t\tTO 3\r\nEQU MI$FREQ\t\t\tTO 4\r\nEQU MI$PROVE_TYPE\tTO 5\r\nEQU MI$FIRST_CHECK\tTO 6\r\nEQU MI$LAST_CHECK\tTO 7\r\nEQU MI$SPC\t\t\tTO 8\r\nEQU MI$OVERGROW\t\tTO 9\r\nEQU MI$EXP_TW_QTY\tTO 10\r\nEQU MI$PATTERN\t\tTO 11\r\n\r\nIF INDEX( CreateParam, 'CENTER', 1 ) THEN\r\n void = center_window( @window )\r\nEND ELSE\r\n Void = Set_Property( @window, 'VISIBLE', 1 )\r\nEND\r\n\r\nMeasureInfo\t= FIELD( CreateParam, CHAR(245), 1 )\t\t;* 1st passed parameter\r\n\r\nCtrls = @WINDOW:'.TOOL':@RM\t\t\t\t; Props = 'TEXT':@RM\t\t; Vals = FIELD(MeasureInfo,'~',MI$TOOL):@RM\r\nCtrls := @WINDOW:'.TYPE':@RM\t\t\t\t; Props := 'TEXT':@RM\t\t; Vals := FIELD(MeasureInfo,'~',MI$TYPE):@RM\r\nCtrls := @WINDOW:'.RECIPE':@RM\t\t\t\t; Props := 'TEXT':@RM\t\t; Vals := FIELD(MeasureInfo,'~',MI$RECIPE):@RM\r\nCtrls := @WINDOW:'.FREQ':@RM\t\t\t\t; Props := 'TEXT':@RM\t\t; Vals := FIELD(MeasureInfo,'~',MI$FREQ):@RM\r\nCtrls := @WINDOW:'.PROVE_TYPE':@RM\t\t\t; Props := 'TEXT':@RM\t\t; Vals := FIELD(MeasureInfo,'~',MI$PROVE_TYPE):@RM\r\nCtrls := @WINDOW:'.FIRST_CHECK':@RM\t\t\t; Props := 'CHECK':@RM\t\t; Vals := FIELD(MeasureInfo,'~',MI$FIRST_CHECK):@RM\r\nCtrls := @WINDOW:'.LAST_CHECK':@RM\t\t\t; Props := 'CHECK':@RM\t\t; Vals := FIELD(MeasureInfo,'~',MI$LAST_CHECK):@RM\r\nCtrls := @WINDOW:'.SPC':@RM\t\t\t\t\t; Props := 'CHECK':@RM\t\t; Vals := FIELD(MeasureInfo,'~',MI$SPC):@RM\r\nCtrls := @WINDOW:'.OVERGROW':@RM\t\t\t; Props := 'CHECK':@RM\t\t; Vals := FIELD(MeasureInfo,'~',MI$OVERGROW):@RM\r\nCtrls := @WINDOW:'.EXPECTED_TW_QTY':@RM\t\t; Props := 'TEXT':@RM\t\t; Vals := FIELD(MeasureInfo,'~',MI$EXP_TW_QTY):@RM\r\nCtrls := @WINDOW:'.PATTERN'\t\t\t\t\t; Props := 'TEXT'\t\t\t; Vals := FIELD(MeasureInfo,'~',MI$PATTERN)\r\n\r\nSet_Property(Ctrls,Props,Vals)\r\nSet_Property(@WINDOW, '@Controls',Ctrls)\r\nSet_Property(@WINDOW, '@Props',Props)\r\n\r\nType = FIELD(CreateParam,CHAR(245),2)\t\t;* 2nd passed parameter\r\n\r\nIF Type = 'RES' THEN\r\n\tvoid = Set_Property(@WINDOW:'.OVERGROW','VISIBLE',1)\r\nEND ELSE\r\n\tvoid = Set_Property(@WINDOW:'.OVERGROW','VISIBLE',0)\r\nEND\r\n\r\nTypeOut = FIELD(CreateParam,CHAR(245),3)\t\t\t;* 3rd passed parameter\r\n\r\nTitle = Get_Property(@WINDOW,'TEXT')\r\nTitle := TypeOut:' ':Title\r\nSet_Property(@WINDOW,'TEXT',Title)\r\n\r\nSet_List_Box_Data(CtrlEntId)\r\n\r\n\r\nToolList = XLATE('LISTBOX_CONFIG',Type:'MEASURETOOL','','X')\r\nCONVERT @VM TO @FM IN ToolList\r\nSet_Property(@WINDOW:'.TOOL','LIST',ToolList)\r\n\r\nTool = Get_Property(@WINDOW:'.TOOL', 'TEXT' )\r\nCONVERT @LOWER_CASE TO @UPPER_CASE IN Tool\r\n\r\nRecipeList = XLATE( 'LISTBOX_CONFIG', Tool:'_RECIPES', '', 'X' )\r\nCONVERT @VM To @FM IN RecipeList\r\n\r\nIF RecipeList NE '' THEN\r\n\tSet_Property(@WINDOW:'.RECIPE','LIST',RecipeList)\r\nEND\r\n\r\nRETURN 1\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n"
} }
} }
} }

View File

@ -5,7 +5,7 @@
}, },
"body": { "body": {
"record1": { "record1": {
"<1>": "\r\ndeclare function dialog_box, Get_Property\r\ndeclare subroutine Send_Event, Post_Event, Set_Property\r\n\r\nATRECORD = Get_Property(@Window, 'ATRECORD')\r\nRecCheck = @Record\r\n\r\nRDSNo = Get_Property(@Window : '.RDS_NO', 'TEXT')\r\n\r\nIf ATRECORD NE RecCheck then\r\n OrigIOOptions = Get_Property (@Window, \"IOOPTIONS\")\r\n TempIOOptions = OrigIOOptions\r\n TempIOOptions<6> = 1\r\n Set_Property(@Window, 'IOOPTIONS', TempIOOptions)\r\n Send_Event(@Window, 'WRITE')\r\n Set_Property(@Window, 'IOOPTIONS', OrigIOOptions)\r\nend\r\n\r\nReturnVal = dialog_box( 'NDW_LOAD_UNLOAD_EXTRA', @window, RDSNo)\r\nSet_Property(@window, 'SAVEWARN', 0)\r\nPost_Event(@Window, 'READ')\r\n/*\r\nVoid = set_property( @window, '@ExSigWrite', 0 )\r\nOrigExSigInfo = get_property( @window, '@ExSigInfo' )\r\nReturnVal = dialog_box( 'RDS_UNLOAD_LOAD_EX', @window, OrigExSigInfo )\r\nif ReturnVal <> 'CANCEL' and ( ReturnVal <> OrigExSigInfo ) then\r\n Void = set_property( @window, '@ExSigInfo', ReturnVal )\r\n Void = set_property( @window, '@ExSigWrite', 1 )\r\n @@window->savewarn = 1\r\nend\r\n*/\r\nRETURN 0\r\n" "<1>": "\r\ndeclare function dialog_box\r\n\r\nRDSNo = Get_Property(@Window : '.RDS_NO', 'TEXT')\r\nReturnVal = dialog_box( 'NDW_LOAD_UNLOAD_EXTRA', @window, RDSNo)\r\n/*\r\nVoid = set_property( @window, '@ExSigWrite', 0 )\r\nOrigExSigInfo = get_property( @window, '@ExSigInfo' )\r\nReturnVal = dialog_box( 'RDS_UNLOAD_LOAD_EX', @window, OrigExSigInfo )\r\nif ReturnVal <> 'CANCEL' and ( ReturnVal <> OrigExSigInfo ) then\r\n Void = set_property( @window, '@ExSigInfo', ReturnVal )\r\n Void = set_property( @window, '@ExSigWrite', 1 )\r\n @@window->savewarn = 1\r\nend\r\n*/\r\nRETURN 0\r\n"
} }
} }
} }

1515
LSL2/OIWIN/DIALOG_SCHED.json Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -22604,10 +22604,10 @@
"<2>": { "<2>": {
"<2,1>": { "<2,1>": {
"<2,1,1>": { "<2,1,1>": {
"<2,1,1,1>": "UNLOAD/LOAD_EXTRA.SIGNATURE_INFO", "<2,1,1,1>": "SEND_MESSAGE.MESSAGE_W/ATTACHMENT",
"<2,1,1,2>": "PRINT.FACTORY_LABELS", "<2,1,1,2>": "PRINT.CUSTOMER_RDS",
"<2,1,1,3>": "PRINT.CUSTOMER_RDS", "<2,1,1,3>": "PRINT.FACTORY_LABELS",
"<2,1,1,4>": "SEND_MESSAGE.MESSAGE_W/ATTACHMENT" "<2,1,1,4>": "UNLOAD/LOAD_EXTRA.SIGNATURE_INFO"
} }
}, },
"<2,2>": { "<2,2>": {

View File

@ -3591,7 +3591,7 @@
"<22,2>": "", "<22,2>": "",
"<22,3>": "EDITFIELD", "<22,3>": "EDITFIELD",
"<22,4>": "RDS_PRE_EPI", "<22,4>": "RDS_PRE_EPI",
"<22,5>": "380", "<22,5>": "366",
"<22,6>": "370", "<22,6>": "370",
"<22,7>": "132", "<22,7>": "132",
"<22,8>": "18", "<22,8>": "18",
@ -3731,7 +3731,7 @@
"<23,2>": "", "<23,2>": "",
"<23,3>": "EDITFIELD", "<23,3>": "EDITFIELD",
"<23,4>": "RDS_PRE_EPI", "<23,4>": "RDS_PRE_EPI",
"<23,5>": "521", "<23,5>": "505",
"<23,6>": "370", "<23,6>": "370",
"<23,7>": "84", "<23,7>": "84",
"<23,8>": "18", "<23,8>": "18",
@ -3871,7 +3871,7 @@
"<24,2>": "", "<24,2>": "",
"<24,3>": "EDITFIELD", "<24,3>": "EDITFIELD",
"<24,4>": "RDS_PRE_EPI", "<24,4>": "RDS_PRE_EPI",
"<24,5>": "612", "<24,5>": "593",
"<24,6>": "370", "<24,6>": "370",
"<24,7>": "75", "<24,7>": "75",
"<24,8>": "18", "<24,8>": "18",
@ -9835,9 +9835,9 @@
"<56,3>": "PUSHBUTTON", "<56,3>": "PUSHBUTTON",
"<56,4>": "RDS_PRE_EPI", "<56,4>": "RDS_PRE_EPI",
"<56,5>": "324", "<56,5>": "324",
"<56,6>": "368", "<56,6>": "370",
"<56,7>": "52", "<56,7>": "36",
"<56,8>": "24", "<56,8>": "18",
"<56,9>": "Sign", "<56,9>": "Sign",
"<56,10>": { "<56,10>": {
"<56,10,1>": "0x56000300", "<56,10,1>": "0x56000300",
@ -17211,9 +17211,9 @@
"<101,2>": "", "<101,2>": "",
"<101,3>": "GROUPBOX", "<101,3>": "GROUPBOX",
"<101,4>": "RDS_PRE_EPI", "<101,4>": "RDS_PRE_EPI",
"<101,5>": "12", "<101,5>": "10",
"<101,6>": "268", "<101,6>": "268",
"<101,7>": "690", "<101,7>": "672",
"<101,8>": "129", "<101,8>": "129",
"<101,9>": "Pre-Epi Verification", "<101,9>": "Pre-Epi Verification",
"<101,10>": { "<101,10>": {
@ -17917,8 +17917,7 @@
"<1,26,16>": "", "<1,26,16>": "",
"<1,26,17>": "", "<1,26,17>": "",
"<1,26,18>": "", "<1,26,18>": "",
"<1,26,19>": "", "<1,26,19>": ""
"<1,26,20>": ""
}, },
"<1,27>": { "<1,27>": {
"<1,27,1>": "ITEM", "<1,27,1>": "ITEM",
@ -17939,8 +17938,7 @@
"<1,27,16>": "", "<1,27,16>": "",
"<1,27,17>": "", "<1,27,17>": "",
"<1,27,18>": "", "<1,27,18>": "",
"<1,27,19>": "", "<1,27,19>": ""
"<1,27,20>": ""
}, },
"<1,28>": { "<1,28>": {
"<1,28,1>": "POPUP", "<1,28,1>": "POPUP",
@ -18012,9 +18010,9 @@
"<2>": { "<2>": {
"<2,1>": { "<2,1>": {
"<2,1,1>": { "<2,1,1>": {
"<2,1,1,1>": "EDIT.THICKNESS_OVERGROWTH_AVG", "<2,1,1,1>": "SEND_MESSAGE.MESSAGE_W/ATTACHMENT",
"<2,1,1,2>": "EDIT.SSI_STANDARDS", "<2,1,1,2>": "EDIT.SSI_STANDARDS",
"<2,1,1,3>": "SEND_MESSAGE.MESSAGE_W/ATTACHMENT" "<2,1,1,3>": "EDIT.THICKNESS_OVERGROWTH_AVG"
} }
}, },
"<2,2>": { "<2,2>": {
@ -18024,17 +18022,7 @@
"<2,2,1,3>": "@WINDOW", "<2,2,1,3>": "@WINDOW",
"<2,2,1,4>": "", "<2,2,1,4>": "",
"<2,2,1,5>": "", "<2,2,1,5>": "",
"<2,2,1,6>": "", "<2,2,1,6>": ""
"<2,2,1,7>": "",
"<2,2,1,8>": "",
"<2,2,1,9>": "",
"<2,2,1,10>": "",
"<2,2,1,11>": "",
"<2,2,1,12>": "",
"<2,2,1,13>": "",
"<2,2,1,14>": "",
"<2,2,1,15>": "READROW",
"<2,2,1,16>": "0"
}, },
"<2,2,2>": { "<2,2,2>": {
"<2,2,2,1>": "E", "<2,2,2,1>": "E",
@ -18164,17 +18152,7 @@
"<2,2,16,3>": "@WINDOW", "<2,2,16,3>": "@WINDOW",
"<2,2,16,4>": "", "<2,2,16,4>": "",
"<2,2,16,5>": "", "<2,2,16,5>": "",
"<2,2,16,6>": "", "<2,2,16,6>": ""
"<2,2,16,7>": "",
"<2,2,16,8>": "",
"<2,2,16,9>": "",
"<2,2,16,10>": "",
"<2,2,16,11>": "",
"<2,2,16,12>": "",
"<2,2,16,13>": "",
"<2,2,16,14>": "",
"<2,2,16,15>": "GEN",
"<2,2,16,16>": "0"
} }
}, },
"<2,3>": { "<2,3>": {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,445 +0,0 @@
{
"header": {
"version": 1,
"type": "record"
},
"body": {
"record1": {
"<1>": "1010",
"<2>": "1",
"<3>": ""
},
"record2": {
"<1>": {
"<1,1>": "WEB_OI_WIZARD",
"<1,2>": "",
"<1,3>": "WINDOW",
"<1,4>": "",
"<1,5>": "0",
"<1,6>": "0",
"<1,7>": "-1184",
"<1,8>": "-761",
"<1,9>": "OI Wizard",
"<1,10>": {
"<1,10,1>": "0x84CF0000",
"<1,10,2>": "0x100"
},
"<1,11>": {
"<1,11,1>": "0xC000",
"<1,11,2>": "0x80000000"
},
"<1,12>": "",
"<1,13>": {
"<1,13,1>": "-2",
"<1,13,2>": "-2",
"<1,13,3>": ""
},
"<1,14>": "",
"<1,15>": "",
"<1,16>": "",
"<1,17>": "",
"<1,18>": {
"<1,18,1>": {
"<1,18,1,1>": "X",
"<1,18,1,2>": "EXECUTE",
"<1,18,1,3>": "@WINDOW_EVENTS",
"<1,18,1,4>": {
"<1,18,1,4,1>": "@SELF",
"<1,18,1,4,2>": "@EVENT",
"<1,18,1,4,3>": "@PARAM1",
"<1,18,1,4,4>": "@PARAM2",
"<1,18,1,4,5>": "@PARAM3",
"<1,18,1,4,6>": "@PARAM4",
"<1,18,1,4,7>": "@PARAM5",
"<1,18,1,4,8>": "@PARAM6"
},
"<1,18,1,5>": "",
"<1,18,1,6>": "",
"<1,18,1,7>": "",
"<1,18,1,8>": "",
"<1,18,1,9>": "",
"<1,18,1,10>": "",
"<1,18,1,11>": "",
"<1,18,1,12>": "",
"<1,18,1,13>": "",
"<1,18,1,14>": "",
"<1,18,1,15>": "COMMEVT",
"<1,18,1,16>": "0"
},
"<1,18,2>": {
"<1,18,2,1>": "X",
"<1,18,2,2>": "EXECUTE",
"<1,18,2,3>": "@WINDOW_EVENTS",
"<1,18,2,4>": {
"<1,18,2,4,1>": "@SELF",
"<1,18,2,4,2>": "@EVENT",
"<1,18,2,4,3>": "@PARAM1",
"<1,18,2,4,4>": "@PARAM2",
"<1,18,2,4,5>": "@PARAM3",
"<1,18,2,4,6>": "@PARAM4",
"<1,18,2,4,7>": "@PARAM5",
"<1,18,2,4,8>": "@PARAM6"
},
"<1,18,2,5>": "",
"<1,18,2,6>": "",
"<1,18,2,7>": "",
"<1,18,2,8>": "",
"<1,18,2,9>": "",
"<1,18,2,10>": "",
"<1,18,2,11>": "",
"<1,18,2,12>": "",
"<1,18,2,13>": "",
"<1,18,2,14>": "",
"<1,18,2,15>": "COMMEVT",
"<1,18,2,16>": "0"
}
},
"<1,19>": {
"<1,19,1>": "CREATE",
"<1,19,2>": "TIMER"
},
"<1,20>": "",
"<1,21>": "",
"<1,22>": "",
"<1,23>": "",
"<1,24>": {
"<1,24,1>": "",
"<1,24,2>": "0",
"<1,24,3>": "0",
"<1,24,4>": "0",
"<1,24,5>": "",
"<1,24,6>": "0",
"<1,24,7>": "",
"<1,24,8>": "",
"<1,24,9>": "",
"<1,24,10>": "0",
"<1,24,11>": "0",
"<1,24,12>": "0",
"<1,24,13>": "0",
"<1,24,14>": "0",
"<1,24,15>": "0",
"<1,24,16>": "0",
"<1,24,17>": "0"
},
"<1,25>": "",
"<1,26>": "",
"<1,27>": "",
"<1,28>": "",
"<1,29>": "",
"<1,30>": "",
"<1,31>": "",
"<1,32>": "",
"<1,33>": "",
"<1,34>": "LSL2*IMAGE*ICO*INFINEON",
"<1,35>": "",
"<1,36>": "",
"<1,37>": {
"<1,37,1>": "0X10001",
"<1,37,2>": "0X10001"
},
"<1,38>": "",
"<1,39>": "",
"<1,40>": "",
"<1,41>": "",
"<1,42>": "",
"<1,43>": "",
"<1,44>": "",
"<1,45>": "",
"<1,46>": "",
"<1,47>": "",
"<1,48>": "",
"<1,49>": "",
"<1,50>": "",
"<1,51>": "",
"<1,52>": "",
"<1,53>": "",
"<1,54>": "",
"<1,55>": "",
"<1,56>": "",
"<1,57>": "",
"<1,58>": "",
"<1,59>": "",
"<1,60>": "",
"<1,61>": "",
"<1,62>": {
"<1,62,1>": "0",
"<1,62,2>": "",
"<1,62,3>": "",
"<1,62,4>": "1",
"<1,62,5>": "0",
"<1,62,6>": "0",
"<1,62,7>": "",
"<1,62,8>": "0.50",
"<1,62,9>": "5.00",
"<1,62,10>": "0.00"
},
"<1,63>": "",
"<1,64>": "",
"<1,65>": "",
"<1,66>": "",
"<1,67>": "",
"<1,68>": "",
"<1,69>": "",
"<1,70>": "",
"<1,71>": "",
"<1,72>": "",
"<1,73>": "",
"<1,74>": "",
"<1,75>": "",
"<1,76>": "",
"<1,77>": "",
"<1,78>": "",
"<1,79>": "",
"<1,80>": "",
"<1,81>": "",
"<1,82>": "",
"<1,83>": "",
"<1,84>": "",
"<1,85>": "",
"<1,86>": "",
"<1,87>": "",
"<1,88>": "",
"<1,89>": "",
"<1,90>": "",
"<1,91>": "",
"<1,92>": "",
"<1,93>": "",
"<1,94>": "",
"<1,95>": "",
"<1,96>": "",
"<1,97>": "",
"<1,98>": "",
"<1,99>": "",
"<1,100>": "",
"<1,101>": "",
"<1,102>": "",
"<1,103>": "",
"<1,104>": "",
"<1,105>": "",
"<1,106>": "0",
"<1,107>": "",
"<1,108>": ""
}
},
"record3": {
"<1>": {
"<1,1>": "WEBVIEW_MAIN",
"<1,2>": "",
"<1,3>": "WEBVIEW",
"<1,4>": "WEB_OI_WIZARD",
"<1,5>": "9",
"<1,6>": "8",
"<1,7>": "1167",
"<1,8>": "745",
"<1,9>": "",
"<1,10>": {
"<1,10,1>": "0x56000000",
"<1,10,2>": "0x0"
},
"<1,11>": {
"<1,11,1>": "0x4",
"<1,11,2>": "0x80000000"
},
"<1,12>": "1",
"<1,13>": {
"<1,13,1>": "-2",
"<1,13,2>": "-2",
"<1,13,3>": ""
},
"<1,14>": "",
"<1,15>": "",
"<1,16>": "",
"<1,17>": "",
"<1,18>": {
"<1,18,1>": {
"<1,18,1,1>": "X",
"<1,18,1,2>": "EXECUTE",
"<1,18,1,3>": "@WINDOW_EVENTS",
"<1,18,1,4>": {
"<1,18,1,4,1>": "@SELF",
"<1,18,1,4,2>": "@EVENT",
"<1,18,1,4,3>": "@PARAM1",
"<1,18,1,4,4>": "@PARAM2",
"<1,18,1,4,5>": "@PARAM3",
"<1,18,1,4,6>": "@PARAM4",
"<1,18,1,4,7>": "@PARAM5",
"<1,18,1,4,8>": "@PARAM6"
},
"<1,18,1,5>": "",
"<1,18,1,6>": "",
"<1,18,1,7>": "",
"<1,18,1,8>": "",
"<1,18,1,9>": "",
"<1,18,1,10>": "",
"<1,18,1,11>": "",
"<1,18,1,12>": "",
"<1,18,1,13>": "",
"<1,18,1,14>": "",
"<1,18,1,15>": "COMMEVT",
"<1,18,1,16>": "0"
},
"<1,18,2>": {
"<1,18,2,1>": "X",
"<1,18,2,2>": "EXECUTE",
"<1,18,2,3>": "@WINDOW_EVENTS",
"<1,18,2,4>": {
"<1,18,2,4,1>": "@SELF",
"<1,18,2,4,2>": "@EVENT",
"<1,18,2,4,3>": "@PARAM1",
"<1,18,2,4,4>": "@PARAM2",
"<1,18,2,4,5>": "@PARAM3",
"<1,18,2,4,6>": "@PARAM4",
"<1,18,2,4,7>": "@PARAM5",
"<1,18,2,4,8>": "@PARAM6"
},
"<1,18,2,5>": "",
"<1,18,2,6>": "",
"<1,18,2,7>": "",
"<1,18,2,8>": "",
"<1,18,2,9>": "",
"<1,18,2,10>": "",
"<1,18,2,11>": "",
"<1,18,2,12>": "",
"<1,18,2,13>": "",
"<1,18,2,14>": "",
"<1,18,2,15>": "COMMEVT",
"<1,18,2,16>": "0"
}
},
"<1,19>": {
"<1,19,1>": "WEBVIEWCREATED",
"<1,19,2>": "WEBNAVIGATED"
},
"<1,20>": "",
"<1,21>": "",
"<1,22>": "",
"<1,23>": "",
"<1,24>": "",
"<1,25>": "",
"<1,26>": "",
"<1,27>": "",
"<1,28>": "",
"<1,29>": "",
"<1,30>": "",
"<1,31>": "",
"<1,32>": "",
"<1,33>": "",
"<1,34>": "",
"<1,35>": "",
"<1,36>": "",
"<1,37>": "",
"<1,38>": "",
"<1,39>": "",
"<1,40>": "",
"<1,41>": "",
"<1,42>": "",
"<1,43>": "",
"<1,44>": "",
"<1,45>": "",
"<1,46>": "",
"<1,47>": "",
"<1,48>": "",
"<1,49>": "",
"<1,50>": "",
"<1,51>": "",
"<1,52>": "",
"<1,53>": "",
"<1,54>": "",
"<1,55>": "",
"<1,56>": "",
"<1,57>": "",
"<1,58>": {
"<1,58,1>": "1",
"<1,58,2>": "1",
"<1,58,3>": "1",
"<1,58,4>": "1",
"<1,58,5>": "1",
"<1,58,6>": "0",
"<1,58,7>": "1",
"<1,58,8>": "1",
"<1,58,9>": "1",
"<1,58,10>": "1",
"<1,58,11>": "1",
"<1,58,12>": "1",
"<1,58,13>": "1"
},
"<1,59>": "",
"<1,60>": "",
"<1,61>": "",
"<1,62>": "",
"<1,63>": "",
"<1,64>": "",
"<1,65>": "",
"<1,66>": "",
"<1,67>": "",
"<1,68>": "",
"<1,69>": "",
"<1,70>": "",
"<1,71>": "",
"<1,72>": "",
"<1,73>": "",
"<1,74>": "",
"<1,75>": "",
"<1,76>": "",
"<1,77>": "",
"<1,78>": "",
"<1,79>": "",
"<1,80>": "",
"<1,81>": "",
"<1,82>": "",
"<1,83>": "",
"<1,84>": "",
"<1,85>": "",
"<1,86>": "",
"<1,87>": "",
"<1,88>": "",
"<1,89>": "",
"<1,90>": "",
"<1,91>": "",
"<1,92>": "",
"<1,93>": "",
"<1,94>": {
"<1,94,1>": "",
"<1,94,2>": "",
"<1,94,3>": "",
"<1,94,4>": "0",
"<1,94,5>": "",
"<1,94,6>": "",
"<1,94,7>": "0",
"<1,94,8>": "",
"<1,94,9>": "0",
"<1,94,10>": "0"
},
"<1,95>": {
"<1,95,1>": "0",
"<1,95,2>": "0",
"<1,95,3>": "0",
"<1,95,4>": "0",
"<1,95,5>": "0",
"<1,95,6>": "0",
"<1,95,7>": "0",
"<1,95,8>": "0",
"<1,95,9>": "0",
"<1,95,10>": "0",
"<1,95,11>": "0"
},
"<1,96>": "",
"<1,97>": "",
"<1,98>": "",
"<1,99>": "",
"<1,100>": "",
"<1,101>": "",
"<1,102>": "",
"<1,103>": "",
"<1,104>": "",
"<1,105>": "",
"<1,106>": "",
"<1,107>": "",
"<1,108>": ""
}
},
"record4": {
"<1>": ""
}
}
}

View File

@ -43,10 +43,6 @@
"<8,3>": { "<8,3>": {
"<8,3,1>": "Update RDS Layer Parameters", "<8,3,1>": "Update RDS Layer Parameters",
"<8,3,2>": "UPDATE_RDS_LAYER" "<8,3,2>": "UPDATE_RDS_LAYER"
},
"<8,4>": {
"<8,4,1>": "Update RDS Test Specs",
"<8,4,2>": "UPDATE_RDS_TEST"
} }
}, },
"<9>": { "<9>": {

View File

@ -122,12 +122,8 @@
"<8,23,1>": "PSV", "<8,23,1>": "PSV",
"<8,23,2>": "Pre Ship Verification" "<8,23,2>": "Pre Ship Verification"
}, },
"<8,24>": { "<8,24>": "",
"<8,24,1>": "RTF", "<8,25>": ""
"<8,24,2>": "Return To Fab Active"
},
"<8,25>": "",
"<8,26>": ""
}, },
"<9>": { "<9>": {
"<9,1>": { "<9,1>": {
@ -145,6 +141,14 @@
"<9,2,4>": "C", "<9,2,4>": "C",
"<9,2,5>": "", "<9,2,5>": "",
"<9,2,6>": "Current Status Description" "<9,2,6>": "Current Status Description"
},
"<9,3>": {
"<9,3,1>": "",
"<9,3,2>": "",
"<9,3,3>": "",
"<9,3,4>": "",
"<9,3,5>": "",
"<9,3,6>": ""
} }
}, },
"<10>": "L", "<10>": "L",
@ -171,18 +175,8 @@
"<31>": "0", "<31>": "0",
"<32>": "0", "<32>": "0",
"<33>": "0", "<33>": "0",
"<34>": "-2", "<34>": "16777215",
"<35>": "-2", "<35>": "16777215"
"<36>": "",
"<37>": "",
"<38>": "",
"<39>": "",
"<40>": "-2",
"<41>": "1000",
"<42>": "",
"<43>": "",
"<44>": "",
"<45>": ""
} }
} }
} }

View File

@ -9,7 +9,7 @@
"<2>": "-1", "<2>": "-1",
"<3>": "-1", "<3>": "-1",
"<4>": "-1", "<4>": "-1",
"<5>": "-2", "<5>": "16777215",
"<6>": { "<6>": {
"<6,1>": { "<6,1>": {
"<6,1,1>": "Tahoma", "<6,1,1>": "Tahoma",
@ -41,8 +41,28 @@
"<8,2,2>": "High Thruput" "<8,2,2>": "High Thruput"
}, },
"<8,3>": { "<8,3>": {
"<8,3,1>": "EPP", "<8,3,1>": "K2K",
"<8,3,2>": " EpiPro" "<8,3,2>": "Kit 2000"
},
"<8,4>": {
"<8,4,1>": "EPP",
"<8,4,2>": " EpiPro"
},
"<8,5>": {
"<8,5,1>": "GAN",
"<8,5,2>": "GaN"
},
"<8,6>": {
"<8,6,1>": "STD",
"<8,6,2>": "Standard"
},
"<8,7>": {
"<8,7,1>": "HD",
"<8,7,2>": "Heavy Duty"
},
"<8,8>": {
"<8,8,1>": "SCADA",
"<8,8,2>": "Prototype"
} }
}, },
"<9>": { "<9>": {
@ -88,17 +108,7 @@
"<32>": "0", "<32>": "0",
"<33>": "1", "<33>": "1",
"<34>": "16777215", "<34>": "16777215",
"<35>": "16777215", "<35>": "16777215"
"<36>": "",
"<37>": "",
"<38>": "",
"<39>": "",
"<40>": "-2",
"<41>": "1000",
"<42>": "",
"<43>": "",
"<44>": "",
"<45>": ""
} }
} }
} }

View File

@ -130,11 +130,7 @@
"<8,25,1>": "PSV", "<8,25,1>": "PSV",
"<8,25,2>": "Pre Ship Verification" "<8,25,2>": "Pre Ship Verification"
}, },
"<8,26>": { "<8,26>": ""
"<8,26,1>": "RTF",
"<8,26,2>": "Return To Fab Active"
},
"<8,27>": ""
}, },
"<9>": { "<9>": {
"<9,1>": { "<9,1>": {
@ -178,18 +174,8 @@
"<31>": "0", "<31>": "0",
"<32>": "0", "<32>": "0",
"<33>": "0", "<33>": "0",
"<34>": "-2", "<34>": "16777215",
"<35>": "-2", "<35>": "16777215"
"<36>": "",
"<37>": "",
"<38>": "",
"<39>": "",
"<40>": "-2",
"<41>": "1000",
"<42>": "",
"<43>": "",
"<44>": "",
"<45>": ""
} }
} }
} }

View File

@ -9,7 +9,7 @@
"<2>": "-1", "<2>": "-1",
"<3>": "-1", "<3>": "-1",
"<4>": "-1", "<4>": "-1",
"<5>": "-2", "<5>": "16777215",
"<6>": { "<6>": {
"<6,1>": { "<6,1>": {
"<6,1,1>": "Tahoma", "<6,1,1>": "Tahoma",
@ -43,19 +43,39 @@
"<8,2,3>": "High Thruput" "<8,2,3>": "High Thruput"
}, },
"<8,3>": { "<8,3>": {
"<8,3,1>": "5", "<8,3,1>": "4",
"<8,3,2>": "HTR", "<8,3,2>": "HTR",
"<8,3,3>": "High Thruput" "<8,3,3>": "High Thruput"
}, },
"<8,4>": { "<8,4>": {
"<8,4,1>": "8", "<8,4,1>": "5",
"<8,4,2>": "EPP", "<8,4,2>": "HTR",
"<8,4,3>": "EpiPro" "<8,4,3>": "High Thruput"
}, },
"<8,5>": { "<8,5>": {
"<8,5,1>": "18", "<8,5,1>": "8",
"<8,5,2>": "EPP", "<8,5,2>": "EPP",
"<8,5,3>": "EpiPro" "<8,5,3>": "EpiPro"
},
"<8,6>": {
"<8,6,1>": "18",
"<8,6,2>": "EPP",
"<8,6,3>": "EpiPro"
},
"<8,7>": {
"<8,7,1>": "24",
"<8,7,2>": "EPP",
"<8,7,3>": "EpiPro"
},
"<8,8>": {
"<8,8,1>": "5",
"<8,8,2>": "GAN",
"<8,8,3>": "G5+"
},
"<8,9>": {
"<8,9,1>": "8",
"<8,9,2>": "GAN",
"<8,9,3>": "G5"
} }
}, },
"<9>": { "<9>": {
@ -109,17 +129,7 @@
"<32>": "0", "<32>": "0",
"<33>": "1", "<33>": "1",
"<34>": "16777215", "<34>": "16777215",
"<35>": "16777215", "<35>": "16777215"
"<36>": "",
"<37>": "",
"<38>": "",
"<39>": "",
"<40>": "-2",
"<41>": "1000",
"<42>": "",
"<43>": "",
"<44>": "",
"<45>": ""
} }
} }
} }

View File

@ -9,7 +9,7 @@
"<2>": "-2", "<2>": "-2",
"<3>": "-1", "<3>": "-1",
"<4>": "-1", "<4>": "-1",
"<5>": "-2", "<5>": "16777215",
"<6>": { "<6>": {
"<6,1>": { "<6,1>": {
"<6,1,1>": "Tahoma", "<6,1,1>": "Tahoma",
@ -43,8 +43,7 @@
"<8,9>": "G5+", "<8,9>": "G5+",
"<8,10>": "Char", "<8,10>": "Char",
"<8,11>": "Leakcheck", "<8,11>": "Leakcheck",
"<8,12>": "Scrubber", "<8,12>": "Scrubber"
"<8,13>": "Packer"
}, },
"<9>": { "<9>": {
"<9,1>": { "<9,1>": {
@ -81,17 +80,7 @@
"<32>": "0", "<32>": "0",
"<33>": "1", "<33>": "1",
"<34>": "16777215", "<34>": "16777215",
"<35>": "16777215", "<35>": "16777215"
"<36>": "",
"<37>": "",
"<38>": "",
"<39>": "",
"<40>": "-2",
"<41>": "1000",
"<42>": "",
"<43>": "",
"<44>": "",
"<45>": ""
} }
} }
} }

View File

@ -9,7 +9,7 @@
"<2>": "-1", "<2>": "-1",
"<3>": "-1", "<3>": "-1",
"<4>": "-1", "<4>": "-1",
"<5>": "-2", "<5>": "16777215",
"<6>": { "<6>": {
"<6,1>": { "<6,1>": {
"<6,1,1>": "Tahoma", "<6,1,1>": "Tahoma",
@ -33,12 +33,32 @@
"<7>": "", "<7>": "",
"<8>": { "<8>": {
"<8,1>": { "<8,1>": {
"<8,1,1>": "8", "<8,1,1>": "35",
"<8,1,2>": "200mm 8 in" "<8,1,2>": "35 inch EpiPro"
}, },
"<8,2>": { "<8,2>": {
"<8,2,1>": "6", "<8,2,1>": "18",
"<8,2,2>": "150mm 6 in" "<8,2,2>": "18 inch HTR"
},
"<8,3>": {
"<8,3,1>": "15",
"<8,3,2>": "15 inch HTR"
},
"<8,4>": {
"<8,4,1>": "8",
"<8,4,2>": "8 inch 200mm"
},
"<8,5>": {
"<8,5,1>": "6",
"<8,5,2>": "6 inch 150mm"
},
"<8,6>": {
"<8,6,1>": "5",
"<8,6,2>": "5 inch 125mm"
},
"<8,7>": {
"<8,7,1>": "4",
"<8,7,2>": "4 inch 100mm"
} }
}, },
"<9>": { "<9>": {
@ -84,17 +104,7 @@
"<32>": "0", "<32>": "0",
"<33>": "1", "<33>": "1",
"<34>": "16777215", "<34>": "16777215",
"<35>": "16777215", "<35>": "16777215"
"<36>": "",
"<37>": "",
"<38>": "",
"<39>": "",
"<40>": "-2",
"<41>": "1000",
"<42>": "",
"<43>": "",
"<44>": "",
"<45>": ""
} }
} }
} }

View File

@ -9,7 +9,7 @@
"<2>": "-2", "<2>": "-2",
"<3>": "-1", "<3>": "-1",
"<4>": "-1", "<4>": "-1",
"<5>": "-2", "<5>": "16777215",
"<6>": { "<6>": {
"<6,1>": { "<6,1>": {
"<6,1,1>": "MS Sans Serif", "<6,1,1>": "MS Sans Serif",
@ -105,10 +105,6 @@
"<8,19>": { "<8,19>": {
"<8,19,1>": "PACK", "<8,19,1>": "PACK",
"<8,19,2>": "Loaded in PT Out" "<8,19,2>": "Loaded in PT Out"
},
"<8,20>": {
"<8,20,1>": "RTF",
"<8,20,2>": "Return To Fab Active"
} }
}, },
"<9>": { "<9>": {
@ -127,6 +123,14 @@
"<9,2,4>": "C", "<9,2,4>": "C",
"<9,2,5>": "", "<9,2,5>": "",
"<9,2,6>": "Current Status Description" "<9,2,6>": "Current Status Description"
},
"<9,3>": {
"<9,3,1>": "",
"<9,3,2>": "",
"<9,3,3>": "",
"<9,3,4>": "",
"<9,3,5>": "",
"<9,3,6>": ""
} }
}, },
"<10>": "L", "<10>": "L",
@ -154,17 +158,7 @@
"<32>": "0", "<32>": "0",
"<33>": "1", "<33>": "1",
"<34>": "16777215", "<34>": "16777215",
"<35>": "16777215", "<35>": "16777215"
"<36>": "",
"<37>": "",
"<38>": "",
"<39>": "",
"<40>": "-2",
"<41>": "1000",
"<42>": "",
"<43>": "",
"<44>": "",
"<45>": ""
} }
} }
} }

View File

@ -9,7 +9,7 @@
"<2>": "-2", "<2>": "-2",
"<3>": "-1", "<3>": "-1",
"<4>": "-1", "<4>": "-1",
"<5>": "-2", "<5>": "16777215",
"<6>": { "<6>": {
"<6,1>": { "<6,1>": {
"<6,1,1>": "MS Sans Serif", "<6,1,1>": "MS Sans Serif",
@ -189,10 +189,6 @@
"<8,40>": { "<8,40>": {
"<8,40,1>": "PACK", "<8,40,1>": "PACK",
"<8,40,2>": "Loaded in PT Out" "<8,40,2>": "Loaded in PT Out"
},
"<8,41>": {
"<8,41,1>": "RTF",
"<8,41,2>": "Return To Fab Active"
} }
}, },
"<9>": { "<9>": {
@ -211,6 +207,14 @@
"<9,2,4>": "C", "<9,2,4>": "C",
"<9,2,5>": "", "<9,2,5>": "",
"<9,2,6>": "Current Status Description" "<9,2,6>": "Current Status Description"
},
"<9,3>": {
"<9,3,1>": "",
"<9,3,2>": "",
"<9,3,3>": "",
"<9,3,4>": "",
"<9,3,5>": "",
"<9,3,6>": ""
} }
}, },
"<10>": "L", "<10>": "L",
@ -238,17 +242,7 @@
"<32>": "0", "<32>": "0",
"<33>": "1", "<33>": "1",
"<34>": "16777215", "<34>": "16777215",
"<35>": "16777215", "<35>": "16777215"
"<36>": "",
"<37>": "",
"<38>": "",
"<39>": "",
"<40>": "-2",
"<41>": "1000",
"<42>": "",
"<43>": "",
"<44>": "",
"<45>": ""
} }
} }
} }

View File

@ -27,22 +27,17 @@ $Insert SERVICE_SETUP
$Insert APP_INSERTS $Insert APP_INSERTS
$Insert REVDOTNETEQUATES $Insert REVDOTNETEQUATES
Declare function Logging_Services, Environment_Services, Active_Directory_Services, Database_Services Declare function Logging_Services, Environment_Services, Active_Directory_Services
Declare function Error_Services, SRP_Array Declare subroutine Set_Property.Net, Logging_Services, Set_Status, Database_Services
Declare subroutine Set_Property.Net, Logging_Services, Set_Status, Database_Services, Error_Services
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ActiveDirectory' LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ActiveDirectory'
LogDate = Oconv(Date(), 'D4/') LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS') LogTime = Oconv(Time(), 'MTS')
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ActiveDirectoryAuthenticationLog.csv' LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ActiveDirectoryAuthLog.csv'
Headers = 'Logging DTM' : @FM : 'Username' : @FM : 'Authenticated' Headers = 'Logging DTM' : @FM : 'Username' : @FM : 'Authenticated'
objADAuthenticationLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$) objADAuthLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ActiveDirectoryAuthorizationLog.csv'
Headers = 'Logging DTM' : @FM : 'Username' : @FM : 'Authorized'
objADAuthorizationLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ActiveDirectoryLog.csv' LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ActiveDirectoryLog.csv'
Headers = 'Logging DTM' : @FM : 'Operation' : @FM : 'Message' Headers = 'Logging DTM' : @FM : 'Operation' : @FM : 'Message'
@ -88,43 +83,12 @@ Service AuthenticateUser(Username, Password, Domain)
LogData<1> = LoggingDTM LogData<1> = LoggingDTM
LogData<2> = Username LogData<2> = Username
LogData<3> = Authenticated LogData<3> = Authenticated
Logging_Services('AppendLog', objADAuthenticationLog, LogData, @RM, @FM, False$) Logging_Services('AppendLog', objADAuthLog, LogData, @RM, @FM, False$)
Response = Authenticated Response = Authenticated
end service end service
Service AuthorizeUser(Username, Domain)
ErrorMsg = ''
Authorized = False$
If ( (Username NE '') and (Domain NE '') ) then
AuthAdGroups = ''
LoginConfig = Database_Services('ReadDataRow', 'SYSENV', 'CFG_LOGIN*LSL2')
If Error_Services('NoError') then
AuthAdGroups<-1> = LoginConfig<2>
AuthAdGroups<-1> = LoginConfig<3>
AuthAdGroups<-1> = LoginConfig<4>
UserAdGroups = Active_Directory_Services('GetADGroups', Username, Domain)
MemberOfAuthGroups = SRP_Array('Join', UserAdGroups, AuthAdGroups, 'AND', @FM)
Authorized = (MemberOfAuthGroups NE '')
end else
ErrorMsg = 'Error in ':Service:' service. Error retrieving active directory authorization groups.'
end
end else
ErrorMsg = 'Error in ':Service:' service. Username and domain required.'
end
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = Username
LogData<3> = Authorized
Logging_Services('AppendLog', objADAuthorizationLog, LogData, @RM, @FM, False$)
If ErrorMsg NE '' then Error_Services('Add', ErrorMsg)
Response = Authorized
end service
Service GetADGroups(Username, Domain) Service GetADGroups(Username, Domain)
ADGroups = '' ADGroups = ''
@ -179,6 +143,7 @@ Service GetADGroups(Username, Domain)
End Service End Service
Service GetComputerDomain() Service GetComputerDomain()
Domain = '' Domain = ''
@ -201,7 +166,6 @@ Service GetComputerDomain()
end service end service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
// GetADGroupsByString // GetADGroupsByString
// //
@ -339,10 +303,8 @@ Service GetADGroupsByString(SearchString, Domain=DOMAIN, SearchByDescription=DES
end end
Response = ADGroups Response = ADGroups
end service end service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
// GetADGroupMembersByGroupDescription // GetADGroupMembersByGroupDescription
// //
@ -357,7 +319,6 @@ end service
// 9/26/2024 - [JRO] Initial Programmer. // 9/26/2024 - [JRO] Initial Programmer.
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service GetADGroupMembersByGroupDescription(DescriptionName, Domain=DOMAIN) Service GetADGroupMembersByGroupDescription(DescriptionName, Domain=DOMAIN)
Set_Status(0) Set_Status(0)
ErrMessage = '' ErrMessage = ''
GroupUsers = '' GroupUsers = ''
@ -436,10 +397,8 @@ Service GetADGroupMembersByGroupDescription(DescriptionName, Domain=DOMAIN)
Error_Services('Add', ErrMessage) Error_Services('Add', ErrMessage)
end end
Response = GroupUsers Response = GroupUsers
end service end service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
// GetADGroupMembersByGroupName // GetADGroupMembersByGroupName
// //
@ -454,7 +413,6 @@ end service
// 9/26/2024 - [JRO] Initial Programmer. // 9/26/2024 - [JRO] Initial Programmer.
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service GetADGroupMembersByGroupName(GroupName, Domain=DOMAIN) Service GetADGroupMembersByGroupName(GroupName, Domain=DOMAIN)
Set_Status(0) Set_Status(0)
Users = '' Users = ''
ErrMessage = '' ErrMessage = ''
@ -543,10 +501,8 @@ Service GetADGroupMembersByGroupName(GroupName, Domain=DOMAIN)
Error_Services('Add', ErrMessage) Error_Services('Add', ErrMessage)
end end
Response = Users Response = Users
end service end service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
// GetADUserAttributes // GetADUserAttributes
// //
@ -557,7 +513,6 @@ end service
// First value is the AD User Name, Second value is the Display Name, and third value is the email. // First value is the AD User Name, Second value is the Display Name, and third value is the email.
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service GetADUserAttributes(Username, Domain=DOMAIN) Service GetADUserAttributes(Username, Domain=DOMAIN)
Set_Status(0) Set_Status(0)
ThisUser = '' ThisUser = ''
ErrMessage = '' ErrMessage = ''
@ -638,6 +593,5 @@ Service GetADUserAttributes(Username, Domain=DOMAIN)
Error_Services('Add', ErrMessage) Error_Services('Add', ErrMessage)
end end
Response = ThisUser Response = ThisUser
end service end service

View File

@ -1,240 +0,0 @@
Function ARCHIVE_Actions(Action, CalcColName, FSList, Handle, Name, FMC, Record, Status, OrigRecord, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)
/***********************************************************************************************************************
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 : RDS_Actions
Description : Handles calculated columns and MFS calls for the current table.
Notes : This function uses @ID, @RECORD, and @DICT to make sure {ColumnName} references work correctly.
If called from outside of a calculated column these will need to be set and restored.
Parameters :
Action [in] -- Name of the action to be taken
CalcColName [in] -- Name of the calculated column that needs to be processed. Normally this should only be
populated when the CalcField action is being used.
FSList [in] -- The list of MFSs and the BFS name for the current file or volume. This is an @SVM
delimited array, with the current MFS name as the first value in the array, and the BFS
name as the last value. Normally set by a calling MFS.
Handle [in] -- The file handle of the file or media map being accessed. Note, this does contain the
entire handle structure that the Basic+ Open statement would provide. Normally set by a
calling MFS.
Name [in] -- The name (key) of the record or file being accessed. Normally set by a calling MFS.
FMC [in] -- Various functions. Normally set by a calling MFS.
Record [in] -- The entire record (for record-oriented functions) or a newly-created handle (for
"get handle" functions). Normally set by a calling MFS.
Status [in/out] -- Indicator of the success or failure of an action. Normally set by the calling MFS but
for some actions can be set by the action handler to indicate failure.
OrigRecord [in] -- Original content of the record being processed by the current action. This is
automatically being assigned by the WRITE_RECORD and DELETE_RECORD actions within
BASE_MFS.
Param1-10 [in/out] -- Additional request parameter holders
ActionFlow [out] -- Used to control the action chain (see the ACTION_SETUP insert for more information.)
Can also be used to return a special value, such as the results of the CalcField
method.
History : (Date, Initials, Notes)
04/10/18 dmb Original programmer.
10/04/18 djs Added a trigger within the WRITE_RECORD event, which fires when the reactor number has
changed. When this occurs the related RDS_LAYER records for this RDS record are populated
with the most recent associated TOOL_PARMS record. (related by PSN and Reactor)
***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler
$Insert FILE.SYSTEM.EQUATES
$Insert ACTION_SETUP
$Insert RLIST_EQUATES
$Insert APP_INSERTS
$Insert IFX_EQUATES
$Insert ARCHIVE_EQUATES
Equ COMMA$ to ','
Declare function Error_Services, Database_Services, obj_RDS_Test, Logging_Services, Environment_Services
Declare function Tool_Parms_Services, Signature_Services, obj_WO_Mat_QA, Datetime, Override_Services
Declare function Rds_Services, SRP_DateTime, SRP_Math, obj_WO_Mat, Lot_Services, SRP_Array
Declare function Lot_Event_Services, GetTickCount, Work_Order_Services, Archive_Services
Declare subroutine Error_Services, Database_Services, Logging_Services, Service_Services, obj_WO_React
Declare Subroutine Mona_Services
If KeyID then GoSub Initialize_System_Variables
Begin Case
Case Action _EQC 'CalculateColumn' ; GoSub CalculateColumn
Case Action _EQC 'READ_RECORD_PRE' ; GoSub READ_RECORD_PRE
Case Action _EQC 'READ_RECORD' ; GoSub READ_RECORD
Case Action _EQC 'READONLY_RECORD_PRE' ; GoSub READONLY_RECORD_PRE
Case Action _EQC 'READONLY_RECORD' ; GoSub READONLY_RECORD
Case Action _EQC 'WRITE_RECORD_PRE' ; GoSub WRITE_RECORD_PRE
Case Action _EQC 'WRITE_RECORD' ; GoSub WRITE_RECORD
Case Action _EQC 'DELETE_RECORD_PRE' ; GoSub DELETE_RECORD_PRE
Case Action _EQC 'DELETE_RECORD' ; GoSub DELETE_RECORD
Case Otherwise$ ; Status = 'Invalid Action'
End Case
If KeyID then GoSub Restore_System_Variables
If Assigned(ActionFlow) else ActionFlow = ACTION_CONTINUE$
Return ActionFlow
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Calculated Columns
//
// The typical structure of a calculated column will look like this:
//
// Declare function Database_Services
//
// @ANS = Database_Services('CalculateColumn')
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CalculateColumn:
// Make sure the ActionFlow return variable is cleared in case nothing is calculated.
ActionFlow = ''
return
// ----- MFS calls -----------------------------------------------------------------------------------------------------
READ_RECORD_PRE:
// In order to stop a record from being read in this action these lines of code must be used:
//
// OrigFileError = 100 : @FM : KeyID
// Status = 0
// Record = ''
// ActionFlow = ACTION_STOP$
* This code prevents an anomaly where an @SVM appears when the value is read
* and causes an error when copying the record to SQL.
return
READ_RECORD:
// In order to stop a record from being read in this action these lines of code must be used:
//
// OrigFileError = 100 : @FM : KeyID
// Status = 0
// Record = ''
return
READONLY_RECORD_PRE:
// In order to stop a record from being read in this action these lines of code must be used:
//
// OrigFileError = 100 : @FM : KeyID
// Status = 0
// Record = ''
// ActionFlow = ACTION_STOP$
return
READONLY_RECORD:
// In order to stop a record from being read in this action these lines of code must be used:
//
// OrigFileError = 100 : @FM : KeyID
// Status = 0
// Record = ''
return
WRITE_RECORD_PRE:
return
WRITE_RECORD:
return
DELETE_RECORD_PRE:
ActionFlow = ACTION_STOP$
return
DELETE_RECORD:
ActionFlow = ACTION_STOP$
return
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ClearCursors:
For counter = 0 to 8
ClearSelect counter
Next counter
return
Initialize_System_Variables:
// Save these for restoration later
SaveDict = @DICT
SaveID = @ID
SaveRecord = @RECORD
OrigFileError = @FILE.ERROR
// Now make sure @DICT, ID, and @RECORD are populated
CurrentDictName = ''
If @DICT then
DictHandle = @DICT<1, 2>
Locate DictHandle in @TABLES(5) Using @FM Setting fPos then
CurrentDictName = Field(@TABLES(0), @FM, fPos, 1)
end
end
If CurrentDictName NE DictName then
Open DictName to @DICT else Status = 'Unable to initialize @DICT'
end
@ID = KeyID
If Record else
// Record might not have been passed in. Read the record from the database table just to make sure.
@FILE.ERROR = ''
Open TableName to hTable then
FullFSList = hTable[1, 'F' : @VM]
BFS = FullFSList[-1, 'B' : @SVM]
LastHandle = hTable[-1, 'B' : \0D\]
FileHandle = \0D\ : LastHandle[1, @VM]
Call @BFS(READO.RECORD, BFS, FileHandle, KeyID, FMC, Record, ReadOStatus)
end
end
@RECORD = Record
return
Restore_System_Variables:
Transfer SaveDict to @DICT
Transfer SaveID to @ID
Transfer SaveRecord to @RECORD
@FILE.ERROR = OrigFileError
return

View File

@ -1,238 +0,0 @@
Function Archive_API(@API)
/***********************************************************************************************************************
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 SRP Computer Solutions, Inc.
Name : Archive_API
Description : API logic for the Archive resource.
Notes : All web APIs should include the API_SETUP insert. This will provide several useful variables:
HTTPMethod - The HTTP Method (Verb) submitted by the client (e.g., GET, POST, etc.)
APIURL - The URL for the API entry point (e.g., api.mysite.com/v1).
FullEndpointURL - The URL submitted by the client, including query params.
FullEndpointURLNoQuery - The URL submitted by the client, excluding query params.
EndpointSegment - The URL endpoint segment.
ParentURL - The URL path preceeding the current endpoint.
CurrentAPI - The name of this stored procedure.
Parameters :
API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
- APIPattern must follow this structure Archive[.ID.[<Property>]]
- HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
Examples:
- Archive.POST
- Archive.ID.PUT
- Archive.ID.firstName.GET
Response [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API
services do not rely upon anything being returned in the response. This is what the
various services like SetResponseBody and SetResponseStatus services are for. A response
value is only helpful if the developers want to use it for debug purposes.
History : (Date, Initials, Notes)
10/10/25 xxx Original programmer.
***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler
$insert APP_INSERTS
$insert API_SETUP
$insert HTTP_INSERTS
$insert SRPJSONX
Declare Function OI_WIZARD_SERVICES, ARCHIVE_SERVICES, Date_Services
GoToAPI else
// The specific resource endpoint doesn't have a API handler yet.
HTTP_Services('SetResponseStatus', 204, 'This is a valid endpoint but a web API handler has not yet been created.')
end
Return Response OR ''
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Endpoint Handlers
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
API archive.HEAD
API archive.GET
OIWizardID = ''
Cookies = HTTP_Services('GetHTTPCookie')
For each Cookie in Cookies using ';'
Key = Field(Cookie, '=', 1)
If Key EQ 'sessionID' then
OIWizardID = Field(Cookie, '=', 2)
end
Next Cookie
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
If ValidSession then
ArchiveIds = Archive_Services('GetAllArchiveIDs')
ArchiveListJson = ''
GoSub GenerateArchiveListJson
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
HTTP_Services('SetResponseBody', ArchiveListJson, False$, 'application/hal+json')
If Assigned(Message) then
HTTP_Services('SetResponseStatus', 201, Message)
end else
HTTP_Services('SetResponseStatus', 201)
end
end else
HTTP_Services('SetResponseStatus', 401, 'Invalid session. Reauthentication required.')
end
end api
API archive.getarchive.HEAD
API archive.getarchive.GET
OIWizardID = ''
Cookies = HTTP_Services('GetHTTPCookie')
For each Cookie in Cookies using ';'
Key = Field(Cookie, '=', 1)
If Key EQ 'sessionID' then
OIWizardID = Field(Cookie, '=', 2)
end
Next Cookie
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
If ValidSession then
ArchiveId = Http_Services('GetQueryField', 'ArchiveId')
ArchiveJson = Archive_Services('ConvertArchiveRecordToJson', ArchiveId)
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
HTTP_Services('SetResponseBody', ArchiveJson, False$, 'application/hal+json')
If Assigned(Message) then
HTTP_Services('SetResponseStatus', 201, Message)
end else
HTTP_Services('SetResponseStatus', 201)
end
end else
HTTP_Services('SetResponseStatus', 401, 'Invalid session. Reauthentication required.')
end
end api
API archive.findarchivebyrecord.HEAD
API archive.findarchivebyrecord.GET
OIWizardID = ''
Cookies = HTTP_Services('GetHTTPCookie')
For each Cookie in Cookies using ';'
Key = Field(Cookie, '=', 1)
If Key EQ 'sessionID' then
OIWizardID = Field(Cookie, '=', 2)
end
Next Cookie
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
If ValidSession then
Table = Http_Services('GetQueryField', 'Table')
RecordId = Http_Services('GetQueryField', 'RecordId')
ArchiveIds = Archive_Services('GetArchiveIDsByRecord', RecordId, Table)
SRP_JsonX_Begin('JSON', '{')
SRP_JsonX('ArchiveRecords','[')
for each ArchiveId in ArchiveIds using @FM
ThisArchiveJson = Archive_Services('ConvertArchiveRecordToJson', ArchiveId)
SRP_JsonX(ThisArchiveJson)
Next ArchiveId
SRP_JsonX(']')
ArchiveJson = SRP_JsonX_End('Pretty')
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
HTTP_Services('SetResponseBody', ArchiveJson, False$, 'application/hal+json')
If Assigned(Message) then
HTTP_Services('SetResponseStatus', 201, Message)
end else
HTTP_Services('SetResponseStatus', 201)
end
end else
HTTP_Services('SetResponseStatus', 401, 'Invalid session. Reauthentication required.')
end
end api
API archive.findarchivebymetadata.HEAD
API archive.findarchivebymetadata.GET
OIWizardID = ''
Cookies = HTTP_Services('GetHTTPCookie')
For each Cookie in Cookies using ';'
Key = Field(Cookie, '=', 1)
If Key EQ 'sessionID' then
OIWizardID = Field(Cookie, '=', 2)
end
Next Cookie
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
If ValidSession then
MetaDataType = Http_Services('GetQueryField', 'MetaDataType')
SearchValues = Http_Services('GetQueryField', 'SearchValue')
ArchiveIds = Archive_Services('GetArchiveIDsByMetaData', MetaDataType, SearchValues)
SRP_JsonX_Begin('JSON', '{')
SRP_JsonX('ArchiveRecords','[')
for each ArchiveId in ArchiveIds using @FM
ThisArchiveJson = Archive_Services('ConvertArchiveRecordToJson', ArchiveId)
SRP_JsonX(ThisArchiveJson)
Next ArchiveId
SRP_JsonX(']')
ArchiveJson = SRP_JsonX_End('Pretty')
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
HTTP_Services('SetResponseBody', ArchiveJson, False$, 'application/hal+json')
If Assigned(Message) then
HTTP_Services('SetResponseStatus', 201, Message)
end else
HTTP_Services('SetResponseStatus', 201)
end
end else
HTTP_Services('SetResponseStatus', 401, 'Invalid session. Reauthentication required.')
end
end api
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
GenerateArchiveListJson:
If Assigned(ArchiveListJson) AND Assigned(ArchiveIds) then
SRP_JsonX_Begin('JSON', '{')
SRP_JsonX('Archives', '[')
for each ArchiveId in ArchiveIds using @FM
ArchiveType = Field(ArchiveId, '*', 1)
ArchiveParent = Field(ArchiveId, '*', 2)
CreationDtm = Date_Services('ConvertDateTimeToISO8601', XLATE('ARCHIVE', ArchiveId, ARCHIVE_ARCHIVE_CREATION_DTM$, 'X'))
RecordCount = DCOUNT(XLATE('ARCHIVE', ArchiveId, ARCHIVE_CHILD_RECORD$, 'X'), @VM)
SRP_JsonX('{')
SRP_JsonX('ArchiveId', ArchiveId, 'String')
SRP_JsonX('ArchiveType', ArchiveType, 'String')
SRP_JsonX('ArchiveParent', ArchiveParent, 'String')
SRP_JsonX('CreationDtm', CreationDtm, 'String')
SRP_JsonX('RecordCount', RecordCount)
SRP_JsonX('}')
Next ArchiveId
SRP_JsonX(']')
ArchiveListJson = SRP_JsonX_End('Pretty')
end
return

File diff suppressed because it is too large Load Diff

View File

@ -211,7 +211,7 @@ Service SendReminders()
CalDueRecipients = Xlate('NOTIFICATION', 'CALIB_DUE_NOTIFY', NOTIFICATION_USER_ID$, 'X') CalDueRecipients = Xlate('NOTIFICATION', 'CALIB_DUE_NOTIFY', NOTIFICATION_USER_ID$, 'X')
CheckDt = OConv(Date() + 15, 'D4/') CheckDt = OConv(Date() + 15, 'D4/')
SelectSent = 'SELECT CALIB_LIST WITH NEXT_CAL_DT < ':QUOTE(CheckDt):' AND WITH EQ_LOC NE "Out of Service" BY NEXT_CAL_DT' SelectSent = 'SELECT CALIB_LIST WITH NEXT_CAL_DT < ':QUOTE(CheckDt):' BY NEXT_CAL_DT'
RList(SelectSent,TARGET_ACTIVELIST$,'','','') RList(SelectSent,TARGET_ACTIVELIST$,'','','')
NoteText = '' NoteText = ''

View File

@ -696,14 +696,8 @@ PerformQuery:
end end
If ErrorMsg EQ '' then If ErrorMsg EQ '' then
If WOKeys NE '' then WOKeys = SRP_Array('SortSimpleList', WOKeys, 'DescendingNumbers', @VM)
WOKeys = SRP_Array('SortSimpleList', WOKeys, 'DescendingNumbers', @VM) End_Dialog(@WINDOW,WOKeys)
End_Dialog(@WINDOW,WOKeys)
end else
Def = ''
Def<MICON$> = '*'
Msg(@Window, Def, 'OK', '', 'Query Results':@FM:'No work orders found')
end
end else end else
Msg(@Window, '', 'OK', '', 'Process Error':@FM:ErrorMsg) Msg(@Window, '', 'OK', '', 'Process Error':@FM:ErrorMsg)
end end

View File

@ -9,7 +9,7 @@ COMPILE FUNCTION Comm_PRS_Stage(EntID,Event,Parm1,Parm2,Parm3,Parm4,Parm5)
DECLARE SUBROUTINE Set_Property, Set_Status, ErrMsg, Set_Property, obj_AppWindow, Send_Event, Security_Err_Msg DECLARE SUBROUTINE Set_Property, Set_Status, ErrMsg, Set_Property, obj_AppWindow, Send_Event, Security_Err_Msg
DECLARE SUBROUTINE Send_Message, Btree.Extract, Comm_Prod_Spec, Forward_Event, Post_Event DECLARE SUBROUTINE Send_Message, Btree.Extract, Comm_Prod_Spec, Forward_Event, Post_Event
DECLARE FUNCTION Get_Property, Get_Status, Popup, Send_Message, Msg, Start_Window, MemberOf, Security_Check DECLARE FUNCTION Get_Property, Get_Status, Popup, Send_Message, Msg, Start_Window, MemberOf, Security_Check
DECLARE FUNCTION Comm_Prod_Spec, obj_Popup DECLARE FUNCTION Comm_Prod_Spec
$INSERT POPUP_EQUATES $INSERT POPUP_EQUATES
@ -192,6 +192,7 @@ NEXT I
Send_Message(@WINDOW:'.MET_TEST','COLFORMAT',COL$MET_PROP,PropCodes) Send_Message(@WINDOW:'.MET_TEST','COLFORMAT',COL$MET_PROP,PropCodes)
* Class Tools is set in the POSCHANGED event for the edit table. * Class Tools is set in the POSCHANGED event for the edit table.
/* /*
@ -234,23 +235,6 @@ Read:
GOSUB Refresh GOSUB Refresh
* Met Property Descriptions *
PSNo = Get_Property(@WINDOW : '.PS_NO', 'TEXT')
Stage = Get_Property(@WINDOW:'.STAGE','DEFPROP')
Props = Xlate('PRS_STAGE', PSNo:'*':Stage, PRS_STAGE_MET_PROP$, 'X')
PropDescs = obj_Popup('CodeDesc','MET_PROPERTY':@RM:Props)
CtrlEntID = @WINDOW:'.MET_TEST'
DescCount = DCount(PropDescs, @VM)
FOR Row = 1 to DescCount
PropDesc = PropDescs<1, Row>
Set_Property(CtrlEntId,"CELLPOS",PropDesc,COL$MET_PROP_DESC:@FM:Row)
Next Row
RETURN RETURN
@ -780,12 +764,6 @@ BEGIN CASE
RETURN RETURN
CASE CurrCol = COL$MET_PROP_DESC
PropCode = CurrLine<1,COL$MET_PROP>
DefProp = obj_Popup('CodeDesc','MET_PROPERTY':@RM:PropCode)
CASE CurrCol = COL$MET_MIN AND CurrLine<1,COL$MET_MIN> = '' CASE CurrCol = COL$MET_MIN AND CurrLine<1,COL$MET_MIN> = ''
MetTest = CurrLine<1,COL$MET_TEST> MetTest = CurrLine<1,COL$MET_TEST>
@ -1251,4 +1229,3 @@ return

View File

@ -2015,7 +2015,7 @@ HoldClick:
HoldData = Dialog_Box('DIALOG_HOLD',@WINDOW,Transition:@FM:@FM:HoldType:@FM:Stage:@FM:Interrupted) HoldData = Dialog_Box('DIALOG_HOLD',@WINDOW,Transition:@FM:@FM:HoldType:@FM:Stage:@FM:Interrupted)
If HoldData NE 'Cancel' then If HoldData NE 'Cancel' then
Hold_Services('ToggleHold', WOMatKey, HoldEntity, HoldEntityID, CtrlEnt, '', HoldData, @User4) Hold_Services('ToggleHold', WOMatKey, HoldEntity, HoldEntityID, CtrlEnt, '', HoldData, '')
IF Error_Services("HasError") THEN IF Error_Services("HasError") THEN
ErrCode = Error_Services("GetMessage") ErrCode = Error_Services("GetMessage")
ErrMsg(errCode) ErrMsg(errCode)

View File

@ -233,7 +233,13 @@ Read:
* * * * * * * * * * * * * *
WMOKey = Get_Property(@WINDOW,'ID') WMOKey = Get_Property(@WINDOW,'ID')
IF Not(RowExists('WM_OUT',WMOKey)) THEN IF RowExists('WM_OUT',WMOKey) THEN
*IF NOT(Security_Check('Work Order',READ$)) THEN
* Send_Event(@WINDOW,'CLEAR')
* Security_Err_Msg('Work Order',READ$)
* RETURN
*END
END ELSE
ErrMsg('WM_OUT entries may only be created from the Work Order Release process.') ErrMsg('WM_OUT entries may only be created from the Work Order Release process.')
Send_Event(@WINDOW,'CLEAR') Send_Event(@WINDOW,'CLEAR')
RETURN RETURN
@ -378,9 +384,9 @@ WONoLF:
* * * * * * * * * * * * * *
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP') WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
Convert @Lower_Case to @Upper_Case in WONo
Convert 'O' to '' in WONo
IF INDEX(WONo,'.',1) > 0 THEN IF INDEX(WONo,'.',1) > 0 THEN
CONVERT '.' TO '*' IN WONo CONVERT '.' TO '*' IN WONo
Set_Property(@WINDOW:'.WO_NO','DEFPROP','') Set_Property(@WINDOW:'.WO_NO','DEFPROP','')
obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WONo) obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WONo)
@ -1763,7 +1769,21 @@ AddMakeup:
AvailMU_WMOKeys = '' AvailMU_WMOKeys = ''
UserResp = Response UserResp = Response
MakeupBox = '' MakeupBox = ''
CheckValue = 1
// User requested to convert the current cassette into a makeup box.
// Verify the quantity before proceeding.
If WMOutKey NE '' then
Parms = ''
Parms<1> = WMOutKey ; // Cassette to verify wafer count of.
Parms<2> = 0 ; // Wafer count adjustment - 0 because converting box.
Parms<3> = 'MU' ; // Wafer counter tool location
Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
If Proceed NE True$ then Return
end else
ErrMsg('Error starting wafer counter check. WM_OUT key is missing.')
end
CheckValue = 1
FieldNo = WO_MAT_EPO_MAKEUP_BOX$ FieldNo = WO_MAT_EPO_MAKEUP_BOX$
obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue) ;* Set WMO_MAKEUP flag on WM_OUT obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue) ;* Set WMO_MAKEUP flag on WM_OUT
@ -1980,42 +2000,51 @@ MakeupClick:
End Case End Case
If Not(InvalidRequest) then If Not(InvalidRequest) then
Send_Event(CtrlEnt,'GOTFOCUS') Parms = ''
OrgMUPart = XLATE('WM_OUT',WMOKey,'MU_PART_NO','X') Parms<1> = WMOKey ; // Cassette to verify wafer count of.
// Log the makeup flag change Parms<2> = 0 ; // Wafer count adjustment - 0 because converting box.
LogData = '' Parms<3> = 'MU' ; // Wafer counter tool location
LogData<1> = LoggingDTM Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
LogData<2> = WONo:'*':ProcStepNo:'*':CassNo If Proceed EQ True$ then
LogData<3> = CheckValue Send_Event(CtrlEnt,'GOTFOCUS')
LogData<4> = @User4 OrgMUPart = XLATE('WM_OUT',WMOKey,'MU_PART_NO','X')
Logging_Services('AppendLog', objLog, LogData, @RM, @FM) // Log the makeup flag change
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = WONo:'*':ProcStepNo:'*':CassNo
LogData<3> = CheckValue
LogData<4> = @User4
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
Send_Event(@WINDOW,'WRITE') ;************* 6/30/2010 Send_Event(@WINDOW,'WRITE') ;************* 6/30/2010
FieldNo = WO_MAT_EPO_MAKEUP_BOX$ FieldNo = WO_MAT_EPO_MAKEUP_BOX$
obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue) obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)
IF Get_Status(errCode) THEN ErrMsg(errCode) IF Get_Status(errCode) THEN ErrMsg(errCode)
* Added 10/11/2010 JCH * Added 10/11/2010 JCH
NewMUPart = XLATE('WM_OUT',WMOKey,'MU_PART_NO','X') NewMUPart = XLATE('WM_OUT',WMOKey,'MU_PART_NO','X')
IndexTransactionRow = 'MU_PART_NO':@FM:WMOKey:@FM:OrgMUPart:@FM:NewMUPart:@FM IndexTransactionRow = 'MU_PART_NO':@FM:WMOKey:@FM:OrgMUPart:@FM:NewMUPart:@FM
OPEN "!WM_OUT" TO BangTable THEN OPEN "!WM_OUT" TO BangTable THEN
LOCK BangTable, 0 THEN LOCK BangTable, 0 THEN
READ PendingTrans FROM BangTable, 0 ELSE PendingTrans = '0':@FM READ PendingTrans FROM BangTable, 0 ELSE PendingTrans = '0':@FM
PendingTrans := IndexTransactionRow PendingTrans := IndexTransactionRow
WRITE PendingTrans ON BangTable, 0 ELSE WRITE PendingTrans ON BangTable, 0 ELSE
ErrMsg('Unable to write index transaction to !WM_OUT. ':WMOutKey) ErrMsg('Unable to write index transaction to !WM_OUT. ':WMOutKey)
END
UNLOCK BangTable, 0 ELSE ErrMsg('Unable to Unlock !WM_OUT while adding index transaction. ':WMOutKey)
END ELSE
ErrMsg('Unable to Lock !WM_OUT to add index transaction. ':WMOutKey)
END END
UNLOCK BangTable, 0 ELSE ErrMsg('Unable to Unlock !WM_OUT while adding index transaction. ':WMOutKey)
END ELSE END ELSE
ErrMsg('Unable to Lock !WM_OUT to add index transaction. ':WMOutKey) ErrMsg('Unable to Open !WM_OUT to add index transaction. ':WMOutKey)
END END
END ELSE * End of 10/11/2010 update
ErrMsg('Unable to Open !WM_OUT to add index transaction. ':WMOutKey) end else
END InvalidRequest = True$
* End of 10/11/2010 update end
end end
end else end else
InvalidRequest = True$ InvalidRequest = True$

View File

@ -646,7 +646,7 @@ MakeUpClick:
Set_Property(@WINDOW,'SAVEWARN', False$) Set_Property(@WINDOW,'SAVEWARN', False$)
Send_Event(@WINDOW,'CLEAR') Send_Event(@WINDOW,'CLEAR')
If (CheckValue EQ True$) then If (CheckValue EQ True$) then
Wo_Mat_Services('MakeupFlagOn', WOMatKey) Wo_Mat_Services('MakeupFlagOn', RDSNo)
end end
end end
end else end else
@ -815,4 +815,3 @@ BatchFixit:
RETURN RETURN

View File

@ -434,7 +434,7 @@ RejMat:
WfrID = SlotList<SelectedRows<I>, COL$WAFER_ID> WfrID = SlotList<SelectedRows<I>, COL$WAFER_ID>
PrevNCR = SlotList<SelectedRows<I>, COL$SLOT_NCR> PrevNCR = SlotList<SelectedRows<I>, COL$SLOT_NCR>
MUWfrID = SlotList<SelectedRows<I>, COL$MU_WAFER_ID> MUWfrID = SlotList<SelectedRows<I>, COL$MU_WAFER_ID>
If (WfrID EQ '') then If (WfrId EQ '') then
AllSlotsPermitted = False$ AllSlotsPermitted = False$
IneligibleSlots<0, -1> = SlotNo IneligibleSlots<0, -1> = SlotNo
end end
@ -811,6 +811,18 @@ AddMakeup:
MakeupBox = '' MakeupBox = ''
// User requested to convert the current cassette into a makeup box. // User requested to convert the current cassette into a makeup box.
// Verify the quantity before proceeding.
RDSNo = Get_Property(@Window:'.RDS_NO', 'TEXT')
If RDSNo NE '' then
Parms = ''
Parms<1> = RDSNo ; // Cassette to verify wafer count of.
Parms<2> = 0 ; // Wafer count adjustment - 0 because converting box.
Parms<3> = 'MU' ; // Wafer counter tool location
Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
If Proceed NE True$ then return
end else
ErrMsg('Error starting wafer counter check. RDS No is missing.')
end
RDSNo = Get_Property(@Window : '.RDS_NO', 'TEXT') ; // Get the RDS No now before the WRITE in case it is needed to toggle the index. RDSNo = Get_Property(@Window : '.RDS_NO', 'TEXT') ; // Get the RDS No now before the WRITE in case it is needed to toggle the index.
@ -827,8 +839,7 @@ AddMakeup:
ErrMsg('Unable to set makeup flag until Unload stage is signed.') ErrMsg('Unable to set makeup flag until Unload stage is signed.')
Return Return
END else END else
Wo_Mat_Services('MakeupFlagOn', WOMatKey) Wo_Mat_Services('MakeupFlagOn', RDSNo)
If Error_Services('HasError') then ErrMsg(Error_Services('GetMessage'))
end end
end end
@ -1055,23 +1066,37 @@ MakeUpLot:
End Case End Case
If Not(InvalidRequest) then If Not(InvalidRequest) then
RDSNo = Get_Property(@Window:'.RDS_NO', 'TEXT')
EpiCheck = Rds_Services('IsEpiPro', RDSNo) EpiCheck = Rds_Services('IsEpiPro', RDSNo)
obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue) If RDSNo NE '' then
If EpiCheck EQ False$ then Parms = ''
IF Get_Status(errCode) THEN Parms<1> = RDSNo ; // Cassette to verify wafer count of.
ErrMsg('Unable to set makeup flag until Unload stage is signed.') Parms<2> = 0 ; // Wafer count adjustment - 0 because converting box.
InvalidRequest = True$ Parms<3> = 'MU' ; // Wafer counter tool location
END else Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
Set_Property(@WINDOW,'SAVEWARN', False$) If Proceed EQ True$ then
Send_Event(@WINDOW,'CLEAR') obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)
If (CheckValue EQ True$) then If EpiCheck EQ False$ then
Wo_Mat_Services('MakeupFlagOn', WOMatKey) IF Get_Status(errCode) THEN
If Error_Services('HasError') then ErrMsg(Error_Services('GetMessage')) ErrMsg('Unable to set makeup flag until Unload stage is signed.')
InvalidRequest = True$
END else
Set_Property(@WINDOW,'SAVEWARN', False$)
Send_Event(@WINDOW,'CLEAR')
If (CheckValue EQ True$) then
Wo_Mat_Services('MakeupFlagOn', RDSNo)
end
end
end else
Set_Property(@WINDOW,'SAVEWARN', False$)
Send_Event(@WINDOW,'CLEAR')
end end
end else
InvalidRequest = True$
end end
end else end else
Set_Property(@WINDOW,'SAVEWARN', False$) InvalidRequest = True$
Send_Event(@WINDOW,'CLEAR') ErrMsg('WARNING: Error starting wafer counter check. RDS No is missing.')
end end
end end
end else end else

View File

@ -32,8 +32,7 @@ DataFields := "EVENT_BEGIN_WAFER_QTY" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_BEGIN
DataFields := "EVENT_END_WAFER_QTY" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_END_WAFER_QTY$), "INT"):@FM DataFields := "EVENT_END_WAFER_QTY" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_END_WAFER_QTY$), "INT"):@FM
DataFields := "EVENT_OPERATION_ID" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_OPERATION_ID$), "STR"):@FM DataFields := "EVENT_OPERATION_ID" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_OPERATION_ID$), "STR"):@FM
DataFields := "EVENT_OPERATOR_ID" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_OPERATOR_ID$), "STR"):@FM DataFields := "EVENT_OPERATOR_ID" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_OPERATOR_ID$), "STR"):@FM
DataFields := "SEQUENCE" :@VM:SQL_Format(Rec(LOT_EVENT_SEQUENCE$), "INT"):@FM DataFields := "SEQUENCE" :@VM:SQL_Format(Rec(LOT_EVENT_SEQUENCE$), "INT")
DataFields := "CHRON_ID" :@VM:SQL_Format(Rec(LOT_EVENT_CHRON_ID$), "INT")
// Symbolics // Symbolics
@ -44,4 +43,3 @@ Ans = SQL_Write(Connection, "LOT_EVENT", Keys, DataFields);
// Multi-valued Fields // Multi-valued Fields
Return Ans Return Ans

View File

@ -14,7 +14,7 @@ Declare function SQL_Write, SQL_Write_MV, SQL_Format
Ans = "" Ans = ""
// Parse record into a dimensioned array for speed // Parse record into a dimensioned array for speed
Dim Rec(25) Dim Rec(24)
MatParse Record into Rec MatParse Record into Rec
// List of key names and their values // List of key names and their values
@ -54,4 +54,3 @@ Ans = SQL_Write(Connection, "LOT_OPERATION", Keys, DataFields);
// Multi-valued Fields // Multi-valued Fields
Return Ans Return Ans

View File

@ -1,37 +0,0 @@
Compile function Copy_Test_Wafer_Prod_Record_To_SQL(Connection, Key, Record)
/*****************************************************************************\
Copies the given TEST_WAFER_PROD (to be renamed) PRODUCT record to the MSSQL database.
History
-------
09/10/2025 DJS Original Programmer
\*****************************************************************************/
$insert TEST_WAFER_PROD_EQUATES
Declare function SQL_Write, SQL_Write_MV, SQL_Format
Ans = ""
// Parse record into a dimensioned array for speed
Dim Rec(5)
MatParse Record into Rec
// List of key names and their values
Keys = "PRODUCT_ID":@VM:SQL_Format(Key, "STR")
// List of data fields and their values
DataFields = "PART_NAME" :@VM:SQL_Format(Rec(TEST_WAFER_PROD_PART_NAME$), "STR"):@FM
DataFields := "USAGE" :@VM:SQL_Format(Rec(TEST_WAFER_PROD_USAGE$), "INT"):@FM
DataFields := "SORT_ORDER" :@VM:SQL_Format(Rec(TEST_WAFER_PROD_SORT_ORDER$), "INT")
// Symbolics
// Write the data to the SQL database
Ans = SQL_Write(Connection, "PRODUCT", Keys, DataFields);
//-------------------------------------------------------------------------------------------------
// Multi-valued Fields
Return Ans

View File

@ -910,7 +910,6 @@ end service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service WriteDataRow(TableName, KeyID, DataRow, IgnoreSelfLock, IgnoreMFSRoutines, IgnoreAllLocks) Service WriteDataRow(TableName, KeyID, DataRow, IgnoreSelfLock, IgnoreMFSRoutines, IgnoreAllLocks)
ErrorMsg = ''
If TableName NE '' AND KeyID NE '' then If TableName NE '' AND KeyID NE '' then
If IgnoreSelfLock NE True$ then IgnoreSelfLock = False$ If IgnoreSelfLock NE True$ then IgnoreSelfLock = False$
If IgnoreMFSRoutines NE True$ then IgnoreMFSRoutines = False$ If IgnoreMFSRoutines NE True$ then IgnoreMFSRoutines = False$
@ -944,13 +943,7 @@ Service WriteDataRow(TableName, KeyID, DataRow, IgnoreSelfLock, IgnoreMFSRoutine
end end
end end
If IgnoreAllLocks EQ False$ then If IgnoreAllLocks EQ False$ then
If Error_Services('HasError') then
ErrorMsg = Error_Services('GetMessage')
end
Database_Services('ReleaseKeyIDLock', TableName, KeyID) Database_Services('ReleaseKeyIDLock', TableName, KeyID)
If ErrorMsg NE '' then
Error_Services('Add', ErrorMsg)
end
end end
end else end else
Error_Services('Add', 'Unable to lock ' : KeyID : ' for the ' : TableName : ' table in the ' : Service : ' service.') Error_Services('Add', 'Unable to lock ' : KeyID : ' for the ' : TableName : ' table in the ' : Service : ' service.')
@ -973,7 +966,6 @@ end service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service WriteDataColumn(TableName, KeyID, ColumnNo, Value, IgnoreSelfLock, IgnoreMFSRoutines, IgnoreAllLocks) Service WriteDataColumn(TableName, KeyID, ColumnNo, Value, IgnoreSelfLock, IgnoreMFSRoutines, IgnoreAllLocks)
ErrorMsg = ''
If TableName NE '' AND KeyID NE '' AND ColumnNo NE '' then If TableName NE '' AND KeyID NE '' AND ColumnNo NE '' then
If ( Num(ColumnNo) and (ColumnNo GT 0) ) then If ( Num(ColumnNo) and (ColumnNo GT 0) ) then
@ -1010,13 +1002,7 @@ Service WriteDataColumn(TableName, KeyID, ColumnNo, Value, IgnoreSelfLock, Ignor
end end
end end
If IgnoreAllLocks EQ False$ then If IgnoreAllLocks EQ False$ then
If Error_Services('HasError') then
ErrorMsg = Error_Services('GetMessage')
end
Database_Services('ReleaseKeyIDLock', TableName, KeyID) Database_Services('ReleaseKeyIDLock', TableName, KeyID)
If ErrorMsg NE '' then
Error_Services('Add', ErrorMsg)
end
end end
end else end else
Error_Services('Add', 'Unable to lock ' : KeyID : ' for the ' : TableName : ' table in the ' : Service : ' service.') Error_Services('Add', 'Unable to lock ' : KeyID : ' for the ' : TableName : ' table in the ' : Service : ' service.')

View File

@ -220,17 +220,10 @@ Service GetWeekNum(InputDate)
end service end service
Service ConvertDateTimeToISO8601(DatetimeToConv) Service ConvertDateTimeToISO8601(DatetimeToConv)
Response = OConv(DatetimeToConv, "[SRP_DATETIME,()YYYY-MM-DD'T'hh:mm:ss.000Z]") Response = OConv(DatetimeToConv, "[SRP_DATETIME,()YYYY-MM-DD hh:mm:ss.000Z]")
swap ' ' with 'T' in Response
end service
Service ConvertISO8601ToDateTime(ISO8601Dtm)
Response = IConv(ISO8601Dtm, "[SRP_DATETIME,()YYYY-MM-DD'T'hh:mm:ss.000Z]")
end service end service
@ -240,4 +233,3 @@ end service
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -1,133 +0,0 @@
Function Dearchive_API(@API)
/***********************************************************************************************************************
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 SRP Computer Solutions, Inc.
Name : Dearchive_API
Description : API logic for the Dearchive resource.
Notes : All web APIs should include the API_SETUP insert. This will provide several useful variables:
HTTPMethod - The HTTP Method (Verb) submitted by the client (e.g., GET, POST, etc.)
APIURL - The URL for the API entry point (e.g., api.mysite.com/v1).
FullEndpointURL - The URL submitted by the client, including query params.
FullEndpointURLNoQuery - The URL submitted by the client, excluding query params.
EndpointSegment - The URL endpoint segment.
ParentURL - The URL path preceeding the current endpoint.
CurrentAPI - The name of this stored procedure.
Parameters :
API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
- APIPattern must follow this structure Dearchive[.ID.[<Property>]]
- HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
Examples:
- Dearchive.POST
- Dearchive.ID.PUT
- Dearchive.ID.firstName.GET
Response [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API
services do not rely upon anything being returned in the response. This is what the
various services like SetResponseBody and SetResponseStatus services are for. A response
value is only helpful if the developers want to use it for debug purposes.
History : (Date, Initials, Notes)
10/14/25 xxx Original programmer.
***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler
$insert APP_INSERTS
$insert API_SETUP
$insert HTTP_INSERTS
$Insert IFX_EQUATES
Declare subroutine Service_Services, Logging_Services
Declare function OI_Wizard_Services, Logging_Services, Environment_Services
GoToAPI else
// The specific resource endpoint doesn't have a API handler yet.
HTTP_Services('SetResponseStatus', 204, 'This is a valid endpoint but a web API handler has not yet been created.')
end
Return Response OR ''
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Endpoint Handlers
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
API dearchive.ID.POST
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Archive\DeArchiving'
LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS')
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ArchiveService.csv'
Headers = 'Logging DTM' : @FM : 'Message'
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
LoggingDTM = LogDate : ' ' : LogTime
ErrorMsg = ''
OIWizardID = ''
Cookies = HTTP_Services('GetHTTPCookie')
For each Cookie in Cookies using ';'
Key = Field(Cookie, '=', 1)
If Key EQ 'sessionID' then
OIWizardID = Field(Cookie, '=', 2)
end
Next Cookie
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
If ValidSession then
ArchiveId = EndpointSegment
LogData = ''
LogData<1> = LoggingDTM;
LogData<2> = ArchiveId
LogData<3> = 'Attempting to add de-archival to the process queue.'
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
swap '__' with '*' in ArchiveId
If RowExists('ARCHIVE', ArchiveId) then
Service_Services('PostProcedure', 'ARCHIVE_SERVICES', 'DeArchiveDataFromTxt':SD$:ArchiveId)
If Error_Services('NoError') then
Message = 'Successfully queued data for de-archive.'
LogData = ''
LogData<1> = LoggingDTM;
LogData<2> = ArchiveId
LogData<3> = Message
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
end else
ErrorMsg = 'Error queueing de-archiving.'
LogData = ''
LogData<1> = LoggingDTM;
LogData<2> = ArchiveId
LogData<3> = ErrorMsg
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
end
end else
ErrorMsg = 'Archive record not found in database.'
LogData = ''
LogData<1> = LoggingDTM;
LogData<2> = ArchiveId
LogData<3> = ErrorMsg
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
end
If ErrorMsg NE '' then
HTTP_Services('SetResponseStatus', 500, ErrorMsg)
end else
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
If Assigned(Message) then
HTTP_Services('SetResponseStatus', 201, Message)
end else
HTTP_Services('SetResponseStatus', 201)
end
end
end else
HTTP_Services('SetResponseStatus', 500, 'Invalid session. Reauthentication required.')
end
end api

View File

@ -1,30 +0,0 @@
Compile function Delete_LOT_EVENT_Record_From_SQL(Connection, Key, Record)
/*****************************************************************************\
Deletes the given LOT_EVENT record from the MSSQL database.
History
-------
08/15/2025 DJS Original Programmer
\*****************************************************************************/
Declare function SQL_Delete, SQL_Format
Ans = ""
// List of key names and their values
Keys = "LOT_EVENT_ID":@VM:SQL_Format(Key, "STR")
//-------------------------------------------------------------------------------------------------
// Multi-valued Fields
!! Delete records from MV tables first !!
// Currently no multi-value (child) tables
// LOT_EVENT
If Ans EQ "" then
Ans = SQL_Delete(Connection, "LOT_EVENT", Keys)
end
Return Ans

View File

@ -1,30 +0,0 @@
Compile function Delete_LOT_EVENT_TYPE_Record_From_SQL(Connection, Key, Record)
/*****************************************************************************\
Deletes the given LOT_EVENT_TYPE record from the MSSQL database.
History
-------
08/15/2025 DJS Original Programmer
\*****************************************************************************/
Declare function SQL_Delete, SQL_Format
Ans = ""
// List of key names and their values
Keys = "LOT_EVENT_TYPE_ID":@VM:SQL_Format(Key, "STR")
//-------------------------------------------------------------------------------------------------
// Multi-valued Fields
!! Delete records from MV tables first !!
// Currently no multi-value (child) tables
// LOT_EVENT_TYPE
If Ans EQ "" then
Ans = SQL_Delete(Connection, "LOT_EVENT_TYPE", Keys)
end
Return Ans

View File

@ -1,30 +0,0 @@
Compile function Delete_LOT_OPERATION_Record_From_SQL(Connection, Key, Record)
/*****************************************************************************\
Deletes the given LOT_OPERATION record from the MSSQL database.
History
-------
08/15/2025 DJS Original Programmer
\*****************************************************************************/
Declare function SQL_Delete, SQL_Format
Ans = ""
// List of key names and their values
Keys = "LOT_OPERATION_ID":@VM:SQL_Format(Key, "STR")
//-------------------------------------------------------------------------------------------------
// Multi-valued Fields
!! Delete records from MV tables first !!
// Currently no multi-value (child) tables
// LOT_OPERATION
If Ans EQ "" then
Ans = SQL_Delete(Connection, "LOT_OPERATION", Keys)
end
Return Ans

View File

@ -1,30 +0,0 @@
Compile function Delete_LOT_Record_From_SQL(Connection, Key, Record)
/*****************************************************************************\
Deletes the given LOT record from the MSSQL database.
History
-------
08/15/2025 DJS Original Programmer
\*****************************************************************************/
Declare function SQL_Delete, SQL_Format
Ans = ""
// List of key names and their values
Keys = "LOT_ID":@VM:SQL_Format(Key, "STR")
//-------------------------------------------------------------------------------------------------
// Multi-valued Fields
!! Delete records from MV tables first !!
// Currently no multi-value (child) tables
// LOT
If Ans EQ "" then
Ans = SQL_Delete(Connection, "LOT", Keys)
end
Return Ans

View File

@ -1,30 +0,0 @@
Compile function Delete_OPERATION_Record_From_SQL(Connection, Key, Record)
/*****************************************************************************\
Deletes the given OPERATION record from the MSSQL database.
History
-------
08/15/2025 DJS Original Programmer
\*****************************************************************************/
Declare function SQL_Delete, SQL_Format
Ans = ""
// List of key names and their values
Keys = "OPERATION_ID":@VM:SQL_Format(Key, "STR")
//-------------------------------------------------------------------------------------------------
// Multi-valued Fields
!! Delete records from MV tables first !!
// Currently no multi-value (child) tables
// OPERATION
If Ans EQ "" then
Ans = SQL_Delete(Connection, "OPERATION", Keys)
end
Return Ans

View File

@ -1,30 +0,0 @@
Compile function Delete_Test_Wafer_Prod_Record_From_SQL(Connection, Key, Record)
/*****************************************************************************\
Deletes the given TEST_WAFER_PROD (to be renamed PRODUCT) record from the MSSQL database.
History
-------
09/10/2025 DJS Original Programmer
\*****************************************************************************/
Declare function SQL_Delete, SQL_Format
Ans = ""
// List of key names and their values
Keys = "PRODUCT_ID":@VM:SQL_Format(Key, "STR")
//-------------------------------------------------------------------------------------------------
// Multi-valued Fields
!! Delete records from MV tables first !!
// Currently no multi-value (child) tables
// OPERATION
If Ans EQ "" then
Ans = SQL_Delete(Connection, "PRODUCT", Keys)
end
Return Ans

View File

@ -1,109 +0,0 @@
Compile function Dialog_Response_Log_Services(@Service, @Params)
#pragma precomp SRP_PreCompiler
$Insert LOGICAL
$Insert SERVICE_SETUP
$Insert DIALOG_RESPONSE_LOG_EQUATES
Declare function RTI_CreateGUID, Error_Services, Datetime, Environment_Services, Logging_Services
Declare subroutine Database_Services, Error_Services, Logging_Services
Options ENTITY_TYPES = 'RDS', 'REACTOR', 'WM_OUT', 'WM_IN'
Options RESPONSE_TYPES = 'OVERRIDE', 'METROLOGY', 'TEST_WAFER', 'HTR_LAST_BOX_TW'
GoToService
Return Response or ""
//-----------------------------------------------------------------------------
// SERVICES
//-----------------------------------------------------------------------------
Service AddDialogResponseLog(EntityId, EntityType=ENTITY_TYPES, UserId, ResponseType=RESPONSE_TYPES, Data)
ErrorMsg = ''
NewDialogResponseLogId = ''
ResponseDtm = Datetime()
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\DialogResponseLog'
LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS')
LoggingDTM = LogDate : ' ' : LogTime
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' DialogResponseLogCreation.csv'
Headers = 'Logging DTM' : @FM : 'Key Id' : @FM : 'Response Dtm' : @FM : 'Entity Id' : @FM : 'Entity Type' : @FM : 'User Id' : @FM : 'Response Type' : @FM : 'Data' : @FM : 'Creation Message'
objAddLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
If EntityId NE '' then
If EntityType NE '' then
If RowExists(EntityType, EntityId) then
If UserId NE '' then
If RowExists('LSL_USERS', UserId) then
If ResponseType NE '' then
If Data NE '' then
NewDialogResponseLogId = RTI_CreateGUID()
If NewDialogResponseLogId NE '' then
NewDialogResponseLogRec = ''
NewDialogResponseLogRec<DIALOG_RESPONSE_LOG_RESPONSE_DTM$> = ResponseDtm
NewDialogResponseLogRec<DIALOG_RESPONSE_LOG_ENTITY_ID$> = EntityId
NewDialogResponseLogRec<DIALOG_RESPONSE_LOG_ENTITY_TYPE$> = EntityType
NewDialogResponseLogRec<DIALOG_RESPONSE_LOG_USER_ID$> = UserId
NewDialogResponseLogRec<DIALOG_RESPONSE_LOG_DIALOG_TYPE$> = ResponseType
NewDialogResponseLogRec<DIALOG_RESPONSE_LOG_DATA$> = Data
Database_Services('WriteDataRow', 'DIALOG_RESPONSE_LOG', NewDialogResponseLogId, NewDialogResponseLogRec)
If Error_Services('HasError') then
ErrorMsg = Error_Services('GetMessage')
end
end else
ErrorMsg = 'Error generating a new key ID.'
end
end else
ErrorMsg = 'Data was null.'
end
end else
ErrorMsg = 'Response Type was null.'
end
end else
ErrorMsg = 'Invalid user id.'
end
end else
ErrorMsg = 'User Id was null.'
end
end else
ErrorMsg = 'Entity Id and Entity Type was not a valid data type.'
end
end else
ErrorMsg = 'Entity Type was null.'
end
end else
ErrorMsg = 'Entity Id was null.'
end
If ErrorMsg EQ '' then
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = NewDialogResponseLogId
LogData<3> = OConv(ResponseDtm, 'DT')
LogData<4> = EntityId
LogData<5> = EntityType
LogData<6> = UserId
LogData<7> = ResponseType
LogData<8> = Data
LogData<9> = 'Success'
Logging_Services('AppendLog', objAddLog, LogData, @RM, @FM, False$)
end else
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = NewDialogResponseLogId
LogData<3> = OConv(ResponseDtm, 'DT')
LogData<4> = EntityId
LogData<5> = EntityType
LogData<6> = UserId
LogData<7> = ResponseType
LogData<8> = Data
LogData<9> = ErrorMsg
Logging_Services('AppendLog', objAddLog, LogData, @RM, @FM, False$)
Error_Services('Set', ErrorMsg)
end
End Service

View File

@ -80,15 +80,14 @@ Service GetServer()
end service end service
Service IsProd() Service IsProd()
Machine = Environment_Services('GetServer') Machine = Environment_Services('GetServer')
IsProd = False$ IsProd = False$
If Machine _NEC "messa012" and Machine _NEC "mestsa01ec" and Machine _NEC "mestsa09ec" and Machine _NEC "mestsa010ec" and Machine _NEC "mestsa011ec" and Machine _NEC "mestsa012ec" and Machine _NEC "mestsa024ec" and Machine _NEC "MESTST1010" and Machine _NEC "MESTST1009" then If Machine _NEC "messa012" and Machine _NEC "mestsa01ec" and Machine _NEC "mestsa09ec" and Machine _NEC "mestsa010ec" and Machine _NEC "mestsa011ec" and Machine _NEC "mestsa012ec" and Machine _NEC "MESTST1010" and Machine _NEC "MESTST1009" then
IsProd = True$ IsProd = True$
end end
Response = IsProd Response = IsProd
end service end service
@ -118,13 +117,12 @@ Service GetApplicationRootIP()
Machine = Environment_Services('GetServer') Machine = Environment_Services('GetServer')
Begin Case Begin Case
Case Machine EQ 'MESSA005' ; ApplicationRootIP = '\\messa005.infineon.com' Case Machine EQ 'MESSA005' ; ApplicationRootIP = '\\messa005.infineon.com'
Case Machine EQ 'MESTSA01EC' ; ApplicationRootIP = '\\10.95.140.13' Case Machine EQ 'MESTSA01EC' ; ApplicationRootIP = '\\10.95.140.13'
Case Machine EQ 'MESTSA09EC' ; ApplicationRootIP = '\\10.95.140.62' Case Machine EQ 'MESTSA09EC' ; ApplicationRootIP = '\\10.95.140.62'
Case Machine EQ 'MESTSA010EC' ; ApplicationRootIP = '\\10.95.140.63' Case Machine EQ 'MESTSA010EC' ; ApplicationRootIP = '\\10.95.140.63'
Case Machine EQ 'MESTSA011EC' ; ApplicationRootIP = '\\10.95.140.64' Case Machine EQ 'MESTSA011EC' ; ApplicationRootIP = '\\10.95.140.64'
Case Machine EQ 'MESTSA012EC' ; ApplicationRootIP = '\\10.95.140.65' Case Machine EQ 'MESTSA012EC' ; ApplicationRootIP = '\\10.95.140.65'
Case Machine EQ 'MESTSA024EC' ; ApplicationRootIP = '\\10.95.140.66'
Case Machine EQ 'MESSA012' ; ApplicationRootIP = '\\10.95.176.50' Case Machine EQ 'MESSA012' ; ApplicationRootIP = '\\10.95.176.50'
Case Machine EQ 'MESST5201' ; ApplicationRootIP = '\\10.95.140.14' Case Machine EQ 'MESST5201' ; ApplicationRootIP = '\\10.95.140.14'
Case Machine EQ 'MESST5202' ; ApplicationRootIP = '\\10.95.140.14' Case Machine EQ 'MESST5202' ; ApplicationRootIP = '\\10.95.140.14'
@ -208,15 +206,15 @@ end service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service GetSpcFilesharePath() Service GetSpcFilesharePath()
IsProd = Environment_Services("IsProd") IsProd = Environment_Services("IsProd")
If IsProd EQ True$ then If IsProd EQ True$ then
Response = '\\mesfs.infineon.com\EC_SPC_Si_Import\TXT' Response = '\\mesfs.infineon.com\EC_SPC_Si_Import\TXT'
end else end else
Path = Environment_Services('GetApplicationRootPath'):'\SPC_Data' Path = Environment_Services('GetApplicationRootPath'):'\SPC_Data'
MakeDirSuccess = Utility("MAKEDIR", Path) MakeDirSuccess = Utility("MAKEDIR", Path)
Response = Path Response = Path
end end
end service end service
@ -228,15 +226,15 @@ end service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service GetSPCDataPath() Service GetSPCDataPath()
IsProd = Environment_Services("IsProd") IsProd = Environment_Services("IsProd")
If IsProd EQ True$ then If IsProd EQ True$ then
Response = '\\messa04ec.infineon.com\OI_SPC_Data_Transfer' Response = '\\messa04ec.infineon.com\OI_SPC_Data_Transfer'
end else end else
Path = Environment_Services('GetApplicationRootPath'):'\SPC_Data' Path = Environment_Services('GetApplicationRootPath'):'\SPC_Data'
MakeDirSuccess = Utility("MAKEDIR", Path) MakeDirSuccess = Utility("MAKEDIR", Path)
Response = Path Response = Path
end end
end service end service
@ -280,27 +278,6 @@ Service GetMetrologyProductionPath()
end service end service
//----------------------------------------------------------------------------------------------------------------------
// GetOIWizardBaseUrl
//
// Returns the OIWizardBaseUrl.
//----------------------------------------------------------------------------------------------------------------------
Service GetOIWizardBaseUrl()
Machine = Environment_Services('GetServer')
Begin Case
Case ( (Machine _EQC 'MESTSA01EC') or (Machine _EQC 'MESTST1009') or (Machine _EQC 'MESTST1010') )
Response = 'https://mestsa008.infineon.com:50186/'
// Uncomment this case and add your hostname if testing locally.
//Case ( (Machine EQ 'ISCN5CG2430JV1') or (Machine _EQC 'MESTSA09EC') )
// Response = 'http://localhost:12009/'
Case Otherwise$
Response = 'https://messa014.infineon.com:50184/'
End Case
end service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
// GetControlPlanProductionPath // GetControlPlanProductionPath
// //
@ -344,11 +321,10 @@ Service GetLocalRootPath()
Case Machine EQ 'MESSA012' ; LocalRootPath = 'D:' Case Machine EQ 'MESSA012' ; LocalRootPath = 'D:'
Case Machine EQ 'MESSA01EC' ; LocalRootPath = 'D:' Case Machine EQ 'MESSA01EC' ; LocalRootPath = 'D:'
Case Machine EQ 'MESTSA01EC' ; LocalRootPath = 'D:' Case Machine EQ 'MESTSA01EC' ; LocalRootPath = 'D:'
Case Machine EQ 'MESTSA09EC' ; LocalRootPath = 'D:' Case Machine EQ 'MESTSA09EC' ; LocalRootPath = 'D:'
Case Machine EQ 'MESTSA010EC' ; LocalRootPath = 'D:' Case Machine EQ 'MESTSA010EC' ; LocalRootPath = 'D:'
Case Machine EQ 'MESTSA011EC' ; LocalRootPath = 'D:' Case Machine EQ 'MESTSA011EC' ; LocalRootPath = 'D:'
Case Machine EQ 'MESTSA012EC' ; LocalRootPath = 'D:' Case Machine EQ 'MESTSA012EC' ; LocalRootPath = 'D:'
Case Machine EQ 'MESTSA024EC' ; LocalRootPath = 'D:'
Case Machine EQ 'MESST6501' ; LocalRootPath = 'C:' ; // This is a map to the user's actual C drive. Case Machine EQ 'MESST6501' ; LocalRootPath = 'C:' ; // This is a map to the user's actual C drive.
Case Machine EQ 'MESST6502' ; LocalRootPath = 'C:' ; // This is a map to the user's actual C drive. Case Machine EQ 'MESST6502' ; LocalRootPath = 'C:' ; // This is a map to the user's actual C drive.
Case Machine EQ 'MESTST1006' ; LocalRootPath = 'C:' ; // This is a map to the user's actual C drive. Case Machine EQ 'MESTST1006' ; LocalRootPath = 'C:' ; // This is a map to the user's actual C drive.
@ -478,19 +454,19 @@ end service
Service GetSQLScrapeConnectionString() Service GetSQLScrapeConnectionString()
Machine = Environment_Services('GetServer') Machine = Environment_Services('GetServer')
Begin Case Begin Case
Case Machine = 'MESSA01EC' Case Machine = 'MESSA01EC'
// PROD SQL Servers // PROD SQL Servers
ConnectionString = 'Provider=MSOLEDBSQL.1;Password=0okm9ijn;Persist Security Info=True;User ID=srpadmin;Initial Catalog=LSL2SQL;Data Source=MESSQLEC1.infineon.com\PROD1,53959;Initial File Name="";Trust Server Certificate=True;Server SPN="";Authentication="";Access Token=""' ConnectionString = 'Provider=MSOLEDBSQL.1;Password=0okm9ijn;Persist Security Info=True;User ID=srpadmin;Initial Catalog=LSL2SQL;Data Source=MESSQLEC1.infineon.com\PROD1,53959;Initial File Name="";Trust Server Certificate=True;Server SPN="";Authentication="";Access Token=""'
Case ( (Machine = 'MESTSA01EC') or (Machine = 'MESTSA09EC') or (Machine = 'MESTSA010EC') or (Machine = 'MESTSA011EC') or (Machine = 'MESTSA012EC') ) Case ( (Machine = 'MESTSA01EC') or (Machine = 'MESTSA09EC') or (Machine = 'MESTSA010EC') or (Machine = 'MESTSA011EC') or (Machine = 'MESTSA012EC') )
// DEV SQL Servers // DEV SQL Servers
ConnectionString = 'Provider=MSOLEDBSQL.1;Password=Fisql2023!;Persist Security Info=True;User ID=fisql;Initial Catalog=LSL2SQL;Data Source=10.95.140.27\TEST1,50572;Initial File Name="";Trust Server Certificate=True;Server SPN="";Authentication="";Access Token=""' ConnectionString = 'Provider=MSOLEDBSQL.1;Password=Fisql2023!;Persist Security Info=True;User ID=fisql;Initial Catalog=LSL2SQL;Data Source=10.95.140.27\TEST1,50572;Initial File Name="";Trust Server Certificate=True;Server SPN="";Authentication="";Access Token=""'
Case Otherwise$ Case Otherwise$
// Default to DEV SQL Servers just in case // Default to DEV SQL Servers just in case
ConnectionString = 'Provider=MSOLEDBSQL.1;Password=Fisql2023!;Persist Security Info=True;User ID=fisql;Initial Catalog=LSL2SQL;Data Source=10.95.140.27\TEST1,50572;Initial File Name="";Trust Server Certificate=True;Server SPN="";Authentication="";Access Token=""' ConnectionString = 'Provider=MSOLEDBSQL.1;Password=Fisql2023!;Persist Security Info=True;User ID=fisql;Initial Catalog=LSL2SQL;Data Source=10.95.140.27\TEST1,50572;Initial File Name="";Trust Server Certificate=True;Server SPN="";Authentication="";Access Token=""'
End Case End Case
Response = ConnectionString Response = ConnectionString
end service end service
@ -515,65 +491,65 @@ end service
Service GetTempPath() Service GetTempPath()
TempDirectory = Str(\00\, 1024) TempDirectory = Str(\00\, 1024)
GetTempPath(Len(TempDirectory), TempDirectory) GetTempPath(Len(TempDirectory), TempDirectory)
Convert \00\ to '' in TempDirectory Convert \00\ to '' in TempDirectory
Response = TempDirectory Response = TempDirectory
end service end service
Service GetMonaResource() Service GetMonaResource()
If Environment_Services("IsProd") then If Environment_Services("IsProd") then
Response = "OPENINSIGHT_MES_OP_FE" Response = "OPENINSIGHT_MES_OP_FE"
end else end else
Response = "OPENINSIGHT_MES_OP_FE_DEV" Response = "OPENINSIGHT_MES_OP_FE_DEV"
end end
end service end service
Service GetMonInBufferedWorkerApiUrl() Service GetMonInBufferedWorkerApiUrl()
If Environment_Services("IsProd") then If Environment_Services("IsProd") then
Response = "https://messa014.infineon.com:7851" Response = "https://messa014.infineon.com:7851"
end else end else
Response = "https://mestsa008.infineon.com:7851" Response = "https://mestsa008.infineon.com:7851"
end end
end service end service
Service GetProveInApiUrl() Service GetProveInApiUrl()
If Environment_Services("IsProd") then If Environment_Services("IsProd") then
Response = "https://messa014.infineon.com:8851" Response = "https://messa014.infineon.com:8851"
end else end else
Response = "https://mestsa008.infineon.com:8851" Response = "https://mestsa008.infineon.com:8851"
end end
end service end service
Service GetIfxEmailServer() Service GetIfxEmailServer()
Response = 'smtp.intra.infineon.com' Response = 'smtp.intra.infineon.com'
end service end service
Service GetEnvironmentVariable(VariableName) Service GetEnvironmentVariable(VariableName)
If VariableName NE '' then If VariableName NE '' then
VarLength = GetEnvironmentVariable(VariableName, "", 0) + 1 VarLength = GetEnvironmentVariable(VariableName, "", 0) + 1
VarValue = space(VarLength+1) VarValue = space(VarLength+1)
VarLength = GetEnvironmentVariable(VariableName, VarValue, VarLength) VarLength = GetEnvironmentVariable(VariableName, VarValue, VarLength)
VarValue = VarValue[1, VarLength] VarValue = VarValue[1, VarLength]
Response = VarValue Response = VarValue
end else end else
Error_Services('Add', 'Error in service ':Service:'. Null VariableName passed in') Error_Services('Add', 'Error in service ':Service:'. Null VariableName passed in')
end end
end service end service
@ -601,28 +577,7 @@ Service GetScrapeServerPort()
end service end service
Service GetTextDataBackupRootDir()
Machine = Environment_Services('GetServer')
DataBackupDir = ''
Begin Case
Case Machine = 'MESSA01EC'
// PROD SQL Servers
DataBackupDir = '\\MESFS.INFINEON.COM\MES_OpenInsight_Backups\DataBackups\'
Case ( (Machine = 'MESTSA01EC') or (Machine = 'MESTSA09EC') or (Machine = 'MESTSA010EC') or (Machine = 'MESTSA011EC') or (Machine = 'MESTSA012EC') )
// DEV SQL Servers
DataBackupDir = 'd:\MES_OpenInsight_Backups\DataBackups\'
Case Otherwise$
// Default to DEV SQL Servers just in case
DataBackupDir = 'd:\MES_OpenInsight_Backups\DataBackups\'
End Case
Response = DataBackupDir
end service
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs // Internal GoSubs
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -46,19 +46,19 @@ Compile function Hold_Services(@Service, @Params)
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$insert LOGICAL
$Insert APP_INSERTS
$Insert SERVICE_SETUP $Insert SERVICE_SETUP
$Insert MSG_EQUATES $Insert MSG_EQUATES
$Insert DICT_EQUATES $Insert DICT_EQUATES
$Insert WO_MAT_EQUATES $Insert WO_MAT_EQUATES
$Insert NOTIFICATION_EQU $INSERT NOTIFICATION_EQU
Declare function Database_Services, Error_Services, Obj_Wm_In, Obj_Wm_Out, Unassigned, Wm_In_Services, Wm_Out_Services Declare function Database_Services, Error_Services, Obj_Wm_In, Obj_Wm_Out, Unassigned, Wm_In_Services, Wm_Out_Services
Declare function PSN_Services, SRP_Rotate_Array, Datetime, Hold_Services, Memberof, Error_Services, Rds_Services Declare function PSN_Services, SRP_Rotate_Array, Datetime, Hold_Services, Memberof, Error_Services, Rds_Services
Declare function Environment_Services, Utility, Logging_Services
Declare subroutine Database_Services, Error_Services, Obj_notes, Hold_Services, Obj_Wm_In, Obj_Wm_Out, Wm_In_Services Declare subroutine Database_Services, Error_Services, Obj_notes, Hold_Services, Obj_Wm_In, Obj_Wm_Out, Wm_In_Services
Declare subroutine Wm_Out_Services, Rds_Services, Lot_Event_Services, Logging_Services Declare subroutine Wm_Out_Services, Rds_Services, Lot_Event_Services
GoToService else GoToService else
Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' module.') Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' module.')
@ -361,42 +361,29 @@ Service OnHold(WOMatKey, HoldEntity, HoldEntityID, HoldType, HoldData, OperatorI
If Error_Services("NoError") then If Error_Services("NoError") then
Hold_Services("HoldNotification", HoldEntity, HoldEntityID, Reason, True$, HoldType, OperatorID) Hold_Services("HoldNotification", HoldEntity, HoldEntityID, Reason, True$, HoldType, OperatorID)
Hold_Services("CreateComment", HoldEntity, HoldEntityID, Reason, True$, HoldType, OperatorID) Hold_Services("CreateComment", HoldEntity, HoldEntityID, Reason, True$, HoldType, OperatorID)
LotKey = '' //Add in logging lot event
If UserId EQ '' then
UserId = OperatorId
end
Begin Case Begin Case
Case HoldEntity EQ 'WM_IN' Case HoldEntity EQ 'WM_IN'
WONo = Field(WOMatKey, '*', 1) WONo = Field(WOMatKey, '*', 1)
StepNo = 1 StepNo = 1
CassNo = Field(WOMatKey, '*', 2) CassNo = Field(WOMatKey, '*', 2)
WMInKey = WONo : '*' : StepNo : '*' : CassNo WMInKey = WONo : '*' : StepNo : '*' : CassNo
LotKey = 'I':WMInKey Lot_Event_Services('CreateLotEvent', WMInKey, CurrDTM, 'HOLD_ON', 'Lot placed on hold.', '', UserId, True$, 'WM_IN')
Convert '*' to '.' in LotKey
Case HoldEntity EQ 'WM_OUT' Case HoldEntity EQ 'WM_OUT'
WONo = Field(WOMatKey, '*', 1) WONo = Field(WOMatKey, '*', 1)
StepNo = 1 StepNo = 1
CassNo = Field(WOMatKey, '*', 2) CassNo = Field(WOMatKey, '*', 2)
WMOutKey = WONo : '*' : StepNo : '*' : CassNo WMOutKey = WONo : '*' : StepNo : '*' : CassNo
LotKey = 'O':WMOutKey Lot_Event_Services('CreateLotEvent', WMOutKey, CurrDTM, 'HOLD_ON', 'Lot placed on hold.', '', UserId, True$, 'WM_OUT')
Convert '*' to '.' in LotKey
Case HoldEntity EQ 'RDS' Case HoldEntity EQ 'RDS'
RDSNo = Xlate('WO_MAT', WOMatKey, WO_MAT_RDS_NO$, 'X') RDSNo = Xlate('WO_MAT', WOMatKey, WO_MAT_RDS_NO$, 'X')
LotKey = 'R':RDSNo Lot_Event_Services('CreateLotEvent', RDSNo, CurrDTM, 'HOLD_ON', 'Lot placed on hold.', '', UserId, True$, 'RDS')
Convert '*' to '.' in LotKey
Case HoldEntity EQ 'WO_MAT' Case HoldEntity EQ 'WO_MAT'
LotKey = 'W':WOMatKey Lot_Event_Services('CreateLotEvent', WOMatKey, CurrDTM, 'HOLD_ON', 'Lot placed on hold.', '', UserId, True$, 'WO_MAT')
Convert '*' to '.' in LotKey
End Case End Case
Machine = Environment_Services('GetServer')
Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log'
ColumnWidths = 20 : @FM : 15 : @FM : 300
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Lot'
makeDirSuccess = Utility("MAKEDIR", LogPath)
LogFileName = LotKey:'.csv'
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, ColumnWidths, False$, False$)
LogData = ''
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
LogData<2> = Machine
LogData<3> = 'Lot ':LotKey:' of type ':HoldEntity:' placed on hold by user ':OperatorId
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
end end
end else end else
Error_Services('Add', 'Lot is already on hold.') Error_Services('Add', 'Lot is already on hold.')
@ -510,43 +497,29 @@ Service OffHold(WOMatKey, HoldEntity, HoldEntityID, HoldType, HoldData, Operator
If Error_Services("NoError") then If Error_Services("NoError") then
Hold_Services("HoldNotification", HoldEntity, HoldEntityID, Reason, False$, HoldType, OperatorID) Hold_Services("HoldNotification", HoldEntity, HoldEntityID, Reason, False$, HoldType, OperatorID)
Hold_Services("CreateComment", HoldEntity, HoldEntityID, Reason, False$, HoldType, OperatorID) Hold_Services("CreateComment", HoldEntity, HoldEntityID, Reason, False$, HoldType, OperatorID)
LotKey = '' //Add in logging lot event
Begin Case if UserID EQ '' then
Case HoldEntity EQ 'WM_IN' UserId = OperatorId
WONo = Field(WOMatKey, '*', 1) end
StepNo = 1 Begin Case
CassNo = Field(WOMatKey, '*', 2) Case HoldEntity EQ 'WM_IN'
WMInKey = WONo : '*' : StepNo : '*' : CassNo WONo = Field(WOMatKey, '*', 1)
LotKey = 'I':WMInKey StepNo = 1
Convert '*' to '.' in LotKey CassNo = Field(WOMatKey, '*', 2)
Case HoldEntity EQ 'WM_OUT' WMInKey = WONo : '*' : StepNo : '*' : CassNo
WONo = Field(WOMatKey, '*', 1) Lot_Event_Services('CreateLotEvent', WMInKey, CurrDTM, 'HOLD_OFF', 'Lot taken off hold.', '', UserId, True$, 'WM_IN')
StepNo = 1 Case HoldEntity EQ 'WM_OUT'
CassNo = Field(WOMatKey, '*', 2) WONo = Field(WOMatKey, '*', 1)
WMOutKey = WONo : '*' : StepNo : '*' : CassNo StepNo = 1
LotKey = 'O':WMOutKey CassNo = Field(WOMatKey, '*', 2)
Convert '*' to '.' in LotKey WMOutKey = WONo : '*' : StepNo : '*' : CassNo
Case HoldEntity EQ 'RDS' Lot_Event_Services('CreateLotEvent', WMOutKey, CurrDTM, 'HOLD_OFF', 'Lot taken off hold.', '', UserId, True$, 'WM_OUT')
RDSNo = Xlate('WO_MAT', WOMatKey, WO_MAT_RDS_NO$, 'X') Case HoldEntity EQ 'RDS'
LotKey = 'R':RDSNo RDSNo = Xlate('WO_MAT', WOMatKey, WO_MAT_RDS_NO$, 'X')
Case HoldEntity EQ 'WO_MAT' Lot_Event_Services('CreateLotEvent', RDSNo, CurrDTM, 'HOLD_OFF', 'Lot taken off hold.', '', UserId, True$, 'RDS')
LotKey = WOMatKey Case HoldEntity EQ 'WO_MAT'
Convert '*' to '.' in LotKey Lot_Event_Services('CreateLotEvent', WOMatKey, CurrDTM, 'HOLD_OFF', 'Lot taken off hold.', '', UserId, True$, 'WO_MAT')
End Case End Case
Machine = Environment_Services('GetServer')
Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log'
ColumnWidths = 20 : @FM : 15 : @FM : 300
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Lot'
makeDirSuccess = Utility("MAKEDIR", LogPath)
LogFileName = LotKey:'.csv'
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, ColumnWidths, False$, False$)
LogData = ''
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
LogData<2> = Machine
LogData<3> = 'Lot ':LotKey:' of type ':HoldEntity:' taken off hold by user ':OperatorId
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
end end
end else end else
Error_Services('Add', 'Lot is not on hold.') Error_Services('Add', 'Lot is not on hold.')

View File

@ -425,38 +425,6 @@ Service PrintReactorLabel(ReactNo, LoadLockSide=LOAD_LOCK_SIDE)
end service end service
Service GetReactorLabelZPL(ReactNo, LoadLockSide=LOAD_LOCK_SIDE)
If ( (ReactNo NE '') and (LoadLockSide NE '') ) then
BaseZpl = '^XA^MD30^PR1^LH10,10^FO35,5^BY2^B3N,,80,N^FD10SR{ReactNo}.{LoadLockSidePrefix}^FS^FO10,105^A045,90^FB400,1,,C^FDR{ReactNo} {LoadLockSide}^FS^XZ'
Convert 'R' to '' in ReactNo
If LoadLockSide _EQC 'Both' then
LoadLockSidePrefix = 'L'
ZplLeft = BaseZpl
Swap '{ReactNo}' with ReactNo in ZplLeft
Swap '{LoadLockSidePrefix}' with LoadLockSidePrefix in ZplLeft
Swap '{LoadLockSide}' with 'Left' in ZplLeft
ZplRight = BaseZpl
LoadLockSidePrefix = 'R'
Swap '{ReactNo}' with ReactNo in ZplRight
Swap '{LoadLockSidePrefix}' with LoadLockSidePrefix in ZplRight
Swap '{LoadLockSide}' with 'Right' in ZplRight
Zpl = ZplLeft:ZplRight
end else
LoadLockSidePrefix = LoadLockSide[1, 1]
Zpl = BaseZpl
Swap '{ReactNo}' with ReactNo in Zpl
Swap '{LoadLockSidePrefix}' with LoadLockSidePrefix in Zpl
Swap '{LoadLockSide}' with LoadLockSide in Zpl
end
Response = Zpl
end else
Error_Services('Add', 'Error in ':Service:' service. Null ReactNo or LoadLockSide passed in.')
end
end service
Service GetReturnToFabLabelZPL(RTFId) Service GetReturnToFabLabelZPL(RTFId)
ZPLStringLabel = '' ZPLStringLabel = ''
@ -492,3 +460,5 @@ Service GetReturnToFabLabelZPL(RTFId)
end service end service

View File

@ -111,6 +111,7 @@ API Lock.HEAD
API Lock.POST API Lock.POST
OIWizardID = '' OIWizardID = ''
Cookies = HTTP_Services('GetHTTPCookie') Cookies = HTTP_Services('GetHTTPCookie')
For each Cookie in Cookies using ';' For each Cookie in Cookies using ';'

View File

@ -55,7 +55,7 @@ $Insert LOT_EQUATES
$Insert LOT_OPERATION_EQUATES $Insert LOT_OPERATION_EQUATES
Declare function Error_Services, Logging_Services, Environment_Services, Database_Services, RTI_CreateGUID Declare function Error_Services, Logging_Services, Environment_Services, Database_Services, RTI_CreateGUID
Declare function Lot_Event_Services, Lot_Services, NextKey Declare function Lot_Event_Services, Lot_Services
Declare subroutine Error_Services, Logging_Services, Database_Services, Lot_Services, Service_Services Declare subroutine Error_Services, Logging_Services, Database_Services, Lot_Services, Service_Services
Declare subroutine Transaction_Services Declare subroutine Transaction_Services
@ -89,36 +89,28 @@ Service CreateLotEvent(LotId, EventDateTime, EventType=EVENT_TYPES, EventNote, E
end end
end end
If RowExists('LOT', LotId) then If RowExists('LOT', LotId) then
CurrLotOperation = Lot_Services('GetLotCurrOperationId', LotId)
NewEventId = RTI_CreateGUID() NewEventId = RTI_CreateGUID()
If NewEventId NE '' then If NewEventId NE '' then
NextEventChronId = NextKey('LOT_EVENT') NewEventSequence = Lot_Event_Services('GetLotEventNextSequence', LotId)
If NextEventChronId NE 0 then If Error_Services('NoError') then
NewEventSequence = Lot_Event_Services('GetLotEventNextSequence', LotId) NewEventRec = ''
If Error_Services('NoError') then NewEventRec<LOT_EVENT_LOT_ID$> = LotId
NewEventRec = '' NewEventRec<LOT_EVENT_LOT_EVENT_TYPE$> = EventType
NewEventRec<LOT_EVENT_LOT_ID$> = LotId NewEventRec<LOT_EVENT_EVENT_DATETIME$> = EventDatetime
NewEventRec<LOT_EVENT_LOT_EVENT_TYPE$> = EventType NewEventRec<LOT_EVENT_EVENT_NOTE$> = EventNote
NewEventRec<LOT_EVENT_EVENT_DATETIME$> = EventDatetime NewEventRec<LOT_EVENT_EQUIPMENT_ID$> = EventEquipmentId
NewEventRec<LOT_EVENT_EVENT_NOTE$> = EventNote NewEventRec<LOT_EVENT_EVENT_OPERATOR_ID$> = OperatorId
NewEventRec<LOT_EVENT_EVENT_OPERATION_ID$> = CurrLotOperation NewEventRec<LOT_EVENT_SEQUENCE$> = NewEventSequence
NewEventRec<LOT_EVENT_EQUIPMENT_ID$> = EventEquipmentId Database_Services('WriteDataRow', 'LOT_EVENT', NewEventId, NewEventRec)
NewEventRec<LOT_EVENT_EVENT_OPERATOR_ID$> = OperatorId If Error_Services('NoError') then
NewEventRec<LOT_EVENT_SEQUENCE$> = NewEventSequence Transaction_Services('PostWriteFieldTransaction', 'LOT', LotId, LOT_MOST_RECENT_LOT_EVENT_ID$, NewEventId)
NewEventRec<LOT_EVENT_CHRON_ID$> = NextEventChronId If Error_Services('HasError') then ErrorMessage = Error_Services('GetMessage')
Database_Services('WriteDataRow', 'LOT_EVENT', NewEventId, NewEventRec) end else
If Error_Services('NoError') then ErrorMessage = 'Error creating new event : ' : Error_Services('GetMessage')
Transaction_Services('PostWriteFieldTransaction', 'LOT', LotId, LOT_MOST_RECENT_LOT_EVENT_ID$, NewEventId) end
If Error_Services('HasError') then ErrorMessage = Error_Services('GetMessage') end else
end else ErrorMessage = Error_Services('GetMessage')
ErrorMessage = 'Error creating new event : ' : Error_Services('GetMessage') end
end
end else
ErrorMessage = Error_Services('GetMessage')
end
end else
ErrorMessage = 'Error creating new event. Error calling NextKey("LOT_EVENT") to get LOT_EVENT_CHRON_ID.'
end
end else end else
ErrorMessage = 'Error creating an event Id.' ErrorMessage = 'Error creating an event Id.'
end end
@ -241,5 +233,3 @@ return

View File

@ -53,8 +53,7 @@ Declare function PSN_Services, Return_To_Fab_Services
Declare subroutine Database_Services, Btree.Extract, Lot_Services, Error_Services, Labeling_Services, SRP_Json, Logging_Services Declare subroutine Database_Services, Btree.Extract, Lot_Services, Error_Services, Labeling_Services, SRP_Json, Logging_Services
Declare subroutine SRP_Run_Command, Service_Services, obj_notes, Lot_Event_Services, Mona_Services Declare subroutine SRP_Run_Command, Service_Services, obj_notes, Lot_Event_Services, Mona_Services
$Insert SERVICE_SETUP $insert APP_INSERTS
$Insert APP_INSERTS
$Insert LOT_EQUATES $Insert LOT_EQUATES
$Insert TEST_WAFER_PROD_EQUATES $Insert TEST_WAFER_PROD_EQUATES
$Insert Lot_Operation_Equates $Insert Lot_Operation_Equates
@ -66,7 +65,6 @@ $Insert RDS_EQUATES
$Insert WO_LOG_EQUATES $Insert WO_LOG_EQUATES
$Insert PROD_VER_EQUATES $Insert PROD_VER_EQUATES
$Insert OPERATION_EQUATES $Insert OPERATION_EQUATES
$Insert IFX_EQUATES
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Lot' LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Lot'
LogDate = Oconv(Date(), 'D4/') LogDate = Oconv(Date(), 'D4/')
@ -108,9 +106,7 @@ end else
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_LOTSERVICES' MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_LOTSERVICES'
end end
GoToService else GoToService
Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
end
Return Response or "" Return Response or ""
@ -326,7 +322,7 @@ Service CreateNewLot(LotType, ProdName, LotQty, VendorPartNo, VendorLotNo, Vendo
Lot_Services('OpenLot', CreatedLotNumber) Lot_Services('OpenLot', CreatedLotNumber)
if Error_Services('NoError') then if Error_Services('NoError') then
// Move lot in // Move lot in
Lot_Services('StartLot', CreatedLotNumber, 'SYSTEM') Lot_Services('MoveInLot', CreatedLotNumber, Username)
if Error_Services('NoError') then if Error_Services('NoError') then
If PrinterID NE 'WEB' then If PrinterID NE 'WEB' then
// If PrinterID is set to WEB this means the request comes from OI_Wizard and the client is going to handle printing. // If PrinterID is set to WEB this means the request comes from OI_Wizard and the client is going to handle printing.
@ -792,33 +788,6 @@ Service IsLotMovedIn(LotId)
end service end service
Service IsLastOperation(LotId, LotOperationId)
ErrorMsg = ''
Response = False$
If LotId NE '' then
If LotOperationId NE '' then
AllOpsInSeq = Lot_Services('GetLotOperationSequence', LotId)
if Error_Services('NoError') then
LastLotOperation = AllOpsInSeq[-1, "B":@FM]
If LotOperationId EQ LastLotOperation then Response = True$
end else
ErrorMsg = Error_Services('GetMessage')
end
end else
ErrorMsg = 'LotOperationId was null.'
end
end else
ErrorMsg = 'LotId was null.'
end
If ErrorMsg NE '' then
Error_Services('Add', ErrorMsg)
end
end service
Service IsOperationCompleted(LotOperationId) Service IsOperationCompleted(LotOperationId)
@ -846,14 +815,8 @@ Service StartLot(LotId, Operator)
If RowExists('LOT', LotId) then If RowExists('LOT', LotId) then
Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'LOT_START', 'Lot started.', '', Operator) Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'LOT_START', 'Lot started.', '', Operator)
If Error_Services('NoError') then If Error_Services('NoError') then
CurrOperation = Lot_Services('GetLotCurrOperationName', LotId) Lot_Services('MoveInLot', LotId, Operator)
Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'ARRIVAL', 'Lot arrived at operation ' : CurrOperation : '.', '', Operator) If Error_Services('HasError') then ErrorMessage = Error_Services('GetMessage')
if Error_Services('NoError') then
Lot_Services('MoveInLot', LotId, Operator)
If Error_Services('HasError') then ErrorMessage = Error_Services('GetMessage')
end else
ErrorMessage = Error_Services('GetMessage')
end
end else end else
ErrorMessage = Error_Services('GetMessage') ErrorMessage = Error_Services('GetMessage')
end end
@ -991,7 +954,12 @@ Service MoveInLot(LotID, Operator)
CurrOperation = XLATE('LOT_OPERATION', ThisLotCurrOperationID, LOT_OPERATION_OPERATION_ID$, 'X') CurrOperation = XLATE('LOT_OPERATION', ThisLotCurrOperationID, LOT_OPERATION_OPERATION_ID$, 'X')
If Error_Services('NoError') then If Error_Services('NoError') then
Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'MOVE_IN', 'Lot moved into operation ' : CurrOperation : '.', '', Operator) Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'MOVE_IN', 'Lot moved into operation ' : CurrOperation : '.', '', Operator)
If Error_Services('HasError') then ErrorMessage = Error_Services('GetMessage') If Error_Services('NoError') then
Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'ARRIVAL', 'Lot arrived at operation ' : CurrOperation : '.', '', Operator)
If Error_Services('HasError') then ErrorMessage = Error_Services('GetMessage')
end else
ErrorMessage = Error_Services('GetMessage')
end
end else end else
ErrorMessage = 'Error in Move In process for Lot id ' : LotId : '. ' : Error_Services('GetMessage') ErrorMessage = 'Error in Move In process for Lot id ' : LotId : '. ' : Error_Services('GetMessage')
end end
@ -1046,7 +1014,6 @@ Service MoveOutLot(LotID, Operator)
WaferQty = ThisLotRec<LOT_WAFER_QTY$> WaferQty = ThisLotRec<LOT_WAFER_QTY$>
If Error_Services('NoError') then If Error_Services('NoError') then
ThisLotCurrOperationID = Lot_Services('GetLotCurrOperationId', LotId) ThisLotCurrOperationID = Lot_Services('GetLotCurrOperationId', LotId)
ThisLotCurrOperationName = XLATE('LOT_OPERATION', ThisLotCurrOperationID, LOT_OPERATION_OPERATION_ID$, 'X')
If ThisLotCurrOperationID NE '' then If ThisLotCurrOperationID NE '' then
If Lot_Services('IsLotMovedIn', LotId) then If Lot_Services('IsLotMovedIn', LotId) then
ThisLotCurrOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', ThisLotCurrOperationID) ThisLotCurrOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', ThisLotCurrOperationID)
@ -1058,23 +1025,7 @@ Service MoveOutLot(LotID, Operator)
LotType = XLATE('LOT', LotId, LOT_TYPE$, 'X') LotType = XLATE('LOT', LotId, LOT_TYPE$, 'X')
CurrOperation = XLATE('LOT_OPERATION', ThisLotCurrOperationID, LOT_OPERATION_OPERATION_ID$, 'X') CurrOperation = XLATE('LOT_OPERATION', ThisLotCurrOperationID, LOT_OPERATION_OPERATION_ID$, 'X')
If Error_Services('NoError') then If Error_Services('NoError') then
IsLastLotOp = Lot_Services('IsLastOperation', LotId, ThisLotCurrOperationID) Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'MOVE_OUT', 'Lot moved out of operation ' : CurrOperation : '.', '', Operator)
if Error_Services('NoError') then
Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'MOVE_OUT', 'Lot moved out of operation ' : ThisLotCurrOperationName : '.', '', Operator)
If Error_Services('NoError') then
If Not(IsLastLotOp) then
NewCurrOperation = Lot_Services('GetLotCurrOperationName', LotId)
Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'ARRIVAL', 'Lot arrived at operation ' : NewCurrOperation : '.', '', Operator)
end else
Lot_Services('CloseLot', LotId)
if Error_Services('HasError') then
ErrorMessage = Error_Services('GetMessage')
end
end
end
end else
ErrorMessage = Error_Services('GetMessage')
end
end else end else
ErrorMessage = 'Error in Move In process for Lot id ' : LotId : '. ' : Error_Services('GetMessage') ErrorMessage = 'Error in Move In process for Lot id ' : LotId : '. ' : Error_Services('GetMessage')
end end
@ -1274,7 +1225,9 @@ Service OpenLot(LotId)
LotRec = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$) LotRec = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
LotRec<LOT_OPEN$> = True$ LotRec<LOT_OPEN$> = True$
Database_Services('WriteDataRow', 'LOT', LotId, LotRec, True$, False$, False$) Database_Services('WriteDataRow', 'LOT', LotId, LotRec, True$, False$, False$)
If Error_Services('HasError') then If Error_Services('NoError') then
Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'OPEN', 'Lot status set to Open.', '', 'SYSTEM')
end else
ErrorMessage = 'Error setting lot ' : LotId : ' to open.' : Error_Services('GetMessage') ErrorMessage = 'Error setting lot ' : LotId : ' to open.' : Error_Services('GetMessage')
end end
end else end else
@ -1315,39 +1268,51 @@ Service CloseLot(LotId)
end service end service
Service AutoCloseLot(LotId, CloseUserId) Service AutoCloseTestWaferLot(LotId, CloseUserId)
AutoCloseTime = Datetime() AutoCloseTime = Datetime()
ErrorMessage = '' ErrorMessage = ''
If MemberOf(CloseUserId, 'LEAD') OR MemberOf(CloseUserId, 'SUPERVISOR') OR CloseUserId EQ 'SYSTEM' then If MemberOf(CloseUserId, 'LEAD') OR MemberOf(CloseUserId, 'SUPERVISOR') OR CloseUserId EQ 'SYSTEM' then
LotOperations = Lot_Services('GetLotOperationSequence', LotId) LotOperations = Lot_Services('GetLotOperationSequence', LotId)
for LotOperationIndex = 1 to DCount(LotOperations, @FM) for LotOperationIndex = 1 to DCount(LotOperations, @FM)
Until ErrorMessage NE ''
ThisLotOperationId = LotOperations<LotOperationIndex> ThisLotOperationId = LotOperations<LotOperationIndex>
ThisOperationCompleted = Lot_Services('IsOperationCompleted', ThisLotOperationId) ThisOperationCompleted = Lot_Services('IsOperationCompleted', ThisLotOperationId)
If Error_Services('NoError') then If Error_Services('NoError') then
if Not(ThisOperationCompleted) then if Not(ThisOperationCompleted) then
MovedIn = Lot_Services('IsLotMovedIn', LotId) ThisLotOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', ThisLotOperationId)
If MovedIn then if Error_Services('NoError') then
Lot_Services('MoveOutLot', LotId, CloseUserId) CurrLotQty = Database_Services('ReadDataColumn', 'LOT', LotId, LOT_WAFER_QTY$, True$, 0, False$)
If Error_Services('HasError') then If ThisLotOperationRec<LOT_OPERATION_DATETIME_IN$> EQ '' then
ErrorMessage = Error_Services('GetMessage') ThisLotOperationRec<LOT_OPERATION_DATETIME_IN$> = AutoCloseTime
end else end
ErrorMessage = Error_Services('GetMessage') If ThisLotOperationRec<LOT_OPERATION_DATETIME_OUT$> EQ '' then
end ThisLotOperationRec<LOT_OPERATION_DATETIME_OUT$> = AutoCloseTime
end else end
Lot_Services('MoveInLot', LotId, CloseUserId) if ThisLotOperationRec<LOT_OPERATION_OPERATOR_IN_ID$> EQ '' then
If Error_Services('NoError') then ThisLotOperationRec<LOT_OPERATION_OPERATOR_IN_ID$> = CloseUserId
If Lot_Services('IsLastOperation', LotId, ThisLotOperationId) then end
Lot_Services('MoveOutLot', LotId, CloseUserId) if ThisLotOperationRec<LOT_OPERATION_OPERATOR_OUT_ID$> EQ '' then
If Error_Services('HasError') then ThisLotOperationRec<LOT_OPERATION_OPERATOR_OUT_ID$> = CloseUserId
ErrorMessage = Error_Services('GetMessage') end
end if ThisLotOperationRec<LOT_OPERATION_DATETIME_START$> EQ '' then
end ThisLotOperationRec<LOT_OPERATION_DATETIME_START$> = AutoCloseTime
end else end
ErrorMessage = Error_Services('GetMessage') if ThisLotOperationRec<LOT_OPERATION_DATETIME_STOP$> EQ '' then
end ThisLotOperationRec<LOT_OPERATION_DATETIME_STOP$> = AutoCloseTime
end end
If ThisLotOperationRec<LOT_OPERATION_WAFER_IN_QTY$> EQ '' then
ThisLotOperationRec<LOT_OPERATION_WAFER_IN_QTY$> = CurrLotQty
end
If ThisLotOperationRec<LOT_OPERATION_WAFER_OUT_QTY$> EQ '' then
ThisLotOperationRec<LOT_OPERATION_WAFER_OUT_QTY$> = CurrLotQty
end
Database_Services('WriteDataRow', 'LOT_OPERATION', ThisLotOperationId, ThisLotOperationRec, True$, False$, False$)
If Error_Services('HasError') then
ErrorMessage = Error_Services('GetMessage')
end
end else
ErrorMessage = Error_Services('GetMessage')
end
end end
end else end else
ErrorMessage = Error_Services('GetMessage') ErrorMessage = Error_Services('GetMessage')
@ -1357,12 +1322,31 @@ Service AutoCloseLot(LotId, CloseUserId)
ErrorMessage = CloseUserId : ' does not have permission to close this lot.' ErrorMessage = CloseUserId : ' does not have permission to close this lot.'
end end
If ErrorMessage EQ '' then If ErrorMessage EQ '' then
LogData = '' // Close Lot as there were no validation failures.
LogData<1> = LoggingDTM Lot_Services('CloseLot', LotId)
LogData<2> = LotId If Error_Services('NoError') then
LogData<3> = CloseUserId LogData = ''
LogData<4> = 'Successfully marked lot as closed.' LogData<1> = LoggingDTM
Logging_Services('AppendLog', objLotClosureLog, LogData, @RM, @FM, False$) LogData<2> = LotId
LogData<3> = CloseUserId
LogData<4> = 'Successfully marked lot as closed.'
Logging_Services('AppendLog', objLotClosureLog, LogData, @RM, @FM, False$)
end else
ErrorMessage = Error_Services('GetMessage')
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = LotId
LogData<3> = CloseUserId
LogData<4> = 'Error marking lot as closed.' : ErrorMessage
Logging_Services('AppendLog', objLotClosureLog, LogData, @RM, @FM, False$)
// Send a message to FI
Recipients = Xlate('NOTIFICATION', 'FI_SUPPORT', NOTIFICATION_USER_ID$, 'X')
SentFrom = 'SYSTEM'
Subject = 'TEST WAFER LOT AUTO-CLOSURE FAILURE'
Message = 'Error in ' : service : ' with lot id ' : LotId : ' attempting to set CLOSE flag on lot. ' : ErrorMessage
Obj_Notes('Create',Recipients:@RM:SentFrom:@RM:Subject:@RM:Message)
Error_Services('Add', 'Error in ' : service : ' with lot ' : LotId : ':' : ErrorMessage)
end
end else end else
ErrorMessage = 'Error in ' : service : ' with lot ' : LotId : ':' : ErrorMessage ErrorMessage = 'Error in ' : service : ' with lot ' : LotId : ':' : ErrorMessage
LogData = '' LogData = ''
@ -1425,7 +1409,7 @@ Service ReduceLotWaferCount(LotId, ReductionQty, OperatorId)
// Write Lot Event // Write Lot Event
Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'REDUCE_WAFER_QTY', 'Reduced wafer count by ' : ReductionQty, '', OperatorId, False$, '') Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'REDUCE_WAFER_QTY', 'Reduced wafer count by ' : ReductionQty, '', OperatorId, False$, '')
if LotNewWfrQty EQ 0 AND LotType EQ 'TW' then if LotNewWfrQty EQ 0 AND LotType EQ 'TW' then
ServiceParms = 'AutoCloseLot' : SD$ : LotId : SD$ : 'SYSTEM' ServiceParms = 'AutoCloseTestWaferLot' : @VM : LotId : @VM : 'SYSTEM'
Service_Services('PostProcedure', 'LOT_SERVICES', ServiceParms) Service_Services('PostProcedure', 'LOT_SERVICES', ServiceParms)
If Error_Services('HasError') then If Error_Services('HasError') then
Recipients = Xlate('NOTIFICATION', 'FI_SUPPORT', NOTIFICATION_USER_ID$, 'X') Recipients = Xlate('NOTIFICATION', 'FI_SUPPORT', NOTIFICATION_USER_ID$, 'X')
@ -1481,7 +1465,7 @@ Service IncreaseLotWaferCount(LotId, IncreaseQty, OperatorId)
Database_Services('WriteDataRow', 'LOT', LotId, LotRec, True$, False$, False$) Database_Services('WriteDataRow', 'LOT', LotId, LotRec, True$, False$, False$)
If Error_Services('NoError') then If Error_Services('NoError') then
// Write Lot Event // Write Lot Event
Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'BONUS_WAFER_QTY', 'Increased wafer count by ' : IncreaseQty, '', OperatorId, False$, '') Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'INCREASE_WAFER_QTY', 'Increased wafer count by ' : IncreaseQty, '', OperatorId, False$, '')
end else end else
ErrorMessage = 'Error in Increase Lot Wafer Count service, Error writing Lot Id ' : LotId : ' with new quantity.' ErrorMessage = 'Error in Increase Lot Wafer Count service, Error writing Lot Id ' : LotId : ' with new quantity.'
end end
@ -1596,11 +1580,11 @@ Service CreateNewVoidedLotRecord(LotId, LegacyLotId, LotType=LOT_TYPES, Username
EndTick = GetTickCount() EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick) Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
If ErrorMessage NE '' then Error_Services('Add', ErrorMessage) If ErrorMessage NE '' then Error_Services('Add', ErrorMessage)
end service end service
Service CanUserModifyLot(UserId) Service CanUserModifyLot(UserId)
Begin Case Begin Case
@ -1631,4 +1615,3 @@ end service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------

View File

@ -219,28 +219,6 @@ Service GetOnShiftUsers()
end service end service
Service GetCurrentShiftStartDtm()
CurrDate = SRP_Datetime('Date', Datetime())
ShiftTime = SRP_DateTime('Time', CurrDtm)
ShiftStartDtm = ''
Begin Case
Case ShiftTime GE 21600 AND ShiftTime LT 64800
//Day Shift - Same day @ 6AM
ShiftStartDtm = SRP_Datetime('AddHours', CurrDate, 6)
Case ShiftTime LT 21600
//Morning part of night shift - Prior day at 6PM
ShiftStartDtm = SRP_Datetime('AddHours', CurrDate - 1, 18)
Case ShiftTime GT 64800
//Evening Part of Night shift - Same day at 6PM
ShiftStartDtm = SRP_Datetime('AddHours', CurrDate, 18)
End Case
Response = ShiftStartDtm
end service
Service GetShiftByDate(Date, GenerateFlag) Service GetShiftByDate(Date, GenerateFlag)
OnShift = ''; *Return Value OnShift = ''; *Return Value
@ -571,4 +549,3 @@ Service UpdateSecurityGroups()
end service end service

View File

@ -254,13 +254,19 @@ Service ProcessPTIScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Para
If ErrorMsg EQ '' then Response = ScanSubLot If ErrorMsg EQ '' then Response = ScanSubLot
Case ScanType EQ 'CASSETTE1' Case ScanType EQ 'CASSETTE1'
debug
// Assume this is intended to be a Cassette ID scan (either WMO or RDS). Only if this is a // Assume this is intended to be a Cassette ID scan (either WMO or RDS). Only if this is a
// non-existent carrier will the scan data be considered invalid. // non-existent carrier will the scan data be considered invalid.
// Strip '1T', 'I', and 'O' prefixes. // Strip '1T', 'I', and 'O' prefixes.
ValidCassetteID = False$ ; // Assume Cassette ID is not valid for now. ValidCassetteID = False$ ; // Assume Cassette ID is not valid for now.
DelimCount = DCount(ScanData, '|') DelimCount = DCount(ScanData, '|')
Begin Case Begin Case
Case ( (ScanData[1, 2] EQ '1T') or (ScanData[1, 1] EQ 'O') or (ScanData[1, 1] EQ 'I') ) Case (ScanData[1, 1] EQ 'I')
! Temporary exception while we exhaust current WMI inventory on KIT racks that
! do not have a 2D barcode.
CassetteID = ScanData
SeqNo = 'SEQ1'
Case ( (ScanData[1, 2] EQ '1T') or (ScanData[1, 1] EQ 'O') )
ErrorMsg = '1D Lot Label Scanned. 2D Lot Label Required.' ErrorMsg = '1D Lot Label Scanned. 2D Lot Label Required.'
Case (DelimCount NE 8) Case (DelimCount NE 8)
ErrorMsg = 'Invalid Lot Label Scan.' ErrorMsg = 'Invalid Lot Label Scan.'
@ -309,7 +315,12 @@ Service ProcessPTIScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Para
DelimCount = DCount(ScanData, '|') DelimCount = DCount(ScanData, '|')
Begin Case Begin Case
Case ( (ScanData[1, 2] EQ '1T') or (ScanData[1, 1] EQ 'O') or (ScanData[1, 1] EQ 'I') ) Case (ScanData[1, 1] EQ 'I')
! Temporary exception while we exhaust current WMI inventory on KIT racks that
! do not have a 2D barcode.
CassetteID = ScanData
Seq2No = 'SEQ2'
Case ( (ScanData[1, 2] EQ '1T') or (ScanData[1, 1] EQ 'O') )
ErrorMsg = '1D Lot Label Scanned. 2D Lot Label Required.' ErrorMsg = '1D Lot Label Scanned. 2D Lot Label Required.'
Case (DelimCount NE 8) Case (DelimCount NE 8)
ErrorMsg = 'Invalid Lot Label Scan.' ErrorMsg = 'Invalid Lot Label Scan.'

View File

@ -82,15 +82,12 @@ $Insert NOTIFICATION_EQUATES
$Insert RLIST_EQUATES $Insert RLIST_EQUATES
$Insert WM_OUT_EQUATES $Insert WM_OUT_EQUATES
$Insert IQS_VIOL_DATA_EQUATES $Insert IQS_VIOL_DATA_EQUATES
$Insert FEATURE_FLAGS_EQUATES
Common /MetrologyServices/ MachineType@, LegacyLotId@ Common /MetrologyServices/ MachineType@, LegacyLotId@
Equ RETRY_ATTEMPTS$ TO 3 Equ RETRY_ATTEMPTS$ TO 3
Equ MINUTES_UNTIL_RETRY$ TO 3 Equ MINUTES_UNTIL_RETRY$ TO 3
Equ IMPORT_VALIDATION_IDX$ TO 99
Equ ORP$THICK_READS TO 1 Equ ORP$THICK_READS TO 1
Equ ORP$SHEET_RHO_READS TO 2 Equ ORP$SHEET_RHO_READS TO 2
Equ ORP$HGCV1_READS TO 3 Equ ORP$HGCV1_READS TO 3
@ -341,7 +338,6 @@ Service GetHgCV(Handle)
Result<5> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].PSN'); // PSN Result<5> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].PSN'); // PSN
Result<8> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].Wafer'); // LayerZonePair Result<8> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].Wafer'); // LayerZonePair
Result<11> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].Date'); // Timestamp Result<11> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].Date'); // Timestamp
Result<IMPORT_VALIDATION_IDX$> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].IndexOf'); // Validation
END END
ForOffset = (RecordIndex - 1) * FieldPositionIncrement; ForOffset = (RecordIndex - 1) * FieldPositionIncrement;
Result<FieldPosition + ForOffset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].Site'); // Position Result<FieldPosition + ForOffset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].Site'); // Position
@ -408,7 +404,6 @@ end service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service ImportMetrologyFiles(Machine=MACHINE_TYPES) Service ImportMetrologyFiles(Machine=MACHINE_TYPES)
ErrMsg = ''
If Machine NE '' then If Machine NE '' then
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS') hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
Lock hSysLists, ServiceKeyID:'*':Machine then Lock hSysLists, ServiceKeyID:'*':Machine then
@ -419,27 +414,36 @@ Service ImportMetrologyFiles(Machine=MACHINE_TYPES)
Begin Case Begin Case
Case Machine _EQC 'Tencor' Case Machine _EQC 'Tencor'
SearchPattern = '*.pdsf';
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08DDUPSFS6420\Source\MET08DDUPSFS6420\' DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08DDUPSFS6420\Source\MET08DDUPSFS6420\'
Case Machine _EQC 'HgCV' Case Machine _EQC 'HgCV'
SearchPattern = '*.pdsf';
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08RESIHGCV\Source\MET08RESIHGCV\' DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08RESIHGCV\Source\MET08RESIHGCV\'
Case Machine _EQC 'CDE' Case Machine _EQC 'CDE'
SearchPattern = '*.pdsf';
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08RESIMAPCDE\Source\MET08RESIMAPCDE\' DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08RESIMAPCDE\Source\MET08RESIMAPCDE\'
Case Machine _EQC 'Biorad' Case Machine _EQC 'Biorad'
SearchPattern = '*.txt';
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08THFTIRQS408M\Source\MET08THFTIRQS408M\' DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08THFTIRQS408M\Source\MET08THFTIRQS408M\'
Case Machine _EQC 'Stratus' Case Machine _EQC 'Stratus'
SearchPattern = '*.txt';
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08THFTIRSTRATUS\Source\MET08THFTIRSTRATUS\' DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08THFTIRSTRATUS\Source\MET08THFTIRSTRATUS\'
Case Machine _EQC 'SP1' Case Machine _EQC 'SP1'
SearchPattern = '*.pdsf';
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08DDUPSP1TBI\Source\MET08DDUPSP1TBI\' DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08DDUPSP1TBI\Source\MET08DDUPSP1TBI\'
Case Machine _EQC 'SPV' Case Machine _EQC 'SPV'
SearchPattern = '*.txt';
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08RESISRP2100\Source\MET08RESISRP2100\' DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08RESISRP2100\Source\MET08RESISRP2100\'
Case Machine _EQC 'SRP' Case Machine _EQC 'SRP'
SearchPattern = '*.txt';
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08ANLYSDIFAAST230\Source\MET08ANLYSDIFAAST230\' DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08ANLYSDIFAAST230\Source\MET08ANLYSDIFAAST230\'
Case Otherwise$ Case Otherwise$
ErrMsg = 'Error in ':Service:' service. Unsupported Machine "':Machine:'" passed into service' SearchPattern = '*.txt';
Error_Services('Add', 'Error in ':Service:' service. Unsupported Machine "':Machine:'" passed into service')
End Case End Case
If Error_Services('NoError') and ErrMsg EQ '' then If Error_Services('NoError') then
SearchPattern = '*.pdsf';
InitDir DataPath:SearchPattern InitDir DataPath:SearchPattern
FileList = DirList() FileList = DirList()
FileNames = '' FileNames = ''
@ -516,42 +520,63 @@ Service ImportMetrologyFiles(Machine=MACHINE_TYPES)
RepoPath = Environment_Services('GetApplicationRootPath') : '\Metrology\Run Data Repository\MET08ANLYSDIFAAST230\Source\MET08ANLYSDIFAAST230\' RepoPath = Environment_Services('GetApplicationRootPath') : '\Metrology\Run Data Repository\MET08ANLYSDIFAAST230\Source\MET08ANLYSDIFAAST230\'
End Case End Case
OSREAD Text FROM DataPath:FileName THEN IF SearchPattern = '*.pdsf' THEN
json = Metrology_Services('GetJsonFromProcessDataStandardFormat', Text); OSREAD Text FROM DataPath:FileName THEN
json = Metrology_Services('GetJsonFromProcessDataStandardFormat', Text);
END ELSE
json = '';
END
IF LEN(json) GT 0 THEN
RunData = Metrology_Services('GetRunData', Machine, json);
END ELSE
Metrology_Services('LogResults', PSN, Machine, 'UID002', Service : ' : ' : 'Failed to get PDSF json');
END
END ELSE END ELSE
json = '';
END OSREAD RunData FROM DataPath:FileName THEN
IF LEN(json) GT 0 THEN Set_Status(0)
RunData = Metrology_Services('GetRunData', Machine, json); OSWrite RunData to RepoPath:FileName
END ELSE status_code = ''
Metrology_Services('LogResults', PSN, Machine, 'UID002', Service : ' : ' : 'Failed to get PDSF json'); If Get_Status(status_code) then
ErrorMessage = 'Error writing run data file to repository: status_code = ' : status_code
Metrology_Services('LogResults', '', Machine, 'UID001', Service : ' : ' : ErrorMessage)
Set_Status(0)
end
SWAP '|' WITH @VM IN RunData
SWAP CRLF$ WITH @FM IN RunData
LOOP
LastChar = RunData[-1,1]
UNTIL LastChar NE @FM
RunData[-1,1] = ''
REPEAT
Convert Tab$ to @FM in RunData
END else
Metrology_Services('LogResults', '', Machine, 'UID001', 'Read : ' : FileName : ', Size : ' : FileSize)
end
END END
************************* *************************
* Import metrology data * * Import metrology data *
************************* *************************
IF RunData NE '' then IF RunData NE '' then
AllowImport = Metrology_Services('AllowImport', RunData) Metrology_Services('ImportMetrologyRunData', Machine, DataPath, FileName, RunData)
If AllowImport EQ True$ then
Metrology_Services('ImportMetrologyRunData', Machine, DataPath, FileName, RunData)
end else
ErrMsg = 'Import validation failed'
Metrology_Services('LogResults', PSN, Machine, 'UID002', Service : ' : ' : ErrMsg);
end
END ELSE END ELSE
ErrMsg = 'RunData argument was missing' Error_Services('Add', 'RunData argument was missing')
Metrology_Services('LogResults', '', '', 'UID001', Service : ' : ' : ErrMsg) Metrology_Services('LogResults', '', '', 'UID001', Service : ' : ' : Error_Services('GetMessage'))
END END
If Error_Services('NoError') and ErrMsg EQ '' then If Error_Services('NoError') then
Continue = True$ Continue = True$
end else end else
If ErrMsg EQ '' then ErrMsg = Error_Services('GetMessage') ErrorMessage = Error_Services('GetMessage')
FQAError = IndexC(ErrMsg, 'FQA has already been signed', 1) FQAError = IndexC(ErrorMessage, 'FQA has already been signed', 1)
If ( Index(ErrMsg, 'UID002', 1) and (ImportAttempts LE RETRY_ATTEMPTS$) and Not(FQAError) ) then If ( Index(ErrorMessage, 'UID002', 1) and (ImportAttempts LE RETRY_ATTEMPTS$) and Not(FQAError) ) then
Continue = False$ Continue = False$
end else end else
Continue = True$ Continue = True$
end end
end end
@ -571,9 +596,10 @@ Service ImportMetrologyFiles(Machine=MACHINE_TYPES)
Metrology_Services('LogResults', '', Machine, 'UID001', 'Delete : ' : FileName : ', Size : ' : FileSize : ', Error : ' : ErrCode) Metrology_Services('LogResults', '', Machine, 'UID001', 'Delete : ' : FileName : ', Size : ' : FileSize : ', Error : ' : ErrCode)
end end
END else END else
If ErrMsg EQ '' then ErrMsg = Error_Services('GetMessage')
ErrorMessage = Error_Services('GetMessage')
MetrologyLog = Database_Services('ReadDataRow', 'SYSLISTS', UCase(Machine):'_METROLOGY_LOG') MetrologyLog = Database_Services('ReadDataRow', 'SYSLISTS', UCase(Machine):'_METROLOGY_LOG')
MetrologyLog := ErrMsg : @FM MetrologyLog := ErrorMessage : @FM
Database_Services('WriteDataRow', 'SYSLISTS', UCase(Machine):'_METROLOGY_LOG', MetrologyLog, True$) Database_Services('WriteDataRow', 'SYSLISTS', UCase(Machine):'_METROLOGY_LOG', MetrologyLog, True$)
end end
@ -586,8 +612,7 @@ Service ImportMetrologyFiles(Machine=MACHINE_TYPES)
NEXT FileLoopIndex NEXT FileLoopIndex
end else end else
If ErrMsg EQ '' then ErrMsg = Error_Services('GetMessage') Metrology_Services('LogResults', '', '', 'UID001', Error_Services('GetMessage'))
Metrology_Services('LogResults', '', '', 'UID001', ErrMsg)
end end
Unlock hSysLists, ServiceKeyID:'*':Machine else Null Unlock hSysLists, ServiceKeyID:'*':Machine else Null
end end
@ -595,8 +620,6 @@ Service ImportMetrologyFiles(Machine=MACHINE_TYPES)
Metrology_Services('LogResults', '', '', 'UID001', 'Null Machine passed into service') Metrology_Services('LogResults', '', '', 'UID001', 'Null Machine passed into service')
end end
If ErrMsg NE '' then Error_Services('Add', ErrMsg)
end service end service
@ -3215,13 +3238,6 @@ Service ScanNumDataPointsMatchesRdsTestSpecThickMPattern(RdsNo, RecipeLayer, Sca
Response = MatchFound Response = MatchFound
end service end service
Service AllowImport(RunData)
MetrologyImportValidationFeatureFlag = Xlate('FEATURE_FLAGS', 'METROLOGY_IMPORT_VALIDATION', FEATURE_FLAGS.ENABLED$, 'X')
FeatureDisabled = MetrologyImportValidationFeatureFlag NE True$
ImportValidated = RunData<IMPORT_VALIDATION_IDX$> EQ '' or RunData<IMPORT_VALIDATION_IDX$> EQ 1
Response = FeatureDisabled or ImportValidated
end service
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs // Internal GoSubs
@ -3665,5 +3681,3 @@ LoadRunDataToDatabase:
end end
return return

View File

@ -273,8 +273,7 @@ WRITE_RECORD:
Next RDSNo Next RDSNo
If (OrgQty NE NewQty) then If (OrgQty NE NewQty) then
ScrapAdj = NewQty - OrgQty Service_Services('PostProcedure', 'WORK_ORDER_SERVICES', 'UpdateScrappedQty':SD$:WorkOrderNo)
Work_Order_Services('AdjustScrappedQty', WorkOrderNo, ScrapAdj)
end end
// On the write of the record, read then write associated WM_IN and WM_OUT records to trigger the WM_MFS. // On the write of the record, read then write associated WM_IN and WM_OUT records to trigger the WM_MFS.
@ -295,41 +294,44 @@ WRITE_RECORD:
Database_Services('WriteDataRow', 'WM_OUT', WMOKey, WMORec, True$, True$, False$) Database_Services('WriteDataRow', 'WM_OUT', WMOKey, WMORec, True$, True$, False$)
end end
// If NCR created after cassette has received a batch number, then inform SAP of new quantities SAPTestFlag = Xlate('APP_INFO', 'SAP_TEST_FLAG', 1, 'X')
SAPBatchNo = Xlate('WO_MAT', WOMatKey, 'SAP_BATCH_NO', 'X') If SAPTestFlag then
IF SAPBatchNo NE '' THEN // If NCR created after cassette has received a batch number, then inform SAP of new quantities
SAPBatchNo = Xlate('WO_MAT', WOMatKey, 'SAP_BATCH_NO', 'X')
IF SAPBatchNo NE '' THEN
IF (ReactorType = 'EPP') OR (ReactorType = 'EpiPro') THEN IF (ReactorType = 'EPP') OR (ReactorType = 'EpiPro') THEN
WMOutKey = Xlate('WO_MAT', WOMatKey, 'WMO_KEY', 'X') WMOutKey = Xlate('WO_MAT', WOMatKey, 'WMO_KEY', 'X')
CassStatus = Xlate('WM_OUT', WMOutKey, 'CURR_STATUS', 'X') CassStatus = Xlate('WM_OUT', WMOutKey, 'CURR_STATUS', 'X')
END ELSE END ELSE
// Non-EpiPro // Non-EpiPro
RDSNo = Xlate('WO_MAT', WoMatKey, 'RDS_NO', 'X') RDSNo = Xlate('WO_MAT', WoMatKey, 'RDS_NO', 'X')
CassStatus = Xlate('RDS', RDSNo, 'CURR_STATUS', 'X') CassStatus = Xlate('RDS', RDSNo, 'CURR_STATUS', 'X')
END END
// Add SAP transaction // Add SAP transaction
IF OrigRecord = '' THEN IF OrigRecord = '' THEN
TransQty = NewQty TransQty = NewQty
END ELSE END ELSE
TransQty = NewQty - OrgQty TransQty = NewQty - OrgQty
END END
IF TransQty NE 0 THEN IF TransQty NE 0 THEN
obj_SAP('AddTransaction','SCRAP_IN':@RM:WorkOrderNo:@RM:CassNo:@RM:TransQty) obj_SAP('AddTransaction','SCRAP_IN':@RM:WorkOrderNo:@RM:CassNo:@RM:TransQty)
If TransQty LT 0 then If TransQty LT 0 then
// Log negative SAP scrap transaction to capture metrics to submit for SAP change request // Log negative SAP scrap transaction to capture metrics to submit for SAP change request
LogData = '' LogData = ''
LogData<1> = LoggingDTM LogData<1> = LoggingDTM
LogData<2> = @User4 LogData<2> = @User4
LogData<3> = Name LogData<3> = Name
LogData<4> = SAPBatchNo LogData<4> = SAPBatchNo
LogData<5> = TransQty LogData<5> = TransQty
Logging_Services('AppendLog', objSAPLog, LogData, @RM, @FM) Logging_Services('AppendLog', objSAPLog, LogData, @RM, @FM)
end end
end end
end end
end
OrigStatus = OrigRecord<NCR_STATUS$> OrigStatus = OrigRecord<NCR_STATUS$>
NewStatus = Record<NCR_STATUS$> NewStatus = Record<NCR_STATUS$>
@ -664,7 +666,6 @@ WRITE_RECORD:
end end
end end
end end
return return
DELETE_RECORD_PRE: DELETE_RECORD_PRE:
@ -745,13 +746,11 @@ DELETE_RECORD:
Pass_To_SQL('WRITE', 'RDS', RDSNo) Pass_To_SQL('WRITE', 'RDS', RDSNo)
Next RDSNo Next RDSNo
OrgQty = Sum(obj_NCR('RejQty',NCRNo:@RM:OrigRecord)) Service_Services('PostProcedure', 'WORK_ORDER_SERVICES', 'UpdateScrappedQty':SD$:WorkOrderNo)
NewQty = 0
AdjustQty = NewQty - OrgQty
Work_Order_Services('AdjustScrappedQty', WorkOrderNo, AdjustQty)
return return
// ----- Internal Methods ---------------------------------------------------------------------------------------------- // ----- Internal Methods ----------------------------------------------------------------------------------------------

View File

@ -3,15 +3,13 @@ Compile function NDW_LOAD_UNLOAD_EXTRA_EVENTS(CtrlEntId, Event, @PARAMS)
#window NDW_LOAD_UNLOAD_EXTRA #window NDW_LOAD_UNLOAD_EXTRA
Declare subroutine End_Dialog, Post_Event, Database_Services, Error_Services, Msg Declare subroutine End_Dialog, Post_Event, Database_Services, Error_Services, Msg
Declare subroutine Set_Property, Rds_Services, Set_Status, Rlist, Obj_Post_Log Declare subroutine Set_Property, Rds_Services
Declare function Database_Services, Error_Services, Qa_Services, Reactor_Services Declare function Database_Services, Error_Services
Declare function Get_Property, Dialog_Box Declare function Get_Property
$Insert EVENT_SETUP $Insert EVENT_SETUP
$Insert LOGICAL $Insert LOGICAL
$Insert RDS_EQUATES $Insert RDS_EQUATES
$Insert REACT_LL_EQUATES
$Insert REACTOR_EQUATES
$Insert MSG_EQUATES
GoToEvent Event for CtrlEntId else GoToEvent Event for CtrlEntId else
// Event not implemented // Event not implemented
@ -44,102 +42,47 @@ end event
//Signature buttons //Signature buttons
Event PUB_SIGN_UNLOAD_EX_1.CLICK() Event PUB_SIGN_UNLOAD_EX_1.CLICK()
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT') RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
initParams = '' Rds_Services('SignUnloadExtra1', RDSNo, @USER4)
initParams<4> = 'Sign Unload Extra 1' If Error_Services('NoError') then
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, initParams) Msg(@Window, 'Unload Extra 1 Signed!')
Valid = Response<1> end else
Msg(@Window, Error_Services('GetMessage'))
If Valid then
Rds_Services('SignUnloadExtra1', RDSNo, @USER4)
If Error_Services('NoError') then
Msg(@Window, 'Unload Extra 1 Signed!')
end else
Msg(@Window, Error_Services('GetMessage'))
end
end end
GoSub Refresh GoSub Refresh
end event end event
Event PUB_SIGN_LOAD_EX_1.CLICK() Event PUB_SIGN_LOAD_EX_1.CLICK()
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT') RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) Rds_Services('SignLoadExtra1', RDSNo, @USER4)
OldReactorNo = RDSRec<RDS_REACTOR$> If Error_Services('NoError') then
NewReactorNo = Get_Property(@Window : '.EDL_REACTOR1', 'TEXT') Msg(@Window, 'Load Extra 1 Signed!')
initParams = '' end else
initParams<4> = 'Sign Load Extra 1' Msg(@Window, Error_Services('GetMessage'))
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, initParams) end
Valid = Response<1>
If Valid then
If Qa_Services('LoadExtra1stReady', RDSNo) AND (OldReactorNo NE NewReactorNo) then
Gosub ReactorChange
end
If Error_Services('NoError') then
Rds_Services('SignLoadExtra1', RDSNo, @USER4)
If Error_Services('NoError') then
Msg(@Window, 'Load Extra 1 Signed!')
end else
Msg(@Window, Error_Services('GetMessage'))
end
End else
Msg(@Window, Error_Services('GetMessage'))
end
end
GoSub Refresh GoSub Refresh
end event end event
Event PUB_SIGN_UNLOAD_EX_2.CLICK() Event PUB_SIGN_UNLOAD_EX_2.CLICK()
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT') RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
initParams = '' Rds_Services('SignUnloadExtra2', RDSNo, @USER4)
initParams<4> = 'Sign Unload Extra 2' If Error_Services('NoError') then
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, initParams) Msg(@Window, 'Unload Extra 2 Signed!')
Valid = Response<1> end else
Msg(@Window, Error_Services('GetMessage'))
If Valid then
Rds_Services('SignUnloadExtra2', RDSNo, @USER4)
If Error_Services('NoError') then
Msg(@Window, 'Unload Extra 2 Signed!')
end else
Msg(@Window, Error_Services('GetMessage'))
end
end end
GoSub Refresh GoSub Refresh
end event end event
Event PUB_SIGN_LOAD_EX_2.CLICK() Event PUB_SIGN_LOAD_EX_2.CLICK()
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT') RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) Rds_Services('SignLoadExtra2', RDSNo, @USER4)
OldReactorNo = RDSRec<RDS_REACTOR$> If Error_Services('NoError') then
NewReactorNo = Get_Property(@Window : '.EDL_REACTOR2', 'TEXT') Msg(@Window, 'Load Extra 2 Signed!')
initParams = '' end else
initParams<4> = 'Sign Load Extra 2' Msg(@Window, Error_Services('GetMessage'))
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, initParams) end
Valid = Response<1>
If Valid then
If Qa_Services('LoadExtra2ndReady', RDSNo) AND (OldReactorNo NE NewReactorNo) then
Gosub ReactorChange
end
If Error_Services('NoError') then
Rds_Services('SignLoadExtra2', RDSNo, @USER4)
If Error_Services('NoError') then
Msg(@Window, 'Load Extra 2 Signed!')
end else
Msg(@Window, Error_Services('GetMessage'))
end
End else
Msg(@Window, Error_Services('GetMessage'))
end
end
GoSub Refresh GoSub Refresh
end event end event
//Clear Signature Buttons //Clear Signature Buttons
@ -200,94 +143,40 @@ Refresh:
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT') RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
If RowExists('RDS', RDSNo) then If RowExists('RDS', RDSNo) then
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
if Error_Services('NoError') then //Unload Extra 1
UnloadSigned = RDSRec<RDS_OPERATOR_OUT$> UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
ReactorNo = RDSRec<RDS_REACTOR$> UnloadExtra1UserFirstLast = xlate( 'LSL_USERS', UnloadExtra1Signature, 'FIRST_LAST', 'X' )
//Unload Extra 1 UnloadExtra1Date = OConv(RDSRec<RDS_OP_OUT_EX1_DATE$>, 'D')
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$> UnloadExtra1Time = Oconv(RDSRec<RDS_OP_OUT_EX1_TIME$>, 'MT')
UnloadExtra1UserFirstLast = xlate( 'LSL_USERS', UnloadExtra1Signature, 'FIRST_LAST', 'X' ) //Load Extra 1
UnloadExtra1Date = OConv(RDSRec<RDS_OP_OUT_EX1_DATE$>, 'D') LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
UnloadExtra1Time = Oconv(RDSRec<RDS_OP_OUT_EX1_TIME$>, 'MT') LoadExtra1UserFirstLast = xlate( 'LSL_USERS', LoadExtra1Signature, 'FIRST_LAST', 'X' )
//Load Extra 1 LoadExtra1Date = Oconv(RDSRec<RDS_OP_IN_EX2_DATE$>, 'D')
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$> LoadExtra1Time = Oconv(RDSRec<RDS_OP_IN_EX2_TIME$>, 'MT')
LoadExtra1UserFirstLast = xlate( 'LSL_USERS', LoadExtra1Signature, 'FIRST_LAST', 'X' ) //Unload Extra 2
LoadExtra1Date = Oconv(RDSRec<RDS_OP_IN_EX2_DATE$>, 'D') UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
LoadExtra1Time = Oconv(RDSRec<RDS_OP_IN_EX2_TIME$>, 'MT') UnloadExtra2UserFirstLast = xlate( 'LSL_USERS', UnloadExtra2Signature, 'FIRST_LAST', 'X' )
LoadExtra1Reactor = RDSRec<RDS_LOAD_EXTRA_1_REACTOR$> UnloadExtra2Date = Oconv(RDSRec<RDS_OP_OUT_EX2_DATE$>, 'D')
//Unload Extra 2 UnloadExtra2Time = Oconv(RDSRec<RDS_OP_OUT_EX2_TIME$>, 'MT')
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$> //Load Extra 2
UnloadExtra2UserFirstLast = xlate( 'LSL_USERS', UnloadExtra2Signature, 'FIRST_LAST', 'X' ) LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
UnloadExtra2Date = Oconv(RDSRec<RDS_OP_OUT_EX2_DATE$>, 'D') LoadExtra2UserFirstLast = xlate( 'LSL_USERS', LoadExtra2Signature, 'FIRST_LAST', 'X' )
UnloadExtra2Time = Oconv(RDSRec<RDS_OP_OUT_EX2_TIME$>, 'MT') LoadExtra2Date = Oconv(RDSRec<RDS_OP_IN_EX3_DATE$>, 'D')
//Load Extra 2 LoadExtra2Time = Oconv(RDSRec<RDS_OP_IN_EX3_TIME$>, 'MT')
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
LoadExtra2UserFirstLast = xlate( 'LSL_USERS', LoadExtra2Signature, 'FIRST_LAST', 'X' )
LoadExtra2Date = Oconv(RDSRec<RDS_OP_IN_EX3_DATE$>, 'D')
LoadExtra2Time = Oconv(RDSRec<RDS_OP_IN_EX3_TIME$>, 'MT')
LoadExtra2Reactor = RDSRec<RDS_LOAD_EXTRA_2_REACTOR$>
//Populate text fields
Set_Property(@Window : '.EDL_UNLOAD_EX_1_USER', 'TEXT', UnloadExtra1UserFirstLast)
Set_Property(@Window : '.EDL_UNLOAD_EX_1_DATE', 'TEXT', UnloadExtra1Date)
Set_Property(@Window : '.EDL_UNLOAD_EX_1_TIME', 'TEXT', UnloadExtra1Time)
Set_Property(@Window : '.EDL_LOAD_EX_1_USER', 'TEXT', LoadExtra1UserFirstLast)
Set_Property(@Window : '.EDL_LOAD_EX_1_DATE', 'TEXT', LoadExtra1Date)
Set_Property(@Window : '.EDL_LOAD_EX_1_TIME', 'TEXT', LoadExtra1Time)
Set_Property(@Window : '.EDL_UNLOAD_EX_2_USER', 'TEXT', UnloadExtra2UserFirstLast)
Set_Property(@Window : '.EDL_UNLOAD_EX_2_DATE', 'TEXT', UnloadExtra2Date)
Set_Property(@Window : '.EDL_UNLOAD_EX_2_TIME', 'TEXT', UnloadExtra2Time)
Set_Property(@Window : '.EDL_LOAD_EX_2_USER', 'TEXT', LoadExtra2UserFirstLast)
Set_Property(@Window : '.EDL_LOAD_EX_2_DATE', 'TEXT', LoadExtra2Date)
Set_Property(@Window : '.EDL_LOAD_EX_2_TIME', 'TEXT', LoadExtra2Time)
If LoadExtra1Reactor NE '' then
Set_Property(@Window : '.EDL_REACTOR1', 'TEXT', LoadExtra1Reactor)
end else
Set_Property(@Window : '.EDL_REACTOR1', 'TEXT', ReactorNo)
end
If LoadExtra2Reactor NE '' then
Set_Property(@Window : '.EDL_REACTOR2', 'TEXT', LoadExtra2Reactor)
end else
Set_Property(@Window : '.EDL_REACTOR2', 'TEXT', ReactorNo)
end
If UnloadSigned EQ '' then
Set_Property(@Window : '.EDL_REACTOR1', 'ENABLED', True$)
Set_Property(@Window : '.EDL_REACTOR2', 'ENABLED', True$)
end else
Set_Property(@Window : '.EDL_REACTOR1', 'ENABLED', False$)
Set_Property(@Window : '.EDL_REACTOR2', 'ENABLED', False$)
end
If UnloadExtra1Signature NE '' then
Set_Property(@Window : '.PUB_SIGN_UNLOAD_EX_1', 'ENABLED', False$)
Set_Property(@Window : '.PUB_CLEAR_UNLOAD_EX_1', 'ENABLED', True$)
end else
Set_Property(@Window : '.PUB_SIGN_UNLOAD_EX_1', 'ENABLED', True$)
Set_Property(@Window : '.PUB_CLEAR_UNLOAD_EX_1', 'ENABLED', False$)
end
If UnloadExtra2Signature NE '' then
Set_Property(@Window : '.PUB_SIGN_UNLOAD_EX_2', 'ENABLED', False$)
Set_Property(@Window : '.PUB_CLEAR_UNLOAD_EX_2', 'ENABLED', True$)
end else
Set_Property(@Window : '.PUB_SIGN_UNLOAD_EX_2', 'ENABLED', True$)
Set_Property(@Window : '.PUB_CLEAR_UNLOAD_EX_2', 'ENABLED', False$)
end
If LoadExtra1Signature NE '' then
Set_Property(@Window : '.PUB_SIGN_LOAD_EX_1', 'ENABLED', False$)
Set_Property(@Window : '.PUB_CLEAR_LOAD_EX_1', 'ENABLED', True$)
end else
Set_Property(@Window : '.PUB_SIGN_LOAD_EX_1', 'ENABLED', True$)
Set_Property(@Window : '.PUB_CLEAR_LOAD_EX_1', 'ENABLED', False$)
end
If LoadExtra2Signature NE '' then
Set_Property(@Window : '.PUB_SIGN_LOAD_EX_2', 'ENABLED', False$)
Set_Property(@Window : '.PUB_CLEAR_LOAD_EX_2', 'ENABLED', True$)
end else
Set_Property(@Window : '.PUB_SIGN_LOAD_EX_2', 'ENABLED', True$)
Set_Property(@Window : '.PUB_CLEAR_LOAD_EX_2', 'ENABLED', False$)
end
end else
Msg(@Window, 'Error reading RDS record from database.')
end
//Populate text fields
Set_Property(@Window : '.EDL_UNLOAD_EX_1_USER', 'TEXT', UnloadExtra1UserFirstLast)
Set_Property(@Window : '.EDL_UNLOAD_EX_1_DATE', 'TEXT', UnloadExtra1Date)
Set_Property(@Window : '.EDL_UNLOAD_EX_1_TIME', 'TEXT', UnloadExtra1Time)
Set_Property(@Window : '.EDL_LOAD_EX_1_USER', 'TEXT', LoadExtra1UserFirstLast)
Set_Property(@Window : '.EDL_LOAD_EX_1_DATE', 'TEXT', LoadExtra1Date)
Set_Property(@Window : '.EDL_LOAD_EX_1_TIME', 'TEXT', LoadExtra1Time)
Set_Property(@Window : '.EDL_UNLOAD_EX_2_USER', 'TEXT', UnloadExtra2UserFirstLast)
Set_Property(@Window : '.EDL_UNLOAD_EX_2_DATE', 'TEXT', UnloadExtra2Date)
Set_Property(@Window : '.EDL_UNLOAD_EX_2_TIME', 'TEXT', UnloadExtra2Time)
Set_Property(@Window : '.EDL_LOAD_EX_2_USER', 'TEXT', LoadExtra2UserFirstLast)
Set_Property(@Window : '.EDL_LOAD_EX_2_DATE', 'TEXT', LoadExtra2Date)
Set_Property(@Window : '.EDL_LOAD_EX_2_TIME', 'TEXT', LoadExtra2Time)
end else end else
ResponseValue = Set_Property(@Window, '@responsevalue', 0) ResponseValue = Set_Property(@Window, '@responsevalue', 0)
Post_Event(@Window, 'CLOSE') Post_Event(@Window, 'CLOSE')
@ -295,116 +184,4 @@ Refresh:
return return
ReactorChange:
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
if Error_Services('NoError') then
WONo = RDSRec<RDS_WO$>
ReactorNo = ''
LLChosen = ''
ChangePermitted = False$
Begin Case
Case Control EQ 'PUB_SIGN_LOAD_EX_1'
ReactorNo = Get_Property(@Window : '.EDL_REACTOR1', 'TEXT')
ReactorField = RDS_LOAD_EXTRA_1_REACTOR$
Case Control EQ 'PUB_SIGN_LOAD_EX_2'
ReactorNo = Get_Property(@Window : '.EDL_REACTOR2', 'TEXT')
ReactorField = RDS_LOAD_EXTRA_2_REACTOR$
Case Otherwise$
End Case
If ReactorNo NE '' then
PickPlace = Xlate('REACTOR', ReactorNo, 'PICK_PLACE', 'X')
If (Reactor_Services('GetReactorAvailChamberCount', ReactorNo) NE 0) OR (PickPlace EQ False$) then
Query = 'SELECT REACT_STATE WITH SCHED_WO CONTAINING ':WONo
GoSub ClearCursors
Set_Status(0)
RList(Query, TARGET_ACTIVELIST$, '', '' '')
SchedReactors = ''
EOF = False$
Loop
ReadNext SchedReactor else EOF = True$
Until EOF
SchedReactors<0, -1> = SchedReactor
Repeat
Locate ReactorNo in SchedReactors using @VM setting vPos then
If PickPlace EQ True$ then
LLDisabled = XLATE('REACTOR', ReactorNo, 'ACTIVE_LL_DISABLED', 'X')
IF LLDisabled NE '' then
ReactLLRec = Database_Services('ReadDataRow', 'REACT_LL', LLDisabled)
SideDisabled = ReactLLRec<REACT_LL_DISABLED$>
QualMode = ReactLLRec<REACT_LL_QUAL_MODE$>
Begin Case
Case SideDisabled EQ 'L'
LLChosen = 'R'
Case SideDisabled EQ 'R'
LLChosen = 'L'
End Case
end else
Def = ''
Def<MCAPTION$> = 'Select Load Lock'
Def<MTYPE$> = 'BLeft,Right'
Def<MTEXT$> = 'Please select a load lock.'
Def<MMODAL$> = 'A'
LLResponse = Msg(@Window, Def)
Begin Case
Case LLResponse EQ 1
LLChosen = 'L'
Case LLResponse EQ 2
LLChosen = 'R'
End Case
end
If LLChosen NE '' then
ChangePermitted = True$
end else
Error_Services('Add', 'You must select a load lock for this lot.')
end
end else
ChangePermitted = True$
end
end else
Swap @VM with ',' in SchedReactors
Error_Services('Add', 'Assigned reactor, ':ReactorNo:', does not equal any scheduled reactor(s), ':SchedReactors:'.')
end
end else
Error_Services('Add', ReactorNo: 'does not have the capacity necessary for this lot.')
end
end else
Error_Services('Add', 'Invalid Reactor number.')
end
If ChangePermitted then
RDSRec<RDS_REACTOR$> = ReactorNo
RDSRec<ReactorField> = ReactorNo
RDSRec<RDS_LOAD_LOCK_SIDE$> = LLChosen
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
If Error_Services('NoError') then
Msg(@Window, 'Reactor successfully changed!')
end else
Msg(@Window, 'Error changing reactor!')
end
end
end else
Msg(@Window, 'Error reading RDS from database!')
end
return
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ClearCursors:
For counter = 0 to 8
ClearSelect counter
Next counter
return

View File

@ -50,7 +50,7 @@ Equ HEIGHT$ to 4
Declare function GetCommandLine, MemberOf, obj_Install, obj_Notes_Sent, FindWindow, ShowWindow, Next_Key Declare function GetCommandLine, MemberOf, obj_Install, obj_Notes_Sent, FindWindow, ShowWindow, Next_Key
Declare function Environment_Services, Reactor_Services, Database_Services, obj_Tool, Messaging_Services, SRP_JSON Declare function Environment_Services, Reactor_Services, Database_Services, obj_Tool, Messaging_Services, SRP_JSON
Declare function Notes_Services, RTI_Xlate_Controller, Test_Run_Services, LSL_Users_Services, Datetime Declare function Notes_Services, RTI_Xlate_Controller
Declare subroutine Set_Env, obj_Appwindow, Get_BMP_Info, obj_Login, obj_Calib_List, End_Window, Start_Window, Next_Key Declare subroutine Set_Env, obj_Appwindow, Get_BMP_Info, obj_Login, obj_Calib_List, End_Window, Start_Window, Next_Key
Declare subroutine Database_Services, obj_React_Status, Obj_React_Mode, obj_Tool_Log, RList, Messaging_Services, RTP27 Declare subroutine Database_Services, obj_React_Status, Obj_React_Mode, obj_Tool_Log, RList, Messaging_Services, RTP27
Declare subroutine Notes_Services, Obj_Note_Ptrs, Comm_Note_Ptrs, SRP_Run_Command, PlaceDialog, GetEngineVersion Declare subroutine Notes_Services, Obj_Note_Ptrs, Comm_Note_Ptrs, SRP_Run_Command, PlaceDialog, GetEngineVersion
@ -404,16 +404,6 @@ Event WINDOW.TIMER()
Gosub SetSnoozeButtonState Gosub SetSnoozeButtonState
CurrDtm = Datetime()
CurrShiftStartDtm = LSL_USERS_SERVICES('GetCurrentShiftStartDtm', CurrDtm)
TWStats = Test_Run_Services('GetTestWaferUsageStats', @USER4, CurrShiftStartDtm, Datetime())
LastUsed = TWStats<1>
LastUsed = Oconv(LastUsed, 'DT2/^H')
QtyUsed = TWStats<2>
Set_Property(@Window: '.LBL_LAST_TW_USED', 'TEXT', 'TW Last Used by User: ' :LastUsed)
Set_Property(@Window: '.LBL_TW_USED', 'TEXT', 'TW Used by User: ' :QtyUsed)
Set_Property(@WINDOW:'.CURRENT_TIME','TEXT','Current Time: ':OCONV( TIME(), 'MTHS' )) Set_Property(@WINDOW:'.CURRENT_TIME','TEXT','Current Time: ':OCONV( TIME(), 'MTHS' ))
Set_Property(@WINDOW:'.CURRENT_DATE','TEXT','Date: ':OCONV( DATE(), 'D2/' )) Set_Property(@WINDOW:'.CURRENT_DATE','TEXT','Date: ':OCONV( DATE(), 'D2/' ))
If Get_Property(@Window, '@CLOSE') then If Get_Property(@Window, '@CLOSE') then
@ -863,5 +853,3 @@ return

View File

@ -0,0 +1,587 @@
Function NDW_Main_Events_Dev(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_Main_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)
05/08/18 dmb Created initial commuter module.
***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler
#Window NDW_MAIN
$insert APP_INSERTS
$insert EVENT_SETUP
$insert MSG_EQUATES
$insert ENVIRON_CONSTANTS
$insert NOTIFICATION_EQUATES
$insert REACT_MODE_EQU
$insert REACT_UTIL_EQU
$insert TOOL_EQUATES
$insert RLIST_EQUATES
Equ WIDTH$ to 3
Equ HEIGHT$ to 4
Declare function GetCommandLine, MemberOf, obj_Install, obj_Notes_Sent, FindWindow, ShowWindow, Next_Key
Declare function Environment_Services, Reactor_Services, Database_Services, obj_Tool, Messaging_Services, SRP_JSON
Declare subroutine Set_Env, obj_Appwindow, Get_BMP_Info, obj_Login, obj_Calib_List, End_Window, Start_Window, Next_Key
Declare subroutine Database_Services, obj_React_Status, Obj_React_Mode, obj_Tool_Log, RList, Messaging_Services, RTP27
SubclassInfo = Form_Services('FindSubclassControl')
Subclass = SubclassInfo<1>
// 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
Return EventFlow else EVENT_CONTINUE$
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Events
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Event WINDOW.CREATE(CreateParam)
GoSub Setup_OLE_Controls
Server = Environment_Services('GetServer')
Command = GetCommandLine()
Command = Trim(Command)
Convert ' ' to @FM in Command
Convert @Lower_Case to @Upper_Case in Command
NumArguments = DCount(Command, @FM)
Done = False$
For ArgCnt = 1 to NumArguments
Argument = Command<ArgCnt>
If Argument[1, 3] EQ '/UN' then
@USER4 = Argument[-1, 'B=']
Done = True$
end
Until Done
Next ArgCnt
IF @USER4 = 'INDEXER' THEN
void = Start_Window( 'IDXSVR', '', '', '', '' )
Post_Event(@Window, 'CLOSE')
RETURN 0
END
IF @USER4 = 'VISION' THEN
void = Start_Window( 'VISION_COMM', @WINDOW, '', '', '' )
RETURN 0
END
IF @USER4 = 'ADCSVR' THEN
* void = Start_Window( 'ADCSVR', @window, '', '', '' )
void = Start_Window( 'SERVICE_MANAGER', '', '', '', '' )
Post_Event(@Window, 'CLOSE')
RETURN 0
END
IF @USER4 = 'SAP' THEN
void = Start_Window( 'DIALOG_SAP_COMM', '', '', '', '')
Post_Event(@Window, 'CLOSE')
RETURN 0
END
Start_Window('NDW_MESSAGING_PROCESSOR', @Window)
@USER4 = @USERNAME
AccessLevel = Dialog_Box('LOGON', @Window)
If (AccessLevel EQ -1) OR (AccessLevel EQ '') then
Set_Property(@Window, '@CLOSE', 1)
end
If AccessLevel GE 0 then
IF MemberOf(@USER4, 'OI_ADMIN') OR @USER4 = 'MIS' THEN
Set_Env(ENV_DEBUGGER_ENABLED$, 1, 1)
Set_Env(ENV_DEBUGGER_INTERCEPT_PROC$,'',1)
* This section added 9/17/2014 JCH for FTPQueueing for manual batch transmits
OPEN 'FTP_QUEUE' TO FTPQueue THEN
SELECT FTPQueue
RecCnt = 0
Done = 0
LOOP
READNEXT QueueKey ELSE Done = 1
UNTIL Done
RecCnt += 1
REPEAT
Set_Property(@Window : '.PUB_SHIP_DATA_QUEUE','DEFPROP',RecCnt:' in Ship Data Queue')
Set_Property(@Window : '.PUB_SHIP_DATA_QUEUE','VISIBLE',1)
END
END ELSE
Set_Env(ENV_DEBUGGER_ENABLED$, 2, 1)
Set_Env(ENV_DEBUGGER_INTERCEPT_PROC$,'EPI_USER_DEBUG',1)
Set_Property(@Window : '.PUB_SHIP_DATA_QUEUE','VISIBLE',0)
END
IF MemberOf(@USER4,'EMAIL_PDF_QUEUE') THEN
* This section added 7/31/2015 JCH for Shipment eMail Queueing for manual batch transmits
OPEN 'SHIP_EMAIL_QUEUE' TO Ship_eMailQueue THEN
SELECT Ship_eMailQueue
RecCnt = 0
Done = 0
LOOP
READNEXT QueueKey ELSE Done = 1
UNTIL Done
RecCnt += 1
REPEAT
Set_Property(@Window : '.PUB_SHIP_DOC_QUEUE','DEFPROP',RecCnt:' in Ship Doc Queue')
Set_Property(@Window : '.PUB_SHIP_DOC_QUEUE','VISIBLE',1)
END
END
GraphicPath = obj_Install('Get_Prop','ColorBMP')
IF GraphicPath NE '' THEN
Set_Property(@WINDOW:'.BITMAP_2','BITMAP',GraphicPath)
Get_BMP_Info(GraphicPath,BmSize,BmWidth,BmHeight)
BMAspectRatio = BmWidth/BmHeight
MainSize = Get_Property(@WINDOW,'SIZE')
WinWidth = MainSize<WIDTH$>
WinHeight = MainSize<HEIGHT$>
IF BmHeight > INT(WinHeight * .666) THEN
Set_Property(@WINDOW:'.BITMAP_2','IMAGECLIP',0) ;* Allow Resize of bitmap
BmDispHeight = INT(WinHeight * .666)
BmDispWidth = INT(BmDispHeight*(BmWidth/BmHeight))
END ELSE
Set_Property(@WINDOW:'.BITMAP_2','IMAGECLIP',0) ;* Allow Resize of bitmap
BmDispHeight = INT(WinHeight * .20)
BmDispWidth = INT(BmDispHeight * BMAspectRatio)
END
Xorg = INT((WinWidth - BmDispWidth) / 2 )
Yorg = INT((WinHeight - BmDispHeight) / 3)
Set_Property(@WINDOW:'.BITMAP_2','SIZE',Xorg:@FM:Yorg:@FM:BmDispWidth:@FM:BmDispHeight)
Set_Property(@WINDOW:'.BITMAP_2','VISIBLE',1)
END
Company = obj_Install('Get_Prop','CompTitle')
WinTitle = Get_Property(@WINDOW,'TEXT')
Machine = ''
If (Server EQ 'MESST6501') or (Server EQ 'MESST6502') or (Server EQ 'MESTST1006')then
Machine = 'Server'
end else
Machine = 'Client'
end
WinTitle = Get_Property(@WINDOW,'TEXT')
LSL2Version = Xlate('LSL_USERS', @User4, 'LSL2_VERSION', 'X')
OCXVersion = Xlate('LSL_USERS', @User4, 'OCX_VERSION', 'X')
Set_Property(@WINDOW,'TEXT',Company:' ':WinTitle: ' - ':Machine: ' - v':LSL2Version:' - ocx.v':OCXVersion)
rv = Set_Property(@WINDOW:'.CURRENT_USER', 'TEXT', 'User: ':oconv( @user4, '[XLATE_CONV,LSL_USERS*FIRST_LAST]' ))
rv = Set_Property(@WINDOW:'.OLE_PIC_CURRENT_USER','OLE.Caption','User: ':OCONV( @USER4, '[XLATE_CONV,LSL_USERS*FIRST_LAST]' ))
rv = Set_Property(@WINDOW:'.GROUP_1', 'VISIBLE', 1)
Recipients = XLATE('NOTIFICATION','CONFIG_LIMITED',NOTIFICATION_USER_ID$,'X')
LOCATE @USER4 IN Recipients USING @VM SETTING Pos THEN
obj_Login('LateShip')
END
NotesSent = obj_Notes_Sent('GetUserKeys',@USER4)
NewMessages = XLATE('NOTE_PTRS',@USER4,'NEW_MESSAGES','X')
IF NotesSent NE '' OR NewMessages > 0 THEN
Void = Start_Window( 'NOTE_PTRS', @WINDOW, '*CENTER', '', '' )
END
IF MemberOf(@USER4, 'SPEC_CHANGE') OR MemberOf(@USER4, 'OI_ADMIN') THEN
Set_Property(@WINDOW:'.MENU.ENGINEERING.TOOL_CLASS_-_RECIPES__PATTERNS','VISIBLE',1)
END ELSE
Set_Property(@WINDOW:'.MENU.ENGINEERING.TOOL_CLASS_-_RECIPES__PATTERNS','VISIBLE',0)
END
Ctrls = @WINDOW:'.MENU.ADMIN.FABTIME_SUPPORT':@RM ; Props = 'ENABLED':@RM
Ctrls := @WINDOW:'.MENU.MAINT.REACTOR_MAINTENANCE':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.MENU.ADM.SYSTEM_CONFIG':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.MENU.ADM.TOOLS':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.MENU.ADM.RAS':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.MENU.ADM.DEVELOPER':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.MENU.ADMIN.DEV.ARCHIVE' ; Props := 'ENABLED'
IF Memberof(@user4, 'OI_ADMIN') THEN
Vals = 1
END ELSE
Vals = 0
END
Set_Property(Ctrls,Props,Vals) ; * Sets the enabled property ON/OFF for the record mark delimited variables Ctrls,Props, and Vals
Ctrls := @WINDOW:'.MENU.ADMIN.SAP_INTERFACE':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.MENU.ADM.WAREHOUSE':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.MENU.ADMIN.SAP_INTERFACE.SAP_COMM_MONITOR':@RM ; Props := 'VISIBLE':@RM
IF Memberof(@user4, 'OI_ADMIN') OR Memberof(@user4, 'OI_SUPERUSER') THEN
Vals = 1
END ELSE
Vals = 0
END
Set_Property(Ctrls,Props,Vals) ; * Sets the enabled property ON/OFF for the record mark delimited variables Ctrls,Props, and Vals
Ctrls = @WINDOW:'.MENU.ADM.THRUPUT_TARGETS':@RM ; Props = 'ENABLED':@RM
Ctrls := @WINDOW:'.MENU.PROD.REACTOR_RUN' ; Props := 'ENABLED'
IF Memberof(@user4,'CONFIG_LIMITED') THEN
Vals = 1
END ELSE
Vals = 0
END
Set_Property(Ctrls,Props,Vals) ; * Sets the enabled property ON/OFF for the record mark delimited variables Ctrls,Props, and Vals
If Not(MemberOf(@USER4, 'LEAD')) AND Not(MemberOf(@USER4, 'SUPERVISOR')) then
Set_Property(@Window : '.MENU.ADMIN.TOOLS_EVAC', 'VISIBLE', 0)
end
If @User4 NE 'DAN_CR' then
Set_Property(@Window : '.MENU.MATERIAL.PTO_MATERIAL_SCAN', 'VISIBLE', 0)
end
CalDueRecipients = XLATE('NOTIFICATION','CALIB_DUE_NOTIFY',NOTIFICATION_USER_ID$,'X')
LOCATE @USER4 IN CalDueRecipients USING @VM SETTING POS THEN
obj_Calib_List('SendReminders') ;* New system added 3/18/2010 JCH
END
stat = Set_Property(@WINDOW,'TIMER',1200000:@FM:0) ;* Start the Keep Alive Timer event and run every 20 Minutes * * * * * * * * * * * *
stat = Set_Property(@WINDOW,'STATUSLINE',@WINDOW:'.STATUS_LINE') ;* Setup status line
SRP_Show_Window(@Window, '', 'C', 'C', 1, '', False$, False$)
Eventflow = 0
end else
End_Window(@Window)
end
end event
Event WINDOW.READ()
end event
Event WINDOW.CLOSE(CancelFlag)
Void = Set_Property(@WINDOW,'TIMER','')
UNLOCK All
end event
Event WINDOW.CLEAR(bSaveKey, bSuppressWarning, bMaintainFocus, CtrlIDFocus)
end event
Event WINDOW.TIMER()
Close = Get_Property(@Window, '@CLOSE')
CurrDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
OPEN 'SYSLISTS' TO ListsFile THEN
Station = @STATION
Station = Station[1,'_']
ListKey = Station:'*KEEP_ALIVE'
ListRec = @USERNAME:@FM:CurrDTM
WRITE ListRec ON ListsFile,ListKey ELSE NULL
END
Set_Property(@WINDOW:'.CURRENT_TIME','TEXT','Current Time: ':OCONV( TIME(), 'MTHS' ))
Set_Property(@WINDOW:'.CURRENT_DATE','TEXT','Date: ':OCONV( DATE(), 'D2/' ))
If Get_Property(@Window, '@CLOSE') then
Send_Event(@Window, 'CLOSE')
end
end event
Event OLE_LAUNCHER.OnLaunchAttempt(Params)
end event
Event PUB_SHIP_DATA_QUEUE.CLICK()
Start_Window('DIALOG_FTP_QUEUE', @Window)
end event
Event PUB_SHIP_DOC_QUEUE.CLICK()
Start_Window('DIALOG_EMAIL_SHIPMENT', @Window)
* Send_Message(@Window : '.OLE_DIRECT_CONNECT', 'OLE.Broadcast', 'Booyaa!')
end event
Event MENU.REACT_STAT.MENU()
Start_Window('REACT_STATUS_EVEN',@WINDOW,'')
Start_Window('REACT_STATUS_ODD',@WINDOW,'')
Start_Window('NDW_TOOL_STATUS_GAN',@WINDOW,'')
Start_Window('TOOL_STATUS',@WINDOW,'')
end event
Event MENU.WIN.PROD.RMC.MENU()
IF MemberOf(@USER4, 'DATA_ENTRY') OR MemberOf(@USER4, 'SUPERVISOR') THEN
Start_Window('REACT_MODE_CHG', @WINDOW, '*CENTER','','')
END ELSE
MsgInfo = ''
MsgInfo<MCOL$> = -2
MsgInfo<MROW$> = -2
MsgInfo<MTEXT$> = 'You must be a Supervisor or Technician in order to change reactor modes...'
MsgInfo<MICON$> = 'H'
void = Msg('',MsgInfo)
END
end event
Event MENU.ADMIN.SAP_INTERFACE.SAP_COMM_MONITOR.MENU()
rv = Start_Window('DIALOG_SAP_COMM', '')
end event
Event MENU.ADMIN.TOOLS_EVAC.MENU()
// Require the user to acknowledge using their application password.
* Valid = Dialog_Box('QUOTE_SIG_PWD_ENTRY', @WINDOW, @USER4 : @VM : XLATE('LSL_USERS', @USER4, LSL_USERS_PASSWORD$, 'X'))
MsgOverride = ''
MsgOverride<MDEFBTN$> = 2 ; // Default to Cancel button.
Valid = Msg(@Window, MsgOverride, 'OK_CANCEL', '', 'Evac Procedures' : @FM : 'Please confirm that you wish to put all tools into Evac mode.')
If Valid EQ '' then
UserName = Oconv(@USER4, '[XLATE_CONV,LSL_USERS*FIRST_LAST]')
CurrDate = Date()
CurrTime = Time()
EvacMode = 'Facilities (UnSched)'
EvacNotes = 'Fab Evac'
NumberTools = 0
// Step 1 - Update the Reactor Tools. This logic is based on the script event handler in the REACT_MODE_CHG.APPLY
// pushbutton control.
ReactorNos = Reactor_Services('GetReactorNumbers')
For Each ReactorNo in ReactorNos using @FM
ReactModeRow = Database_Services('ReadDataRow', 'CONFIG', 'REACT_MODE' : ReactorNo)
ReactModeDesc = ReactModeRow<Mode$>
If ReactModeDesc _NEC 'Shutdown' then
ReactUtilID = ReactModeRow<ReactUtilID$>
ReactLogID = ReactModeRow<ReactorLogID$>
If ReactUtilID NE '' then
ReactUtilRow = Database_Services('ReadDataRow', 'REACT_UTIL', ReactUtilID)
ReactUtilRow<REACT_UTIL_END_DATE$> = CurrDate
ReactUtilRow<REACT_UTIL_END_TIME$> = CurrTime
ReactUtilRow<REACT_UTIL_MODE_FINISH_USER$> = @USER4
Database_Services('WriteDataRow', 'REACT_UTIL', ReactUtilID, ReactUtilRow, True$, '', True$)
end else
ReactUtilRow = ''
end
hReactUtil = Database_Services('GetTableHandle', 'REACT_UTIL')
KeyToUse = Next_Key('REACT_UTIL', hReactUtil, 'NEXT', '')
NewReactUtilRow = ''
NewReactUtilRow<REACT_UTIL_REACTOR$> = ReactorNo
NewReactUtilRow<REACT_UTIL_NOTES$> = EvacNotes
NewReactUtilRow<REACT_UTIL_MODE$> = 'S'
NewReactUtilRow<REACT_UTIL_START_DATE$> = CurrDate
NewReactUtilRow<REACT_UTIL_START_TIME$> = CurrTime
NewReactUtilRow<REACT_UTIL_MODE_START_USER$> = @USER4
WorkOrderNo = ReactUtilRow<REACT_UTIL_WO$>
NewReactUtilRow<REACT_UTIL_WO$> = WorkOrderNo
NewReactUtilRow<REACT_UTIL_CUST_NO$> = Xlate('WO_LOG', WorkOrderNo, WO_LOG_CUST_NO$, 'X')
NewReactUtilRow<REACT_UTIL_REACTOR_LOG_ID$> = ''
Database_Services('WriteDataRow', 'REACT_UTIL', KeyToUse, NewReactUtilRow, True$, '', True$)
Database_Services('ReleaseKeyIDLock', 'REACT_UTIL', KeyToUse)
Next_Key('REACT_UTIL', HReactUtil, 'UPDATE', KeyToUse)
NewReactModeRow = ''
NewReactModeRow<Mode$> = EvacMode
NewReactModeRow<Username$> = UserName
NewReactModeRow<Date$> = Oconv(CurrDate, 'D4/')
NewReactModeRow<Time$> = Oconv(CurrTime, 'MTH')
NewReactModeRow<ReactUtilID$> = KeyToUse
NewReactModeRow<ReactorLogID$> = ''
NewReactModeRow<Note$> = EvacNotes
CurrDTM = NewReactModeRow<Date$> : ' ' : NewReactModeRow<Time$>
PrevModeKey = Xlate('REACTOR_CHILD_KEY_IDS', ReactorNo, REACTOR_CHILD_KEY_IDS_REACT_MODE_KEY_IDS$, 'X')<1, 1>
OpenDTM = Field(PrevModeKey, '*', 2)
OpenDTM = Oconv(OpenDTM, 'DT4/^S')
CurrMode = Oconv(Xlate('REACTOR', ReactorNo, 'CURR_MODE', 'X'), '[REACT_MODE_CONV]')
ProdModes = 'Production':@VM
ProdModes := 'Production (incr sampling)'
Locate CurrMode in ProdModes Using @VM Setting vPos then
Locate EvacMode in ProdModes Using @VM Setting vPos else
OutOfProdDTM = NewReactModeRow<Date$> : ' ' : NewReactModeRow<Time$>
obj_React_Status('SetOutOfProdDTM', ReactorNo : @RM : OutOfProdDTM)
end ; // End of check on New Mode
end ; // End of check on Current Mode
Database_Services('WriteDataRow', 'CONFIG', 'REACT_MODE' : ReactorNo, NewReactModeRow, True$, '', True$)
If Error_Services('NoError') then
NumberTools += 1
If CurrMode NE '' then
// Close the currently active mode
crParms = ReactorNo
crParms := @RM : OpenDTM
crParms := @RM : CurrDTM
crParms := @RM : @USER4
crParms := @RM : NewReactModeRow<Note$>
crParms := @RM : NewReactModeRow<ReactUtilID$>
crParms := @RM : NewReactModeRow<ReactorLogID$>
obj_React_Mode('Close', crParms)
end
// Create new active mode record
crParms = ReactorNo
crParms := @RM : CurrDTM
crParms := @RM : @USER4
crParms := @RM : NewReactModeRow<Mode$>
crParms := @RM : NewReactModeRow<Note$>
crParms := @RM : NewReactModeRow<ReactUtilID$>
crParms := @RM : NewReactModeRow<ReactorLogID$>
obj_React_Mode('Create', crParms)
end
end
Next ReactorNo
// Step 2 - Update the Silicon Tools. This logic is based on the TBClick gosub in the Comm_Dialog_Tool_Status
// commuter module. This commuter module supports the TOOL_STATUS form.
ToolIDs = obj_Tool('KeysByType') ; // All tool IDs sorted by TOOL_TYPE
For Each ToolID in ToolIDs using @VM
ToolRow = Database_Services('ReadDataRow', 'TOOL', ToolID)
CurrModeKey = ToolRow<TOOL_CURR_MODE_KEY$>
CurrMode = Xlate('TOOL', ToolID, 'CURR_MODE', 'X')<1, 1>
If CurrMode NE 'OUT' AND CurrMode NE 'FACILITIES (UnSched)' then
If CurrMode EQ '' then
obj_Tool_Log('InitialLog', ToolID)
CurrMode = 'OUT'
end
NumberTools += 1
CurrModeDTM = Field(CurrModeKey, '*', 2)
CurrModeDTM = Oconv(CurrModeDTM, 'DT4/^S')
Parms = ToolID : @RM
Parms := CurrModeDTM : @RM
Parms := 'FACILITIES (UnSched)' : @RM
Parms := EvacNotes
obj_Tool_Log('SetMode', Parms)
end
Next ToolID
// Step 3 - Update the GaN Tools. This logic is based on the ToolOptions gosub in the GaN_Tool_Status commuter
// module. This commuter module supports the GAN_TOOL_STATUS form.
SelectSent = 'SELECT TOOL WITH TOOL_PROC "G" AND WITH CLASS NE "G_REACT" BY TOOL_WH BY TOOL_TYPE'
RList(SelectSent, TARGET_ACTIVELIST$, '', '', '')
EOF = False$
Loop
Readnext ToolID else EOF = True$
Until EOF
ToolRow = Database_Services('ReadDataRow', 'TOOL', ToolID)
CurrModeKey = ToolRow<TOOL_CURR_MODE_KEY$>
CurrMode = Xlate('TOOL', ToolID, 'CURR_MODE', 'X')<1, 1>
If CurrMode NE 'OUT' AND CurrMode NE 'FACILITIES (UnSched)' then
If CurrMode EQ '' then
obj_Tool_Log('InitialLog', ToolID)
CurrMode = 'OUT'
end
NumberTools += 1
CurrModeDTM = Field(CurrModeKey, '*', 2)
CurrModeDTM = Oconv(CurrModeDTM, 'DT4/^S')
Parms = ToolID : @RM
Parms := CurrModeDTM : @RM
Parms := 'FACILITIES (UnSched)' : @RM
Parms := EvacNotes
obj_Tool_Log('SetMode', Parms)
end
Repeat
Msg(@Window, '', 'OK', '', 'Evac Procedures' : @FM : NumberTools : ' tools have been placed into Evac mode.')
end
end event
Event MENU.ADMIN.DEVELOPER.SESSION_MANAGER.MENU()
rv = Start_Window('NDW_SESSION_MANAGER', '')
end event
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Setup_OLE_Controls:
Qualify = ''
Qualify<1> = 1
Qualify<4> = 0
Ctrl = @Window : '.OLE_LAUNCHER'
Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnLaunchAttempt', Qualify)
return

View File

@ -0,0 +1,422 @@
Compile function NDW_MATERIAL_TRACK_PRO_REPORT_EVENTS(CtrlEntId, Event, @PARAMS)
/***********************************************************************************************************************
Name : NDW_MATERIAL_TRACK_PRO_REPORT_EVENTS
Description : Commuter module for the NDW_MATERIAL_TRACK_PRO_REPORT_EVENTS form.
Notes : Application errors should be logged using the Error Services module. There are a few methodological
assumptions built into way errors are managed which are important to understand in order to properly
work with Error Services:
- The term 'top' refers to the originating procedure of a call stack and the term 'bottom' refers to
the last routine (or the current routine) within a call stack. Within the OpenInsight Debugger
this will appear backwards since the originating procedure always appears at the bottom of the
list and the current routine appears at the top of the list. We are using this orientation because
it is common to refer to the process of calling other procedures as 'drilling down'.
- The reason for defining the orientation of the call stack is because Error_Services allows for
multiple error conditions to be appended to an original error. In most cases this will happen when
a procedure at the bottom of the stack generates an error condition and then returns to its
calling procedure. This higher level procedure can optionally add more information relevant to
itself. This continues as the call stack 'bubbles' its way back to the top to where the
originating procedure is waiting.
- Native OpenInsight commands that handle errors (e.g., Set_Status, Set_FSError, Set_EventStatus)
preserve their error state until explicitly cleared. This can hinder the normal execution of code
since subsequent procedures (usually SSPs) will fail if a pre-existing error condition exists.
Our philosophy is that error conditions should automatically be cleared before a new procedure
is executed to avoid this problem. However, the nature of Basic+ does not make this easy to
automate for any given stored procedure. Therefore, if a stored procedure wants to conform to our
philosophy then it should include a call into the 'Clear' service request at the top of the
program. Alternatively this can be done through a common insert (see SERVICE_SETUP for example.)
- Service modules will use the SERVICE_SETUP insert and therefore automatically clear out any
error conditions that were set before.
Parameters :
Service [in] -- Name of the service being requested
Param1-10 [in/out] -- Additional request parameter holders
Response [out] -- Response to be sent back to the Controller (MCP) or requesting procedure
Metadata :
History : (Date, Initials, Notes)
10/29/20 djs Original programmer.
***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler
#window NDW_MATERIAL_TRACK_PRO_REPORT
Declare function Form_Services, Database_Services, RTI_Task_Submit, RTI_Task_Status, MemberOf
Declare subroutine SRP_Show_Window, Send_Message, Set_Property, Database_Services, Material_Track, Report_Services
$Insert EVENT_SETUP
$Insert LOGICAL
$Insert REPORT_CONFIG_EQUATES
SubclassInfo = Form_Services('FindSubclassControl')
Subclass = SubclassInfo<1>
// 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)
RptConfigKey = 'MATERIAL_TRACK*':@User4
If RowExists('REPORT_CONFIG', RptConfigKey) then
UserSettings = Database_Services('ReadDataRow', 'REPORT_CONFIG', RptConfigKey)
Set_Property(@Window:'.PUB_SAVE_SETTINGS', 'ENABLED', False$)
end else
UserSettings = ''
Set_Property(@Window:'.PUB_SAVE_SETTINGS', 'ENABLED', True$)
end
If MemberOf(@User4, 'OI_ADMIN') then Set_Property(@Window:'.CHK_OLD_REPORT', 'VISIBLE', True$)
GoSub Setup_OLE_Controls
GoSub EnableGenerateReportButton
FormSize = ''
SRP_Show_Window(@Window, '', 'C', 'C', 1, '', False$, False$, FormSize)
End Event
Event PUB_GEN_REPORT.CLICK()
// Gather settings from form
ColFltrArray = Get_Property(@Window:'.OLE_EDT_COL_FILTER', 'OLE.ARRAY')
LocFltrArray = Get_Property(@Window:'.OLE_EDT_LOC_FILTER', 'OLE.ARRAY')
NoMatFlag = Get_Property(@Window:'.CHK_NO_MAT_FOUND', 'CHECK')
OldReport = Get_Property(@Window:'.CHK_OLD_REPORT', 'CHECK')
RptColumns = ''
RptLocations = ''
Columns = ColFltrArray<1>
Flags = ColFltrArray<2>
For each Column in Columns using @VM setting vPos
ColumnEnabled = Flags<0, vPos>
If ColumnEnabled then RptColumns<0, -1> = Column
Next Column
Locations = LocFltrArray<1>
Flags = LocFltrArray<3>
For each Location in Locations using @VM setting vPos
LocationEnabled = Flags<0, vPos>
If LocationEnabled then RptLocations<0, -1> = Location
Next Location
Report_Services('PrintMaterialTrackReport', RptColumns, RptLocations, NoMatFlag, OldReport)
end event
Event PUB_SAVE_SETTINGS.CLICK()
RptConfigKey = 'MATERIAL_TRACK*':@User4
If RowExists('REPORT_CONFIG', RptConfigKey) then
UserSettings = Database_Services('ReadDataRow', 'REPORT_CONFIG', RptConfigKey)
end else
UserSettings = ''
end
// Gather settings from form
ColFltrArray = Get_Property(@Window:'.OLE_EDT_COL_FILTER', 'OLE.ARRAY')
LocFltrArray = Get_Property(@Window:'.OLE_EDT_LOC_FILTER', 'OLE.ARRAY')
NoMatFoundFlag = Get_Property(@Window:'.CHK_NO_MAT_FOUND', 'CHECK')
RptColumns = ''
RptLocations = ''
Columns = ColFltrArray<1>
Flags = ColFltrArray<2>
For each Column in Columns using @VM setting vPos
ColumnEnabled = Flags<0, vPos>
If ColumnEnabled then RptColumns<0, -1> = Column
Next Column
UserSettings<REPORT_CONFIG.REPORT_COLUMNS$> = Flags
Locations = LocFltrArray<1>
Flags = LocFltrArray<3>
For each Location in Locations using @VM setting vPos
LocationEnabled = Flags<0, vPos>
If LocationEnabled then RptLocations<0, -1> = Location
Next Location
UserSettings<REPORT_CONFIG.LOCATION_FILTER$> = Flags
UserSettings<REPORT_CONFIG.NO_MAT_FOUND$> = NoMatFoundFlag
Database_Services('WriteDataRow', 'REPORT_CONFIG', RptConfigKey, UserSettings, True$, False$, True$)
Set_Property(CtrlEntID, 'ENABLED', False$)
end event
Event OLE_EDT_COL_FILTER.OnCheckChanged(Cell, OldValue, NewValue)
GoSub EnableSaveButton
GoSub EnableGenerateReportButton
end event
Event OLE_EDT_LOC_FILTER.OnCheckChanged(Cell, OldValue, NewValue)
GoSub EnableReportColumns
GoSub EnableSaveButton
GoSub EnableGenerateReportButton
end event
Event CHK_NO_MAT_FOUND.CLICK()
GoSub EnableSaveButton
GoSub EnableGenerateReportButton
end event
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Setup_OLE_Controls:
// Report Columns
RptCols = ''
RptCols<1, 1> = 'React No'
RptCols<1, 2> = 'React Type'
RptCols<1, 3> = 'WO No'
RptCols<1, 4> = 'SAP Prod No'
RptCols<1, 5> = 'Sub Part No'
RptCols<1, 6> = 'Epi Part No'
RptCols<1, 7> = 'WO Qty'
RptCols<1, 8> = 'RX Qty'
RptCols<1, 9> = 'UnRel Qty'
RptCols<1, 10> = 'Kit Location'
RptCols<1, 11> = 'Kit Qty'
RptCols<1, 12> = '+/-'
RptCols<1, 13> = 'Kit RO'
RptCols<1, 14> = 'PTI RO'
RptCols<1, 15> = 'Load'
RptCols<1, 16> = 'Comments'
RptColsEnabled = ''
If UserSettings NE '' then
RptColsEnabled = UserSettings<REPORT_CONFIG.REPORT_COLUMNS$>
end else
For each Col in RptCols using @VM setting vPos
RptColsEnabled<0, -1> = True$
Next Col
end
NoMatFoundFlag = UserSettings<REPORT_CONFIG.NO_MAT_FOUND$>
Set_Property(@Window:'.CHK_NO_MAT_FOUND', 'CHECK', NoMatFoundFlag)
RptColsArray = RptCols:@FM:RptColsEnabled
// Location Filters
LocFilters = ''
LocFilters<1, 1> = 'SR*KTR]'
LocFilters<1, 2> = '1K*PTI'
LocFilters<1, 3> = 'CR*BE'
LocFilters<1, 4> = 'CR*BO'
LocFilters<1, 5> = 'CR*TUN'
LocFilters<1, 6> = 'CR*EPR'
LocFilters<1, 7> = 'CR*FE'
LocFilters<1, 8> = 'CR*FEH'
LocFilters<1, 9> = 'CR*FO'
LocFilters<1, 10> = 'CR*FOH'
LocDescriptions = ''
LocsEnabled = ''
If UserSettings NE '' then
LocsEnabled = UserSettings<REPORT_CONFIG.LOCATION_FILTER$>
For each Loc in LocFilters using @VM setting vPos
If vPos GT 1 then
LocDescriptions<0, -1> = Xlate('LOCATION', Loc, 'DESC', 'X')
end else
LocDescriptions<0, -1> = 'All Kit Racks'
end
Next Loc
end else
For each Loc in LocFilters using @VM setting vPos
LocsEnabled<0, -1> = True$
If vPos GT 1 then
LocDescriptions<0, -1> = Xlate('LOCATION', Loc, 'DESC', 'X')
end else
LocDescriptions<0, -1> = 'All Kit Racks'
end
Next Loc
end
LocFltrArray = LocFilters:@FM:LocDescriptions:@FM:LocsEnabled
ColFltrCtrl = @Window:'.OLE_EDT_COL_FILTER'
LocFltrCtrl = @Window:'.OLE_EDT_LOC_FILTER'
// Qualify OLE events that we want to intercept
Qualifier = ''
Qualifier<1> = 1
Qualifier<4> = 0 ; * process synchronously (i.e. immediately)
Send_Message(ColFltrCtrl, 'QUALIFY_EVENT', 'OLE.OnCheckChanged', Qualifier)
Send_Message(LocFltrCtrl, 'QUALIFY_EVENT', 'OLE.OnCheckChanged', Qualifier)
NumColFltrCols = 2
NumColFltrRows = DCount(RptCols, @VM)
NumLocFltrCols = 3
NumLocFltrRows = DCount(LocFilters, @VM)
HeaderFontArray = 'Segoe UI':@SVM:8:@SVM:700
ColFltrDimArray = NumColFltrCols : @FM : NumColFltrRows
LocFltrDimArray = NumLocFltrCols : @FM : NumLocFltrRows
DataColArray = ''
DataColArray<4> = True$ ; // Autosize column
HeaderTitles = 'Column':@VM:'Enabled'
Set_Property(ColFltrCtrl, "OLE.TitleList", HeaderTitles)
Set_Property(ColFltrCtrl, "OLE.CellFont[All; All]", 'Segoe UI':@SVM:8)
Set_Property(ColFltrCtrl, "OLE.Dimension", ColFltrDimArray)
Set_Property(ColFltrCtrl, "OLE.HeaderFont[All; 1]", HeaderFontArray)
Set_Property(ColFltrCtrl, "OLE.HeaderColumn[1]", '':@FM:False$:@FM)
Set_Property(ColFltrCtrl, "OLE.HeaderAlignment[All; 1]", "Top":@FM:"Center":@FM:"Center")
Set_Property(ColFltrCtrl, "OLE.HeaderColors[All; 1]", @FM:"{200, 200, 200}")
Set_Property(ColFltrCtrl, "OLE.CellType[2; All]", "Check Box")
Set_Property(ColFltrCtrl, "OLE.CellAlignment[2; All]", "Top":@FM:"Center":@FM:"Center")
Set_Property(ColFltrCtrl, "OLE.DataColumn[1]", DataColArray)
Set_Property(ColFltrCtrl, "OLE.ARRAY", RptColsArray)
Set_Property(ColFltrCtrl, "OLE.CellCheckEnabled[2; 1-3]", False)
CellColorArray = 'None':@FM:"{240, 240, 240}"
Set_Property(ColFltrCtrl, "OLE.CellColors[All; 1-3]", CellColorArray)
Set_Property(ColFltrCtrl, "OLE.CellProtection[All; 1-3]", 'FUL')
HeaderTitles = 'Location':@VM:'Description':@VM:'Enabled'
Set_Property(LocFltrCtrl, "OLE.TitleList", HeaderTitles)
Set_Property(LocFltrCtrl, "OLE.CellFont[All; All]", 'Segoe UI':@SVM:8)
Set_Property(LocFltrCtrl, "OLE.Dimension", LocFltrDimArray)
Set_Property(LocFltrCtrl, "OLE.LIST", '')
Set_Property(LocFltrCtrl, "OLE.HeaderFont[All; 1]", HeaderFontArray)
Set_Property(LocFltrCtrl, "OLE.HeaderColumn[1]", '':@FM:False$:@FM)
Set_Property(LocFltrCtrl, "OLE.HeaderAlignment[All; 1]", "Top":@FM:"Center":@FM:"Center")
Set_Property(LocFltrCtrl, "OLE.HeaderColors[All; 1]", @FM:"{200, 200, 200}")
Set_Property(LocFltrCtrl, "OLE.CellType[3; All]", "Check Box")
Set_Property(LocFltrCtrl, "OLE.DataColumn[2]", DataColArray)
Set_Property(LocFltrCtrl, "OLE.CellAlignment[3; All]", "Top":@FM:"Center":@FM:"Center")
Set_Property(LocFltrCtrl, "OLE.ARRAY", LocFltrArray)
return
EnableSaveButton:
// Enable save settings button if necessary
RptConfigKey = 'MATERIAL_TRACK*':@User4
If RowExists('REPORT_CONFIG', RptConfigKey) then
UserSettings = Database_Services('ReadDataRow', 'REPORT_CONFIG', RptConfigKey)
end else
UserSettings = ''
end
// Gather settings from form
ColFltrArray = Get_Property(@Window:'.OLE_EDT_COL_FILTER', 'OLE.ARRAY')
LocFltrArray = Get_Property(@Window:'.OLE_EDT_LOC_FILTER', 'OLE.ARRAY')
NewColFlags = ColFltrArray<2>
CurrColFlags = UserSettings<REPORT_CONFIG.REPORT_COLUMNS$>
NewLocFlags = LocFltrArray<3>
CurrLocFlags = UserSettings<REPORT_CONFIG.LOCATION_FILTER$>
NewNoMatFoundFlag = Get_Property(@Window:'.CHK_NO_MAT_FOUND', 'CHECK')
CurrNoMatFoundFlag = UserSettings<REPORT_CONFIG.NO_MAT_FOUND$>
ChangeDetected = ( (NewColFlags NE CurrColFlags) or (NewLocFlags NE CurrLocFlags) or (NewNoMatFoundFlag NE CurrNoMatFoundFlag) )
Set_Property(@Window:'.PUB_SAVE_SETTINGS', 'ENABLED', ChangeDetected)
return
EnableGenerateReportButton:
// Gather settings from form
LocFltrArray = Get_Property(@Window:'.OLE_EDT_LOC_FILTER', 'OLE.ARRAY')
NoMaterialFlag = Get_Property(@Window:'.CHK_NO_MAT_FOUND', 'CHECK')
LocFlags = LocFltrArray<3>
ButtonEnabled = ( (Sum(LocFlags) GT 0) or (NoMaterialFlag EQ True$) )
Set_Property(@Window:'.PUB_GEN_REPORT', 'ENABLED', ButtonEnabled)
return
EnableReportColumns:
ColFltrCtrl = @Window:'.OLE_EDT_COL_FILTER'
LocFltrCtrl = @Window:'.OLE_EDT_LOC_FILTER'
// Gather settings from form
LocFltrArray = Get_Property(LocFltrCtrl, 'OLE.ARRAY')
LocFlags = LocFltrArray<3>
KitRackFlag = LocFlags<0, 1>
PTIRackFlag = LocFlags<0, 2>
LoadedFlags = Field(LocFlags, @VM , 3, 8)
LoadedColEnabled = (Sum(LoadedFlags) GT 0)
EnabledCellColorArray = 'None':@FM:'None'
DisabledCellColorArray = 'None':@FM:"{240, 240, 240}"
If KitRackFlag EQ True$ then
Set_Property(ColFltrCtrl, "OLE.CellCheck[2; 10-13]", True$)
Set_Property(ColFltrCtrl, "OLE.CellColors[All; 10-13]", EnabledCellColorArray)
Set_Property(ColFltrCtrl, "OLE.CellProtection[All; 10-13]", 'SEL')
Set_Property(ColFltrCtrl, "OLE.CellCheckEnabled[2; 10-13]", True$)
end else
Set_Property(ColFltrCtrl, "OLE.CellCheck[2; 10-13]", False$)
Set_Property(ColFltrCtrl, "OLE.CellColors[All; 10-13]", DisabledCellColorArray)
Set_Property(ColFltrCtrl, "OLE.CellProtection[All; 10-13]", 'FUL')
Set_Property(ColFltrCtrl, "OLE.CellCheckEnabled[2; 10-13]", False$)
end
If PTIRackFlag EQ True$ then
Set_Property(ColFltrCtrl, "OLE.CellCheck[2; 14]", True$)
Set_Property(ColFltrCtrl, "OLE.CellColors[All; 14]", EnabledCellColorArray)
Set_Property(ColFltrCtrl, "OLE.CellProtection[All; 14]", 'SEL')
Set_Property(ColFltrCtrl, "OLE.CellCheckEnabled[2; 14]", True$)
end else
Set_Property(ColFltrCtrl, "OLE.CellCheck[2; 14]", False$)
Set_Property(ColFltrCtrl, "OLE.CellColors[All; 14]", DisabledCellColorArray)
Set_Property(ColFltrCtrl, "OLE.CellProtection[All; 14]", 'FUL')
Set_Property(ColFltrCtrl, "OLE.CellCheckEnabled[2; 14]", False$)
end
If LoadedColEnabled EQ True$ then
Set_Property(ColFltrCtrl, "OLE.CellCheck[2; 15]", True$)
Set_Property(ColFltrCtrl, "OLE.CellColors[All; 15]", EnabledCellColorArray)
Set_Property(ColFltrCtrl, "OLE.CellProtection[All; 15]", 'SEL')
Set_Property(ColFltrCtrl, "OLE.CellCheckEnabled[2; 15]", True$)
end else
Set_Property(ColFltrCtrl, "OLE.CellCheck[2; 15]", False$)
Set_Property(ColFltrCtrl, "OLE.CellColors[All; 15]", DisabledCellColorArray)
Set_Property(ColFltrCtrl, "OLE.CellProtection[All; 15]", 'FUL')
Set_Property(ColFltrCtrl, "OLE.CellCheckEnabled[2; 15]", False$)
end
return

View File

@ -39,6 +39,8 @@ $Insert POPUP_EQUATES
$Insert NOTIFICATION_EQUATES $Insert NOTIFICATION_EQUATES
$Insert LSL_USERS_EQUATES $Insert LSL_USERS_EQUATES
EQU READONLY_GREEN$ TO 192 + (220*256) + (192*65536)
Declare function Admin_User, Database_Services, Error_Services, Active_Directory_Services, SRP_Array Declare function Admin_User, Database_Services, Error_Services, Active_Directory_Services, SRP_Array
Declare subroutine PlaceDialog, Error_Services, Database_Services, Btree.Extract, ErrMsg Declare subroutine PlaceDialog, Error_Services, Database_Services, Btree.Extract, ErrMsg
@ -641,4 +643,3 @@ return

View File

@ -45,7 +45,8 @@ EQU COL$PMID to 1
EQU COL$DESC to 2 EQU COL$DESC to 2
EQU COL$DATECOMP to 3 EQU COL$DATECOMP to 3
EQU COL$DATEDUE to 4 EQU COL$DATEDUE to 4
EQU COL$USER to 5 EQU COL$LATE to 5
EQU COL$USER to 6
// Update the arguments so that the OpenInsight OLE event will treate the ActiveX event as a native event handler. // Update the arguments so that the OpenInsight OLE event will treate the ActiveX event as a native event handler.
If Event EQ 'OLE' then If Event EQ 'OLE' then
@ -101,7 +102,7 @@ Event PUB_EXPORT_TO_EXCEL.CLICK()
if FilePath NE '' then if FilePath NE '' then
PmHistoryOutput = '' PmHistoryOutput = ''
PmHistoryOutput<1> = 'PM ID' : @VM : 'Description' : @VM : 'Complete Date' : @VM : 'Due Date' : @VM : 'User' PmHistoryOutput<1> = 'PM ID' : @VM : 'Description' : @VM : 'Complete Date' : @VM : 'Due Date' : @VM : 'Late' : @VM : 'User'
PMHistoryArray = Get_Property(@Window : '.OLE_HIST_TABLE', "OLE.ARRAY") PMHistoryArray = Get_Property(@Window : '.OLE_HIST_TABLE', "OLE.ARRAY")
PMHistoryArray = SRP_Array('Rotate',PMHistoryArray) PMHistoryArray = SRP_Array('Rotate',PMHistoryArray)
for each DataRow in PmHistoryArray using @FM setting dPos for each DataRow in PmHistoryArray using @FM setting dPos
@ -151,10 +152,13 @@ RunReport:
PMRec = Database_Services('ReadDataRow', 'PM', PMId) PMRec = Database_Services('ReadDataRow', 'PM', PMId)
SchedDtm = SRP_Datetime('Combine', PMRec<PM_SCHED_DT$>, PMRec<PM_SCHED_TM$>) SchedDtm = SRP_Datetime('Combine', PMRec<PM_SCHED_DT$>, PMRec<PM_SCHED_TM$>)
DueByDTM = obj_PM_Spec('LateStart',PMId:@RM:PMSpecRecord) DueByDTM = obj_PM_Spec('LateStart',PMId:@RM:PMSpecRecord)
Late = Xlate('PM', PMId, 'LATE', 'X')
If Late then Late = 'Yes' else Late = 'No'
PMHistoryArray<pPos, COL$PMID> = PMId PMHistoryArray<pPos, COL$PMID> = PMId
PMHistoryArray<pPos, COL$DESC> = PMDescription PMHistoryArray<pPos, COL$DESC> = PMDescription
PMHistoryArray<pPos, COL$DATECOMP> = OCONV(PMRec<PM_COMP_DTM$>, 'DT') PMHistoryArray<pPos, COL$DATECOMP> = OCONV(PMRec<PM_COMP_DTM$>, 'DT')
PMHistoryArray<pPos, COL$DATEDUE> = OCONV(SchedDtm, 'DT') PMHistoryArray<pPos, COL$DATEDUE> = OCONV(SchedDtm, 'DT')
PMHistoryArray<pPos, COL$LATE> = Late
PMHistoryArray<pPos, COL$USER> = OConv(PMRec<PM_COMP_BY$>, '[XLATE_CONV,LSL_USERS*FIRST_LAST]') PMHistoryArray<pPos, COL$USER> = OConv(PMRec<PM_COMP_BY$>, '[XLATE_CONV,LSL_USERS*FIRST_LAST]')
While Msg(@window, MsgUp, pPos, MSGINSTUPDATE$) ; * update the gauge and check if cancel was pressed While Msg(@window, MsgUp, pPos, MSGINSTUPDATE$) ; * update the gauge and check if cancel was pressed
Next PMId Next PMId
@ -187,9 +191,9 @@ Setup_OLE_Controls:
EdtTableCtrl = @Window : '.OLE_HIST_TABLE' EdtTableCtrl = @Window : '.OLE_HIST_TABLE'
Set_Property(EdtTableCtrl, 'OLE.Redraw', False$) Set_Property(EdtTableCtrl, 'OLE.Redraw', False$)
//Set up columns //Set up columns
Set_Property(EdtTableCtrl, "OLE.Dimension", 5);*Define number of columns Set_Property(EdtTableCtrl, "OLE.Dimension", 6);*Define number of columns
HeaderTitles = 'PM ID':@VM:'Desc':@VM:'Date Completed':@VM:'Sched Due':@VM:'User Completed'; *Define the column header titles HeaderTitles = 'PM ID':@VM:'Desc':@VM:'Date Completed':@VM:'Sched Due':@VM:'Late':@VM:'User Completed'; *Define the column header titles
Set_Property(EdtTableCtrl, "OLE.TitleList", HeaderTitles); *Set the column titles Set_Property(EdtTableCtrl, "OLE.TitleList", HeaderTitles); *Set the column titles
//Set the column Sizes //Set the column Sizes
@ -199,7 +203,7 @@ Setup_OLE_Controls:
ColSize<1> = 45 ColSize<1> = 45
Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$PMID:"]", ColSize) Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$PMID:"]", ColSize)
//Column 2 //Column 2
ColSize<1> = 250 ColSize<1> = 200
ColSize<4> = True$ ColSize<4> = True$
Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$DESC:"]", ColSize) Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$DESC:"]", ColSize)
ColSize<4> = False$ ColSize<4> = False$
@ -207,10 +211,13 @@ Setup_OLE_Controls:
ColSize<1> = 120 ColSize<1> = 120
Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$DATECOMP:"]", ColSize) Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$DATECOMP:"]", ColSize)
//Column 4 //Column 4
ColSize<1> = 135 ColSize<1> = 110
Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$DATEDUE:"]", ColSize) Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$DATEDUE:"]", ColSize)
//Column 5 //Column 5
ColSize<1> = 185 ColSize<1> = 50
Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$LATE:"]", ColSize)
//Column 6
ColSize<1> = 160
Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$USER:"]", ColSize) Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$USER:"]", ColSize)
Set_Property(EdtTableCtrl, 'OLE.Border', 'XP Flat') Set_Property(EdtTableCtrl, 'OLE.Border', 'XP Flat')
@ -227,4 +234,3 @@ Setup_OLE_Controls:
return return

View File

@ -36,7 +36,7 @@ $Insert APP_INSERTS
$Insert EVENT_SETUP $Insert EVENT_SETUP
$Insert MSG_EQUATES $Insert MSG_EQUATES
Declare function Reactor_Services, Labeling_Services, Printer_Select Declare function Reactor_Services
Declare subroutine PlaceDialog, Labeling_Services Declare subroutine PlaceDialog, Labeling_Services
GoToEvent Event for CtrlEntId else GoToEvent Event for CtrlEntId else
@ -77,30 +77,15 @@ end event
Event PUB_PRINT.CLICK() Event PUB_PRINT.CLICK()
ErrorMsg = ''
ReactNo = Get_Property(@Window:'.COB_REACTOR', 'TEXT') ReactNo = Get_Property(@Window:'.COB_REACTOR', 'TEXT')
LLSide = Get_Property(@Window:'.COB_LOAD_LOCK_SIDE', 'TEXT') LLSide = Get_Property(@Window:'.COB_LOAD_LOCK_SIDE', 'TEXT')
ReactorZpl = Labeling_Services('GetReactorLabelZPL', ReactNo, LLSide) Def = ""
If Error_Services('NoError') then Def<MTEXT$> = "Printing label..."
PrintPath = Printer_Select() Def<MTYPE$> = "U"
If PrintPath NE '' then MsgUp = Msg(@window, Def) ;* display the processing message
Def = "" Labeling_Services('PrintReactorLabel', ReactNo, LLSide)
Def<MTEXT$> = "Printing label..." Msg(@window, MsgUp) ;* take down the processing message
Def<MTYPE$> = "U" If Error_Services('HasError') then Error_Services('DisplayError')
MsgUp = Msg(@window, Def) ;* display the processing message
Msg(@window, MsgUp) ;* take down the processing message
Labeling_Services('PrintLabel', ReactorZpl, PrintPath)
If Error_Services('HasError') then
ErrorMsg = Error_Services('GetMessage')
end
end
end else
ErrorMsg = Error_Services('GetMessage')
end
If ErrorMsg NE '' then
Msg(@Window, '', 'OK', '', 'Print Error':@FM:ErrorMsg)
end
end event end event

View File

@ -44,7 +44,7 @@ $insert SUPPLEMENTS_EQUATES
equ WOCust$ to 2 equ WOCust$ to 2
Declare subroutine SRP_Show_Window, Rds_Services, ErrMsg, Start_Window, Placedialog, Supplement_Services, Hold_Services Declare subroutine SRP_Show_Window, Rds_Services, ErrMsg, Start_Window, Placedialog, Supplement_Services, Hold_Services
Declare subroutine Labeling_Services Declare subroutine Labeling_Services
Declare function Database_Services, Material_Services, Rds_Services, RGB, SRP_Array, MemberOf, Supplement_Services Declare function Database_Services, Material_Services, Rds_Services, RGB, SRP_Array, MemberOf, Supplement_Services
Declare function Hold_Services, Datetime, Printer_Select Declare function Hold_Services, Datetime, Printer_Select
@ -59,11 +59,11 @@ If Event EQ 'OLE' then
Transfer Param1 to Event Transfer Param1 to Event
Transfer Param2 to Param1 Transfer Param2 to Param1
Transfer Param3 to Param2 Transfer Param3 to Param2
Transfer Param4 to Param3 * Transfer Param4 to Param3
Transfer Param5 to Param4 * Transfer Param5 to Param4
Transfer Param6 to Param5 * Transfer Param6 to Param5
Transfer Param7 to Param6 * Transfer Param7 to Param6
Transfer Param8 to Param7 * Transfer Param8 to Param7
end end
GoToEvent Event for CtrlEntID GoToEvent Event for CtrlEntID
@ -186,83 +186,78 @@ Event PUB_ENG_OPTIONS.CLICK()
NumRows = DCount(WOMatKeys, @VM) NumRows = DCount(WOMatKeys, @VM)
ServiceModules = '' Begin Case
Services = ''
Caption = ''
For each Sel in SelOpt using @VM Case SelOpt EQ 'CLEAN_INSP'
If Sel EQ 'CLEAN_INSP' then Caption = "Updating Clean & Insp specs for selected RDS cassettes..."
Caption<0, -1> = "Updating Clean & Insp specs for selected RDS cassettes..." ServiceModules = 'CLEAN_INSP_SERVICES'
ServiceModules<0, -1> = 'CLEAN_INSP_SERVICES' Services = 'UpdateAllCleanInsp'
Services<0, -1> = 'UpdateAllCleanInsp'
end
If SelOpt EQ 'QA_MET' then Case SelOpt EQ 'QA_MET'
Caption<0, -1> = "Updating QA Metrology specs for selected RDS cassettes..." Caption = "Updating QA Metrology specs for selected RDS cassettes..."
ServiceModules<0, -1> = 'WO_MAT_QA_SERVICES' ServiceModules = 'WO_MAT_QA_SERVICES'
Services<0, -1> = 'UpdateQAMet' Services = 'UpdateQAMet'
end
If SelOpt EQ 'UPDATE_RDS_LAYER' then Case SelOpt EQ 'UPDATE_RDS_LAYER'
Caption<0, -1> = "Updating RDS Layer specs for selected RDS cassettes..." Caption = "Updating RDS Layer specs for selected RDS cassettes..."
ServiceModules<0, -1> = 'RDS_LAYER_SERVICES' ServiceModules = 'RDS_LAYER_SERVICES'
Services<0, -1> = 'UpdateRDSLayerSpecs' Services = 'UpdateRDSLayerSpecs'
end
If SelOpt EQ 'UPDATE_RDS_TEST' then Case SelOpt EQ 'CLEAN_INSP':@VM:'QA_MET'
Caption<0, -1> = "Updating RDS Test specs for selected RDS cassettes..." Caption = "Updating Clean & Insp and QA Metrology specs for selected RDS cassettes..."
ServiceModules<0, -1> = 'RDS_TEST_SERVICES' ServiceModules = 'CLEAN_INSP_SERVICES':@VM:'WO_MAT_QA_SERVICES'
Services<0, -1> = 'UpdateRDSTestSpecs' Services = 'UpdateAllCleanInsp':@VM:'UpdateQAMet'
end
Next Sel
Swap @VM with CRLF$ in Caption Case SelOpt EQ 'QA_MET':@VM:'UPDATE_RDS_LAYER'
Caption = "Updating RDS Layer and QA Metrology specs for selected RDS cassettes..."
ServiceModules = 'WO_MAT_QA_SERVICES':@VM:'RDS_LAYER_SERVICES'
Services = 'UpdateQAMet':@VM:'UpdateRDSLayerSpecs'
Case SelOpt EQ 'CLEAN_INSP':@VM: 'UPDATE_RDS_LAYER'
Caption = "Updating RDS Layer and Clean & Insp specs for selected RDS cassettes..."
ServiceModules = 'CLEAN_INSP_SERVICES':@VM:'RDS_LAYER_SERVICES'
Services = 'UpdateAllCleanInsp':@VM:'UpdateRDSLayerSpecs'
Case SelOpt EQ 'CLEAN_INSP':@VM:'QA_MET':@VM: 'UPDATE_RDS_LAYER'
Caption = "Updating Clean & Insp, QA Metrology, and RDS Layer specs for selected RDS cassettes..."
ServiceModules = 'CLEAN_INSP_SERVICES':@VM:'WO_MAT_QA_SERVICES' :@VM: 'RDS_LAYER_SERVICES'
Services = 'UpdateAllCleanInsp':@VM:'UpdateQAMet' :@VM: 'UpdateRDSLayerSpecs'
End Case
If ServiceModules NE '' then If ServiceModules NE '' then
ErrorMsg = '' Def = ""
Def = ''
Def<MCAPTION$> = Caption Def<MCAPTION$> = Caption
Def<MTYPE$> = "GC" Def<MTYPE$> = "GC"
Def<MEXTENT$> = NumRows Def<MEXTENT$> = NumRows
Def<MTEXTWIDTH$> = 600 Def<MTEXTWIDTH$> = 600
Def<MCOL$> = -2 MsgUp = Msg(@WINDOW, Def) ;* Start gas guage message
Def<MROW$> = -2
MsgUp = Msg(@Window, Def) ;* Start gas guage message
For each WOMatKey in WOMatKeys using @VM setting vPos For each WOMatKey in WOMatKeys using @VM setting vPos
Running = Msg(@Window, MsgUp, vPos, MSGINSTUPDATE$) ;* Update gas guage Running = Msg(@WINDOW, MsgUp, vPos, MSGINSTUPDATE$) ;* Update gas guage
For each ServiceModule in ServiceModules using @VM setting sPos For each ServiceModule in ServiceModules using @VM setting sPos
Service = Services<0, sPos> Service = Services<0, sPos>
If ( (Service _EQC 'UpdateRDSLayerSpecs') or (Service _EQC 'UpdateRDSTestSpecs') ) then If Service = 'UpdateRDSLayerSpecs' then
RDSKey = SelRDSList<4, vPos> RDSKey = SelRDSList<4, vPos>
Ans = Function(@ServiceModule(Service, RDSKey)) Ans = Function(@ServiceModule(Service, RDSKey))
end else end else
Ans = Function(@ServiceModule(Service, WOMatKey)) Ans = Function(@ServiceModule(Service, WOMatKey))
end end
If Error_Services('HasError') then If Error_Services('HasError') then
ErrorMsg = Error_Services('GetMessage') Error_Services('DisplayError')
end end
Until (ErrorMsg NE '')
Next ServiceModule Next ServiceModule
Until (ErrorMsg NE '')
Next WOMatKey Next WOMatKey
Msg(@WINDOW,MsgUp) ;* Take gas guage down
Msg(@Window,MsgUp) ;* Take gas guage down
end end
Def = '' If Error_Services('NoError') then
Def<MCOL$> = -2 Def = ""
Def<MROW$> = -2
If (ErrorMsg EQ '') then
Def<MICON$> = '*' Def<MICON$> = '*'
Def<MCAPTION$> = 'Success' Def<MCAPTION$> = 'Success'
Def<MTEXT$> = 'Update complete!' Def<MTEXT$> = "Update complete!"
end else Def<MTYPE$> = "BO"
Def<MICON$> = 'H' MsgUp = Msg(@window, Def)
Def<MCAPTION$> = 'Update failed!'
Def<MTEXT$> = ErrorMsg
end end
Def<MTYPE$> = "BO"
MsgUp = Msg(@Window, Def, 'OK')
end end
end event end event
@ -282,7 +277,7 @@ Event PUB_ON_HOLD.CLICK()
HoldEntity = 'RDS' HoldEntity = 'RDS'
HoldType = 'HOLD' HoldType = 'HOLD'
HoldData = '' HoldData = ''
HoldData = Dialog_Box('DIALOG_HOLD',@Window,Transition:@FM:@FM:HoldType) HoldData = Dialog_Box('DIALOG_HOLD',@WINDOW,Transition:@FM:@FM:HoldType)
If HoldData NE 'Cancel' then If HoldData NE 'Cancel' then
GoSub GetView GoSub GetView
Hold_Services('EnableMultipleHolds', WOMatKeys, HoldEntity, RDSKeys, 'NDW_RDS_QUERY', '', HoldData) Hold_Services('EnableMultipleHolds', WOMatKeys, HoldEntity, RDSKeys, 'NDW_RDS_QUERY', '', HoldData)
@ -294,7 +289,7 @@ Event PUB_ON_HOLD.CLICK()
MsgInfo<MTYPE$> = 'BNY' MsgInfo<MTYPE$> = 'BNY'
MsgInfo<MTEXT$> = 'Hold Successful. Would you like to print label(s)?' MsgInfo<MTEXT$> = 'Hold Successful. Would you like to print label(s)?'
MsgInfo<MICON$> = '!' MsgInfo<MICON$> = '!'
PrintLabel = Msg(@Window,MsgInfo,'') PrintLabel = Msg(@WINDOW,MsgInfo,'')
HoldBy = HoldData<1> HoldBy = HoldData<1>
Reason = HoldData<2> Reason = HoldData<2>
Stage = HoldData<4> Stage = HoldData<4>
@ -338,7 +333,7 @@ Event PUB_OFF_HOLD.CLICK()
Transition = True$ Transition = True$
HoldType = 'HOLD' HoldType = 'HOLD'
HoldData = '' HoldData = ''
HoldData = Dialog_Box('DIALOG_HOLD',@Window,Transition:@FM:@FM:HoldType) HoldData = Dialog_Box('DIALOG_HOLD',@WINDOW,Transition:@FM:@FM:HoldType)
If HoldData NE 'Cancel' then If HoldData NE 'Cancel' then
GoSub GetView GoSub GetView
Hold_Services('DisableMultipleHolds', WOMatKeys, 'RDS', RDSKeys, 'NDW_RDS_QUERY', '', HoldData) Hold_Services('DisableMultipleHolds', WOMatKeys, 'RDS', RDSKeys, 'NDW_RDS_QUERY', '', HoldData)
@ -513,23 +508,23 @@ GetRdsColumns:
GoSub GetView GoSub GetView
If CurrentViewSelection _EQC 'quick' then If CurrentViewSelection _EQC 'quick' then
RDSColumns = '' RDSColumns = ''
RDSColumns<0, 1> = 'ABBREV_OR_CO_NAME' RDSColumns<0, 1> = 'ABBREV_OR_CO_NAME'
RDSColumns<0, 2> = 'WO' RDSColumns<0, 2> = 'WO'
RDSColumns<0, 3> = 'WO_STEP' RDSColumns<0, 3> = 'WO_STEP'
RDSColumns<0, 4> = 'SEQ' RDSColumns<0, 4> = 'SEQ'
RDSColumns<0, 5> = 'REACTOR' RDSColumns<0, 5> = 'REACTOR'
RDSColumns<0, 6> = 'RUN_ORDER_NUM' RDSColumns<0, 6> = 'RUN_ORDER_NUM'
RDSColumns<0, 7> = 'UNLOAD_THICK_TEST' RDSColumns<0, 7> = 'UNLOAD_THICK_TEST'
RDSColumns<0, 8> = 'HGCV_TEST' RDSColumns<0, 8> = 'HGCV_TEST'
RDSColumns<0, 9> = 'DATE_IN' RDSColumns<0, 9> = 'DATE_IN'
RDSColumns<0, 10> = 'TIME_IN' RDSColumns<0, 10> = 'TIME_IN'
RDSColumns<0, 11> = 'DATE_OUT' RDSColumns<0, 11> = 'DATE_OUT'
RDSColumns<0, 12> = 'TIME_OUT' RDSColumns<0, 12> = 'TIME_OUT'
RDSColumns<0, 13> = 'PART_NUM' RDSColumns<0, 13> = 'PART_NUM'
RDSColumns<0, 14> = 'LOT_NUM' RDSColumns<0, 14> = 'LOT_NUM'
RDSColumns<0, 15> = 'SUPPL_INST' RDSColumns<0, 15> = 'SUPPL_INST'
RDSColumns<0, 16> = 'HOLD_STATUS' RDSColumns<0, 16> = 'HOLD_STATUS'
end else end else
RDSColumns = '' RDSColumns = ''
RDSColumns<0, 1> = 'ABBREV_OR_CO_NAME' RDSColumns<0, 1> = 'ABBREV_OR_CO_NAME'
@ -671,7 +666,7 @@ CheckSelectedForHolds:
Until HoldOnFlag EQ True$ and HoldOffFlag EQ True$ Until HoldOnFlag EQ True$ and HoldOffFlag EQ True$
Next K Next K
end end
if MemberOf(@User4, 'ENG_TECH') OR MemberOf(@User4, 'LEAD') OR MemberOf(@User4, 'SUPERVISOR') then if MemberOf(@USER4, 'ENG_TECH') OR MemberOf(@USER4, 'LEAD') OR MemberOf(@USER4, 'SUPERVISOR') then
// IF ANY SELECTED LOTS ARE ON HOLD, ENABLE PUB_OFF_HOLD // IF ANY SELECTED LOTS ARE ON HOLD, ENABLE PUB_OFF_HOLD
Set_Property(@Window:'.PUB_OFF_HOLD', 'ENABLED', HoldOffFlag) Set_Property(@Window:'.PUB_OFF_HOLD', 'ENABLED', HoldOffFlag)
end else end else
@ -682,3 +677,6 @@ CheckSelectedForHolds:
return return

View File

@ -723,16 +723,12 @@ Event OLE_SCHEDULE.OnContextMenuClick(Item, UserData)
Description = AddEventDetails<5> Description = AddEventDetails<5>
WaferQty = AddEventDetails<6> WaferQty = AddEventDetails<6>
NewApptID = Schedule_Services('AddSchedEvent', ReactorNo, WorkOrder, StartDTM, StopDTM, Description, WaferQty) NewApptID = Schedule_Services('AddSchedEvent', ReactorNo, WorkOrder, StartDTM, StopDTM, Description, WaferQty)
NewAppt = Schedule_Services('GetScheduleEvent', NewApptID)
If Error_Services('NoError') then If Error_Services('NoError') then
NewAppt = Schedule_Services('GetScheduleEvent', NewApptID) GoSub RefreshReactor
If Error_Services('NoError') then If NewApptID NE '' then
GoSub RefreshReactor SchedRec = Database_Services('ReadDataRow', 'SCHED_DET_NG', NewApptID)
If NewApptID NE '' then Schedule_Services('NotifySupervisorsIfSameDayChange', SchedRec)
SchedRec = Database_Services('ReadDataRow', 'SCHED_DET_NG', NewApptID)
Schedule_Services('NotifySupervisorsIfSameDayChange', SchedRec)
end
end else
Error_Services('DisplayError')
end end
end else end else
Error_Services('DisplayError') Error_Services('DisplayError')

View File

@ -39,6 +39,8 @@ $Insert POPUP_EQUATES
$Insert SEC_GROUPS_EQUATES $Insert SEC_GROUPS_EQUATES
$Insert LSL_USERS_EQUATES $Insert LSL_USERS_EQUATES
EQU READONLY_GREEN$ TO 192 + (220*256) + (192*65536)
Declare function Admin_User, Database_Services, Error_Services, Active_Directory_Services, SRP_Array Declare function Admin_User, Database_Services, Error_Services, Active_Directory_Services, SRP_Array
Declare subroutine PlaceDialog, Error_Services, Database_Services, Btree.Extract, ErrMsg Declare subroutine PlaceDialog, Error_Services, Database_Services, Btree.Extract, ErrMsg
@ -724,4 +726,3 @@ UnlockRec:
return return

View File

@ -30,7 +30,7 @@ Compile function NDW_WAFER_COUNTER_EVENTS(CtrlEntId, Event, @PARAMS)
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
#window NDW_WAFER_COUNTER #window NDW_PACKAGING
$insert APP_INSERTS $insert APP_INSERTS
$insert EVENT_SETUP $insert EVENT_SETUP
@ -44,7 +44,7 @@ Equ MSG_WIDTH$ to 650
Equ Comma$ to ',' Equ Comma$ to ','
Declare function MemberOf, Form_Services, Wafer_Counter_Services, SRP_Json, WO_Mat_Services, Wm_Out_Services, Datetime Declare function MemberOf, Form_Services, Wafer_Counter_Services, SRP_Json, WO_Mat_Services, Wm_Out_Services, Datetime
Declare function Logging_Services, Environment_Services, Wo_Mat_Qa_Services, Return_To_Fab_Services Declare function Logging_Services, Environment_Services
Declare subroutine SRP_Json, PlaceDialog, Wafer_Counter_Services, Logging_Services Declare subroutine SRP_Json, PlaceDialog, Wafer_Counter_Services, Logging_Services
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WaferCounter' LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WaferCounter'
@ -103,7 +103,6 @@ Event WINDOW.CREATE(CreateParam)
ExpectedWfrMap = '' ExpectedWfrMap = ''
If WfrCntAdj EQ '' then WfrCntAdj = 0 If WfrCntAdj EQ '' then WfrCntAdj = 0
Set_Property(@Window:'.EDL_CASS_ID', 'TEXT', CassID) Set_Property(@Window:'.EDL_CASS_ID', 'TEXT', CassID)
Begin Case Begin Case
Case ( (CassID EQ '') and (ToolLoc EQ '') ) Case ( (CassID EQ '') and (ToolLoc EQ '') )
// Alternate workflow // Alternate workflow
@ -320,10 +319,9 @@ Event EDL_CASS_BARCODE.LOSTFOCUS(Flag, FocusID)
Set_Property(@Window:'.EDL_CASS_ID', 'TEXT', CassetteID) Set_Property(@Window:'.EDL_CASS_ID', 'TEXT', CassetteID)
Begin Case Begin Case
Case RowExists('RDS', CassetteID) Case RowExists('RDS', CassetteID)
WOMatKey = Xlate('RDS', CassetteID, 'WO_MAT_KEY', 'X') ExpectedQty = Xlate('RDS', CassetteID, 'WFRS_OUT', 'X')
ExpectedQty = Xlate('RDS', CassetteID, 'WFRS_OUT', 'X') Set_Property(@Window:'.EDL_EXPECTED_QTY', 'TEXT', ExpectedQty)
Set_Property(@Window:'.EDL_EXPECTED_QTY', 'TEXT', ExpectedQty) Set_Property(@Window:'.LBL_CASS_ID', 'TEXT', 'Cass RDS')
Set_Property(@Window:'.LBL_CASS_ID', 'TEXT', 'Cass RDS')
Set_Property(@Window:'.LBL_CASS_BARCODE', 'TEXT', 'Cass RDS 2D') Set_Property(@Window:'.LBL_CASS_BARCODE', 'TEXT', 'Cass RDS 2D')
WOMatKey = Xlate('RDS', CassetteID, 'WO_MAT_KEY', 'X') WOMatKey = Xlate('RDS', CassetteID, 'WO_MAT_KEY', 'X')
@ -335,10 +333,9 @@ Event EDL_CASS_BARCODE.LOSTFOCUS(Flag, FocusID)
end end
Case RowExists('WM_OUT', CassetteID) Case RowExists('WM_OUT', CassetteID)
WOMatKey = Xlate('WM_OUT', CassetteID, 'WO_MAT_KEY', 'X') ExpectedQty = Xlate('WM_OUT', CassetteID, 'WAFER_CNT', 'X')
ExpectedQty = Xlate('WM_OUT', CassetteID, 'WAFER_CNT', 'X') Set_Property(@Window:'.EDL_EXPECTED_QTY', 'TEXT', ExpectedQty)
Set_Property(@Window:'.EDL_EXPECTED_QTY', 'TEXT', ExpectedQty) Set_Property(@Window:'.LBL_CASS_ID', 'TEXT', 'Cass WMO')
Set_Property(@Window:'.LBL_CASS_ID', 'TEXT', 'Cass WMO')
Set_Property(@Window:'.LBL_CASS_BARCODE', 'TEXT', 'Cass WMO 2D') Set_Property(@Window:'.LBL_CASS_BARCODE', 'TEXT', 'Cass WMO 2D')
CurrWfrMap = WM_Out_Services('GetWaferMap', CassetteID) CurrWfrMap = WM_Out_Services('GetWaferMap', CassetteID)
@ -347,12 +344,11 @@ Event EDL_CASS_BARCODE.LOSTFOCUS(Flag, FocusID)
end else end else
ErrorMsg = Error_Services('GetMessage') ErrorMsg = Error_Services('GetMessage')
end end
End Case End Case
If ErrorMsg EQ '' then Convert @VM to '' in ExpectedWfrMap
Convert @VM to '' in ExpectedWfrMap Set_Property(@Window, '@EXPECTED_WFR_MAP', ExpectedWfrMap)
Set_Property(@Window, '@EXPECTED_WFR_MAP', ExpectedWfrMap)
end
end else end else
If CassetteID NE VerifyCassID then If CassetteID NE VerifyCassID then
ErrorMsg = 'Scanned cassette ID does not match cassette to verify!' ErrorMsg = 'Scanned cassette ID does not match cassette to verify!'
@ -416,155 +412,110 @@ Event EDL_TOOL_BARCODE.LOSTFOCUS(Flag, FocusID)
Cnt = DCount(ScanData, '|') Cnt = DCount(ScanData, '|')
If Cnt EQ 2 then If Cnt EQ 2 then
WaferSize = Field(ScanData, '|', 1) WaferSize = Field(ScanData, '|', 1)
Area = Field(ScanData, '|', 2) ; // This is a proxy for the operation being performed Area = Field(ScanData, '|', 2)
Def = ""
Def<MTEXT$> = "Retreiving Wafer Counter Data..."
Def<MTYPE$> = "U"
CassID = Get_Property(@Window:'.EDL_CASS_BARCODE', 'TEXT')
MsgUp = Msg(@window, Def) ;* display the processing message
WcJson = Wafer_Counter_Services('GetWaferCounterJSON', WaferSize, Area, CassID)
Msg(@window, MsgUp) ;* take down the processing message
If Error_Services('NoError') then
objJSON = ''
If SRP_JSON(objJSON, 'Parse', WcJson) EQ '' then
ScanDtm = SRP_JSON(objJSON, 'GetValue', 'dateTimeFormatted')
ToolID = SRP_JSON(objJSON, 'GetValue', 'equipmentId')
WaferCount = SRP_JSON(objJSON, 'GetValue', 'total')
SlotMap = SRP_JSON(objJSON, 'GetValue', 'slotMap')
SRP_JSON(objJSON, 'Release')
Wafer_Counter_Services('AddScan', CassID, WaferCount, ScanDtm, ToolID, @User4, Area, SlotMap)
If Error_Services('NoError') then
Set_Property(@Window:'.EDL_SCAN_DTM', 'TEXT', ScanDtm)
Set_Property(@Window:'.EDL_TOOL_ID', 'TEXT', ToolID)
Set_Property(@Window:'.EDL_WAFER_COUNT', 'TEXT', WaferCount)
EmptyColorArray = RED$ : @FM : '' : @FM : '' : @FM : ''
FilledColorArray = GREEN$ : @FM : '' : @FM : '' : @FM : ''
RowIndex = 1
ResultArray = ''
ExpectedWfrMap = Get_Property(@Window, '@EXPECTED_WFR_MAP')
If Area EQ 'FQA' then For SlotIndex = 1 to 25
CassetteID = Get_Property(@Window:'.EDL_CASS_ID', 'TEXT') SlotFilled = SlotMap[SlotIndex, 1]
Begin Case
Case RowExists('RDS', CassetteID)
WOMatKey = Xlate('RDS', CassetteID, 'WO_MAT_KEY', 'X')
QAMetComplete = Wo_Mat_Qa_Services('GetQAMetComplete', WOMatKey)
If QAMetComplete EQ True$ then
ExpectedQty = Xlate('RDS', CassetteID, 'WFRS_OUT', 'X')
Set_Property(@Window:'.EDL_EXPECTED_QTY', 'TEXT', ExpectedQty)
Set_Property(@Window:'.LBL_CASS_ID', 'TEXT', 'Cass RDS')
Set_Property(@Window:'.LBL_CASS_BARCODE', 'TEXT', 'Cass RDS 2D')
WOMatKey = Xlate('RDS', CassetteID, 'WO_MAT_KEY', 'X') ExpectedVal = ExpectedWfrMap[SlotIndex, 1]
CurrWfrMap = WO_Mat_Services('GetWaferMap', WOMatKey) ResultArray<1, SlotIndex> = 26 - SlotIndex
If Error_Services('NoError') then If SlotFilled EQ ExpectedVal then
ExpectedWfrMap = CurrWfrMap ResultArray<2, SlotIndex> = ''
end else end else
ErrorMsg = Error_Services('GetMessage') ResultArray<2, SlotIndex> = 'Error'
end end
end else
ErrorMsg = 'Wafer Counter Operation Not Allowed. A Metrology stage is incomplete.'
end
Case RowExists('WM_OUT', CassetteID)
WOMatKey = Xlate('WM_OUT', CassetteID, 'WO_MAT_KEY', 'X')
QAMetComplete = Wo_Mat_Qa_Services('GetQAMetComplete', WOMatKey)
If QAMetComplete EQ True$ then
ExpectedQty = Xlate('WM_OUT', CassetteID, 'WAFER_CNT', 'X')
Set_Property(@Window:'.EDL_EXPECTED_QTY', 'TEXT', ExpectedQty)
Set_Property(@Window:'.LBL_CASS_ID', 'TEXT', 'Cass WMO')
Set_Property(@Window:'.LBL_CASS_BARCODE', 'TEXT', 'Cass WMO 2D')
CurrWfrMap = WM_Out_Services('GetWaferMap', CassetteID) RowIndex += 1
If Error_Services('NoError') then Next SlotIndex
ExpectedWfrMap = CurrWfrMap ExpectedQty = Get_Property(@Window:'.EDL_EXPECTED_QTY', 'TEXT')
end else Set_Property(@Window:'.EDT_WAFER_COUNTER', 'ARRAY', ResultArray)
ErrorMsg = Error_Services('GetMessage')
end RowIndex = 1
end else For SlotIndex = 1 to 25
ErrorMsg = 'Wafer Counter Operation Not Allowed. QA Metrology Incomplete.' SlotFilled = SlotMap[SlotIndex, 1]
end If SlotFilled then
End Case CellColorArray = FilledColorArray
end else
CellColorArray = EmptyColorArray
end
Send_Message(@Window:'.EDT_WAFER_COUNTER', 'COLOR_BY_POS', 2, RowIndex, CellColorArray)
RowIndex += 1
Next SlotIndex
Begin Case
Case WaferCount NE ExpectedQty
ErrorMsg = 'Scanned wafer count "':WaferCount:'" does not match expected quantity "':ExpectedQty:'".'
Case SlotMap NE ExpectedWfrMap
ErrorMsg = 'Scanned wafer map does not match expected wafer map.'
Case Otherwise$
SuccessMessage = 'Wafer count verification complete!'
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = @User4
LogData<3> = SuccessMessage
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
MsgStruct = ""
MsgStruct<MTEXTWIDTH$> = MSG_WIDTH$
MsgStruct<MCOL$> = -300
MsgStruct<MROW$> = 500
MsgStruct<MTYPE$> = "T4"
Msg(@Window, MsgStruct, 'PROCESS_COMPLETE', '', SuccessMessage)
AltFlow = Get_Property(@Window, '@ALTERNATE')
If AltFlow then
GoSub ClearForm
end else
End_Dialog(@Window, True$)
end
End Case
end else
ErrorMsg = Error_Services('GetMessage')
end
end else
ErrorMsg = 'Error parsing tool scan data.'
end
end else
ErrorMsg = Error_Services('GetMessage')
end end
If ErrorMsg EQ '' then
Def = ""
Def<MTEXT$> = "Retreiving Wafer Counter Data..."
Def<MTYPE$> = "U"
CassID = Get_Property(@Window:'.EDL_CASS_BARCODE', 'TEXT')
MsgUp = Msg(@window, Def) ;* display the processing message
WcJson = Wafer_Counter_Services('GetWaferCounterJSON', WaferSize, Area, CassID)
Msg(@window, MsgUp) ;* take down the processing message
If Error_Services('NoError') then
objJSON = ''
If SRP_JSON(objJSON, 'Parse', WcJson) EQ '' then
ScanDtm = SRP_JSON(objJSON, 'GetValue', 'dateTimeFormatted')
ToolID = SRP_JSON(objJSON, 'GetValue', 'equipmentId')
WaferCount = SRP_JSON(objJSON, 'GetValue', 'total')
SlotMap = SRP_JSON(objJSON, 'GetValue', 'slotMap')
SRP_JSON(objJSON, 'Release')
Wafer_Counter_Services('AddScan', CassID, WaferCount, ScanDtm, ToolID, @User4, Area, SlotMap)
If Error_Services('NoError') then
Set_Property(@Window:'.EDL_SCAN_DTM', 'TEXT', ScanDtm)
Set_Property(@Window:'.EDL_TOOL_ID', 'TEXT', ToolID)
Set_Property(@Window:'.EDL_WAFER_COUNT', 'TEXT', WaferCount)
EmptyColorArray = RED$ : @FM : '' : @FM : '' : @FM : ''
FilledColorArray = GREEN$ : @FM : '' : @FM : '' : @FM : ''
RowIndex = 1
ResultArray = ''
ExpectedWfrMap = Get_Property(@Window, '@EXPECTED_WFR_MAP')
For SlotIndex = 1 to 25
SlotFilled = SlotMap[SlotIndex, 1]
ExpectedVal = ExpectedWfrMap[SlotIndex, 1]
ResultArray<1, SlotIndex> = 26 - SlotIndex
If SlotFilled EQ ExpectedVal then
ResultArray<2, SlotIndex> = ''
end else
ResultArray<2, SlotIndex> = 'Error'
end
RowIndex += 1
Next SlotIndex
ExpectedQty = Get_Property(@Window:'.EDL_EXPECTED_QTY', 'TEXT')
Set_Property(@Window:'.EDT_WAFER_COUNTER', 'ARRAY', ResultArray)
RowIndex = 1
For SlotIndex = 1 to 25
SlotFilled = SlotMap[SlotIndex, 1]
If SlotFilled then
CellColorArray = FilledColorArray
end else
CellColorArray = EmptyColorArray
end
Send_Message(@Window:'.EDT_WAFER_COUNTER', 'COLOR_BY_POS', 2, RowIndex, CellColorArray)
RowIndex += 1
Next SlotIndex
Begin Case
Case WaferCount NE ExpectedQty
ErrorMsg = 'Scanned wafer count "':WaferCount:'" does not match expected quantity "':ExpectedQty:'".'
Case SlotMap NE ExpectedWfrMap
ErrorMsg = 'Scanned wafer map does not match expected wafer map.'
Case Otherwise$
SuccessMessage = 'Wafer count verification complete!'
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = @User4
LogData<3> = SuccessMessage
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
MsgStruct = ""
MsgStruct<MTEXTWIDTH$> = MSG_WIDTH$
MsgStruct<MCOL$> = -300
MsgStruct<MROW$> = 500
MsgStruct<MTYPE$> = "T4"
Msg(@Window, MsgStruct, 'PROCESS_COMPLETE', '', SuccessMessage)
AltFlow = Get_Property(@Window, '@ALTERNATE')
If AltFlow then
GoSub ClearForm
end else
End_Dialog(@Window, True$)
end
End Case
end else
ErrorMsg = Error_Services('GetMessage')
end
end else
ErrorMsg = 'Error parsing tool scan data.'
end
end else
ErrorMsg = Error_Services('GetMessage')
end
end
end else end else
ErrorMsg = 'Invalid Tool Barcode Scan.' ErrorMsg = 'Invalid Tool Barcode Scan.'
end end
end else end else
LogData = '' LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H') LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = @User4 LogData<2> = @User4
LogData<3> = 'Verification process canceled' LogData<3> = 'Verification process canceled'
Logging_Services('AppendLog', objLog, LogData, @RM, @FM) Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
End_Dialog(@Window, False$) End_Dialog(@Window, False$)
end end
If ErrorMsg NE '' then If ErrorMsg NE '' then

View File

@ -1221,6 +1221,7 @@ Event PUB_REM_CASS.CLICK()
WmInKeys = '' WmInKeys = ''
for each CassetteToVoid in CassettesToVoid using @FM for each CassetteToVoid in CassettesToVoid using @FM
WmInKeys<1, -1> = CassetteToVoid<1,4> WmInKeys<1, -1> = CassetteToVoid<1,4>
//Work_Order_Services('SignVoidWMI', WMIToVoid, @USER4)
Next CassetteToVoid Next CassetteToVoid
Service_Services('PostProcedure', 'WORK_ORDER_SERVICES', 'SignVoidWMI':SD$:WmInKeys:SD$:WoNo:SD$:@USER4) Service_Services('PostProcedure', 'WORK_ORDER_SERVICES', 'SignVoidWMI':SD$:WmInKeys:SD$:WoNo:SD$:@USER4)
If Error_Services('HasError') then If Error_Services('HasError') then
@ -1239,6 +1240,7 @@ Event PUB_REM_CASS.CLICK()
CassNo = XLATE('RDS', RDSToVoid, RDS_CASS_NO$, 'X') CassNo = XLATE('RDS', RDSToVoid, RDS_CASS_NO$, 'X')
WOMatKey = WONo : '*' : CassNo WOMatKey = WONo : '*' : CassNo
WoMatKeyList<1, -1> = WoMatKey WoMatKeyList<1, -1> = WoMatKey
//Work_Order_Services('SignVoidNonEPP', WOMatKey, @USER4)
If Error_Services('HasError') then If Error_Services('HasError') then
ErrorMessage = Error_Services('GetMessage') ErrorMessage = Error_Services('GetMessage')
end end
@ -1330,7 +1332,7 @@ Event PUB_REM_WM_OUT.CLICK()
WmOutKeys<1, -1> = CassetteToVoid<1,3> WmOutKeys<1, -1> = CassetteToVoid<1,3>
Until ErrorMessage NE '' Until ErrorMessage NE ''
Next CassetteToVoid Next CassetteToVoid
Service_Services('PostProcedure', 'WORK_ORDER_SERVICES', 'SignVoidWMO':SD$:WmOutKeys:SD$:WoNo:SD$:@USER4) Service_Services('PostProcedure', 'WORK_ORDER_SERVICES', 'SignVoidWMO':SD$:WmInKeys:SD$:WoNo:SD$:@USER4)
If Error_Services('HasError') then If Error_Services('HasError') then
ErrorMessage = Error_Services('GetMessage') ErrorMessage = Error_Services('GetMessage')
end end

View File

@ -30,7 +30,8 @@ $Insert NICA_ORDERS_EQUATES
$Insert NICA_CHECKLISTS_EQUATES $Insert NICA_CHECKLISTS_EQUATES
$Insert NICA_ORDERS_CHECKLISTS_EQUATES $Insert NICA_ORDERS_CHECKLISTS_EQUATES
$Insert RLIST_EQUATES $Insert RLIST_EQUATES
$Insert TIME_INSERTS
Equ SECONDS_IN_DAY$ to 86400
Declare function Environment_Services, Database_Services, Error_Services, Logging_Services, Nica_Orders_Services Declare function Environment_Services, Database_Services, Error_Services, Logging_Services, Nica_Orders_Services
Declare function Httpclient_Services, SRP_JSON, Reactor_Services, Reactor_Log_Services, SRP_Array, Datetime Declare function Httpclient_Services, SRP_JSON, Reactor_Services, Reactor_Log_Services, SRP_Array, Datetime
@ -424,7 +425,7 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
SRP_JSON(objJson, 'SetValue', 'reactorNumber', ReactNo) SRP_JSON(objJson, 'SetValue', 'reactorNumber', ReactNo)
NewChecklistInstIds = Xlate('NICA_CHECKLISTS', NewSortedChecklistIds, 'NICA_BASE_INSTRUCTION_ID', 'X') NewChecklistInstIds = Xlate('NICA_CHECKLISTS', NewSortedChecklistIds, 'NICA_BASE_INSTRUCTION_ID', 'X')
SRP_JSON(objJson, 'SetValueArray', 'baseInstructionIds', NewChecklistInstIds, @VM) SRP_JSON(objJson, 'SetValueArray', 'baseInstructionIds', NewChecklistInstIds, @VM)
Body = SRP_JSON(objJson, 'Stringify', 'Fast') Body = SRP_JSON(objJson, 'Stringify', 'Styled')
Convert @FM to '' in Body Convert @FM to '' in Body
SRP_JSON(objJson, 'Release') SRP_JSON(objJson, 'Release')
end else end else
@ -442,7 +443,6 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
IsSuccessful = False$ IsSuccessful = False$
If ErrorMsg EQ '' then If ErrorMsg EQ '' then
AttemptNo = 0
Retries = 3 Retries = 3
BackoffSeconds = 1 BackoffSeconds = 1
OrderId = '' OrderId = ''
@ -458,32 +458,7 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
end else end else
Headers = 'Accept':@VM:'*/*' Headers = 'Accept':@VM:'*/*'
end end
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
LogData<2> = Machine
AttemptNo += 1
LogData<3> = 'Attempt number ':AttemptNo:' to send HTTP POST request to ':NicaURL
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
// Write directly to the log file to avoid mangling the JSON
OSRead LogBytes from LogPath:'\':LogFileName then
LogBytes := CRLF$:Body
OSWrite LogBytes to LogPath:'\':LogFileName
end
HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'POST', NicaURL, Headers, Body, '', '', False$, False$, '', IgnoreCertErrors) HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'POST', NicaURL, Headers, Body, '', '', False$, False$, '', IgnoreCertErrors)
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
LogData<2> = Machine
LogData<3> = 'Attempt number ':AttemptNo:' HttpResponse from ':NicaURL:':'
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
// Write directly to the log file to avoid mangling the JSON
OSRead LogBytes from LogPath:'\':LogFileName then
LogBytes := CRLF$:HttpResponseJson
OSWrite LogBytes to LogPath:'\':LogFileName
end
If HttpResponseJson NE '' then If HttpResponseJson NE '' then
ObjResponseJson = '' ObjResponseJson = ''
If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then

View File

@ -0,0 +1,162 @@
COMPILE FUNCTION obj_Calib_List(Method,Parms)
/*
Methods for Calib_List table
3/18/2010 JCH - Initial Coding
Properties:
Methods:
SendReminders ;* Send Notes reminding of calibrations coming due
*/
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Dialog_Box, Popup
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, RList, obj_Notes
$INSERT MSG_EQUATES
$INSERT CALIB_LIST_EQUATES
$INSERT RLIST_EQUATES
$INSERT NOTIFICATION_EQU
EQU PDISPLAY$ TO 8 ;* From Popup_Equates
EQU CRLF$ TO \0D0A\
ErrTitle = 'Error in Stored Procedure "obj_Calib_List"'
ErrorMsg = ''
IF NOT(ASSIGNED(Method)) THEN ErrorMsg = 'Unassigned parameter "Method" passed to subroutine'
IF NOT(ASSIGNED(Parms)) THEN Parms = ''
IF ErrorMsg NE '' THEN
Set_Status(-1,ErrTitle:@SVM:ErrorMsg)
RETURN ''
END
Result = ''
BEGIN CASE
CASE Method = 'SendReminders' ; GOSUB SendReminders
CASE 1
END CASE
IF ErrorMsg NE '' THEN
Set_Status(-1,ErrTitle:@SVM:ErrorMsg)
RETURN ''
END
RETURN Result
* * * * * * *
SendReminders:
* * * * * * *
OPEN 'CALIB_LIST' TO FileIn ELSE
ErrorMsg = 'Unable to open "CALIB_LIST" table. (':Method:')'
RETURN
END
CheckDt = OCONV(Date()+15,'D4/')
SelectSent = 'SELECT CALIB_LIST WITH NEXT_CAL_DT < ':QUOTE(CheckDt):' BY NEXT_CAL_DT'
RList(SelectSent,TARGET_ACTIVELIST$,'','','')
NoteText = ''
Depts = ''
Done = 0
LOOP
READNEXT CLNo ELSE Done = 1
UNTIL Done
READ CLRec FROM FileIn,CLNo THEN
NextCalDt = OCONV(XLATE('CALIB_LIST',CLNo,'NEXT_CAL_DT','X'),'D4/')
IF NextCalDt NE '' THEN
CLType = CLRec<CALIB_LIST_CL_TYPE$>
Dept = CLRec<CALIB_LIST_DEPT$>
IF Dept = '' THEN Dept = 'MET'
IF CLType = 'E' THEN
Desc = CLRec<CALIB_LIST_EQ_DESC$>
SN = CLRec<CALIB_LIST_EQ_SN$>
Loc = CLRec<CALIB_LIST_EQ_LOC$
NewLine = Desc:' (S/N: ':SN:') located in the ':Loc:' is due for calibration on ':NextCalDt:CRLF$
END
IF CLType = 'S' THEN
Desc = CLRec<CALIB_LIST_STD_DESC$>
SN = CLRec<CALIB_LIST_STD_SN$>
Loc = CLRec<CALIB_LIST_STD_LOC$>
NewLine = 'The NIST Standard ':Desc:' (S/N: ':SN:') located in the ':Loc:' is due for calibration on ':NextCalDt:CRLF$
END
LOCATE Dept IN Depts USING @FM SETTING Pos ELSE
Depts = INSERT(Depts,Pos,0,0,Dept)
END
NoteText<Pos> = NoteText<Pos>:NewLine
END ;* End of check for NextCalDt
END ;* End of CLRec read
REPEAT
DeptUsers = ''
DeptDescs =''
PopupLiteral = XLATE('SYSREPOSPOPUPS',@APPID<1>:'**DEPT',PDISPLAY$,'X')
CONVERT @VM:@SVM TO @FM:@VM IN PopupLiteral
LiteralCnt = COUNT(PopupLiteral,@FM) + (PopupLiteral NE '')
FOR I = 1 TO LiteralCnt
Dept = PopupLiteral<I,1>
DeptDesc = PopupLiteral<I,2>
UserNames = PopupLiteral<I,3>
LOCATE Dept IN Depts USING @FM SETTING Pos THEN
CONVERT ' ' TO '' IN UserNames
CONVERT ',' TO @VM IN UserNames
DeptUsers<Pos> = UserNames
DeptDescs<Pos> = DeptDesc
END
NEXT I
NoteSubject = "Equipment Calibration Reminder"
DeptCnt = COUNT(Depts,@FM) + (Depts NE '')
FOR I = 1 TO DeptCnt
IF NoteText<I> NE '' THEN
*NoteText<I> = 'Testing during development of new functionality - disregard':CRLF$:NoteText<I>
Recipients = DeptUsers<I>
LOCATE @USER4 IN Recipients SETTING Dummy THEN
Recipient = @USER4
SentFrom = 'System'
Subject = DeptDescs<I>:" Department - Equipment Calibration Reminder"
Message = NoteText<I>
AttachWindow = 'MASTER_CALIB_LIST'
AttachKeys = ''
SendToGroup = ''
Obj_Notes('Create',Recipient:@RM:'System':@RM:NoteSubject:@RM:NoteText<I>:@RM:'MASTER_CALIB_LIST')
END
END
NEXT I
RETURN

View File

@ -20,9 +20,9 @@ COMPILE FUNCTION obj_Post_Log(Method,Parms)
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Get_Property, obj_RDS, Database_Services, Environment_Services DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Get_Property, obj_RDS, Database_Services, Environment_Services
DECLARE FUNCTION Logging_Services, Datetime, SRP_DateTime, GetTickCount, SRP_Datetime DECLARE FUNCTION Logging_Services, Datetime, SRP_DateTime, GetTickCount
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, Send_Dyn, RList, obj_WO_Log, Send_Event, obj_RDS DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, Send_Dyn, RList, obj_WO_Log, Send_Event, obj_RDS
DECLARE SUBROUTINE obj_WO_Mat, Send_Info, obj_Notes, ErrMsg, Logging_Services, Mona_Services, Database_Services DECLARE SUBROUTINE obj_WO_Mat, Send_Info, obj_Notes, ErrMsg, Logging_Services, Mona_Services
$INSERT POST_LOG_EQUATES $INSERT POST_LOG_EQUATES
@ -222,44 +222,12 @@ Post:
IF Get_Status(errCode) THEN IF Get_Status(errCode) THEN
Set_Status(0) Set_Status(0)
obj_Tables('UnlockRec',PlParms)
Tablename = Field(UFParms, @RM, 1, 1) obj_Tables('UnlockRec',UFParms)
Key = Field(UFParms, @RM, 2, 1) ClearSelect CursorVar
Database_Services('ReleaseKeyIDLock', Tablename, Key) // 4/22/19 Added unlock statement to prevent POST_LOG service from locking up
Unlock hSysLists, ServiceKeyID else Null
CurrDtm = Datetime() RETURN
FailureNotificationSent = PostLogRec<POST_LOG_FAILURE_NOTIFICATION_SENT$>
FailureNotificationDtm = PostLogRec<POST_LOG_FAILURE_NOTIFICATION_DTM$>
If FailureNotificationDtm NE '' then
SendReminder = ( SRP_Datetime('HourSpan', FailureNotificationDtm, CurrDtm) GE 1 )
end else
SendReminder = False$
end
If ( (FailureNotificationSent NE True$) or (SendReminder EQ True$) ) then
PostLogRec<POST_LOG_FAILED$> = True$
PostLogRec<POST_LOG_FAILURE_REASON$> = errCode
PostLogRec<POST_LOG_FAILURE_NOTIFICATION_SENT$> = True$
PostLogRec<POST_LOG_FAILURE_NOTIFICATION_DTM$> = CurrDtm
Database_Services('WriteDataRow', 'POST_LOG', PostLogKey, PostLogRec, True$, False$, False$)
// Notify OI_SYSADMIN group
Server = Environment_Services('GetServer')
Recipients = ''
SentFrom = 'SYSTEM'
Subject = 'Obj_Post_Log("Post") Error'
Message = OConv(CurrDtm, 'DT2/^H')
Message<2> = 'Error on server ':Server
Message<3> = 'Failed to write record ':Tablename:' ':Key:' . Error_Services error message: ':errCode
Swap @FM with \0D0A\ in Message
AttachWindow = ''
AttachKey = ''
SendToGroup = 'OI_SYSADMIN'
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
obj_Notes('Create',Parms)
end else
Database_Services('ReleaseKeyIDLock', 'POST_LOG', PostLogKey)
end
END ELSE END ELSE
obj_Tables('DeleteRec',PlParms) obj_Tables('DeleteRec',PlParms)
END END

View File

@ -2108,3 +2108,5 @@ GetQAMet:
RETURN RETURN

View File

@ -18,11 +18,10 @@ COMPILE FUNCTION obj_RDS(Method,Parms)
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, obj_WO_Verify, obj_Prod_Spec, Send_Dyn, obj_RDS_Makeup DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, obj_WO_Verify, obj_Prod_Spec, Send_Dyn, obj_RDS_Makeup
DECLARE FUNCTION obj_RDS2, obj_RDS_Test, obj_WO_Mat, obj_Clean_Insp, obj_PRS_Prop, Database_Services, RDS_Services DECLARE FUNCTION obj_RDS2, obj_RDS_Test, obj_WO_Mat, obj_Clean_Insp, obj_PRS_Prop, Database_Services, RDS_Services
DECLARE FUNCTION Return_To_Fab_Services
DECLARE FUNCTION Logging_Services, Environment_Services, Error_Services, Signature_Services, Lot_Services, Supplement_Services DECLARE FUNCTION Logging_Services, Environment_Services, Error_Services, Signature_Services, Lot_Services, Supplement_Services
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, obj_WO_Step, obj_RDS_Layer, obj_RDS_Test, obj_WM_In DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, obj_WO_Step, obj_RDS_Layer, obj_RDS_Test, obj_WM_In
DECLARE SUBROUTINE Btree.Extract, RDS_React_Run, Environment_Services, Logging_Services, Error_Services, Send_Info DECLARE SUBROUTINE Btree.Extract, RDS_React_Run, Environment_Services, Logging_Services, Error_Services, Send_Info
DECLARE SUBROUTINE SRP_Stopwatch, Database_Services, Lot_Services, Supplement_Services, RDS_Services DECLARE SUBROUTINE SRP_Stopwatch, Database_Services, Lot_Services, Supplement_Services
$INSERT MSG_EQUATES $INSERT MSG_EQUATES
$INSERT WO_VERIFY_EQU $INSERT WO_VERIFY_EQU
@ -136,13 +135,6 @@ CurrStatus:
RDSCnt = COUNT(RDSNos,@VM) + (RDSNos NE '') RDSCnt = COUNT(RDSNos,@VM) + (RDSNos NE '')
FOR R = 1 TO RDSCnt FOR R = 1 TO RDSCnt
OpenRTF = Return_To_Fab_Services('GetOpenReturnToFabRecordIdByCassId', RDSNos<R>)
IF OpenRTF NE '' THEN
ReturnVals<1,R> = 'RTF' ;* Open RTF on RDS *
GOTO StatusHere
END
NCRStatuses = XLATE('NCR',RDSRec<RDS_NCR_KEYS$>,7,'X') NCRStatuses = XLATE('NCR',RDSRec<RDS_NCR_KEYS$>,7,'X')
IF INDEX(NCRStatuses,'O',1) THEN IF INDEX(NCRStatuses,'O',1) THEN
@ -375,10 +367,6 @@ Create:
Result = '' Result = ''
END ELSE END ELSE
RDS_Services('VerifyWOLogRDSKeyIndex', RDSNo)
RDS_Services('VerifyWOMatRDSNoIndex', RDSNo)
RDS_Services('VerifyWOStepRDSKeyIndex', RDSNo)
NewLotId = Lot_Services('CreateNewLot', 'RDS', '', WaferQty, SubPartNo, LotNo, SubVendCd, @User4, '', RDSNo) NewLotId = Lot_Services('CreateNewLot', 'RDS', '', WaferQty, SubPartNo, LotNo, SubVendCd, @User4, '', RDSNo)
If Rds_Services('IsEpiPro', RDSNo) then If Rds_Services('IsEpiPro', RDSNo) then

View File

@ -772,7 +772,9 @@ IF NOT(UnloadFailed) THEN
end else end else
LotId = Lot_Services('GetLotIdByLegacyLotIdAndType', RDSNo, 'RDS') LotId = Lot_Services('GetLotIdByLegacyLotIdAndType', RDSNo, 'RDS')
If Error_Services('NoError') then If Error_Services('NoError') then
Lot_Services('AutoCloseLot', LotId, 'SYSTEM') Lot_Services('MoveOutLot', LotId, @User4) ; // Move out of POST_EPI operation
Lot_Services('MoveInLot', LotId, @User4) ; // Move into RDS_CLOSE operation
Lot_Services('CloseLot', LotId)
end end
end end
@ -1681,4 +1683,3 @@ RETURN

View File

@ -18,7 +18,7 @@ Declare subroutine Memory_Services, Environment_Services, Logging_Services, Dat
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Dialog_Box, obj_WO_Log, NextKey, SRP_Encode DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Dialog_Box, obj_WO_Log, NextKey, SRP_Encode
DECLARE FUNCTION obj_Prod_Spec, obj_RDS_Test, obj_Popup, Database_Services, SRP_Array, Memory_Services DECLARE FUNCTION obj_Prod_Spec, obj_RDS_Test, obj_Popup, Database_Services, SRP_Array, Memory_Services
Declare function Environment_Services, Logging_Services, Error_Services, Datetime Declare function Environment_Services, Logging_Services, Error_Services
$insert LOGICAL $insert LOGICAL
@ -476,9 +476,7 @@ CopyStats:
DestRDSTestRec<RDS_TEST_HGCV1_RES_MAX$> = SourceRDSTestRec<RDS_TEST_HGCV1_RES_MAX$> DestRDSTestRec<RDS_TEST_HGCV1_RES_MAX$> = SourceRDSTestRec<RDS_TEST_HGCV1_RES_MAX$>
DestRDSTestRec<RDS_TEST_HGCV1_RES_RANGE$> = SourceRDSTestRec<RDS_TEST_HGCV1_RES_RANGE$> DestRDSTestRec<RDS_TEST_HGCV1_RES_RANGE$> = SourceRDSTestRec<RDS_TEST_HGCV1_RES_RANGE$>
DestRDSTestRec<RDS_TEST_HGCV1_RES_RANGE_PCNT$> = SourceRDSTestRec<RDS_TEST_HGCV1_RES_RANGE_PCNT$> DestRDSTestRec<RDS_TEST_HGCV1_RES_RANGE_PCNT$> = SourceRDSTestRec<RDS_TEST_HGCV1_RES_RANGE_PCNT$>
DestRDSTestRec<RDS_TEST_COPY_FROM_RDS_TEST_ID$> = SourceRDSTestKey
DestRDSTestRec<RDS_TEST_COPY_USER$> = @User4
DestRDSTestRec<RDS_TEST_COPY_DTM$> = Datetime()
RTParms = FieldStore(RTParms, @RM, 2, 1, LockedRDSTestKey) RTParms = FieldStore(RTParms, @RM, 2, 1, LockedRDSTestKey)
RTParms = FieldStore(RTParms, @RM, 4, 1, DestRDSTestRec) RTParms = FieldStore(RTParms, @RM, 4, 1, DestRDSTestRec)
@ -2054,4 +2052,3 @@ END ;* End of STRESS Property
RETURN RETURN

View File

@ -18,7 +18,7 @@ COMPILE FUNCTION obj_Reactor_Log(Method,Parms)
*/ */
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, Btree.Extract, obj_React_Item_Hist, Update_Index, obj_Post_Log DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, Btree.Extract, obj_React_Item_Hist, Update_Index, obj_Post_Log
Declare subroutine Error_Services, Database_Services, React_Item_Services, Reactor_Services Declare subroutine Error_Services, Database_Services, React_Item_Services
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, obj_React_Item, obj_Calendar, Database_Services DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, obj_React_Item, obj_Calendar, Database_Services
@ -117,7 +117,7 @@ PostReactItems:
InstRINos = ReactorLogRec<REACTOR_LOG_INST_RI_NO$> InstRINos = ReactorLogRec<REACTOR_LOG_INST_RI_NO$>
CurrRINos = XLATE('REACTOR_LOG', RLNo, 'CURR_RI_NO', 'X') CurrRINos = XLATE('REACTOR_LOG', RLNo, 'CURR_RI_NO', 'X')
ReactorType = Xlate('REACTOR', ReactNo, REACTOR_REACT_TYPE$, 'X')
//Check to make sure that everything is valid before adding or removing anything //Check to make sure that everything is valid before adding or removing anything
ValidationFailureReason = '' ValidationFailureReason = ''
for each InstRINo in InstRINos using @VM for each InstRINo in InstRINos using @VM
@ -125,23 +125,6 @@ PostReactItems:
If InstRIRec<REACT_ITEM_RETIRE_DT$> NE '' then If InstRIRec<REACT_ITEM_RETIRE_DT$> NE '' then
ValidationFailureReason = 'Unable to install Reactor Item No. ' : InstRINo : ' because its status is retired!' ValidationFailureReason = 'Unable to install Reactor Item No. ' : InstRINo : ' because its status is retired!'
end end
If InstRIRec<REACT_ITEM_RI_TYPE$> EQ 'S' then
If InstRIRec<REACT_ITEM_PKT_SIZE$> EQ '' then
ValidationFailureReason = 'Unable to install Reactor Item No. ' : InstRINo : '. Pocket/Ring Size cannot be empty for Susceptor Reactor Items.'
end
If InstRIRec<REACT_ITEM_PKT_QTY$> EQ '' then
ValidationFailureReason = 'Unable to install Reactor Item No. ' : InstRINo : '. Pocket Qty cannot be empty for Susceptor Reactor Items.'
end
end
If (InstRIRec<REACT_ITEM_RI_TYPE$> NE 'RE') AND (InstRIRec<REACT_ITEM_RI_TYPE$> NE 'LE') then
If InstRIRec<REACT_ITEM_SERIAL_NO$> EQ '' then
ValidationFailureReason = 'Unable to install Reactor Item No. ' : InstRINo : '. Serial Number cannot be blank to non-elevator Reactor Items.'
end
end
// Only check first three characters so that ASM parts can be installed in an ASM+ reactor
If (InstRIRec<REACT_ITEM_PART_TYPE$>[1, 3] NE ReactorType[1, 3]) then
ValidationFailureReason = 'Unable to install Reactor Item No. ' : InstRINo : '. Reactor Type must match Reactor Item Part Type.'
end
Until ValidationFailureReason NE '' Until ValidationFailureReason NE ''
Next InstRINo Next InstRINo
@ -164,16 +147,8 @@ PostReactItems:
obj_React_Item_Hist('Install',oriParms) obj_React_Item_Hist('Install',oriParms)
IF Not(Get_Status(errCode)) THEN IF Get_Status(errCode) THEN
RIKey = InstRINos<1,I>
RIRec = Xlate('REACT_ITEM', RIKey, '', 'X')
RIType = RIRec<REACT_ITEM_RI_TYPE$>
If RIType EQ 'S' then
PktSize = Xlate('REACT_ITEM', RIKey, 'PKT_SIZE_DESC', 'X')
PktQty = RIRec<REACT_ITEM_PKT_QTY$>
Reactor_Services('SetWaferSize', ReactNo, PktSize)
Reactor_Services('SetPocketQty', ReactNo, PktQty)
end
END END
END ;* End of LOCATE check for Install RI number already in the reactor END ;* End of LOCATE check for Install RI number already in the reactor

File diff suppressed because it is too large Load Diff

View File

@ -20,7 +20,6 @@ DECLARE SUBROUTINE obj_Clean_Insp, Btree.Extract, Send_Info, obj_WO_Wfr, ErrMsg,
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, obj_Prod_Spec, Send_Dyn, obj_Clean_Insp DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, obj_Prod_Spec, Send_Dyn, obj_Clean_Insp
DECLARE FUNCTION obj_RDS_Test, obj_Test_Point_Map, obj_Popup, obj_WO_Wfr, Logging_Services, Environment_Services DECLARE FUNCTION obj_RDS_Test, obj_Test_Point_Map, obj_Popup, obj_WO_Wfr, Logging_Services, Environment_Services
Declare function Return_To_Fab_Services
$INSERT APP_INSERTS $INSERT APP_INSERTS
$INSERT REACT_RUN_EQUATES $INSERT REACT_RUN_EQUATES
@ -263,13 +262,6 @@ END
LSKeys = ReactRunRec<REACT_RUN_RDS_LAYER_KEYS$> LSKeys = ReactRunRec<REACT_RUN_RDS_LAYER_KEYS$>
OpenRTF = Return_To_Fab_Services('GetOpenReturnToFabRecordIdByCassId', RDSNo)
IF OpenRTF NE '' THEN
Result = 'RTF' ;* Open RTF on WO_MAT *
RETURN
END
MetOutOfSpec = SUM(XLATE('RDS_LAYER',LSKeys,'TEST_OUT_OF_SPEC','X')) ;* Updated for Metrology update 4/16/2006 JCH MetOutOfSpec = SUM(XLATE('RDS_LAYER',LSKeys,'TEST_OUT_OF_SPEC','X')) ;* Updated for Metrology update 4/16/2006 JCH
IF MetOutOfSpec > 0 THEN IF MetOutOfSpec > 0 THEN
@ -2286,4 +2278,3 @@ END
RETURN RETURN

View File

@ -205,6 +205,8 @@ WriteRec:
IF TestRec = '' THEN IF TestRec = '' THEN
DELETE TableVar,TableKey ELSE Null DELETE TableVar,TableKey ELSE Null
* ErrorMsg = 'Blank table rec with ':QUOTE(TableKey):' on ':QUOTE(TableName):' table.'; *added 4/9/21 for debugging
* Set_FSError()
END ELSE END ELSE
Set_Status(0) Set_Status(0)
rv = Get_Status(errCode) rv = Get_Status(errCode)
@ -213,6 +215,7 @@ WriteRec:
END ELSE END ELSE
ErrorMsg = 'Unable to write ':QUOTE(TableKey):' on ':QUOTE(TableName):' table.' ErrorMsg = 'Unable to write ':QUOTE(TableKey):' on ':QUOTE(TableName):' table.'
END END
END END
If ( (TableName NE '') and (TableKey NE '') ) then If ( (TableName NE '') and (TableKey NE '') ) then
@ -232,9 +235,20 @@ WriteRec:
LogData<7> = 'Record self locked: ':Database_Services('IsKeyIDSelfLocked', TableName, TableKey) LogData<7> = 'Record self locked: ':Database_Services('IsKeyIDSelfLocked', TableName, TableKey)
LogData<9> = 'Call stack: ':RetStack() LogData<9> = 'Call stack: ':RetStack()
Logging_Services('AppendLog', objLog, LogData, @RM, @FM) Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
Recipients = ''
SendFrom = 'System'
Subject = 'obj_Tables("WriteRec") failed to release lock'
AttachWindow = TableName
AttachKey = TableKey
SendToGroup = 'FI_SUPPORT'
MessageParms = Recipients:@RM:SendFrom:@RM:Subject:@RM:UnlockError:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
obj_Notes('Create',MessageParms)
end end
end end
end end
END END
RETURN RETURN

View File

@ -20,7 +20,7 @@ DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, obj_WO_Verify, o
DECLARE FUNCTION Database_Services, obj_RDS2, Logging_Services, Environment_Services, Error_Services DECLARE FUNCTION Database_Services, obj_RDS2, Logging_Services, Environment_Services, Error_Services
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, obj_WO_Step, obj_RDS_Layer, obj_RDS_Test, Update_Index DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, obj_WO_Step, obj_RDS_Layer, obj_RDS_Test, Update_Index
DECLARE SUBROUTINE obj_Post_Log, obj_WO_Mat_Log,obj_WO_Wfr, Set_Property, Database_Services, Extract_SI_Keys DECLARE SUBROUTINE obj_Post_Log, obj_WO_Mat_Log,obj_WO_Wfr, Set_Property, Database_Services, Extract_SI_Keys
DECLARE SUBROUTINE Logging_Services, obj_Notes, WM_In_Services DECLARE SUBROUTINE Logging_Services, obj_Notes
$INSERT MSG_EQUATES $INSERT MSG_EQUATES
$INSERT WO_LOG_EQU $INSERT WO_LOG_EQU
@ -128,9 +128,6 @@ Create:
LogData<7> = WaferQty LogData<7> = WaferQty
Logging_Services('AppendLog', objLog, LogData, @RM, @FM) Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
Done = True$ Done = True$
WM_In_Services('VerifyWoStepWMIKeyIndex', WMInKey)
WM_In_Services('VerifyWOLogWMIKeyIndex', WMInKey)
WM_In_Services('VerifyWOMatWMIKeyIndex', WMInKey)
end end
Until ( (NumAttempts EQ 10) or (Done EQ True$) ) Until ( (NumAttempts EQ 10) or (Done EQ True$) )
Repeat Repeat
@ -943,3 +940,6 @@ RepProdTW:
RETURN RETURN

View File

@ -19,11 +19,11 @@ Compile Function obj_WM_Out(Method,Parms)
Declare Function Get_Status, Msg, Utility, obj_Tables, NextKey, obj_WO_Verify, obj_Prod_Spec, Send_Dyn, obj_RDS_Makeup Declare Function Get_Status, Msg, Utility, obj_Tables, NextKey, obj_WO_Verify, obj_Prod_Spec, Send_Dyn, obj_RDS_Makeup
Declare Function obj_RDS2, obj_WM_Out, Delete, Signature_Services, Environment_Services, Logging_Services Declare Function obj_RDS2, obj_WM_Out, Delete, Signature_Services, Environment_Services, Logging_Services
Declare Function Database_Services, SRP_Array, Return_To_Fab_Services Declare Function Database_Services, SRP_Array
Declare Subroutine Set_Status, Msg, obj_Tables, Send_Dyn, obj_WO_Step, obj_RDS_Layer, obj_RDS_Test, Btree.Extract Declare Subroutine Set_Status, Msg, obj_Tables, Send_Dyn, obj_WO_Step, obj_RDS_Layer, obj_RDS_Test, Btree.Extract
Declare Subroutine Extract_SI_Keys, obj_WM_Out, obj_WO_Mat, obj_Post_Log, obj_WO_Mat_Log, ErrMsg, obj_WO_Wfr Declare Subroutine Extract_SI_Keys, obj_WM_Out, obj_WO_Mat, obj_Post_Log, obj_WO_Mat_Log, ErrMsg, obj_WO_Wfr
Declare Subroutine Logging_Services, Material_Services, Database_Services, Update_Index, Work_Order_Services Declare Subroutine Logging_Services, Material_Services, Database_Services, Update_Index, Work_Order_Services
Declare Subroutine Service_Services, obj_Notes, Delay, WM_Out_Services Declare Subroutine Service_Services, obj_Notes, Delay
$Insert MSG_EQUATES $Insert MSG_EQUATES
$Insert APP_INSERTS $Insert APP_INSERTS
@ -40,7 +40,7 @@ $Insert CLEAN_INSP_EQUATES
$Insert WMO_WFRS_EQUATES $Insert WMO_WFRS_EQUATES
$Insert REACT_RUN_EQUATES $Insert REACT_RUN_EQUATES
EQU NUM_RETRIES$ TO 60 EQU NUM_RETRIES$ TO 50
ErrTitle = 'Error in Stored Procedure "obj_WM_Out"' ErrTitle = 'Error in Stored Procedure "obj_WM_Out"'
ErrorMsg = '' ErrorMsg = ''
@ -115,12 +115,13 @@ Create:
WONo = Parms[1,@RM] WONo = Parms[1,@RM]
WOStep = Parms[COL2()+1,@RM] WOStep = Parms[COL2()+1,@RM]
NewCassNo = Parms[COL2()+1,@RM] NewCassNos = Parms[COL2()+1,@RM]
CassLoadQty = Parms[COL2()+1,@RM] CassLoadQty = Parms[COL2()+1,@RM]
IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')' IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')'
IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')' IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')'
IF NewCassNo = '' THEN ErrorMsg = 'Null Parameter "NewCassNo" passed to routine. (':Method:')' IF NewCassNos = '' THEN ErrorMsg = 'Null Parameter "NewCassNos" passed to routine. (':Method:')'
IF ErrorMsg NE '' THEN RETURN IF ErrorMsg NE '' THEN RETURN
@ -160,8 +161,11 @@ Create:
WORec = XLATE('WO_LOG',WONo,'','X') WORec = XLATE('WO_LOG',WONo,'','X')
InboundWaferQty = 0 InboundWaferQty = 0
CassWfrQty = XLATE('WO_MAT',WONo:'*':NewCassNo,WO_MAT_WAFER_QTY$,'X') FOR I = 1 TO COUNT(NewCassNos,@VM) + (NewCassNos NE '')
InboundWaferQty += CassWfrQty NewCassNo = NewCassNos<1,I>
CassWfrQty = XLATE('WO_MAT',WONo:'*':NewCassNo,WO_MAT_WAFER_QTY$,'X')
InboundWaferQty += CassWfrQty
NEXT I
WMOutKeys = XLATE('WO_STEP',WONo:'*':WOStep,WO_STEP_WM_OUT_KEYS$,'X') WMOutKeys = XLATE('WO_STEP',WONo:'*':WOStep,WO_STEP_WM_OUT_KEYS$,'X')
@ -210,7 +214,7 @@ Create:
OutOnlyCassIDs = '' ;* List of Outbound only Cassette IDs added 8/12/1011 JCH OutOnlyCassIDs = '' ;* List of Outbound only Cassette IDs added 8/12/1011 JCH
LOOP LOOP
UNTIL InboundWaferQty EQ 0 UNTIL InboundWaferQty = 0
WMOutKey = WONo:'*':WOStep:'*':WMOCassNo WMOutKey = WONo:'*':WOStep:'*':WMOCassNo
WMOutRec = XLATE('WM_OUT',WMOutKey,'','X') ;* In case there is a partial box WMOutRec = XLATE('WM_OUT',WMOutKey,'','X') ;* In case there is a partial box
NewBoxFlag = '' NewBoxFlag = ''
@ -246,7 +250,7 @@ Create:
NumAttempts = 0 NumAttempts = 0
Loop Loop
NumAttempts += 1 NumAttempts += 1
If NumAttempts GT 1 then Delay(1) If NumAttempts GT 1 then Delay(NumAttempts)
Database_Services('WriteDataRow', 'WM_OUT', WMOutKey, WMOutRec, True$, False$, False$) Database_Services('WriteDataRow', 'WM_OUT', WMOutKey, WMOutRec, True$, False$, False$)
If Error_Services('HasError') then If Error_Services('HasError') then
// Log the error // Log the error
@ -268,9 +272,6 @@ Create:
LogData<6> = WMOCassNo LogData<6> = WMOCassNo
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM) Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
Done = True$ Done = True$
WM_Out_Services('VerifyWOLogWMOKeyIndex', WONo:'*':WOStep:'*':WMOCassNo)
WM_Out_Services('VerifyWOMatWMOKeyIndex', WONo:'*':WOStep:'*':WMOCassNo)
WM_Out_Services('VerifyWoStepWMOKeyIndex', WONo:'*':WOStep:'*':WMOCassNo)
end end
Until ( (NumAttempts GT NUM_RETRIES$) or (Done EQ True$) ) Until ( (NumAttempts GT NUM_RETRIES$) or (Done EQ True$) )
Repeat Repeat
@ -381,18 +382,12 @@ CurrStatus:
CurrLocation = XLATE('WO_MAT',WOMatKey,'CURR_LOCATION','X') CurrLocation = XLATE('WO_MAT',WOMatKey,'CURR_LOCATION','X')
END END
IF WOMatRec<WO_MAT_HOLD$> = 1 AND WOMatRec<WO_MAT_HOLD_ENTITY$,1> = 'WM_OUT' THEN IF WOMatRec<WO_MAT_HOLD$> = 1 AND WOMatRec<WO_MAT_HOLD_ENTITY$,1> = 'WM_OUT' THEN
Result = 'HOLD' ;* Box is on Hold Result = 'HOLD' ;* Box is on Hold
RETURN RETURN
END END
OpenRTF = Return_To_Fab_Services('GetOpenReturnToFabRecordIdByCassId', WMOutKey)
IF OpenRTF NE '' THEN
Result = 'RTF' ;* Open RTF on WM_OUT *
RETURN
END
IF WMOutRec<WM_OUT_SHIP_NO$> NE '' THEN IF WMOutRec<WM_OUT_SHIP_NO$> NE '' THEN
Result = 'SHIP' Result = 'SHIP'
@ -651,12 +646,7 @@ NextOpenSlots:
IsMULot = WMOutRec EQ True$ IsMULot = WMOutRec EQ True$
IsFQASigned = WMOutRec<WM_OUT_SUP_VER_SIG$> NE '' IsFQASigned = WMOutRec<WM_OUT_SUP_VER_SIG$> NE ''
IsVoided = WMOutRec<WM_OUT_VOID$> IsVoided = WMOutRec<WM_OUT_VOID$>
WOMatKey = WONo : '*' : CassNo If Not(IsMULot) AND Not(IsFQASigned) AND Not(IsVoided) then
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey, True$, 0, False$)
WOMatHold = WOMatRec<WO_MAT_HOLD$>
WOMatHoldEntity = WOMatRec<WO_MAT_HOLD_ENTITY$>
IsOnHold = WOMatHold EQ True$ and WOMatHoldEntity EQ 'WM_OUT'
If Not(IsMULot) AND Not(IsFQASigned) AND Not(IsVoided) AND Not(IsOnHold) then
FOR N = SlotCnt TO 1 STEP -1 FOR N = SlotCnt TO 1 STEP -1
IF WMOutRec<WM_OUT_SLOT_NO$,N> NE '' AND WMOutRec<WM_OUT_RDS$,N> = '' AND WMOutRec<WM_OUT_SLOT_NCR$,N> = '' AND WMOutRec<WM_OUT_UMW_CASS_ID$,N> = '' THEN IF WMOutRec<WM_OUT_SLOT_NO$,N> NE '' AND WMOutRec<WM_OUT_RDS$,N> = '' AND WMOutRec<WM_OUT_SLOT_NCR$,N> = '' AND WMOutRec<WM_OUT_UMW_CASS_ID$,N> = '' THEN

View File

@ -23,7 +23,7 @@ DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, Btree.Extract, ErrMsg,
DECLARE SUBROUTINE obj_Order_Change, obj_Vision, obj_Notes, obj_WM_In, obj_WM_Out, Msg, obj_WO_Mat, obj_Reprocess DECLARE SUBROUTINE obj_Order_Change, obj_Vision, obj_Notes, obj_WM_In, obj_WM_Out, Msg, obj_WO_Mat, obj_Reprocess
DECLARE SUBROUTINE obj_WO_Wfr, obj_WO_Step, Send_Info, obj_RDS2, obj_RDS, obj_Post_Log, obj_WO_Mat_Log, Sleepery DECLARE SUBROUTINE obj_WO_Wfr, obj_WO_Step, Send_Info, obj_RDS2, obj_RDS, obj_Post_Log, obj_WO_Mat_Log, Sleepery
DECLARE SUBROUTINE Environment_Services, Logging_Services, Error_Services, Database_Services, Update_Index DECLARE SUBROUTINE Environment_Services, Logging_Services, Error_Services, Database_Services, Update_Index
DECLARE SUBROUTINE Work_Order_Services, Delay, Transaction_Services, RDS_Services, WM_In_Services, WM_Out_Services DECLARE SUBROUTINE Work_Order_Services, Delay, Transaction_Services
$INSERT MSG_EQUATES $INSERT MSG_EQUATES
$INSERT ORDER_EQU $INSERT ORDER_EQU
@ -53,7 +53,7 @@ $INSERT LOGICAL
$INSERT APPCOLORS $INSERT APPCOLORS
$INSERT WM_IN_EQUATES $INSERT WM_IN_EQUATES
EQU NUM_RETRIES$ TO 60 EQU NUM_RETRIES$ TO 50
EQU CRLF$ TO \0D0A\ EQU CRLF$ TO \0D0A\
EQU COMMA$ TO ',' EQU COMMA$ TO ','
@ -103,7 +103,7 @@ BEGIN CASE
CASE Method = 'OpenWONos' ; GOSUB OpenWONos CASE Method = 'OpenWONos' ; GOSUB OpenWONos
CASE Method = 'ShipWONos' ; GOSUB ShipWONos CASE Method = 'ShipWONos' ; GOSUB ShipWONos
CASE Method = 'WOStepStatus' ; GOSUB WOStepStatus CASE Method = 'WOStepStatus' ; GOSUB WOStepStatus
CASE Method = 'ReleaseCassette' ; GOSUB ReleaseCassette CASE Method = 'ReleaseCassettes' ; GOSUB ReleaseCassettes
CASE Method = 'RecallWO' ; GOSUB RecallWO CASE Method = 'RecallWO' ; GOSUB RecallWO
CASE Method = 'ChangeLotNo' ; GOSUB ChangeLotNo CASE Method = 'ChangeLotNo' ; GOSUB ChangeLotNo
CASE Method = 'ChangeCassQty' ; GOSUB ChangeCassQty CASE Method = 'ChangeCassQty' ; GOSUB ChangeCassQty
@ -967,11 +967,11 @@ RETURN
* * * * * * * * * * * * * *
ReleaseCassette: ReleaseCassettes:
* * * * * * * * * * * * * *
WONo = Parms[1,@RM] WONo = Parms[1,@RM]
CassNo = Parms[COL2()+1,@RM] CassNos = Parms[COL2()+1,@RM]
ReleaseUser = Parms[COL2()+1,@RM] ReleaseUser = Parms[COL2()+1,@RM]
RelDtm = Parms[COL2()+1,@RM] RelDtm = Parms[COL2()+1,@RM]
@ -979,7 +979,7 @@ ReleaseCassette:
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<2> = ReleaseUser LogData<2> = ReleaseUser
LogData<3> = WONo LogData<3> = WONo
LogData<4> = 'WONo: ':WONo:' CassNo: ':CassNo:' ReleaseUser: ':ReleaseUser:' ||| Beginning ReleaseCassette routine.' LogData<4> = 'WONo: ':WONo:' CassNos: ':CassNos:' ReleaseUser: ':ReleaseUser:' ||| Beginning ReleaseCassettes routine.'
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM) Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
IF WONo = '' THEN ErrorMsg = 'Null parameter WONo passed to routine (':Method:').' IF WONo = '' THEN ErrorMsg = 'Null parameter WONo passed to routine (':Method:').'
@ -1050,7 +1050,12 @@ ReleaseCassette:
OrdSummary = '' ;* Holds Order Detail Lot Numbers and Associated Order Item Numbers OrdSummary = '' ;* Holds Order Detail Lot Numbers and Associated Order Item Numbers
WOMKey = WONo:'*':CassNo CassCnt = COUNT(CassNos,@VM) + (CassNos NE '')
WOMKeys = ''
FOR K = 1 TO CassCnt
WOMKeys<1,K> = WONo:'*':CassNos<1,K>
NEXT K
WOMTableVar = Database_Services('GetTableHandle', 'WO_MAT') WOMTableVar = Database_Services('GetTableHandle', 'WO_MAT')
@ -1060,7 +1065,7 @@ ReleaseCassette:
END END
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' CassNo:':CassNo:' ||| Trace 1' LogData<4> = 'WONo:':WONo:' CassNos:':CassNos:' ||| Trace 1'
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM) Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
EpiPN = WORec<WO_LOG_EPI_PART_NO$> EpiPN = WORec<WO_LOG_EPI_PART_NO$>
@ -1088,138 +1093,149 @@ ReleaseCassette:
// Log variables before obj_WM_Out('Create') // Log variables before obj_WM_Out('Create')
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' WMOLoadQty:':WMOLoadQty
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM) Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
IF ReactorType = 'EPP' THEN IF ReactorType = 'EPP' THEN
Send_Info('Creating WM_OUT records for WOStep ':WOStep:'...') Send_Info('Creating WM_OUT records for WOStep ':WOStep:'...')
OutOnlyCassIDs = obj_WM_Out('Create',WONO:@RM:WOStep:@RM:CassNo:@RM:WMOLoadQty) OutOnlyCassIDS = obj_WM_Out('Create',WONO:@RM:WOStep:@RM:CassNos:@RM:WMOLoadQty)
END ELSE END ELSE
OutOnlyCassIDs = '' OutOnlyCassIDs = ''
END END
StepRDSNos = '' StepRDSNos = ''
CassCnt = COUNT(CassNos,@VM) + (CassNos NE '')
// Log variables after obj_WM_Out('Create') // Log variables after obj_WM_Out('Create')
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM) Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2' LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2'
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM) Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
IF ReactorType EQ 'EPP' THEN FOR N = 1 TO CassCnt
CassWaferQty = XLATE('WO_MAT',WONo:'*':CassNo,WO_MAT_WAFER_QTY$,'X') LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
WMIKey = WONo:'*':WOStep:'*':CassNo LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2.':N
obj_WM_IN('Create',WONo:@RM:WOStep:@RM:CassNo:@RM:CassWaferQty) Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
END ELSE CassNo = CassNos<1,N>
WOMatRec = XLATE('WO_MAT',WoNo:'*':CassNo,'','X') IF ReactorType EQ 'EPP' THEN
RDSNoCheck = WOMatRec<WO_MAT_RDS_NO$>
If RDSNoCheck EQ '' then
CassLotNo = WOMatRec<WO_MAT_LOT_NO$> CassWaferQty = XLATE('WO_MAT',WONo:'*':CassNo,WO_MAT_WAFER_QTY$,'X')
CassWaferQty = WOMatRec<WO_MAT_WAFER_QTY$> WMIKey = WONo:'*':WOStep:'*':CassNo
CassCustPartNo = WOMatRec<WO_MAT_CUST_PART_NO$> obj_WM_IN('Create',WONo:@RM:WOStep:@RM:CassNo:@RM:CassWaferQty)
CassSubPartNo = WOMatRec<WO_MAT_SUB_PART_NO$>
CassSubInvID = ''
CassOrderItem = WOMatRec<WO_MAT_ORDER_ITEM$>
ReprocessedMat = WOMatRec<WO_MAT_REPROCESSED_MAT$>
CassSubVendCd = WOMatRec<WO_MAT_SUB_VEND_CD$>
IF OrderNo = '' THEN END ELSE
QuoteNo = ''
END ELSE
QuoteNo = XLATE('ORDER_DET',OrderNo:'*':CassOrderItem,ORDER_DET_QUOTE_NO$,'X')
END
Parms = WONo:@RM WOMatRec = XLATE('WO_MAT',WoNo:'*':CassNo,'','X')
Parms := WOStep:@RM RDSNoCheck = WOMatRec<WO_MAT_RDS_NO$>
Parms := LastStep:@RM If RDSNoCheck EQ '' then
Parms := CassNo:@RM
Parms := QuoteNo:@RM
Parms := OrderNo:@RM
Parms := CassOrderItem:@RM
Parms := CustNo:@RM
Parms := PONo:@RM
Parms := ProcPSN:@RM
Parms := SubSupplyBy:@RM
Parms := SubPreClean:@RM
Parms := SubPostClean:@RM
Parms := PromiseDt:@RM
Parms := CassLotNo:@RM
Parms := CassCustPartNo:@RM
Parms := CassWaferQty:@RM
Parms := CassSubPartNo:@RM
Parms := '':@RM ;* QXJ Flag
Parms := CassSubVendCd
IF ReactorType NE 'GAN' then CassLotNo = WOMatRec<WO_MAT_LOT_NO$>
CassWaferQty = WOMatRec<WO_MAT_WAFER_QTY$>
CassCustPartNo = WOMatRec<WO_MAT_CUST_PART_NO$>
CassSubPartNo = WOMatRec<WO_MAT_SUB_PART_NO$>
CassSubInvID = ''
CassOrderItem = WOMatRec<WO_MAT_ORDER_ITEM$>
ReprocessedMat = WOMatRec<WO_MAT_REPROCESSED_MAT$>
CassSubVendCd = WOMatRec<WO_MAT_SUB_VEND_CD$>
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') IF OrderNo = '' THEN
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2.1 - Start obj_RDS("Create")' QuoteNo = ''
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM) END ELSE
Done = False$ QuoteNo = XLATE('ORDER_DET',OrderNo:'*':CassOrderItem,ORDER_DET_QUOTE_NO$,'X')
For AttemptIndex = 1 to NUM_RETRIES$
If (AttemptIndex GT 1) then Delay(1)
NewRDSNo = obj_RDS('Create',Parms)
errCode = ''
Begin Case
Case Get_Status(errCode)
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2.1.1 - Attempt ':AttemptIndex:'. Error calling obj_RDS("Create"). Error message: ':errCode
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
Case (NewRDSNo EQ 0) or (NewRDSNo EQ '')
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2.1.1 - Attempt ':AttemptIndex:'. Error calling obj_RDS("Create"). Invalid RDSNo ':Quote(RDSNo):' returned.'
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
Case RowExists('RDS', NewRDSNo)
Done = True$
End Case
Until Done
Next AttemptIndex
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2.2 - End obj_RDS("Create")'
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
If ( (NewRDSNo EQ 0) or (NewRDSNo EQ '') ) then
ErrMsg(errCode)
ErrorMsg = "RDS '" : NewRDSNo : "' Create Failure - Check for missing data on Work Order"
If Error_Services('HasError') then
ErrMsg = Error_Services('GetMessage')
LogData = LoggingDTM : ',' : ReleaseUser : ',' : WONo : ',' : ErrMsg
Logging_Services('AppendLog', objLog, LogData, CRLF$, COMMA$, False$, '', LogData)
end
RTParms = 'RDS'
FOR I = 1 TO COUNT(StepRdsNos,@VM) + (StepRdsNos NE '')
RdsNo = StepRdsNos<1,I>
RTParms = FieldStore(RTParms, @RM, 2, 1, RdsNo)
obj_Tables('DeleteRec',RTParms)
NEXT I
RETURN
END else
// No error creating RDS record -> add it to the batch list.
StepRDSNos<1,-1> = NewRDSNo
end
IF ReprocessedMat THEN
OrgRDSNo = CassLotNo
obj_Reprocess('FixUp',OrgRDSNo:@RM:NewRDSNo)
END END
END ;* End of check for GAN reactor Parms = WONo:@RM
END ;* End of Check for existing RDS Parms := WOStep:@RM
END ;* End of check for EpiPRO reactor type Parms := LastStep:@RM
Parms := CassNo:@RM
Parms := QuoteNo:@RM
Parms := OrderNo:@RM
Parms := CassOrderItem:@RM
Parms := CustNo:@RM
Parms := PONo:@RM
Parms := ProcPSN:@RM
Parms := SubSupplyBy:@RM
Parms := SubPreClean:@RM
Parms := SubPostClean:@RM
Parms := PromiseDt:@RM
Parms := CassLotNo:@RM
Parms := CassCustPartNo:@RM
Parms := CassWaferQty:@RM
Parms := CassSubPartNo:@RM
Parms := '':@RM ;* QXJ Flag
Parms := CassSubVendCd
IF ReactorType NE 'GAN' then
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2.':N:'.1 - Start obj_RDS("Create")'
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
Done = False$
For AttemptIndex = 1 to NUM_RETRIES$
If (AttemptIndex GT 1) then Delay(AttemptIndex)
NewRDSNo = obj_RDS('Create',Parms)
errCode = ''
Begin Case
Case Get_Status(errCode)
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2.':N:'.1.1 - Attempt ':AttemptIndex:'. Error calling obj_RDS("Create"). Error message: ':errCode
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
Case (NewRDSNo EQ 0) or (NewRDSNo EQ '')
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2.':N:'.1.1 - Attempt ':AttemptIndex:'. Error calling obj_RDS("Create"). Invalid RDSNo ':Quote(RDSNo):' returned.'
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
Case RowExists('RDS', NewRDSNo)
Done = True$
End Case
Until Done
Next AttemptIndex
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2.':N:'.2 - End obj_RDS("Create")'
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
If ( (NewRDSNo EQ 0) or (NewRDSNo EQ '') ) then
ErrMsg(errCode)
ErrorMsg = "RDS '" : NewRDSNo : "' Create Failure - Check for missing data on Work Order"
If Error_Services('HasError') then
ErrMsg = Error_Services('GetMessage')
LogData = LoggingDTM : ',' : ReleaseUser : ',' : WONo : ',' : ErrMsg
Logging_Services('AppendLog', objLog, LogData, CRLF$, COMMA$, False$, '', LogData)
end
RTParms = 'RDS'
FOR I = 1 TO COUNT(StepRdsNos,@VM) + (StepRdsNos NE '')
RdsNo = StepRdsNos<1,I>
RTParms = FieldStore(RTParms, @RM, 2, 1, RdsNo)
obj_Tables('DeleteRec',RTParms)
NEXT I
RETURN
END else
// No error creating RDS record -> add it to the batch list.
StepRDSNos<1,-1> = NewRDSNo
end
IF ReprocessedMat THEN
OrgRDSNo = CassLotNo
obj_Reprocess('FixUp',OrgRDSNo:@RM:NewRDSNo)
END
END ;* End of check for GAN reactor
END ;* End of Check for existing RDS
END ;* End of check for EpiPRO reactor type
NEXT N
NEXT WOStep NEXT WOStep
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3' LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3'
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM) Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
If RelDtm EQ '' then If RelDtm EQ '' then
@ -1235,91 +1251,95 @@ ReleaseCassette:
MaxShipQty = Xlate('WO_LOG', WONo, 'CUST_EPI_PART_SHIP_QTY', 'X') MaxShipQty = Xlate('WO_LOG', WONo, 'CUST_EPI_PART_SHIP_QTY', 'X')
CassNo = FIELD(WOMKey,'*',2) FOR N = 1 TO CassCnt
// Keep trying to get the lock. Another process may be updating this record at the same time. WOMKey = WOMKeys<1,N>
Done = False$ CassNo = FIELD(WOMKey,'*',2)
For AttemptIndex = 1 to NUM_RETRIES$ // Keep trying to get the lock. Another process may be updating this record at the same time.
Done = False$
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') For AttemptIndex = 1 to NUM_RETRIES$
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3.':AttemptIndex
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
If (AttemptIndex GT 1) then Delay(1)
HaveLock = Database_Services('GetKeyIDLock', 'WO_MAT', WOMKey, True$)
If HaveLock then
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3.':AttemptIndex:' Have lock!' LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3.':AttemptIndex
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM) Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
WOMatRec = XLATE('WO_MAT',WOMKey,'','X') ;* We have the lock, so just get the record this way If (AttemptIndex GT 1) then Delay(AttemptIndex)
HaveLock = Database_Services('GetKeyIDLock', 'WO_MAT', WOMKey)
If HaveLock then
IF WOMatRec<WO_MAT_REL_DTM$> = '' THEN LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
WOMatRec<WO_MAT_REL_DTM$> = IConv(RelDTM,'DT') LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3.':AttemptIndex:' Have lock!'
WOMatRec<WO_MAT_REL_BY$> = ReleaseUser Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
WOMatRec<WO_MAT_ORG_COMMIT_DT$> = PromiseDt
IF SubPreClean = 'No' OR SubPreClean = '' THEN WOMatRec = XLATE('WO_MAT',WOMKey,'','X') ;* We have the lock, so just get the record this way
WOMatRec<WO_MAT_WMI_CURR_STATUS$> = 'RTU'
END ELSE
WOMatRec<WO_MAT_WMI_CURR_STATUS$> = 'PREC'
END
WOMatRec<WO_MAT_WMO_CURR_STATUS$> = 'RTB' IF WOMatRec<WO_MAT_REL_DTM$> = '' THEN
WOMatRec<WO_MAT_REL_DTM$> = IConv(RelDTM,'DT')
WOMatRec<WO_MAT_REL_BY$> = ReleaseUser
WOMatRec<WO_MAT_ORG_COMMIT_DT$> = PromiseDt
thisInvDTM = ICONV(RelDTM,'DT') IF SubPreClean = 'No' OR SubPreClean = '' THEN
WOMatRec<WO_MAT_WMI_CURR_STATUS$> = 'RTU'
END ELSE
WOMatRec<WO_MAT_WMI_CURR_STATUS$> = 'PREC'
END
WHCd = 'SR' WOMatRec<WO_MAT_WMO_CURR_STATUS$> = 'RTB'
LocCd = 'RB'
InvAction = 'REL'
ScanUserID = ReleaseUser
Tag = ''
ToolID = ''
LOCATE thisInvDTM IN WOMatRec<WO_MAT_INV_DTM$> BY 'AR' USING @VM SETTING Pos ELSE thisInvDTM = ICONV(RelDTM,'DT')
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_WH$,Pos,0,WHCd) WHCd = 'SR'
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_LOCATION$,Pos,0,LocCd) LocCd = 'RB'
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_ACTION$,Pos,0,InvAction) InvAction = 'REL'
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_DTM$,Pos,0,thisInvDTM) ScanUserID = ReleaseUser
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_USER$,Pos,0,ScanUserID) Tag = ''
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_TAG$,Pos,0,Tag) ToolID = ''
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_TOOL_ID$,Pos,0,ToolID)
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_SCAN_ENTRY$,Pos,0,False$)
END LOCATE thisInvDTM IN WOMatRec<WO_MAT_INV_DTM$> BY 'AR' USING @VM SETTING Pos ELSE
WOMatParms = 'WO_MAT':@RM:WOMKey:@RM:WOMTableVar:@RM:WOMatRec WOMatRec = INSERT(WOMatRec,WO_MAT_INV_WH$,Pos,0,WHCd)
obj_Tables('WriteRec',WOMatParms) ;* This writes and unlocks the WO_MAT records WOMatRec = INSERT(WOMatRec,WO_MAT_INV_LOCATION$,Pos,0,LocCd)
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_ACTION$,Pos,0,InvAction)
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_DTM$,Pos,0,thisInvDTM)
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_USER$,Pos,0,ScanUserID)
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_TAG$,Pos,0,Tag)
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_TOOL_ID$,Pos,0,ToolID)
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_SCAN_ENTRY$,Pos,0,False$)
If Not(Get_Status(errCode)) then END
Done = True$
WOMatParms = 'WO_MAT':@RM:WOMKey:@RM:WOMTableVar:@RM:WOMatRec
obj_Tables('WriteRec',WOMatParms) ;* This writes and unlocks the WO_MAT records
If Not(Get_Status(errCode)) then
Done = True$
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3.':AttemptIndex:' Successfully updated WO_MAT record ':WOMKey:' with REL operation.'
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
end else
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3.':AttemptIndex:' Failed to update WO_MAT record ':WOMKey:' with REL operation.'
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
end
IF ReactType = 'EPP' OR ReactType = 'GAN' THEN
obj_WO_Wfr('CassRel',WOMKey) ;* Added 3/17/2016 JCH for wafer history
END
END else
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3.':AttemptIndex:' Successfully updated WO_MAT record ':WOMKey:' with REL operation.' LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3.':AttemptIndex:' Error! REL_DTM is not null.'
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
end else
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3.':AttemptIndex:' Failed to update WO_MAT record ':WOMKey:' with REL operation.'
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM) Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
end end
IF ReactType = 'EPP' OR ReactType = 'GAN' THEN
obj_WO_Wfr('CassRel',WOMKey) ;* Added 3/17/2016 JCH for wafer history
END
END else
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3.':AttemptIndex:' Error! REL_DTM is not null.'
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
end end
end Until Done
Until Done Next AttemptIndex
Next AttemptIndex
NEXT N
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 4' LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 4'
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM) Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
OutOnlyCnt = DCount(OutOnlyCassIDs, @VM) OutOnlyCnt = COUNT(OutOnlyCassIDs,@VM) + (OutOnlyCassIDs NE '')
ExistingWOMatKeys = WORec<WO_LOG_WO_MAT_KEY$> ExistingWOMatKeys = WORec<WO_LOG_WO_MAT_KEY$>
NewWOMatKeys = ExistingWOMatKeys NewWOMatKeys = ExistingWOMatKeys
FOR I = 1 TO OutOnlyCnt FOR I = 1 TO OutOnlyCnt
@ -1331,7 +1351,7 @@ ReleaseCassette:
NEXT I NEXT I
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 5' LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 5'
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM) Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
ReactNos = obj_Sched('GetReactNos',WONo) ; // 5/26/2-15 JCH Added schedule ReactNos and check for WO_START_DTM$ ReactNos = obj_Sched('GetReactNos',WONo) ; // 5/26/2-15 JCH Added schedule ReactNos and check for WO_START_DTM$
@ -1381,12 +1401,12 @@ ReleaseCassette:
If ErrorMsg NE '' then If ErrorMsg NE '' then
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Error Message: ':ErrorMsg LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Error Message: ':ErrorMsg
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM) Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
end end
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Ending ReleaseCassette routine' LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Ending ReleaseCassettes routine'
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM) Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
RETURN RETURN
@ -2328,6 +2348,7 @@ Route:
IF Get_Status(errCode) THEN RETURN IF Get_Status(errCode) THEN RETURN
WOStepKeys = WOLogRec<WO_LOG_WO_STEP_KEY$> WOStepKeys = WOLogRec<WO_LOG_WO_STEP_KEY$>
IF WOStepKeys NE '' THEN IF WOStepKeys NE '' THEN
@ -2365,6 +2386,7 @@ Route:
DefWMOCassQtys = XLATE('CUST_EPI_PART',CustNo:'*':EpiPartNo,CUST_EPI_PART_WMO_LOAD_CNT$,'X') DefWMOCassQtys = XLATE('CUST_EPI_PART',CustNo:'*':EpiPartNo,CUST_EPI_PART_WMO_LOAD_CNT$,'X')
WOStepKeys = '' WOStepKeys = ''
DefWMOCassQty = '' DefWMOCassQty = ''
@ -2396,43 +2418,8 @@ Route:
WOLogRec<WO_LOG_CUST_PART_NO$> = EpiPN WOLogRec<WO_LOG_CUST_PART_NO$> = EpiPN
END END
WOLogRec<WO_LOG_PROD_VER_NO$> = ProdVerNo WOLogRec<WO_LOG_PROD_VER_NO$> = ProdVerNo
WOLogRec<WO_LOG_CUST_NO$> = CustNo WOLogRec<WO_LOG_CUST_NO$> = CustNo
WOQty = WOLogRec<WO_LOG_WO_QTY$>
If WOQty EQ '' then
WOQty = 0
WOLogRec<WO_LOG_WO_QTY$> = WOQty
end
RxQty = WOLogRec<WO_LOG_RX_QTY_STATIC$>
If RxQty EQ '' then
RxQty = 0
WOLOgRec<WO_LOG_RX_QTY_STATIC$> = RxQty
end
RelQty = WOLogRec<WO_LOG_REL_QTY_STATIC$>
If RelQty EQ '' then
RelQty = 0
WOLogRec<WO_LOG_REL_QTY_STATIC$> = RelQty
end
UnRelQty = WOLogRec<WO_LOG_UNREL_QTY_STATIC$>
If UnRelQty EQ '' then
UnRelQty = WOQty - RelQty
end
OpenQty = WOLogRec<WO_LOG_OPEN_QTY_STATIC$>
If OpenQty EQ '' then
OpenQty = WOQty - RxQty
WOLogRec<WO_LOG_OPEN_QTY_STATIC$> = OpenQty
end
ScrapQty = WOLogRec<WO_LOG_SCRAP_QTY_STATIC$>
If ScrapQty EQ '' then
ScrapQty = 0
WOLogRec<WO_LOG_SCRAP_QTY_STATIC$> = ScrapQty
end
ShippedQty = WOLogRec<WO_LOG_STATIC_SHIP_QTY$>
If ShippedQty EQ '' then
ShippedQty = 0
WOLogRec<WO_LOG_STATIC_SHIP_QTY$> = ShippedQty
end
otParms = FIELDSTORE(otParms,@RM,4,0,WOLogRec) otParms = FIELDSTORE(otParms,@RM,4,0,WOLogRec)
obj_Tables('WriteRec',otParms) obj_Tables('WriteRec',otParms)

View File

@ -28,7 +28,7 @@ Compile Function obj_WO_Mat(Method,Parms)
Declare Function Get_Status, Msg, Utility, obj_Tables, Dialog_Box,NextKey, Popup, Get_Property, obj_RDS, RetStack Declare Function Get_Status, Msg, Utility, obj_Tables, Dialog_Box,NextKey, Popup, Get_Property, obj_RDS, RetStack
Declare Function Database_Services, GaN_Services, Logging_Services, Environment_Services, Signature_Services Declare Function Database_Services, GaN_Services, Logging_Services, Environment_Services, Signature_Services
Declare Function obj_WO_Mat, obj_WM_In, obj_WM_Out, obj_Prod_Spec, obj_Clean_Insp, obj_Calendar, obj_Popup Declare Function obj_WO_Mat, obj_WM_In, obj_WM_Out, obj_Prod_Spec, obj_Clean_Insp, obj_Calendar, obj_Popup
Declare Function Error_Services, Memberof, Datetime, GetTickCount, Return_To_Fab_Services Declare Function Error_Services, Memberof, Datetime, GetTickCount
Declare Subroutine Set_Status, Msg, obj_Tables, Send_Dyn, Btree.Extract, ErrMsg, Send_Dyn, RList, obj_WO_Log, Send_Event Declare Subroutine Set_Status, Msg, obj_Tables, Send_Dyn, Btree.Extract, ErrMsg, Send_Dyn, RList, obj_WO_Log, Send_Event
Declare Subroutine obj_RDS, Extract_SI_Keys, obj_Pend_Ship_Labels, obj_WO_Mat_QA, Work_Order_Services, Service_Services Declare Subroutine obj_RDS, Extract_SI_Keys, obj_Pend_Ship_Labels, obj_WO_Mat_QA, Work_Order_Services, Service_Services
Declare Subroutine obj_notes, obj_Clean_Insp, obj_Post_Log, Send_Info, obj_WO_Mat_Log, obj_SAP, obj_WO_Mat, obj_WO_Wfr Declare Subroutine obj_notes, obj_Clean_Insp, obj_Post_Log, Send_Info, obj_WO_Mat_Log, obj_SAP, obj_WO_Mat, obj_WO_Wfr
@ -664,22 +664,13 @@ CurrStatus:
RETURN RETURN
END END
WMIKey = WOMatRec<WO_MAT_WMI_KEY$>
WMOKey = WOMatRec<WO_MAT_WMO_KEY$>
OpenRTF = Return_To_Fab_Services('GetOpenReturnToFabRecordIdByCassId', WMOKey)
IF OpenRTF NE '' THEN
Result = 'RTF' ;* Open RTF on WO_MAT *
Result = Oconv(Result, '[WO_MAT_CURR_STATUS_CONV]')
RETURN
END
IF WOMatRec<WO_MAT_SHIP_NO$> NE '' THEN IF WOMatRec<WO_MAT_SHIP_NO$> NE '' THEN
Result = 'SHIP' Result = 'SHIP'
RETURN RETURN
END END
WMIKey = WOMatRec<WO_MAT_WMI_KEY$>
WMOKey = WOMatRec<WO_MAT_WMO_KEY$>
LocCnt = COUNT(WOMatRec<WO_MAT_INV_LOCATION$>,@VM) + (WOMatRec<WO_MAT_INV_LOCATION$> NE '') LocCnt = COUNT(WOMatRec<WO_MAT_INV_LOCATION$>,@VM) + (WOMatRec<WO_MAT_INV_LOCATION$> NE '')
@ -1258,11 +1249,10 @@ AddInvTrans:
END END
END END
OtParms = FieldStore(OtParms,@RM,4,0,WOMatRec) ;* Put record in 4th field of OtParms OtParms = FieldStore(OtParms,@RM,4,0,WOMatRec) ;* Put record in 4th field of OtParms
LogPos = ''
ThisEntryAction = '' Done = False$
Done = False$ NumAttempts = 0
NumAttempts = 0
Loop Loop
NumAttempts += 1 NumAttempts += 1
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, False$) Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, False$)
@ -1311,39 +1301,27 @@ AddInvTrans:
Logging_Services('AppendLog', objLogInvTransError, LogData, @RM, @FM) Logging_Services('AppendLog', objLogInvTransError, LogData, @RM, @FM)
end end
WOMatRecVerify = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey) WOMatRecVerify = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
If Pos EQ -1 then LastEntryIndex = DCount(WOMatRecVerify<WO_MAT_INV_WH$>, @VM)
LastEntryIndex = DCount(WOMatRecVerify<WO_MAT_INV_WH$>, @VM) LastEntryAction = WOMatRecVerify<WO_MAT_INV_ACTION$, LastEntryIndex>
LogPos = LastEntryIndex LastEntryLocCd = WOMatRecVerify<WO_MAT_INV_LOCATION$, LastEntryIndex>
ThisEntryAction = WOMatRecVerify<WO_MAT_INV_ACTION$, LastEntryIndex> If LastEntryAction EQ InvAction AND LastEntryLocCd = LocCd then
ThisEntryLocCd = WOMatRecVerify<WO_MAT_INV_LOCATION$, LastEntryIndex> Done = True$
If ThisEntryAction EQ InvAction AND ThisEntryLocCd = LocCd then
Done = True$
end
end else
LogPos = Pos
ThisEntryAction = WOMatRecVerify<WO_MAT_INV_ACTION$, Pos>
ThisEntryLocCd = WOMatRecVerify<WO_MAT_INV_LOCATION$, Pos>
If ThisEntryAction EQ InvAction AND ThisEntryLocCd = LocCd then
Done = True$
end
end end
Until ( (Done EQ True$) or (NumAttempts EQ 10) ) Until ( (Done EQ True$) or (NumAttempts EQ 10) )
Repeat Repeat
If LogPos EQ '' then LogPos = DCount(WOMatRecVerify<WO_MAT_INV_DTM$>, @VM)
LogData = '' LogData = ''
LogData<1> = WOMatRecVerify<WO_MAT_INV_DTM$, LogPos> LogData<1> = WOMatRecVerify<WO_MAT_INV_DTM$, LastEntryIndex>
LogData<2> = WONo LogData<2> = WONo
LogData<3> = CassNo LogData<3> = CassNo
LogData<4> = WOMatRecVerify<WO_MAT_INV_USER$, LogPos> LogData<4> = WOMatRecVerify<WO_MAT_INV_USER$, LastEntryIndex>
LogData<5> = LogPos LogData<5> = LastEntryIndex
LogData<6> = WOMatRecVerify<WO_MAT_INV_TAG$, LogPos> LogData<6> = WOMatRecVerify<WO_MAT_INV_TAG$, LastEntryIndex>
LogData<7> = WOMatRecVerify<WO_MAT_INV_WH$, LogPos> LogData<7> = WOMatRecVerify<WO_MAT_INV_WH$, LastEntryIndex>
LogData<8> = WOMatRecVerify<WO_MAT_INV_LOCATION$, LogPos> LogData<8> = WOMatRecVerify<WO_MAT_INV_LOCATION$, LastEntryIndex>
LogData<9> = ThisEntryAction LogData<9> = LastEntryAction
LogData<10> = WOMatRecVerify<WO_MAT_INV_TOOL_ID$, LogPos> LogData<10> = WOMatRecVerify<WO_MAT_INV_TOOL_ID$, LastEntryIndex>
LogData<11> = WOMatRecVerify<WO_MAT_INV_SCAN_ENTRY$, LogPos> LogData<11> = WOMatRecVerify<WO_MAT_INV_SCAN_ENTRY$, LastEntryIndex>
LogData<12> = NumAttempts LogData<12> = NumAttempts
Logging_Services('AppendLog', WOMatObjLog3, LogData, @RM, @FM) Logging_Services('AppendLog', WOMatObjLog3, LogData, @RM, @FM)
@ -3306,20 +3284,7 @@ ReportStatus:
WMIStatus = WOMatRec<WO_MAT_WMI_CURR_STATUS$> WMIStatus = WOMatRec<WO_MAT_WMI_CURR_STATUS$>
WMOStatus = WOMatRec<WO_MAT_WMO_CURR_STATUS$> WMOStatus = WOMatRec<WO_MAT_WMO_CURR_STATUS$>
IF WMOStatus = 'COMP' THEN
OpenRTF = Return_To_Fab_Services('GetOpenReturnToFabRecordIdByCassId', RDSNo)
If OpenRTF EQ '' then
OpenRTF = Return_To_Fab_Services('GetOpenReturnToFabRecordIdByCassId', WMOKey)
end
IF OpenRTF NE '' THEN
Result = 'RTF' ;* Open RTF on WO_MAT *
Result = Oconv(Result, '[WO_MAT_CURR_STATUS_CONV]')
RETURN
END
IF WMOStatus = 'COMP' THEN
WMOStatus = obj_WO_Mat('CurrStatus',WOMatKey:@RM:WOMatRec) WMOStatus = obj_WO_Mat('CurrStatus',WOMatKey:@RM:WOMatRec)
END END
@ -5748,3 +5713,4 @@ ExpCOA:
RETURN RETURN

View File

@ -92,7 +92,6 @@ RETURN Result
* * * * * * * * * * * * * *
Create: Create:
* * * * * * * * * * * * * *
StartTick = GetTickCount() StartTick = GetTickCount()
MetricName = 'Create' MetricName = 'Create'
@ -166,12 +165,93 @@ Create:
WOMatLogRec<WO_MAT_LOG_TOOL_ID$> = ToolID WOMatLogRec<WO_MAT_LOG_TOOL_ID$> = ToolID
WOMatLogRec<WO_MAT_LOG_SCAN_ENTRY$> = ScanEntry WOMatLogRec<WO_MAT_LOG_SCAN_ENTRY$> = ScanEntry
* OtParms = 'WO_MAT_LOG':@RM:WOMatLogKey:@RM:@RM:WOMatLogRec
* obj_Tables('WriteRec',OtParms)
*
* errCode = ''
* IF Get_Status(errCode) THEN
* ErrorMsg = 'obj_WO_Mat_Log':TAB$:'Create: Write error':TAB$:LogFile:TAB$:WONos:TAB$:CassNos:TAB$:WhCd:'*':LocCd:TAB$:Action:TAB$:TransDTM:TAB$:UserID:TAB$:Tags:TAB$:ToolID:TAB$:errCode
* END ElSE
* ErrorMsg = ''
* END
Database_Services('WriteDataRow', 'WO_MAT_LOG', WOMatLogKey, WOMatLogRec, True$, False$, True$) Database_Services('WriteDataRow', 'WO_MAT_LOG', WOMatLogKey, WOMatLogRec, True$, False$, True$)
If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage') If Error_Services('NoError') then
ReactType = XLATE('WO_LOG', WONos, WO_LOG_REACT_TYPE$, 'X')
If ReactType NE 'EPP' then
WONo = WoNos
CassNo = CassNos
WOMatKey = WONo : '*' : CassNo
RDSKey = XLATE('WO_MAT', WOMatKey, WO_MAT_RDS_NO$, 'X')
Lot_Event_Services('CreateLotEvent', RDSKey, Datetime(), Action, '', '', UserId, True$, 'RDS')
end else
Begin Case
Case Action EQ 'RCVD'
//WMI
WONo = WoNos
StepNo = 1
CassNo = CassNos
WMInKey = WONo : '*' : StepNo : '*' : CassNo
Lot_Event_Services('CreateLotEvent', WMInKey, Datetime(), Action, '', '', UserId, True$, 'WM_IN')
Case Action EQ 'REL'
//WMI
WONo = WoNos
StepNo = 1
CassNo = CassNos
WMInKey = WONo : '*' : StepNo : '*' : CassNo
Lot_Event_Services('CreateLotEvent', WMInKey, Datetime(), Action, '', '', UserId, True$, 'WM_IN')
Case Action EQ '1VER'
//RDS action, do nothing for now
Case Action EQ '1LOAD'
//RDS, do nothing for now
Case Action EQ '1UNLOAD'
//RDS, do nothing for now
Case Action EQ '1MO_PSTI'
WONo = WoNos
StepNo = 1
CassNo = CassNos
WMOutKey = WONo : '*' : StepNo : '*' : CassNo
Lot_Event_Services('CreateLotEvent', WMOutKey, Datetime(), Action, '', '', UserId, True$, 'WM_OUT')
Case Action EQ '1MO_QA'
WONo = WoNos
StepNo = 1
CassNo = CassNos
WMOutKey = WONo : '*' : StepNo : '*' : CassNo
Lot_Event_Services('CreateLotEvent', WMOutKey, Datetime(), Action, '', '', UserId, True$, 'WM_OUT')
Case Action EQ 'PACK'
WONo = WoNos
StepNo = 1
CassNo = CassNos
WMOutKey = WONo : '*' : StepNo : '*' : CassNo
Lot_Event_Services('CreateLotEvent', WMOutKey, Datetime(), Action, '', '', UserId, True$, 'WM_OUT')
Case Action EQ 'PSVER'
WONo = WoNos
StepNo = 1
CassNo = CassNos
WMOutKey = WONo : '*' : StepNo : '*' : CassNo
Lot_Event_Services('CreateLotEvent', WMOutKey, Datetime(), Action, '', '', UserId, True$, 'WM_OUT')
Case Action EQ 'SHIP'
WONo = WoNos
StepNo = 1
CassNo = CassNos
WMOutKey = WONo : '*' : StepNo : '*' : CassNo
Lot_Event_Services('CreateLotEvent', WMOutKey, Datetime(), Action, '', '', UserId, True$, 'WM_OUT')
Case Action EQ 'LBLCHK'
//WMO
WONo = WoNos
StepNo = 1
CassNo = CassNos
WMOutKey = WONo : '*' : StepNo : '*' : CassNo
Lot_Event_Services('CreateLotEvent', WMOutKey, Datetime(), Action, '', '', UserId, True$, 'WM_OUT')
End Case
end
ErrorMsg = ''
end else
ErrorMsg = Error_Services('GetMessage')
end
EndTick = GetTickCount() EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick) Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
RETURN RETURN
@ -326,3 +406,5 @@ Post:
RETURN RETURN

View File

@ -551,32 +551,23 @@ RemQAMet:
IF WOMatQARec<WO_MAT_QA_SIG$,DelPos> = '' THEN IF WOMatQARec<WO_MAT_QA_SIG$,DelPos> = '' THEN
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_PROFILE$, DelPos, 0) WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_PROFILE$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_PROP$,DelPos,0) WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_PROP$,DelPos,0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_TOOL_CLASS$, DelPos, 0) WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_TOOL_CLASS$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_STAGE$, DelPos, 0) WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_STAGE$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_MIN$, DelPos, 0) WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_MIN$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_MAX$, DelPos, 0) WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_MAX$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_SLOT$, DelPos, 0) WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_SLOT$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_RECIPE$, DelPos, 0) WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_RECIPE$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_RECIPE_PATTERN$, DelPos, 0) WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_RECIPE_PATTERN$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_SIG$, DelPos, 0) WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_SIG$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_SIG_DTM$, DelPos, 0) WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_SIG_DTM$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_STD_MAX$, DelPos, 0) WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_STD_MAX$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_STD_RESULT$, DelPos, 0) WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_STD_RESULT$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_WFR_QTY$, DelPos, 0) WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_WFR_QTY$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_WFR_TYPE$, DelPos, 0) WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_WFR_TYPE$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_REACT_SCHED$, DelPos, 0) WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_REACT_SCHED$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_SHIP_DOC$, DelPos, 0) WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_SHIP_DOC$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_DATA_POINTS$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_MIN_RESULT$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_MAX_RESULT$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_RANGE_PCT_RESULT$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_EDGE_MEAN_RESULT$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_5MM_PCT_RESULT$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_OUT_OF_SPEC$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_PHASE_MIN$, DelPos, 0)
WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_FAIL_REASON$, DelPos, 0)
otParms = FIELDSTORE(otParms,@RM,4,0,WOMatQARec) otParms = FIELDSTORE(otParms,@RM,4,0,WOMatQARec)
obj_Tables('WriteRec',otParms) obj_Tables('WriteRec',otParms)
@ -763,3 +754,5 @@ QAResults:
RETURN RETURN

View File

@ -14,8 +14,9 @@ COMPILE FUNCTION obj_WO_React(Method,Parms)
*/ */
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, obj_Prod_Spec, obj_WO_Mat_QA, GetTickCount DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, obj_Prod_Spec, obj_WO_Mat_QA, GetTickCount
Declare function Environment_Services, Database_Services Declare function Environment_Services
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, RList, ErrMsg, Btree.Extract, obj_WO_Mat_QA, Mona_Services DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, RList, ErrMsg, Btree.Extract, obj_WO_Mat_QA, Mona_Services
$INSERT MSG_EQUATES $INSERT MSG_EQUATES
@ -69,213 +70,231 @@ RETURN Result
AddRdsNo: AddRdsNo:
* * * * * * * * * * * * * *
StartTick = GetTickCount() StartTick = GetTickCount()
MetricName = 'AddRdsNo' MetricName = 'AddRdsNo'
WONo = Parms[1,@RM] WONo = Parms[1,@RM]
StepNo = Parms[COL2()+1,@RM] StepNo = Parms[COL2()+1,@RM]
ReactNo = Parms[COL2()+1,@RM] ReactNo = Parms[COL2()+1,@RM]
RdsNo = Parms[COL2()+1,@RM] RdsNo = Parms[COL2()+1,@RM]
CassNo = Parms[COL2()+1,@RM] CassNo = Parms[COL2()+1,@RM]
IF WONo = '' THEN RETURN IF WONo = '' THEN RETURN
IF StepNo = '' THEN RETURN IF StepNo = '' THEN RETURN
IF ReactNo = '' THEN RETURN IF ReactNo = '' THEN RETURN
IF RdsNo = '' THEN RETURN IF RdsNo = '' THEN RETURN
IF CassNo = '' THEN RETURN IF CassNo = '' THEN RETURN
WOReactKey = WONo:'*':StepNo:'*':ReactNo WOReactKey = WONo:'*':StepNo:'*':ReactNo
otParms = 'WO_REACT':@RM:WOReactKey
WOReactRec = obj_Tables('ReadOnlyRec',otParms)
RDSNos = WOReactRec<WO_REACT_RDS_NO$>
CassNos = WOReactRec<WO_REACT_CASS_NO$>
PSNos = XLATE('WO_LOG',WoNo,'PROD_VER_STEP_PSN','X')
PSNo = PSNos<1,StepNo>
QAMetData = obj_Prod_Spec('GetQAMet',PSNo:@RM:@RM:1) ;* * * Get Reactor Scheduled QA Metrology * * *
IF QAMetData = '' THEN RETURN ;* No reactor scheduled QA_MET specified
Start = QAMetData<COL$QA_MET_START>
Interval = QAMetData<COL$QA_MET_INTERVAL>
Stage = QAMetData<COL$QA_MET_STAGE>
MetPropCd = QAMetData<COL$QA_MET_PROP>
GOSUB BuildAllTestPos ;* Set RDSNos, Start and Interval -> returns AllTestPos
* * * Find where the the RDS being added will be in the list. * * *
LOCATE RDSNo IN WOReactRec<WO_REACT_RDS_NO$> BY 'AR' USING @VM SETTING InsPos THEN
otParms = 'WO_REACT':@RM:WOReactKey otParms = 'WO_REACT':@RM:WOReactKey
WOReactRec = obj_Tables('UnlockRec',otParms)
WOReactRec = obj_Tables('ReadOnlyRec',otParms) RETURN ;* RDSNo already in this list -> nothing to do.
RDSNos = WOReactRec<WO_REACT_RDS_NO$>
CassNos = WOReactRec<WO_REACT_CASS_NO$>
PSNos = XLATE('WO_LOG',WoNo,'PROD_VER_STEP_PSN','X') END ELSE
PSNo = PSNos<1,StepNo>
QAMetData = obj_Prod_Spec('GetQAMet',PSNo:@RM:@RM:1) ;* * * Get Reactor Scheduled QA Metrology * * * LOCATE InsPos IN AllTestPos BY 'AR' USING @VM SETTING TrimPos ELSE Null
IF QAMetData = '' THEN RETURN ;* No reactor scheduled QA_MET specified
Start = QAMetData<COL$QA_MET_START>
Interval = QAMetData<COL$QA_MET_INTERVAL>
Stage = QAMetData<COL$QA_MET_STAGE>
MetPropCd = QAMetData<COL$QA_MET_PROP>
GOSUB BuildAllTestPos ;* Set RDSNos, Start and Interval -> returns AllTestPos
* * * Find where the the RDS being added will be in the list. * * *
LOCATE RDSNo IN WOReactRec<WO_REACT_RDS_NO$> USING @VM SETTING InsPos THEN
otParms = 'WO_REACT':@RM:WOReactKey
WOReactRec = obj_Tables('UnlockRec',otParms)
RETURN ;* RDSNo already in this list -> nothing to do.
END ELSE
LOCATE InsPos IN AllTestPos USING @VM SETTING TrimPos ELSE Null
ChangePosList = FIELD(AllTestPos,@VM,TrimPos,SeqCnt)
GOSUB RemSchedQA ;* Removes unsigned QAMet from cassettes scheduled past the box being removed
END
WOReactRec = INSERT(WOReactRec,WO_REACT_RDS_NO$,InsPos,0,RDSNo)
WOReactRec = INSERT(WOReactRec,WO_REACT_CASS_NO$,InsPos,0,CassNo) ;* Inserts the passed in RDSNo & associated cassette number from the data fields
RDSNos = WOReactRec<WO_REACT_RDS_NO$> ;* List after insert
CassNos = WOReactRec<WO_REACT_CASS_NO$> ;* List after insert
* * * Now build list for cassette
GOSUB BuildAllTestPos
ChangePosList = FIELD(AllTestPos,@VM,TrimPos,SeqCnt) ChangePosList = FIELD(AllTestPos,@VM,TrimPos,SeqCnt)
// Add QAMet spec data to cassettes now associated with the test
// positions after removing the RDS & Cassno from the lists
GOSUB AddSchedQA
otParms = FIELDSTORE(otParms,@RM,4,0,WOReactRec) GOSUB RemSchedQA ;* Removes unsigned QAMet from cassettes scheduled past the box being removed
// Done with updates to the WO_REACT record
obj_Tables('WriteOnlyRec',otParms)
Result = Log END
EndTick = GetTickCount() WOReactRec = INSERT(WOReactRec,WO_REACT_RDS_NO$,InsPos,0,RDSNo)
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick) WOReactRec = INSERT(WOReactRec,WO_REACT_CASS_NO$,InsPos,0,CassNo) ;* Inserts the passed in RDSNo & associated cassette number from the data fields
RDSNos = WOReactRec<WO_REACT_RDS_NO$> ;* List after insert
CassNos = WOReactRec<WO_REACT_CASS_NO$> ;* List after insert
* * * Now build list for cassette
GOSUB BuildAllTestPos
ChangePosList = FIELD(AllTestPos,@VM,TrimPos,SeqCnt)
GOSUB AddSchedQA ;* Add QAMet spec data to cassettes now associated with the test positions after removing the RDS & Cassno from the lists
otParms = FIELDSTORE(otParms,@RM,4,0,WOReactRec)
obj_Tables('WriteOnlyRec',otParms) ;* Done with updates to the WO_REACT record
Result = Log
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
RETURN RETURN
* * * * * * * * * * * * * *
RemRDSNo: RemRDSNo:
* * * * * * * * * * * * * *
StartTick = GetTickCount() StartTick = GetTickCount()
MetricName = 'RemRDSNo' MetricName = 'RemRDSNo'
WONo = Parms[1,@RM] WONo = Parms[1,@RM]
StepNo = Parms[COL2()+1,@RM] StepNo = Parms[COL2()+1,@RM]
ReactNo = Parms[COL2()+1,@RM] ReactNo = Parms[COL2()+1,@RM]
RdsNo = Parms[COL2()+1,@RM] RdsNo = Parms[COL2()+1,@RM]
CassNo = Parms[COL2()+1,@RM] CassNo = Parms[COL2()+1,@RM]
IF WONo = '' THEN RETURN IF WONo = '' THEN RETURN
IF StepNo = '' THEN RETURN IF StepNo = '' THEN RETURN
IF ReactNo = '' THEN RETURN IF ReactNo = '' THEN RETURN
IF RdsNo = '' THEN RETURN IF RdsNo = '' THEN RETURN
IF CassNo = '' THEN RETURN IF CassNo = '' THEN RETURN
WOReactKey = WONo:'*':StepNo:'*':ReactNo WOReactKey = WONo:'*':StepNo:'*':ReactNo
otParms = 'WO_REACT':@RM:WOReactKey otParms = 'WO_REACT':@RM:WOReactKey
// 10/12/18 Changed to ReadOnlyRec as per Francois' instructions. - djs
WOReactRec = obj_Tables('ReadOnlyRec',otParms)
WOReactRec = obj_Tables('ReadOnlyRec',otParms) RDSNos = WOReactRec<WO_REACT_RDS_NO$>
CassNos = WOReactRec<WO_REACT_CASS_NO$>
RDSNos = WOReactRec<WO_REACT_RDS_NO$> PSNos = XLATE('WO_LOG',WoNo,'PROD_VER_STEP_PSN','X')
CassNos = WOReactRec<WO_REACT_CASS_NO$> PSNo = PSNos<1,StepNo>
PSNos = XLATE('WO_LOG',WoNo,'PROD_VER_STEP_PSN','X') QAMetData = obj_Prod_Spec('GetQAMet',PSNo:@RM:@RM:1) ;* * * Get Reactor Scheduled QA Metrology * * *
PSNo = PSNos<1,StepNo>
QAMetData = obj_Prod_Spec('GetQAMet',PSNo:@RM:@RM:1) ;* * * Get Reactor Scheduled QA Metrology * * * Start = QAMetData<COL$QA_MET_START>
Interval = QAMetData<COL$QA_MET_INTERVAL>
Stage = QAMetData<COL$QA_MET_STAGE>
MetPropCd = QAMetData<COL$QA_MET_PROP>
Start = QAMetData<COL$QA_MET_START> GOSUB BuildAllTestPos ;* Set RDSNos, Start and Interval -> returns AllTestPos
Interval = QAMetData<COL$QA_MET_INTERVAL>
Stage = QAMetData<COL$QA_MET_STAGE>
MetPropCd = QAMetData<COL$QA_MET_PROP>
GOSUB BuildAllTestPos ;* Set RDSNos, Start and Interval -> returns AllTestPos
IF AllTestPos NE '' THEN IF AllTestPos NE '' THEN
* * * Find where the the RDS being removed is in the list. * * * * * * Find where the the RDS being removed is in the list. * * *
LOCATE RDSNo IN WOReactRec<WO_REACT_RDS_NO$> USING @VM SETTING RemPos THEN LOCATE RDSNo IN WOReactRec<WO_REACT_RDS_NO$> USING @VM SETTING RemPos THEN
LOCATE RemPos IN AllTestPos USING @VM SETTING TrimPos ELSE Null LOCATE RemPos IN AllTestPos BY 'AR' USING @VM SETTING TrimPos ELSE Null
ChangePosList = FIELD(AllTestPos,@VM,TrimPos,SeqCnt) ChangePosList = FIELD(AllTestPos,@VM,TrimPos,SeqCnt)
GOSUB RemSchedQA ;* Removes unsigned QAMet from cassettes scheduled past the box being removed GOSUB RemSchedQA ;* Removes unsigned QAMet from cassettes scheduled past the box being removed
END ELSE
otParms = 'WO_REACT':@RM:WOReactKey END ELSE
WOReactRec = obj_Tables('UnlockRec',otParms)
RETURN ;* RDSNo is not in this list -> nothing to do. otParms = 'WO_REACT':@RM:WOReactKey
END WOReactRec = obj_Tables('UnlockRec',otParms)
END ;* End of check for AllTestPos null
WOReactRec = DELETE(WOReactRec,WO_REACT_RDS_NO$,RemPos,0) RETURN ;* RDSNo is not in this list -> nothing to do.
WOReactRec = DELETE(WOReactRec,WO_REACT_CASS_NO$,RemPos,0) ;* Removes the passed in RDSNo & associated cassette number from the data fields END
END ;* End of check for AllTestPos null
RDSNos = WOReactRec<WO_REACT_RDS_NO$> ;* List after removal WOReactRec = DELETE(WOReactRec,WO_REACT_RDS_NO$,RemPos,0)
CassNos = WOReactRec<WO_REACT_CASS_NO$> ;* List after removal WOReactRec = DELETE(WOReactRec,WO_REACT_CASS_NO$,RemPos,0) ;* Removes the passed in RDSNo & associated cassette number from the data fields
* * * Now build list for cassette RDSNos = WOReactRec<WO_REACT_RDS_NO$> ;* List after removal
CassNos = WOReactRec<WO_REACT_CASS_NO$> ;* List after removal
GOSUB BuildAllTestPos * * * Now build list for cassette
ChangePosList = FIELD(AllTestPos,@VM,TrimPos,SeqCnt)
GOSUB AddSchedQA ;* Add QAMet spec data to cassettes now associated with the test positions after removing the RDS & Cassno from the lists GOSUB BuildAllTestPos
otParms = FIELDSTORE(otParms,@RM,4,0,WOReactRec)
obj_Tables('WriteOnlyRec',otParms) ;* Done with updates to the WO_REACT record ChangePosList = FIELD(AllTestPos,@VM,TrimPos,SeqCnt)
Result = Log GOSUB AddSchedQA ;* Add QAMet spec data to cassettes now associated with the test positions after removing the RDS & Cassno from the lists
EndTick = GetTickCount() otParms = FIELDSTORE(otParms,@RM,4,0,WOReactRec)
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick) // 10/12/18 Changed to WriteOnlyRec as per Francois' instructions. - djs
obj_Tables('WriteOnlyRec',otParms) ;* Done with updates to the WO_REACT record
Result = Log
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
RETURN RETURN
************** Internal Methods ************* ************** Internal Methods *************
* * * * * * * * * * * * * *
BuildAllTestPos: BuildAllTestPos:
* * * * * * * * * * * * * *
AllTestPos = '' AllTestPos = ''
RDSCnt = COUNT(RDSNos,@VM) + (RDSNos NE '') RDSCnt = COUNT(RDSNos,@VM) + (RDSNos NE '')
SeqCnt = 0 SeqCnt = 0
FOR TestSeq = 1 TO RDSCnt FOR TestSeq = 1 TO RDSCnt
IF REM((TestSeq - Start),Interval) = 0 THEN IF REM((TestSeq - Start),Interval) = 0 THEN
AllTestPos<1,-1> = TestSeq ;* Build list of list positions to have QAMet scheduled AllTestPos<1,-1> = TestSeq ;* Build list of list positions to have QAMet scheduled
SeqCnt += 1 SeqCnt += 1
END END
NEXT TestSeq NEXT TestSeq
Log := 'AllTestPos: ':AllTestPos:@FM Log := 'AllTestPos: ':AllTestPos:@FM
RETURN RETURN
* * * * * * * * * * * * * *
RemSchedQA: RemSchedQA:
* * * * * * * * * * * * * *
chgCnt = COUNT(ChangePosList,@VM) + (ChangePosList NE '') chgCnt = COUNT(ChangePosList,@VM) + (ChangePosList NE '')
FOR I = 1 TO chgCnt FOR I = 1 TO chgCnt
RemCassNo = CassNos<1,ChangePoslist<1,I>> RemCassNo = CassNos<1,ChangePoslist<1,I>>
Log:= 'RemSched on CassNo: ':RemCassNo:@FM Log:= 'RemSched on CassNo: ':RemCassNo:@FM
owmParms = WONo:@RM:StepNo:@RM:RemCassNo:@RM:Stage:@RM:MetPropCd owmParms = WONo:@RM:StepNo:@RM:RemCassNo:@RM:Stage:@RM:MetPropCd
obj_WO_Mat_QA('RemQAMet',owmParms) ;* Unschedule test boxes before list change obj_WO_Mat_QA('RemQAMet',owmParms) ;* Unschedule test boxes before list change
IF Get_Status(errCode) THEN IF Get_Status(errCode) THEN
ErrMsg(errCode) ErrMsg(errCode)
END END
NEXT I
*obj_WO_Mat('RemQAMet',owmParms) ;* Dead 6/5/2015 JCH - Remove after a few days
*IF Get_Status(errCode) THEN
* ErrMsg(errCode)
*END
NEXT I
RETURN RETURN
@ -284,39 +303,46 @@ RETURN
AddSchedQA: AddSchedQA:
* * * * * * * * * * * * * *
chgCnt = COUNT(ChangePosList,@VM) + (ChangePosList NE '') chgCnt = COUNT(ChangePosList,@VM) + (ChangePosList NE '')
FOR I = 1 TO chgCnt FOR I = 1 TO chgCnt
AddCassNo = CassNos<1,ChangePoslist<1,I>> AddCassNo = CassNos<1,ChangePoslist<1,I>>
Log:= 'AddSched on CassNo: ':AddCassNo:@FM Log:= 'AddSched on CassNo: ':AddCassNo:@FM
owmParms = WONo:@RM owmParms = WONo:@RM
owmParms := StepNo:@RM owmParms := StepNo:@RM
owmParms := AddCassNo:@RM owmParms := AddCassNo:@RM
owmParms := QAMetData<COL$QA_MET_STAGE>:@RM owmParms := QAMetData<COL$QA_MET_STAGE>:@RM
owmParms := QAMetData<COL$QA_MET_TEST>:@RM owmParms := QAMetData<COL$QA_MET_TEST>:@RM
owmParms := QAMetData<COL$QA_MET_PROP>:@RM owmParms := QAMetData<COL$QA_MET_PROP>:@RM
owmParms := QAMetData<COL$QA_MET_TOOL_CLASS>:@RM owmParms := QAMetData<COL$QA_MET_TOOL_CLASS>:@RM
owmParms := QAMetData<COL$QA_MET_MIN>:@RM owmParms := QAMetData<COL$QA_MET_MIN>:@RM
owmParms := QAMetData<COL$QA_MET_MAX>:@RM owmParms := QAMetData<COL$QA_MET_MAX>:@RM
owmParms := QAMetData<COL$QA_MET_SLOT>:@RM owmParms := QAMetData<COL$QA_MET_SLOT>:@RM
owmParms := QAMetData<COL$QA_MET_RECIPE>:@RM owmParms := QAMetData<COL$QA_MET_RECIPE>:@RM
owmParms := QAMetData<COL$QA_MET_RECIPE_PATTERN>:@RM owmParms := QAMetData<COL$QA_MET_RECIPE_PATTERN>:@RM
owmParms := QAMetData<COL$QA_MET_WFR_QTY>:@RM owmParms := QAMetData<COL$QA_MET_WFR_QTY>:@RM
owmParms := QAMetData<COL$QA_MET_WFR_TYPE>:@RM owmParms := QAMetData<COL$QA_MET_WFR_TYPE>:@RM
owmParms := QAMetData<COL$QA_MET_REACT_SCHED>:@RM owmParms := QAMetData<COL$QA_MET_REACT_SCHED>:@RM
owmParms := QAMetData<COL$QA_MET_SHIP_DOC>:@RM owmParms := QAMetData<COL$QA_MET_SHIP_DOC>:@RM
owmParms := QAMetData<COL$QA_MET_PHASE_MIN> ; // 10/15/18 - djs - Added Phase Min Spec for HgCV owmParms := QAMetData<COL$QA_MET_PHASE_MIN> ; // 10/15/18 - djs - Added Phase Min Spec for HgCV
obj_WO_Mat_QA('AddQAMet', owmParms) ;* Schedule test boxes after list change obj_WO_Mat_QA('AddQAMet', owmParms) ;* Schedule test boxes after list change
IF Get_Status(errCode) THEN IF Get_Status(errCode) THEN
ErrMsg(errCode) ErrMsg(errCode)
END END
NEXT I *obj_WO_Mat('AddQAMet',owmParms) ;* Dead 6/5/2015 JCH - remove after a few days
*IF Get_Status(errCode) THEN
* ErrMsg(errCode)
*END
NEXT I
RETURN RETURN

View File

@ -117,24 +117,11 @@ API oiwizard.POST
ParseResponse = SRP_JSON(hWizardJSON, 'PARSE', WizardJSON) ParseResponse = SRP_JSON(hWizardJSON, 'PARSE', WizardJSON)
If (ParseResponse EQ '') then If (ParseResponse EQ '') then
// Validate credentials and create a new session // Validate credentials and create a new session
UserID = SRP_JSON(hWizardJSON, 'GetValue', 'userID') UserID = SRP_JSON(hWizardJSON, 'GetValue', 'userID')
Password = SRP_JSON(hWizardJSON, 'GetValue', 'password') Password = SRP_JSON(hWizardJSON, 'GetValue', 'password')
ADUsername = SRP_JSON(hWizardJSON, 'GetValue', 'adUsername')
SRP_JSON(hWizardJSON, 'Release') SRP_JSON(hWizardJSON, 'Release')
Domain = 'Infineon' Authenticated = Active_Directory_Services('AuthenticateUser', UserID, Password, 'Infineon')
Begin Case If Authenticated then
Case ( (UserID NE '') and (Password NE '') )
Authenticated = Active_Directory_Services('AuthenticateUser', UserID, Password, Domain)
Authorized = Active_Directory_Services('AuthorizeUser', UserID, Domain)
Case (ADUsername NE '')
Authenticated = True$
Authorized = Active_Directory_Services('AuthorizeUser', ADUsername, Domain)
If Authorized then UserId = ADUsername
Case Otherwise$
Authenticated = False$
Authorized = False$
End Case
If Authenticated and Authorized then
LSLUserID = Security_Services('GetLSLUser', UserID) LSLUserID = Security_Services('GetLSLUser', UserID)
If LSLUserID NE '' then If LSLUserID NE '' then
OIWizardID = OI_Wizard_Services('CreateWizardID', LSLUserID) OIWizardID = OI_Wizard_Services('CreateWizardID', LSLUserID)
@ -248,4 +235,3 @@ API oiwizard.checkidleoisessionvalid.GET
end end
end api end api

View File

@ -41,11 +41,9 @@ Function OI_Wizard_Actions(Action, CalcColName, FSList, Handle, Name, FMC, Recor
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$Insert LOGICAL $insert LOGICAL
$Insert FILE.SYSTEM.EQUATES $insert FILE.SYSTEM.EQUATES
$Insert ACTION_SETUP $insert ACTION_SETUP
$Insert OI_WIZARD_EQUATES
$Insert TIME_INSERTS
Declare function UCase, Utility_DotNet, Database_Services, Error_Services, Datetime Declare function UCase, Utility_DotNet, Database_Services, Error_Services, Datetime
@ -142,10 +140,12 @@ VALID:
LastDate = {CREATED_DATE} LastDate = {CREATED_DATE}
LastTime = {CREATED_TIME} LastTime = {CREATED_TIME}
end end
LastDateTime = Iconv(Oconv(LastDate, 'D4/') : ' ' : Oconv(LastTime, 'MTS'), 'DTS') lastDateTime = Iconv(Oconv(LastDate, 'D4/') : ' ' : Oconv(LastTime, 'MTS'), 'DTS')
SessionAge = (Datetime() - LastDateTime) * SECONDS_IN_DAY$ SessionAge = (Datetime() - lastDateTime) * 86400
MaxAge = HOUR_IN_SECONDS$ * 12 // 600 seconds = 10 minutes
If SessionAge LT MaxAge then Valid = True$ If SessionAge LT 600 then
Valid = True$
end
end end
ActionFlow = Valid ActionFlow = Valid
@ -164,9 +164,8 @@ EXPIRY:
LastTime = {CREATED_TIME} LastTime = {CREATED_TIME}
end end
lastDateTime = Iconv(Oconv(LastDate, 'D4/') : ' ' : Oconv(LastTime, 'MTS'), 'DTS') lastDateTime = Iconv(Oconv(LastDate, 'D4/') : ' ' : Oconv(LastTime, 'MTS'), 'DTS')
// Set expiry to last updated datetime (i.e. last time the session was updated/validated) // Set expiry to last updated datetime (i.e. last time the session was updated/validated) plus 10 minutes
// plus 12 hours (0.5 of a day). Expiry = lastDateTime + (600 / 86400)
Expiry = lastDateTime + 0.5
end end
ActionFlow = Expiry ActionFlow = Expiry
@ -289,4 +288,3 @@ Restore_System_Variables:
@FILE.ERROR = OrigFileError @FILE.ERROR = OrigFileError
return return

View File

@ -1,10 +1,9 @@
Compile function OI_Wizard_Services(@Service, @Params) Compile function OI_Wizard_Services(@Service, @Params)
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$Insert LOGICAL $insert LOGICAL
$Insert OI_WIZARD_EQUATES $insert OI_WIZARD_EQUATES
$Insert OI_WIZARD_TRANSACTIONS_EQUATES $insert OI_WIZARD_TRANSACTIONS_EQUATES
$Insert REACT_MODE_NG_EQUATES $Insert REACT_MODE_NG_EQUATES
$Insert TIME_INSERTS
Declare function RTI_CreateGUID, Database_Services, Error_Services, SRP_Json, MemberOf Declare function RTI_CreateGUID, Database_Services, Error_Services, SRP_Json, MemberOf
Declare function OI_Wizard_Services, Reactor_Services, Reactor_Modes_Services, Datetime Declare function OI_Wizard_Services, Reactor_Services, Reactor_Modes_Services, Datetime
@ -199,9 +198,9 @@ Service ValidateSession(OIWizardID)
LastTime = OIWizardRec<OI_WIZARD.CREATED_TIME$> LastTime = OIWizardRec<OI_WIZARD.CREATED_TIME$>
end end
lastDateTime = Iconv(Oconv(LastDate, 'D4/') : ' ' : Oconv(LastTime, 'MTS'), 'DTS') lastDateTime = Iconv(Oconv(LastDate, 'D4/') : ' ' : Oconv(LastTime, 'MTS'), 'DTS')
SessionAge = (Datetime() - lastDateTime) * SECONDS_IN_DAY$ SessionAge = (Datetime() - lastDateTime) * 86400
MaxAge = HOUR_IN_SECONDS$ * 12 // 600 seconds = 10 minutes
If SessionAge LT MaxAge then If SessionAge LT 600 then
OIWizardRec<OI_WIZARD.UPDATED_DATES$, -1> = Date() OIWizardRec<OI_WIZARD.UPDATED_DATES$, -1> = Date()
OIWizardRec<OI_WIZARD.UPDATED_TIMES$, -1> = Time() OIWizardRec<OI_WIZARD.UPDATED_TIMES$, -1> = Time()
Database_Services('WriteDataRow', 'OI_WIZARD', OIWizardID, OIWizardRec) Database_Services('WriteDataRow', 'OI_WIZARD', OIWizardID, OIWizardRec)
@ -499,3 +498,11 @@ Service ConvertMVTransactionToJSON(TransactionID, mvTransaction, itemURL)
end service end service

View File

@ -712,7 +712,7 @@ Service CreatePackagingRecord(LotId, UserId, EqpId)
NewPackagingRec<PACKAGING_COMPLETE_DTM$> = TransDtm NewPackagingRec<PACKAGING_COMPLETE_DTM$> = TransDtm
Database_Services('WriteDataRow', 'PACKAGING', NewRecId, NewPackagingRec, True$, 0, False$) Database_Services('WriteDataRow', 'PACKAGING', NewRecId, NewPackagingRec, True$, 0, False$)
If Error_Services('NoError') then If Error_Services('NoError') then
Lot_Event_Services('CreateLotEvent', LotId, TransDtm, 'COMMENT', 'Lot Packaged.', EqpId, UserId) Lot_Event_Services('CreateLotEvent', LotId, TransDtm, 'PACKAGING', 'Lot Packaged.', EqpId, UserId)
end else end else
ErrorMessage = Error_Services('GetMessage') ErrorMessage = Error_Services('GetMessage')
end end
@ -765,3 +765,5 @@ Service AddPackToLotOperation(LotOperationId, PackagingId, UserId)
end service end service

View File

@ -450,7 +450,11 @@ Main:
lsData<I,7> = PropRec<PRS_PROP_TOOL$> lsData<I,7> = PropRec<PRS_PROP_TOOL$>
lsData<I,8> = PropRec<PRS_PROP_MET_WFR_TYPE$> lsData<I,8> = PropRec<PRS_PROP_MET_WFR_TYPE$>
lsData<I,9> = PropRec<PRS_PROP_MET_RECIPE$> lsData<I,9> = PropRec<PRS_PROP_MET_RECIPE$>
lsData<I,10> = PropRec<PRS_PROP_MET_RECIPE_PATTERN$> If (PropRec<PRS_PROP_TOOL$> _NEC 'HgCV') then
lsData<I,10> = PropRec<PRS_PROP_MET_RECIPE_PATTERN$>
end else
lsData<I,10> = ''
end
lsData<I,11> = PropRec<PRS_PROP_MET_INTERVAL$> lsData<I,11> = PropRec<PRS_PROP_MET_INTERVAL$>
lsData<I,12> = PropRec<PRS_PROP_PROVEIN_WFR_TYPE$> lsData<I,12> = PropRec<PRS_PROP_PROVEIN_WFR_TYPE$>
@ -464,7 +468,11 @@ Main:
lsData<I,7> = lsData<I,7>:CRLF$:PropRec<PRS_PROP_TOOL$> lsData<I,7> = lsData<I,7>:CRLF$:PropRec<PRS_PROP_TOOL$>
lsData<I,8> = lsData<I,8>:CRLF$:PropRec<PRS_PROP_MET_WFR_TYPE$> lsData<I,8> = lsData<I,8>:CRLF$:PropRec<PRS_PROP_MET_WFR_TYPE$>
lsData<I,9> = lsData<I,9>:CRLF$:PropRec<PRS_PROP_MET_RECIPE$> lsData<I,9> = lsData<I,9>:CRLF$:PropRec<PRS_PROP_MET_RECIPE$>
lsData<I,10> = lsData<I,10>:CRLF$:PropRec<PRS_PROP_MET_RECIPE_PATTERN$> If (PropRec<PRS_PROP_TOOL$> _NEC 'HgCV') then
lsData<I,10> = lsData<I,10>:CRLF$:PropRec<PRS_PROP_MET_RECIPE_PATTERN$>
end else
lsData<I,10> = lsData<I,10>:CRLF$
end
lsData<I,11> = lsData<I,11>:CRLF$:PropRec<PRS_PROP_MET_INTERVAL$> lsData<I,11> = lsData<I,11>:CRLF$:PropRec<PRS_PROP_MET_INTERVAL$>
lsData<I,12> = lsData<I,12>:CRLF$:PropRec<PRS_PROP_PROVEIN_WFR_TYPE$> lsData<I,12> = lsData<I,12>:CRLF$:PropRec<PRS_PROP_PROVEIN_WFR_TYPE$>
@ -832,10 +840,14 @@ Main:
end else end else
colData<StepNo,STEP_PRODUCT$> = CHAR(185):obj_Met_Prop('GetPropDesc',StageRec<PRS_STAGE_MET_PROP$,M>) colData<StepNo,STEP_PRODUCT$> = CHAR(185):obj_Met_Prop('GetPropDesc',StageRec<PRS_STAGE_MET_PROP$,M>)
end end
colData<StepNo,STEP_RECIPE$> = StageRec<PRS_STAGE_MET_RECIPE$,M>:CRLF$:StageRec<PRS_STAGE_MET_RECIPE_PATTERN$,M> If (StageRec<PRS_STAGE_MET_TOOL_CLASS$,M> _NEC 'HgCV') then
colData<StepNo,STEP_SPEC_TOL$> = StageRec<PRS_STAGE_MET_MIN$,M>:' - ':StageRec<PRS_STAGE_MET_MAX$,M>:' ':obj_Met_Prop('GetUnitsDesc',StageRec<PRS_STAGE_MET_PROP$,M>) colData<StepNo,STEP_RECIPE$> = StageRec<PRS_STAGE_MET_RECIPE$,M>:CRLF$:StageRec<PRS_STAGE_MET_RECIPE_PATTERN$,M>
colData<StepNo,STEP_SIZE$> = StageRec<PRS_STAGE_MET_WFR_QTY$,M> end else
colData<StepNo,STEP_FREQ$> = StageRec<PRS_STAGE_MET_INTERVAL$,M> colData<StepNo,STEP_RECIPE$> = StageRec<PRS_STAGE_MET_RECIPE$,M>
end
colData<StepNo,STEP_SPEC_TOL$> = StageRec<PRS_STAGE_MET_MIN$,M>:' - ':StageRec<PRS_STAGE_MET_MAX$,M>:' ':obj_Met_Prop('GetUnitsDesc',StageRec<PRS_STAGE_MET_PROP$,M>)
colData<StepNo,STEP_SIZE$> = StageRec<PRS_STAGE_MET_WFR_QTY$,M>
colData<StepNo,STEP_FREQ$> = StageRec<PRS_STAGE_MET_INTERVAL$,M>
if processName EQ 'FQA' then if processName EQ 'FQA' then
colData<StepNo,STEP_CTRL_METHOD$> = "WI" colData<StepNo,STEP_CTRL_METHOD$> = "WI"
colData<StepNo,STEP_REACT_PLAN$> = "EpiMSA WI-0485" colData<StepNo,STEP_REACT_PLAN$> = "EpiMSA WI-0485"

View File

@ -0,0 +1,481 @@
COMPILE SUBROUTINE Print_Demand(ReportParm)
#pragma precomp SRP_PreCompiler
/*
Print Material Demand Report
10/27/2016 - John C Henry, J.C. Henry & Co., Inc. - Initial Coding
10/05/2017 - Donald Bakke - No longer select SCHED_DET rows with an end date specified.
10/24/2018 - Daniel Stieber - Patch added to resolve scheduling conflicts on the same day
*/
DECLARE SUBROUTINE Utility, ErrMsg, Set_Status, Set_Printer, RList, SRP_Stopwatch
DECLARE FUNCTION Set_Printer, Get_Printer, Msg, Get_Status, Printer_Select, obj_Install, Dialog_Box, obj_Location
DECLARE FUNCTION Schedule_Services
$INSERT OIPRINT_EQUATES
$INSERT SCHED_DET_EQUATES
$INSERT WO_LOG_EQUATES
$INSERT APPCOLORS
$INSERT MSG_EQUATES
$INSERT LOGICAL
$INSERT SCHEDULE_EQU
EQU TAB$ TO \09\
EQU TARGET_ACTIVELIST$ TO 5
Main:
ErrorTitle = 'Error in stored procedure Print_Demand'
ErrCode = ''
ErrorMsg = ''
SRP_Stopwatch('Reset')
SRP_Stopwatch('Start', 'Initializing')
OPEN 'SCHED_DET' TO SchedDetTable ELSE
ErrorMsg = 'Unable to open "SCHED_DET" table.'
ErrMsg(ErrorTitle:@SVM:ErrorMsg)
RETURN
END
OPEN 'DICT.SCHED_DET' TO @DICT ELSE
ErrorMsg = 'Unable to open "SCHED_DET" table.'
ErrMsg(ErrorTitle:@SVM:ErrorMsg)
RETURN
END
Today = OCONV(Date(),'D4/')
EndDate = OCONV(Date()+13,'D4/')
ReactList = ''
WOList = ''
SchedDetKeys = ''
PrevReactNo = ''
PrevWO = ''
SelectSent = 'SELECT SCHED_DET WITH SCHED_DT GE ':QUOTE(Today):' BY REACT_NO'
SRP_Stopwatch('Stop', 'Initializing')
SRP_Stopwatch('Start', 'Data Select')
RList(SelectSent,TARGET_ACTIVELIST$,'','','')
IF Get_Status(errCode) THEN
ErrMsg(errCode)
RETURN
END
SRP_Stopwatch('Stop', 'Data Select')
SRP_Stopwatch('Start', 'Build Key List')
Done = 0
@ID = ''
LOOP
PrevSchedDetKey = @ID
READNEXT @ID ELSE Done = 1
UNTIL Done
ReactNo = @ID[1,'*']
SchedDt = @ID[COL2()+1,'*']
SeqNo = @ID[COL2()+1,'*']
READ SchedDetRec FROM SchedDetTable,@ID THEN
WONo = SchedDetRec<SCHED_DET_WO_NO$>
LOCATE ReactNo IN ReactList BY 'AR' USING @FM SETTING Pos ELSE
ReactList = INSERT(ReactList,Pos,0,0,ReactNo)
END
PrevReactNo = Field(PrevSchedDetKey, '*', 1)
PrevSchedDt = Field(PrevSchedDetKey, '*', 2)
LOCATE WONo IN WOList<Pos> USING @VM SETTING WPos ELSE
WOList = INSERT(WOList,Pos,-1,0,WONo)
// Patch added on 10/24/18 to resolve scheduling conflicts on the same day for
// the material track report. - djs
If (PrevReactNo EQ ReactNo) and (PrevSchedDt EQ SchedDt) then
PrevSeqNo = Field(PrevSchedDetKey, '*', 3)
NumWO = DCount(WOList<Pos>, @VM)
PrevWONo = WOList<Pos, NumWO - 1>
SchedEvents = Schedule_Services('GetScheduleEventSummary', ReactNo, WONo, SchedDt, SeqNo, True$)
StartDt = IConv(SchedEvents<SCHEDULE_ENTRY_DATE$>, 'D')
PrevSchedEvents = Schedule_Services('GetScheduleEventSummary', ReactNo, PrevWONo, PrevSchedDt, PrevSeqNo, True$)
PrevStartDt = IConv(PrevSchedEvents<SCHEDULE_ENTRY_DATE$>, 'D')
If StartDt GT PrevStartDt then
// This is the common case
SchedDetKeys = INSERT(SchedDetKeys,-1,0,0,@ID)
end else
// Scheduling irregularity - Insert this key in the second to last position.
NumKeys = DCount(SchedDetKeys, @FM)
InsertPos = NumKeys
SchedDetKeys = INSERT(SchedDetKeys,InsertPos,0,0,@ID)
end
end else
SchedDetKeys = INSERT(SchedDetKeys,-1,0,0,@ID)
end
END
END
REPEAT
CALL Make.List(0,SchedDetKeys,SchedDetTable,@DICT)
SRP_Stopwatch('Stop', 'Build Key List')
SRP_Stopwatch('Start', 'Build Report')
IF ReportParm = 'T' THEN
* Tracking Report
Header = "'D'":@VM:obj_Install('Get_Prop','CompTitle'):' Material Tracking by Reactor':@VM:"Page 'P'"
MinDemand = 0
END
IF ReportParm = 'D' THEN
* Demand Report
MinDemand = Msg(@WINDOW,'','MIN_DEMAND_QTY')
Header = "'D'":@VM:obj_Install('Get_Prop','CompTitle'):' Material Demand with Reactor Queue < ':MinDemand:' Cassettes':@VM:"Page 'P'"
END
Set_Status(0)
* Start of printing process
FileName = 'Print Material Demand'
Title = 'Printing Material Demand'
TopMargin = 1.0
BottomMargin = 0.75
LeftMargin = 0.25
RightMargin = 0.25
Margins = LeftMargin:@FM:TopMargin:@FM:RightMargin:@FM:BottomMargin
PageSetup = '1' ;* LandScape
PrintSetup = '2' ;* Preview Normal
PrintSetup<1,2> = '0' ;* All buttons
PrintSetup<1,5> = '1' ;* Page Range
PrintSetup<1,6> = 7 ;* full mouse and keyboard support
PrintPath = ''
stat = Set_Printer('INIT',FileName,Title,Margins,PageSetup,PrintSetup,PrintPath)
IF stat < 0 THEN
ErrorMsg = 'Stat = ' : Stat : ', PrintPath = ' : PrintPath
GOTO OIPrintErr
end
DateRange = 'Effective ':OCONV(Date(),'D4')
Header<-1> = "'T'"
Header<-1> = '' ;* Blank line following heading
font = 'Arial'
font<2> = '10'
font<4> = '0' ;* Bold
stat = Set_Printer('FONTHEADFOOT',font) ; IF stat < 0 THEN GOTO OIPrintErr
stat = Set_Printer('HEADER',Header) ; IF stat < 0 THEN GOTO OIPrintErr
Footer = " 'D' 'T'":@VM:@VM:"Page: 'P'"
stat = Set_Printer('FOOTER',Footer) ; IF stat < 0 THEN GOTO OIPrintErr
*
@RECCOUNT = 0
FirstPass = 1
LastRecord = 0
FirstLine = 1
fontSpacing = 100
* Make Column Heading
ColHead = '' ; ColFmt = ''
ColHead<1,1> = 'React No' ; ColFmt<1,1> = '+^720'
ColHead<1,2> = 'React Type' ; ColFmt<1,2> = '+<^720'
ColHead<1,4> = 'WO No' ; ColFmt<1,4> = '+^1000'
ColHead<1,5> = 'SAP Prod No' ; ColFmt<1,5> = '+^1000'
ColHead<1,6> = 'Sub Part No' ; ColFmt<1,6> = '+<1200'
ColHead<1,7> = 'Epi Part No' ; ColFmt<1,7> = '+<1200'
ColHead<1,8> = 'WO Qty' ; ColFmt<1,8> = '+>720'
ColHead<1,9> = 'RX Qty' ; ColFmt<1,9> = '+>720'
ColHead<1,10> = 'UnRel Qty' ; ColFmt<1,10> = '+>720'
ColHead<1,11> = 'Kit Location' ; ColFmt<1,11> = '+^1260'
ColHead<1,12> = 'Kit Qty' ; ColFmt<1,12> = '+^720'
IF ReportParm = 'T' THEN
ColHead<1,3> = 'Wafer Size' ; ColFmt<1,3> = '+^1400'
ColHead<1,13> = 'PTI Location' ; ColFmt<1,13> = '+^1260'
ColHead<1,14> = 'PTI RO' ; ColFmt<1,14> = '+^3380'
END ELSE
ColHead<1,3> = 'Wafer Size' ; ColFmt<1,3> = '+^1000'
ColHead<1,13> = '1K Stage Location' ; ColFmt<1,13> = '+^1260'
ColHead<1,14> = 'Stage Qty' ; ColFmt<1,14> = '+^1260'
ColHead<1,15> = 'PTI Location' ; ColFmt<1,15> = '+^1260'
ColHead<1,16> = 'PTI RO' ; ColFmt<1,16> = '+^1260'
END
* Zero Accumulators For Each Break
Prev.ReactNo = ''
Last.ReactNo.Break = 1
* * * * * * *
ReadRecord:
* * * * * * *
* Zero Break Flags To False
ReactNo.Break=0
READNEXT @ID, Which.Value ELSE
LastRecord = 1
ReactNo.Break = 1
ReactNo = Prev.ReactNo
END
S.ATID = @ID
IF FirstPass AND LastRecord THEN
GOTO Bail
END
IF LastRecord THEN GOTO BREAKS
READO @RECORD FROM SchedDetTable,@ID ELSE
GOTO ReadRecord
END
@RECCOUNT += 1
* Calculate Value(s) For Column(s)
S.ATID = {@ID}
I.ATID = S.ATID
S.ReactNo = {REACT_NO}
I.ReactNo = S.ReactNo
S.WoNo = {WO_NO}
I.WoNo = S.WoNo
S.SubPartNo = XLATE('WO_LOG',S.WoNo,'ORD_SUB_PART_NO','X')
I.SubPartNo = S.SubPartNo
S.EpiPartNo = XLATE('WO_LOG',S.WoNo,WO_LOG_EPI_PART_NO$,'X')
I.EpiPartNo = S.EpiPartNo
S.WO_Qty = {WO_QTY}
I.WO_Qty = S.WO_Qty
S.WO_RX_Qty = {WO_RX_QTY}
I.WO_RX_Qty = S.WO_RX_Qty
S.WO_UnRel_QTY = {WO_UNREL_QTY}
I.WO_UnRel_QTY = S.WO_UnRel_QTY
S.Sched_DT = {SCHED_DT}
I.Sched_DT = S.Sched_DT
*Changed Here JRO
S.REACT_TYPE = {REACTOR_TYPE}
S.WAFER_SIZE = {WAFER_SIZE}
S.ProdOrdNo = {PROD_ORD_NO}
KitData = obj_Location('KitLocations',S.WONo)
SWAP CRLF$ WITH @VM IN KitData
S.KitLocation = KitData<1>
I.KitLocation = S.KitLocation
S.KitQty = OCONV(SUM(KitData<2>) * 25,'MD0,Z')
I.KitQty = S.KitQty
S.KitCassCnt = COUNT(KitData<3>,',') + (KitData<3> NE '')
I.KitCassCnt = S.KitCassCnt
StageData = obj_Location('StageLocations',S.WONo)
SWAP CRLF$ WITH @VM IN StageData
S.StageLocation = StageData<1>
I.StageLocation = S.StageLocation
S.StageQty = StageData<3>
I.StageQty = S.StageQty
S.StageCassCnt = COUNT(S.StageQty,',') + (S.StageQty NE '')
I.StageCassCnt = S.StageCassCnt
PTIData = obj_Location('PTILocations',S.WONo)
SWAP CRLF$ WITH @VM IN PTIData
S.PTILocation = PTIData<1>
I.PTILocation = S.PTILocation
S.PTIQty = PTIData<3>
I.PTIQty = S.PTIQty
S.PTICassCnt = COUNT(S.PTIQty,',') + (S.PTIQty NE '')
I.PTICassCnt = S.PTICassCnt
CassQueueCnt = I.KitCassCnt + I.StageCassCnt + I.PTICassCnt
* TEST FOR CONTROL BREAK(S)
IF (S.ReactNo NE Prev.ReactNo) OR ReactNo.Break THEN
ReactNo = Prev.ReactNo
Prev.ReactNo = S.ReactNo
ReactNo.Break += 1
END
IF FirstPass THEN
FirstPass=0
GOTO DETAIL
END
* * * * * * *
BREAKS:
* * * * * * *
* Print Break Total(s) And Accumulate Total(s)
IF ReactNo.Break THEN
IF ReportParm = 'D' ELSE
stat = Set_Printer('TEXT')
END
END
* Perform Last Record Output If Done
IF LastRecord THEN
colData = ''
GOTO Bail
END
* * * * * * *
DETAIL:
* * * * * * *
* Do Conversion If Any
IF ReportParm = 'T' OR CassQueueCnt < MinDemand THEN
IF S.REACTNO NE "" THEN S.REACTNO = OCONV(S.REACTNO,"MD0,")
IF S.WONO NE "" THEN S.WONO = OCONV(S.WONO,"MD0")
IF S.WO_QTY NE "" THEN S.WO_QTY = OCONV(S.WO_QTY,"MD0,")
IF S.WO_RX_QTY NE "" THEN S.WO_RX_QTY = OCONV(S.WO_RX_QTY,"MD0,")
IF S.WO_UNREL_QTY NE "" THEN S.WO_UNREL_QTY = OCONV(S.WO_UNREL_QTY,"MD0,")
IF S.SCHED_DT NE "" THEN S.SCHED_DT = OCONV(S.SCHED_DT,"D4/")
* PRINT DETAIL LINE
COLDATA = ''
RowNumber = 0
CassList = ''
For each Location in S.PTILocation using @VM setting fPos
LocationCassNos = S.PTIQty<0, fPos>
If S.React_Type NE 'EPP' then
For each CassNo in LocationCassNos using ','
WOMatKey = S.WONO:'*':CassNo
CurrStatus = Xlate('WO_MAT', WOMatKey, 'CURR_STATUS', 'X')
If ( (CurrStatus EQ 'VER') OR (CurrStatus EQ 'LOAD') OR (CurrStatus EQ 'REL') ) then
* If ( (CurrStatus EQ 'VER') ) then
CassList = Insert(CassList, 0, -1, 0, CassNo)
end
Next CassNo
end else
CassList = Insert(CassList, 0, -1, 0, LocationCassNos)
end
Next Location
If CassList NE '' then
RowNumber += 1
Convert @VM to ',' in CassList
COLDATA<RowNumber,1> = S.ReactNo
COLDATA<RowNumber,2> = S.React_Type
COLDATA<RowNumber,3> = S.Wafer_Size
COLDATA<RowNumber,4> = S.WoNo
SWAP '.1' WITH '' IN S.ProdOrdNo
COLDATA<RowNumber,5> = S.ProdOrdNo
COLDATA<RowNumber,6> = S.SubPartNo
ColData<RowNumber,7> = S.EpiPartNo
COLDATA<RowNumber,8> = S.WO_Qty
COLDATA<RowNumber,9> = S.WO_RX_Qty
COLDATA<RowNumber,10> = S.WO_UnRel_Qty
COLDATA<RowNumber,11> = S.KitLocation
COLDATA<RowNumber,12> = S.KitQty
COLDATA<RowNumber,13> = S.PTILocation<0, fPos>
COLDATA<RowNumber,14> = CassList
If COLDATA NE '' then GoSub PrintTable
END
END
GOTO ReadRecord
* * * * * * *
Bail:
* * * * * * *
stat = Set_Printer('TERM',1)
SRP_Stopwatch('Stop', 'Build Report')
RETURN
* * * * * * *
OIPrintErr:
* * * * * * *
ErrMsg(ErrorTitle:@SVM:ErrorMsg)
ErrMsg(ErrorTitle:@SVM:'Set_Printer returned errorcode ':stat)
stat = Set_Printer('TERM',1)
RETURN
* * * * * *
PrintTable:
* * * * * *
PageHeight = Get_Printer('PAGESIZE')<2>
PrintableHeight = PageHeight - TopMargin - BottomMargin
PrinterHeight = Get_Printer('POS')<2>
stat = Set_Printer('CALCTABLE',ColFmt:@FM:ColData)
TableSize = Get_Printer('CALCTABLE')
TableHeight = TableSize<2>
fontSpacing = 120
IF ( TableHeight + PrinterHeight >= PrintableHeight ) OR FirstLine THEN
IF NOT(FirstLine) THEN
stat = Set_Printer('PAGEBREAK')
END
FirstLine = 0
font<2> = 10
font<4> = 1 ;* Bold
stat = Set_Printer('FONT',font,'100')
stat = Set_Printer('ADDTABLE',colFmt,colHead,'',LTGREY$,'',0,TB_ALL)
font<4> = 0
stat = Set_Printer('FONT',font,fontSpacing)
stat = Set_Printer('ADDTABLE',colFmt,'',colData,LTGREY$,'',0,7)
END ELSE
font<2> = 10
font<4> = 0
stat = Set_Printer('FONT',font,fontSpacing)
stat = Set_Printer('ADDTABLE',colFmt,'',colData,LTGREY$,'',1,TB_ALL)
END
RETURN

Some files were not shown because too many files have changed in this diff Show More