fixed material track report, Mona_Services HTTP call, and COC file generation

This commit is contained in:
MESOISYSADMIN 2024-09-05 15:06:46 -07:00 committed by Infineon\StieberD
parent 7762b129af
commit a8a9e91d04
83 changed files with 64689 additions and 47974 deletions

View File

@ -1,12 +1,12 @@
{ {
"header": { "header": {
"version": 1, "version": 1,
"type": "record", "type": "record",
"approw-key": "ENGINE_HEALTH_THRESHOLD_MINUTES" "approw-key": "ENGINE_HEALTH_THRESHOLD_MINUTES"
}, },
"body": { "body": {
"record1": { "record1": {
"<1>": "15" "<1>": "60"
} }
} }
} }

View File

@ -25,75 +25,71 @@
"<1,16>": "TENCOR1", "<1,16>": "TENCOR1",
"<1,17>": "TENCOR2", "<1,17>": "TENCOR2",
"<1,18>": "TENCOR3", "<1,18>": "TENCOR3",
"<1,19>": "ASET", "<1,19>": "BIORAD2",
"<1,20>": "BIORAD2", "<1,20>": "BIORAD3",
"<1,21>": "BIORAD3", "<1,21>": "BIORAD4",
"<1,22>": "BIORAD4", "<1,22>": "BIORAD5",
"<1,23>": "BIORAD5", "<1,23>": "CDE4",
"<1,24>": "CDE2", "<1,24>": "CDE5",
"<1,25>": "CDE3", "<1,25>": "CDE6",
"<1,26>": "CDE4", "<1,26>": "HGCV1",
"<1,27>": "CDE5", "<1,27>": "HGCV2",
"<1,28>": "CDE6", "<1,28>": "HGCV3",
"<1,29>": "FLEXUS", "<1,29>": "SPV",
"<1,30>": "HGCV1", "<1,30>": "SRP",
"<1,31>": "HGCV2", "<1,31>": "BELLJAR",
"<1,32>": "HGCV3", "<1,32>": "6INLESS",
"<1,33>": "SPV", "<1,33>": "6INLESS2",
"<1,34>": "SRP", "<1,34>": "6MACTRONIX #1",
"<1,35>": "BELLJAR", "<1,35>": "6MACTRONIX #2",
"<1,36>": "6INLESS", "<1,36>": "6MACTRONIX #3",
"<1,37>": "6INLESS2", "<1,37>": "6MACTRONIX #4",
"<1,38>": "6MACTRONIX #1", "<1,38>": "8INLESS",
"<1,39>": "6MACTRONIX #2", "<1,39>": "8INLESS2",
"<1,40>": "6MACTRONIX #3", "<1,40>": "BAGGER1",
"<1,41>": "6MACTRONIX #4", "<1,41>": "BAGGER2",
"<1,42>": "8INLESS", "<1,42>": "BAGGER3",
"<1,43>": "8INLESS2", "<1,43>": "BAGGER4",
"<1,44>": "BAGGER1", "<1,44>": "6INFF01",
"<1,45>": "BAGGER2", "<1,45>": "6INFF02",
"<1,46>": "BAGGER3", "<1,46>": "6INFF03",
"<1,47>": "BAGGER4", "<1,47>": "6INFF04",
"<1,48>": "6INFF01", "<1,48>": "6INFF05",
"<1,49>": "6INFF02", "<1,49>": "6INFF06",
"<1,50>": "6INFF03", "<1,50>": "6INFF07",
"<1,51>": "6INFF04", "<1,51>": "6INFF08",
"<1,52>": "6INFF05", "<1,52>": "6INFF09",
"<1,53>": "6INFF06", "<1,53>": "6INFF10",
"<1,54>": "6INFF07", "<1,54>": "8INNF01",
"<1,55>": "6INFF08", "<1,55>": "8INNF02",
"<1,56>": "6INFF09", "<1,56>": "8INNF03",
"<1,57>": "6INFF10", "<1,57>": "8INNF04",
"<1,58>": "8INNF01", "<1,58>": "8INNF05",
"<1,59>": "8INNF02", "<1,59>": "8INFF01",
"<1,60>": "8INNF03", "<1,60>": "8INFF02",
"<1,61>": "8INNF04", "<1,61>": "8INFF03",
"<1,62>": "8INNF05", "<1,62>": "8INFF04",
"<1,63>": "8INFF01", "<1,63>": "MACTRONIX #1",
"<1,64>": "8INFF02", "<1,64>": "MACTRONIX #2 ",
"<1,65>": "8INFF03", "<1,65>": "MACTRONIX #3",
"<1,66>": "8INFF04", "<1,66>": "MACTRONIX #4",
"<1,67>": "MACTRONIX #1", "<1,67>": "MACTRONIX #5",
"<1,68>": "MACTRONIX #2 ", "<1,68>": "MACTRONIX #6",
"<1,69>": "MACTRONIX #3", "<1,69>": "MACTRONIX #7",
"<1,70>": "MACTRONIX #4", "<1,70>": "TALL_PITCH1",
"<1,71>": "MACTRONIX #5", "<1,71>": "TALL_PITCH2",
"<1,72>": "MACTRONIX #6", "<1,72>": "TALL_PITCH3",
"<1,73>": "MACTRONIX #7", "<1,73>": "TALL_PITCH4",
"<1,74>": "TALL_PITCH1", "<1,74>": "WC6INCH1",
"<1,75>": "TALL_PITCH2", "<1,75>": "WC6INCH2",
"<1,76>": "TALL_PITCH3", "<1,76>": "WC6INCH3",
"<1,77>": "TALL_PITCH4", "<1,77>": "WC6INCH4",
"<1,78>": "WC6INCH1", "<1,78>": "WC8INCH1",
"<1,79>": "WC6INCH2", "<1,79>": "WC8INCH2",
"<1,80>": "WC6INCH3", "<1,80>": "WC8INCH3",
"<1,81>": "WC6INCH4", "<1,81>": "ELLP01",
"<1,82>": "WC8INCH1", "<1,82>": "LEAKCHK01",
"<1,83>": "WC8INCH2", "<1,83>": "LEAKCHK02"
"<1,84>": "WC8INCH3",
"<1,85>": "ELLP01",
"<1,86>": "LEAKCHK01",
"<1,87>": "LEAKCHK02"
} }
} }
} }

View File

@ -1,33 +1,33 @@
{ {
"header": { "header": {
"version": 1, "version": 1,
"type": "record" "type": "record"
}, },
"body": { "body": {
"record1": { "record1": {
"<1>": "%2%", "<1>": "%2%",
"<2>": "BO", "<2>": "BO",
"<3>": "A", "<3>": "A",
"<4>": "B", "<4>": "B",
"<5>": "1", "<5>": "1",
"<6>": "-2", "<6>": "-2",
"<7>": "-2", "<7>": "-2",
"<8>": "T", "<8>": "T",
"<9>": "12632256", "<9>": "12632256",
"<10>": "", "<10>": "",
"<11>": "", "<11>": "",
"<12>": "%1%", "<12>": "%1%",
"<13>": "", "<13>": "",
"<14>": "", "<14>": "",
"<15>": "0", "<15>": "0",
"<16>": "IQS", "<16>": "IQS",
"<17>": "1", "<17>": "1",
"<18>": "", "<18>": "",
"<19>": "0", "<19>": "0",
"<20>": "", "<20>": "",
"<21>": "0", "<21>": "0",
"<22>": "", "<22>": "",
"<23>": "" "<23>": ""
} }
} }
} }

View File

@ -1,11 +1,11 @@
{ {
"header": { "header": {
"version": 1, "version": 1,
"type": "record" "type": "record"
}, },
"body": { "body": {
"record1": { "record1": {
"<1>": "Declare Subroutine Set_Property\r\nDeclare Function Get_Property\r\nThisRec = Get_Property(@Window,'ATRECORD')\r\nInitrnd Time()\r\nMyVar = Rnd(200)\r\nThisRec<28, -1> = MyVar\r\nSet_Property(@Window,'ATRECORD', ThisRec) \r\n\r\nreturn 1" "<1>": "Declare Subroutine Set_Property\r\nDeclare Function Get_Property\r\nThisRec = Get_Property(@Window,'ATRECORD')\r\nInitrnd Time()\r\nMyVar = Rnd(200)\r\nThisRec<28, -1> = MyVar\r\nSet_Property(@Window,'ATRECORD', ThisRec) \r\n\r\nreturn 1"
} }
} }
} }

View File

@ -1,11 +1,11 @@
{ {
"header": { "header": {
"version": 1, "version": 1,
"type": "record" "type": "record"
}, },
"body": { "body": {
"record1": { "record1": {
"<1>": "DECLARE FUNCTION Comm_Reactor_Log\r\nRETURN Comm_Reactor_Log(CtrlEntId,'DELETE')" "<1>": "DECLARE FUNCTION Comm_Reactor_Log\r\nRETURN Comm_Reactor_Log(CtrlEntId,'DELETE')"
} }
} }
} }

View File

@ -1,11 +1,11 @@
{ {
"header": { "header": {
"version": 1, "version": 1,
"type": "record" "type": "record"
}, },
"body": { "body": {
"record1": { "record1": {
"<1>": "\r\nDeclare function DCount\r\nDeclare subroutine Set_Property\r\n\r\nRDSNo = Get_Property(CtrlEntID, 'TEXT')\r\n\r\nIf DCount(RDSNo, '|') EQ 8 then\r\n\tRDSNo = Field(RDSNo, '|', 3)\r\nend\r\nIf RDSNo[1, 2] EQ '1T' then RDSNo[1, 2] = ''\r\n\r\nSet_Property(CtrlEntID, 'TEXT', RDSNo)\r\n\r\nRETURN 1" "<1>": "\r\nDeclare function DCount\r\nDeclare subroutine Set_Property\r\n\r\nRDSNo = Get_Property(CtrlEntID, 'TEXT')\r\n\r\nIf DCount(RDSNo, '|') EQ 8 then\r\n\tRDSNo = Field(RDSNo, '|', 3)\r\nend\r\nIf RDSNo[1, 2] EQ '1T' then RDSNo[1, 2] = ''\r\n\r\nSet_Property(CtrlEntID, 'TEXT', RDSNo)\r\n\r\nRETURN 1"
} }
} }
} }

View File

@ -1,11 +1,11 @@
{ {
"header": { "header": {
"version": 1, "version": 1,
"type": "record" "type": "record"
}, },
"body": { "body": {
"record1": { "record1": {
"<1>": "declare function get_property, rowexists, msg, dialog_box\r\n$insert msg_equates\r\n\r\nRLNo = .reactor_log_no->text\r\nif RLNo then\r\n if rowexists( 'REACTOR_LOG', RLNo ) then\r\n Qbf = get_property( @window, 'QBFLIST' )\r\n if Qbf then\r\n convert @fm to @vm in Qbf\r\n end else\r\n Qbf = ''\r\n end\r\n RetVal = dialog_box( 'NOTES_ATTACH', @window, 'REACTOR_LOG*':RLNo:'*':Qbf )\r\n end else\r\n MsgInfo = ''\r\n MsgInfo<mtext$> = 'You must save this Reactor Log record first...' \r\n MsgInfo<micon$> = 'H'\r\n Void = msg( '', MsgInfo )\r\n end\r\nend else\r\n MsgInfo = ''\r\n MsgInfo<mtext$> = 'You must have a Reactor Log record present...' \r\n MsgInfo<micon$> = 'H'\r\n Void = msg( '', MsgInfo )\r\nend\r\nRETURN 0" "<1>": "declare function get_property, rowexists, msg, dialog_box\r\n$insert msg_equates\r\n\r\nRLNo = .reactor_log_no->text\r\nif RLNo then\r\n if rowexists( 'REACTOR_LOG', RLNo ) then\r\n Qbf = get_property( @window, 'QBFLIST' )\r\n if Qbf then\r\n convert @fm to @vm in Qbf\r\n end else\r\n Qbf = ''\r\n end\r\n RetVal = dialog_box( 'NOTES_ATTACH', @window, 'REACTOR_LOG*':RLNo:'*':Qbf )\r\n end else\r\n MsgInfo = ''\r\n MsgInfo<mtext$> = 'You must save this Reactor Log record first...' \r\n MsgInfo<micon$> = 'H'\r\n Void = msg( '', MsgInfo )\r\n end\r\nend else\r\n MsgInfo = ''\r\n MsgInfo<mtext$> = 'You must have a Reactor Log record present...' \r\n MsgInfo<micon$> = 'H'\r\n Void = msg( '', MsgInfo )\r\nend\r\nRETURN 0"
} }
} }
} }

View File

@ -1,11 +1,11 @@
{ {
"header": { "header": {
"version": 1, "version": 1,
"type": "record" "type": "record"
}, },
"body": { "body": {
"record1": { "record1": {
"<1>": "Declare subroutine WO_DAILY_SCHED_ALL_COMM\r\n\r\nIf Index(CtrlEntId, 'IQS', 1) GT 0 then \r\n\tWO_DAILY_SCHED_ALL_COMM('IQSViolButton', CtrlEntId) \r\nend else\r\n\tWO_DAILY_SCHED_ALL_COMM('ChecklistButton', CtrlEntId) \r\nend\r\n\r\nRETURN 0" "<1>": "Declare subroutine WO_DAILY_SCHED_ALL_COMM\r\n\r\nIf Index(CtrlEntId, 'IQS', 1) GT 0 then \r\n\tWO_DAILY_SCHED_ALL_COMM('IQSViolButton', CtrlEntId) \r\nend else\r\n\tWO_DAILY_SCHED_ALL_COMM('ChecklistButton', CtrlEntId) \r\nend\r\n\r\nRETURN 0"
} }
} }
} }

View File

@ -1,11 +1,11 @@
{ {
"header": { "header": {
"version": 1, "version": 1,
"type": "record" "type": "record"
}, },
"body": { "body": {
"record1": { "record1": {
"<1>": "Declare subroutine WO_DAILY_SCHED_ALL_COMM\r\n\r\nIf Index(CtrlEntId, 'IQS', 1) GT 0 then \r\n\tWO_DAILY_SCHED_ALL_COMM('IQSViolButton', CtrlEntId) \r\nend else\r\n\tWO_DAILY_SCHED_ALL_COMM('ChecklistButton', CtrlEntId) \r\nend\r\n\r\nRETURN 0" "<1>": "Declare subroutine WO_DAILY_SCHED_ALL_COMM\r\n\r\nIf Index(CtrlEntId, 'IQS', 1) GT 0 then \r\n\tWO_DAILY_SCHED_ALL_COMM('IQSViolButton', CtrlEntId) \r\nend else\r\n\tWO_DAILY_SCHED_ALL_COMM('ChecklistButton', CtrlEntId) \r\nend\r\n\r\nRETURN 0"
} }
} }
} }

View File

@ -1,11 +1,11 @@
{ {
"header": { "header": {
"version": 1, "version": 1,
"type": "record" "type": "record"
}, },
"body": { "body": {
"record1": { "record1": {
"<1>": "Declare Subroutine Send_Event, Set_Property\r\n\r\nListVals = Get_Property(@Window : '.ET_REACT_PROB_ID', 'DEFPROP')\r\nSet_Property(@Window : '.ET_REACT_PROB_ID', 'DEFPROP', ListVals)\r\n\r\nSend_Event(@Window : '.ET_REACT_PROB_ID', 'CALCULATE')\r\n\r\nreturn 1" "<1>": "Declare Subroutine Send_Event, Set_Property\r\n\r\nListVals = Get_Property(@Window : '.ET_REACT_PROB_ID', 'DEFPROP')\r\nSet_Property(@Window : '.ET_REACT_PROB_ID', 'DEFPROP', ListVals)\r\n\r\nSend_Event(@Window : '.ET_REACT_PROB_ID', 'CALCULATE')\r\n\r\nreturn 1"
} }
} }
} }

View File

@ -1,11 +1,11 @@
{ {
"header": { "header": {
"version": 1, "version": 1,
"type": "record" "type": "record"
}, },
"body": { "body": {
"record1": { "record1": {
"<1>": "Declare Function Comm_Reactor_Log\r\n\r\nReturn Comm_Reactor_Log(CtrlEntID,'WRITE')" "<1>": "Declare Function Comm_Reactor_Log\r\n\r\nReturn Comm_Reactor_Log(CtrlEntID,'WRITE')"
} }
} }
} }

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

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

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

@ -1,145 +1,145 @@
{ {
"header": { "header": {
"version": 1, "version": 1,
"type": "record" "type": "record"
}, },
"body": { "body": {
"record1": { "record1": {
"<1>": "-1", "<1>": "-1",
"<2>": "-1", "<2>": "-1",
"<3>": "-1", "<3>": "-1",
"<4>": "-1", "<4>": "-1",
"<5>": "16777215", "<5>": "16777215",
"<6>": { "<6>": {
"<6,1>": { "<6,1>": {
"<6,1,1>": "Tahoma", "<6,1,1>": "Tahoma",
"<6,1,2>": "-11", "<6,1,2>": "-11",
"<6,1,3>": "400", "<6,1,3>": "400",
"<6,1,4>": "0", "<6,1,4>": "0",
"<6,1,5>": "0", "<6,1,5>": "0",
"<6,1,6>": "5", "<6,1,6>": "5",
"<6,1,7>": "0", "<6,1,7>": "0",
"<6,1,8>": "39", "<6,1,8>": "39",
"<6,1,9>": "0", "<6,1,9>": "0",
"<6,1,10>": "0", "<6,1,10>": "0",
"<6,1,11>": "0", "<6,1,11>": "0",
"<6,1,12>": "0", "<6,1,12>": "0",
"<6,1,13>": "11", "<6,1,13>": "11",
"<6,1,14>": "2", "<6,1,14>": "2",
"<6,1,15>": "0", "<6,1,15>": "0",
"<6,1,16>": "21" "<6,1,16>": "21"
} }
}, },
"<7>": "", "<7>": "",
"<8>": "", "<8>": "",
"<9>": { "<9>": {
"<9,1>": { "<9,1>": {
"<9,1,1>": "1", "<9,1,1>": "1",
"<9,1,2>": "11", "<9,1,2>": "11",
"<9,1,3>": "R", "<9,1,3>": "R",
"<9,1,4>": "C", "<9,1,4>": "C",
"<9,1,5>": "<<none>>", "<9,1,5>": "<<none>>",
"<9,1,6>": "ID" "<9,1,6>": "ID"
}, },
"<9,2>": { "<9,2>": {
"<9,2,1>": "2", "<9,2,1>": "2",
"<9,2,2>": "13", "<9,2,2>": "13",
"<9,2,3>": "L", "<9,2,3>": "L",
"<9,2,4>": "C", "<9,2,4>": "C",
"<9,2,5>": "DT2/^H", "<9,2,5>": "DT2/^H",
"<9,2,6>": "Run Time" "<9,2,6>": "Run Time"
}, },
"<9,3>": { "<9,3>": {
"<9,3,1>": "3", "<9,3,1>": "3",
"<9,3,2>": "6", "<9,3,2>": "6",
"<9,3,3>": "L", "<9,3,3>": "L",
"<9,3,4>": "C", "<9,3,4>": "C",
"<9,3,5>": "<<none>>", "<9,3,5>": "<<none>>",
"<9,3,6>": "Test Run Type" "<9,3,6>": "Test Run Type"
}, },
"<9,4>": { "<9,4>": {
"<9,4,1>": "4", "<9,4,1>": "4",
"<9,4,2>": "6", "<9,4,2>": "6",
"<9,4,3>": "C", "<9,4,3>": "C",
"<9,4,4>": "C", "<9,4,4>": "C",
"<9,4,5>": "<<none>>", "<9,4,5>": "<<none>>",
"<9,4,6>": "Equipment ID" "<9,4,6>": "Equipment ID"
}, },
"<9,5>": { "<9,5>": {
"<9,5,1>": "5", "<9,5,1>": "5",
"<9,5,2>": "6", "<9,5,2>": "6",
"<9,5,3>": "C", "<9,5,3>": "C",
"<9,5,4>": "C", "<9,5,4>": "C",
"<9,5,5>": "<<none>>", "<9,5,5>": "<<none>>",
"<9,5,6>": "Equipment Type" "<9,5,6>": "Equipment Type"
}, },
"<9,6>": { "<9,6>": {
"<9,6,1>": "6", "<9,6,1>": "6",
"<9,6,2>": "5", "<9,6,2>": "5",
"<9,6,3>": "R", "<9,6,3>": "R",
"<9,6,4>": "C", "<9,6,4>": "C",
"<9,6,5>": "<<none>>", "<9,6,5>": "<<none>>",
"<9,6,6>": "PSN" "<9,6,6>": "PSN"
}, },
"<9,7>": { "<9,7>": {
"<9,7,1>": "7", "<9,7,1>": "7",
"<9,7,2>": "15", "<9,7,2>": "15",
"<9,7,3>": "L", "<9,7,3>": "L",
"<9,7,4>": "C", "<9,7,4>": "C",
"<9,7,5>": "<<none>>", "<9,7,5>": "<<none>>",
"<9,7,6>": "User" "<9,7,6>": "User"
}, },
"<9,8>": { "<9,8>": {
"<9,8,1>": "8", "<9,8,1>": "8",
"<9,8,2>": "7", "<9,8,2>": "7",
"<9,8,3>": "R", "<9,8,3>": "R",
"<9,8,4>": "C", "<9,8,4>": "C",
"<9,8,5>": "<<none>>", "<9,8,5>": "<<none>>",
"<9,8,6>": "RDS" "<9,8,6>": "RDS"
}, },
"<9,9>": { "<9,9>": {
"<9,9,1>": "9", "<9,9,1>": "9",
"<9,9,2>": "9", "<9,9,2>": "9",
"<9,9,3>": "L", "<9,9,3>": "L",
"<9,9,4>": "C", "<9,9,4>": "C",
"<9,9,5>": "<<none>>", "<9,9,5>": "<<none>>",
"<9,9,6>": "Test Wafer Type" "<9,9,6>": "Test Wafer Type"
}, },
"<9,10>": { "<9,10>": {
"<9,10,1>": "10", "<9,10,1>": "10",
"<9,10,2>": "3", "<9,10,2>": "3",
"<9,10,3>": "R", "<9,10,3>": "R",
"<9,10,4>": "C", "<9,10,4>": "C",
"<9,10,5>": "<<none>>", "<9,10,5>": "<<none>>",
"<9,10,6>": "Wfr Qty" "<9,10,6>": "Wfr Qty"
} }
}, },
"<10>": "L", "<10>": "L",
"<11>": "0", "<11>": "0",
"<12>": "Test Wafer Report", "<12>": "Test Wafer Report",
"<13>": "", "<13>": "",
"<14>": "R", "<14>": "R",
"<15>": "1", "<15>": "1",
"<16>": "1", "<16>": "1",
"<17>": "1", "<17>": "1",
"<18>": "1", "<18>": "1",
"<19>": "1", "<19>": "1",
"<20>": "1", "<20>": "1",
"<21>": "1", "<21>": "1",
"<22>": "1", "<22>": "1",
"<23>": "1", "<23>": "1",
"<24>": "1", "<24>": "1",
"<25>": "0", "<25>": "0",
"<26>": "", "<26>": "",
"<27>": "", "<27>": "",
"<28>": "", "<28>": "",
"<29>": "0", "<29>": "0",
"<30>": "1", "<30>": "1",
"<31>": "0", "<31>": "0",
"<32>": "0", "<32>": "0",
"<33>": "0", "<33>": "0",
"<34>": "16777215", "<34>": "16777215",
"<35>": "16777215" "<35>": "16777215"
} }
} }
} }

View File

@ -1,57 +1,57 @@
Function Admin_API(@API) Function Admin_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 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. permission from SRP Computer Solutions, Inc.
Name : Admin_API Name : Admin_API
Description : API logic for the Admin resource. Description : API logic for the Admin resource.
Notes : All web APIs should include the API_SETUP insert. This will provide several useful variables: 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.) 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). APIURL - The URL for the API entry point (e.g., api.mysite.com/v1).
FullEndpointURL - The URL submitted by the client, including query params. FullEndpointURL - The URL submitted by the client, including query params.
FullEndpointURLNoQuery - The URL submitted by the client, excluding query params. FullEndpointURLNoQuery - The URL submitted by the client, excluding query params.
EndpointSegment - The URL endpoint segment. EndpointSegment - The URL endpoint segment.
ParentURL - The URL path preceeding the current endpoint. ParentURL - The URL path preceeding the current endpoint.
CurrentAPI - The name of this stored procedure. CurrentAPI - The name of this stored procedure.
Parameters : Parameters :
API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]: API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
- APIPattern must follow this structure Admin[.ID.[<Property>]] - APIPattern must follow this structure Admin[.ID.[<Property>]]
- HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc. - HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
Examples: Examples:
- Admin.POST - Admin.POST
- Admin.ID.PUT - Admin.ID.PUT
- Admin.ID.firstName.GET - Admin.ID.firstName.GET
Response [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API 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 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 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. value is only helpful if the developers want to use it for debug purposes.
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
03/14/24 xxx Original programmer. 03/14/24 xxx Original programmer.
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$insert APP_INSERTS $insert APP_INSERTS
$insert API_SETUP $insert API_SETUP
$insert HTTP_INSERTS $insert HTTP_INSERTS
GoToAPI else GoToAPI else
// The specific resource endpoint doesn't have a API handler yet. // 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.') HTTP_Services('SetResponseStatus', 204, 'This is a valid endpoint but a web API handler has not yet been created.')
end end
Return Response OR '' Return Response OR ''
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Endpoint Handlers // Endpoint Handlers
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -1,85 +1,85 @@
Compile function Archive_Services(@Service, @Params) Compile function Archive_Services(@Service, @Params)
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$insert LOGICAL $insert LOGICAL
$insert APP_INSERTS $insert APP_INSERTS
EQU COMMA$ To ',' EQU COMMA$ To ','
Declare subroutine Change_Log_Services, Logging_Services Declare subroutine Change_Log_Services, Logging_Services
Declare function SRP_Datetime, Logging_Services, Environment_Services, Datetime Declare function SRP_Datetime, Logging_Services, Environment_Services, Datetime
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Archive' LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Archive'
LogDate = Oconv(Date(), 'D4/') LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS') LogTime = Oconv(Time(), 'MTS')
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ArchiveService.csv' LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ArchiveService.csv'
Headers = 'Logging DTM' : @FM : 'Message' : @FM : 'Cutoff Date' Headers = 'Logging DTM' : @FM : 'Message' : @FM : 'Cutoff Date'
objLogArchiveService = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$) objLogArchiveService = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
GoToService GoToService
Return Response or "" Return Response or ""
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// SERVICES // SERVICES
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Service ArchiveRecords() Service ArchiveRecords()
Errors = '' Errors = ''
StatusMessage = 'Starting Archive Script.' StatusMessage = 'Starting Archive Script.'
LogData = '' LogData = ''
LogData<1> = LoggingDTM LogData<1> = LoggingDTM
LogData<2> = StatusMessage LogData<2> = StatusMessage
Logging_Services('AppendLog', objLogArchiveService, LogData, @RM, @FM) Logging_Services('AppendLog', objLogArchiveService, LogData, @RM, @FM)
//Archive Change Log Records //Archive Change Log Records
GoSub ChangeLogArchive GoSub ChangeLogArchive
//Finish //Finish
Locate True$ in Errors using @FM setting ePos then Locate True$ in Errors using @FM setting ePos then
StatusMessage = 'Archive script complete. Errors detected. Check individual archive logs for more info.' StatusMessage = 'Archive script complete. Errors detected. Check individual archive logs for more info.'
LogData = '' LogData = ''
LogData<1> = LoggingDTM LogData<1> = LoggingDTM
LogData<2> = StatusMessage LogData<2> = StatusMessage
Logging_Services('AppendLog', objLogArchiveService, LogData, @RM, @FM) Logging_Services('AppendLog', objLogArchiveService, LogData, @RM, @FM)
end else end else
StatusMessage = 'Archive script complete. No errors detected.' StatusMessage = 'Archive script complete. No errors detected.'
LogData = '' LogData = ''
LogData<1> = LoggingDTM LogData<1> = LoggingDTM
LogData<2> = StatusMessage LogData<2> = StatusMessage
Logging_Services('AppendLog', objLogArchiveService, LogData, @RM, @FM) Logging_Services('AppendLog', objLogArchiveService, LogData, @RM, @FM)
end end
End Service End Service
Service DearchiveRecord(Table, ID) Service DearchiveRecord(Table, ID)
end service end service
ChangeLogArchive: ChangeLogArchive:
StatusMessage = 'Starting Change_Log Archive Script.' StatusMessage = 'Starting Change_Log Archive Script.'
LogData = '' LogData = ''
LogData<1> = LoggingDTM LogData<1> = LoggingDTM
LogData<2> = StatusMessage LogData<2> = StatusMessage
Logging_Services('AppendLog', objLogArchiveService, LogData, @RM, @FM) Logging_Services('AppendLog', objLogArchiveService, LogData, @RM, @FM)
ChangeLogArchiveDate = SRP_Datetime('AddYears', Datetime(), -1) ChangeLogArchiveDate = SRP_Datetime('AddYears', Datetime(), -1)
Change_Log_Services('ArchiveChangeLogRecByDate', ChangeLogArchiveDate) Change_Log_Services('ArchiveChangeLogRecByDate', ChangeLogArchiveDate)
If Error_Services('NoError') then If Error_Services('NoError') then
StatusMessage = 'Starting Change_Log Archive Script.' StatusMessage = 'Starting Change_Log Archive Script.'
LogData = '' LogData = ''
LogData<1> = LoggingDTM LogData<1> = LoggingDTM
LogData<2> = StatusMessage LogData<2> = StatusMessage
Logging_Services('AppendLog', objLogArchiveService, LogData, @RM, @FM) Logging_Services('AppendLog', objLogArchiveService, LogData, @RM, @FM)
end else end else
StatusMessage = 'Error in Change_Log Archive Script.' StatusMessage = 'Error in Change_Log Archive Script.'
LogData = '' LogData = ''
LogData<1> = LoggingDTM LogData<1> = LoggingDTM
LogData<2> = StatusMessage LogData<2> = StatusMessage
Logging_Services('AppendLog', objLogArchiveService, LogData, @RM, @FM) Logging_Services('AppendLog', objLogArchiveService, LogData, @RM, @FM)
Errors<-1> = True$ Errors<-1> = True$
end end
return return

View File

@ -1,152 +1,152 @@
Function Authentication_API(@API) Function Authentication_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 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. permission from SRP Computer Solutions, Inc.
Name : Authentication_API Name : Authentication_API
Description : API logic for the Authentication resource. Description : API logic for the Authentication resource.
Notes : All web APIs should include the API_SETUP insert. This will provide several useful variables: 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.) 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). APIURL - The URL for the API entry point (e.g., api.mysite.com/v1).
FullEndpointURL - The URL submitted by the client, including query params. FullEndpointURL - The URL submitted by the client, including query params.
FullEndpointURLNoQuery - The URL submitted by the client, excluding query params. FullEndpointURLNoQuery - The URL submitted by the client, excluding query params.
EndpointSegment - The URL endpoint segment. EndpointSegment - The URL endpoint segment.
ParentURL - The URL path preceeding the current endpoint. ParentURL - The URL path preceeding the current endpoint.
CurrentAPI - The name of this stored procedure. CurrentAPI - The name of this stored procedure.
Parameters : Parameters :
API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]: API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
- APIPattern must follow this structure Authentication[.ID.[<Property>]] - APIPattern must follow this structure Authentication[.ID.[<Property>]]
- HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc. - HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
Examples: Examples:
- Authentication.POST - Authentication.POST
- Authentication.ID.PUT - Authentication.ID.PUT
- Authentication.ID.firstName.GET - Authentication.ID.firstName.GET
Response [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API 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 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 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. value is only helpful if the developers want to use it for debug purposes.
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
07/17/24 djs Original programmer. 07/17/24 djs Original programmer.
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$insert APP_INSERTS $insert APP_INSERTS
$insert API_SETUP $insert API_SETUP
$insert HTTP_INSERTS $insert HTTP_INSERTS
$insert LSL_USERS_EQUATES $insert LSL_USERS_EQUATES
Equ USERNAME$ To 1 Equ USERNAME$ To 1
Equ GROUP$ To 2 Equ GROUP$ To 2
Equ PASSWORD$ To 3 Equ PASSWORD$ To 3
Equ CONTEXT$ To 4 Equ CONTEXT$ To 4
Declare function Database_Services, MemberOf Declare function Database_Services, MemberOf
GoToAPI else GoToAPI else
// The specific resource endpoint doesn't have a API handler yet. // 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.') HTTP_Services('SetResponseStatus', 204, 'This is a valid endpoint but a web API handler has not yet been created.')
end end
Return Response OR '' Return Response OR ''
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Endpoint Handlers // Endpoint Handlers
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
API authentication.POST API authentication.POST
Body = HTTP_Services('GetHTTPPostString') Body = HTTP_Services('GetHTTPPostString')
If Body NE '' then If Body NE '' then
// The POST string will have been encoded so use percent (URL) decoding // The POST string will have been encoded so use percent (URL) decoding
AuthJson = HTTP_Services('DecodePercentString', Body) AuthJson = HTTP_Services('DecodePercentString', Body)
hAuthJson = '' hAuthJson = ''
ParseResponse = SRP_JSON(hAuthJson, 'PARSE', AuthJson) ParseResponse = SRP_JSON(hAuthJson, 'PARSE', AuthJson)
If (ParseResponse EQ '') then If (ParseResponse EQ '') then
Username = SRP_JSON(hAuthJson, 'GetValue', 'Username') Username = SRP_JSON(hAuthJson, 'GetValue', 'Username')
Password = SRP_JSON(hAuthJson, 'GetValue', 'Password') Password = SRP_JSON(hAuthJson, 'GetValue', 'Password')
Groups = '' Groups = ''
hGroups = SRP_JSON(hAuthJson, 'get', 'Groups') hGroups = SRP_JSON(hAuthJson, 'get', 'Groups')
If hGroups then If hGroups then
ElementHandles = SRP_JSON(hGroups, 'GetElements', @VM) ElementHandles = SRP_JSON(hGroups, 'GetElements', @VM)
If ElementHandles NE '' then If ElementHandles NE '' then
For each ElementHandle in ElementHandles using @VM For each ElementHandle in ElementHandles using @VM
Groups<0, -1> = SRP_JSON(ElementHandle, 'GetValue') Groups<0, -1> = SRP_JSON(ElementHandle, 'GetValue')
SRP_JSON(ElementHandle, 'Release') SRP_JSON(ElementHandle, 'Release')
Next ElementHandle Next ElementHandle
end end
SRP_JSON(hGroups, 'Release') SRP_JSON(hGroups, 'Release')
end end
SRP_JSON(hAuthJson, 'Release') SRP_JSON(hAuthJson, 'Release')
// Validate Credentials // Validate Credentials
UserRec = Database_Services('ReadDataRow', 'LSL_USERS', Username) UserRec = Database_Services('ReadDataRow', 'LSL_USERS', Username)
If Error_Services('NoError') then If Error_Services('NoError') then
Credentials = '' Credentials = ''
Credentials<USERNAME$> = Username Credentials<USERNAME$> = Username
Credentials<PASSWORD$> = UserRec<LSL_USERS_PASSWORD$> Credentials<PASSWORD$> = UserRec<LSL_USERS_PASSWORD$>
Credentials<GROUP$> = UserRec<LSL_USERS_GROUPS$> Credentials<GROUP$> = UserRec<LSL_USERS_GROUPS$>
Member = False$ Member = False$
Group = '' Group = ''
If Groups NE '' then If Groups NE '' then
For each Group in Groups using @VM For each Group in Groups using @VM
Member = MemberOf(Credentials<USERNAME$>, Group) Member = MemberOf(Credentials<USERNAME$>, Group)
Until Member EQ True$ Until Member EQ True$
Next Group Next Group
end else end else
Member = True$ Member = True$
end end
Begin Case Begin Case
Case (Password EQ Credentials<PASSWORD$>) AND (Member EQ True$) Case (Password EQ Credentials<PASSWORD$>) AND (Member EQ True$)
// Return 200, authentication successful // Return 200, authentication successful
StatusCode = 200 StatusCode = 200
Message = 'Authentication successful' Message = 'Authentication successful'
HTTP_Services('SetResponseStatus', 200, Message) HTTP_Services('SetResponseStatus', 200, Message)
Case (Password EQ Credentials<PASSWORD$>) AND (Member EQ False$) Case (Password EQ Credentials<PASSWORD$>) AND (Member EQ False$)
// Return 401, not a member of required groups // Return 401, not a member of required groups
NumGroups = DCount(Groups, @VM) NumGroups = DCount(Groups, @VM)
If NumGroups GT 1 then If NumGroups GT 1 then
Swap @VM with ' or ' in Groups Swap @VM with ' or ' in Groups
Message = 'User is not a member of the ' : Groups : ' groups.' Message = 'User is not a member of the ' : Groups : ' groups.'
end else end else
Message = 'User is not a member of the ' : Group : ' group.' Message = 'User is not a member of the ' : Group : ' group.'
end end
HTTP_Services('SetResponseStatus', 401, 'Authentication failed. ':Message) HTTP_Services('SetResponseStatus', 401, 'Authentication failed. ':Message)
Case Password NE Credentials<PASSWORD$> Case Password NE Credentials<PASSWORD$>
// Return 401, unable to validate password // Return 401, unable to validate password
Message = 'Unable to validate username. Please re-enter.' Message = 'Unable to validate username. Please re-enter.'
HTTP_Services('SetResponseStatus', 401, 'Authentication failed. ':Message) HTTP_Services('SetResponseStatus', 401, 'Authentication failed. ':Message)
Case Otherwise$ Case Otherwise$
HTTP_Services('SetResponseStatus', 500, 'Error in the ' : CurrentAPI : ' API. Unhandled case.') HTTP_Services('SetResponseStatus', 500, 'Error in the ' : CurrentAPI : ' API. Unhandled case.')
End Case End Case
end else end else
// Error reading user record // Error reading user record
ErrorMsg = Error_Services('GetMessage') ErrorMsg = Error_Services('GetMessage')
HTTP_Services('SetResponseStatus', 500, 'Error in the ' : CurrentAPI : ' API. Message: ': ErrorMsg) HTTP_Services('SetResponseStatus', 500, 'Error in the ' : CurrentAPI : ' API. Message: ': ErrorMsg)
end end
end else end else
HTTP_Services('SetResponseStatus', 400, 'Error in the ' : CurrentAPI : ' API. Error parsing JSON.') HTTP_Services('SetResponseStatus', 400, 'Error in the ' : CurrentAPI : ' API. Error parsing JSON.')
end end
end else end else
HTTP_Services('SetResponseStatus', 400, 'Error in the ' : CurrentAPI : ' API. Empty request.') HTTP_Services('SetResponseStatus', 400, 'Error in the ' : CurrentAPI : ' API. Empty request.')
end end
end api end api
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs // Internal GoSubs
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -1,415 +1,415 @@
Compile function Automated_Workflow_Services(@Service, @Params) Compile function Automated_Workflow_Services(@Service, @Params)
/* /*
Initial Author: Jonathan Ouellette Initial Author: Jonathan Ouellette
This service module has a catalogued list of functions to quickly and easily perform certain functions related to lot This service module has a catalogued list of functions to quickly and easily perform certain functions related to lot
processing. processing.
1. CreateAWO - Imitates the process of getting data from SAP and processing the WO start in OI. 1. CreateAWO - Imitates the process of getting data from SAP and processing the WO start in OI.
2. RouteWO - Imitates routing of a WO, AKA selecting a ProdVer and Assigning the WO to a reactor Type 2. RouteWO - Imitates routing of a WO, AKA selecting a ProdVer and Assigning the WO to a reactor Type
3. PrescribeWafers - Imitates creating the child lots for a WO, AKA creating WO_MAT records 3. PrescribeWafers - Imitates creating the child lots for a WO, AKA creating WO_MAT records
4. ReleaseCassettes - Assigns raw substrates to the WO_MAT records. RDS for non-epipro is created at this point. 4. ReleaseCassettes - Assigns raw substrates to the WO_MAT records. RDS for non-epipro is created at this point.
5. PerformPTI - Imitates Receiving operator moving the lot into the fab. 5. PerformPTI - Imitates Receiving operator moving the lot into the fab.
6. Perform1VER - Performs the 1VER operation for an RDS. 6. Perform1VER - Performs the 1VER operation for an RDS.
7. PerformLoad - Performs the load operation for an RDS. 7. PerformLoad - Performs the load operation for an RDS.
8. PerformUnload - Performs the unload operation for a non-epipro RDS. 8. PerformUnload - Performs the unload operation for a non-epipro RDS.
9. EnterRecipeParms - Used in conjunction with PerformLoad. Used to enter the parameters for the Reactor Recipe upon load 9. EnterRecipeParms - Used in conjunction with PerformLoad. Used to enter the parameters for the Reactor Recipe upon load
typically this is the first load of a Work Order. typically this is the first load of a Work Order.
10. VerifyRecipeParms - Used in conjunction with PerformLoad. Used to verify the current recipe setpoints for an RDS load. 10. VerifyRecipeParms - Used in conjunction with PerformLoad. Used to verify the current recipe setpoints for an RDS load.
*/ */
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
Declare function Gan_Services, Obj_Notes_Sent, msg, Check_Notes, Jonathan_Services, Database_Services, SRP_Datetime Declare function Gan_Services, Obj_Notes_Sent, msg, Check_Notes, Jonathan_Services, Database_Services, SRP_Datetime
Declare function Lsl_Users_Services, SRP_Time, RList, Error_Services, Obj_Wo_Mat, Pm_Services, Date_Services, Test_Run_Services Declare function Lsl_Users_Services, SRP_Time, RList, Error_Services, Obj_Wo_Mat, Pm_Services, Date_Services, Test_Run_Services
Declare function Reactor_Services, Reactor_Log_Services, obj_react_item, Utility, Environment_Services, obj_wo_log, Qa_Services Declare function Reactor_Services, Reactor_Log_Services, obj_react_item, Utility, Environment_Services, obj_wo_log, Qa_Services
Declare subroutine Start_Window, RList, Set_Status, Database_Services, Obj_Sap, Sap_Services, Btree.Extract, Qa_Services Declare subroutine Start_Window, RList, Set_Status, Database_Services, Obj_Sap, Sap_Services, Btree.Extract, Qa_Services
Declare subroutine Reactor_Services, Obj_Wo_Log, obj_wo_mat, Work_Order_Services, Material_Movement_Services, Automated_Workflow_Services Declare subroutine Reactor_Services, Obj_Wo_Log, obj_wo_mat, Work_Order_Services, Material_Movement_Services, Automated_Workflow_Services
Declare subroutine Override_Services, Obj_Wo_Mat_Log, obj_post_log, Obj_Sap Declare subroutine Override_Services, Obj_Wo_Mat_Log, obj_post_log, Obj_Sap
$insert LOGICAL $insert LOGICAL
$insert NOTE_PTRS_EQU $insert NOTE_PTRS_EQU
$insert MSG_EQUATES $insert MSG_EQUATES
$Insert APP_INSERTS $Insert APP_INSERTS
$Insert RLIST_EQUATES $Insert RLIST_EQUATES
$Insert WO_LOG_EQUATES $Insert WO_LOG_EQUATES
$Insert RDS_EQUATES $Insert RDS_EQUATES
$Insert WO_STEP_EQUATES $Insert WO_STEP_EQUATES
$Insert WO_MAT_QA_EQUATES $Insert WO_MAT_QA_EQUATES
$Insert REACT_RUN_EQUATES $Insert REACT_RUN_EQUATES
$Insert RDS_LAYER_EQUATES $Insert RDS_LAYER_EQUATES
$Insert RDS_TEST_EQUATES $Insert RDS_TEST_EQUATES
$Insert PM_EQUATES $Insert PM_EQUATES
$Insert PM_SPEC_EQUATES $Insert PM_SPEC_EQUATES
$Insert WO_MAT_EQUATES $Insert WO_MAT_EQUATES
$Insert WM_OUT_EQUATES $Insert WM_OUT_EQUATES
$Insert TEST_RUN_EQUATES $Insert TEST_RUN_EQUATES
$Insert TEST_RUN_WAFER_EQUATES $Insert TEST_RUN_WAFER_EQUATES
$Insert TEST_WAFER_PROD_EQUATES $Insert TEST_WAFER_PROD_EQUATES
$Insert TEST_RUN_TYPE_EQUATES $Insert TEST_RUN_TYPE_EQUATES
$Insert EPI_PART_EQUATES $Insert EPI_PART_EQUATES
$Insert POPUP_EQUATES $Insert POPUP_EQUATES
$Insert REACTOR_EQUATES $Insert REACTOR_EQUATES
GoToService GoToService
Return Response or "" Return Response or ""
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// SERVICES // SERVICES
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Service CreatAWO() Service CreatAWO()
//Step 1: Start a WO WOLogFileIn variable emulates what an SAP file would have //Step 1: Start a WO WOLogFileIn variable emulates what an SAP file would have
/* /*
ProdOrdNo = FileIn<1,1> ProdOrdNo = FileIn<1,1>
CustPONo = FileIn<1,2> CustPONo = FileIn<1,2>
PromiseShipDt = FileIn<1,3> PromiseShipDt = FileIn<1,3>
EpiPartNo = FileIn<1,4> EpiPartNo = FileIn<1,4>
SubPartNo = FileIn<1,5> SubPartNo = FileIn<1,5>
SubRevNo = FileIn<1,6> SubRevNo = FileIn<1,6>
WOQty = FileIn<1,7> WOQty = FileIn<1,7>
VendCd = FileIn<1,8> VendCd = FileIn<1,8>
*/ */
WOLogFileIn = 'M124567.1':@VM:'NA':@VM:'02/29/2024':@VM:'400149S':@VM:'827906':@VM:'1.0':@VM:'150':@VM:'NA' WOLogFileIn = 'M124567.1':@VM:'NA':@VM:'02/29/2024':@VM:'400149S':@VM:'827906':@VM:'1.0':@VM:'150':@VM:'NA'
RetVal = obj_WO_LOG('SAPCreate',WOLogFileIn) RetVal = obj_WO_LOG('SAPCreate',WOLogFileIn)
Response = RetVal Response = RetVal
end service end service
Service RouteWO(WO_No) Service RouteWO(WO_No)
//Step 2: Route a WO with a Product Version //Step 2: Route a WO with a Product Version
WOLogRec = Database_Services('ReadDataRow', 'WO_LOG', WO_No) WOLogRec = Database_Services('ReadDataRow', 'WO_LOG', WO_No)
EpiPartNo = WOLogRec<WO_LOG_EPI_PART_NO$> EpiPartNo = WOLogRec<WO_LOG_EPI_PART_NO$>
If EpiPartNo NE '' then If EpiPartNo NE '' then
AllProdVerNos = XLATE('EPI_PART',EpiPartNo,EPI_PART_PROD_VER_NO$,'X') AllProdVerNos = XLATE('EPI_PART',EpiPartNo,EPI_PART_PROD_VER_NO$,'X')
TypeOver = '' TypeOver = ''
TypeOver<PDISPLAY$> = AllProdVerNos TypeOver<PDISPLAY$> = AllProdVerNos
TypeOver<PSELECT$> = 1 TypeOver<PSELECT$> = 1
TypeOver<PMODE$> = 'K' TypeOver<PMODE$> = 'K'
SelectedProdVerNo = Popup(@WINDOW,TypeOver,'PROD_VER') SelectedProdVerNo = Popup(@WINDOW,TypeOver,'PROD_VER')
If SelectedProdVerNo NE '' then If SelectedProdVerNo NE '' then
obj_WO_Log('Route',WO_No:@RM:SelectedProdVerNo) obj_WO_Log('Route',WO_No:@RM:SelectedProdVerNo)
end end
end end
end service end service
Service PrescribeWafers(WONo, AmountToRX) Service PrescribeWafers(WONo, AmountToRX)
//Step 3: prescribe wafers. This is the same as assigning lot numbers to individual lots of raw material. AKA creating WO_MAT records //Step 3: prescribe wafers. This is the same as assigning lot numbers to individual lots of raw material. AKA creating WO_MAT records
/* /*
a. User clicks the PUB_RX button on the WO_LOG form. a. User clicks the PUB_RX button on the WO_LOG form.
b. Opens WO Receipt form b. Opens WO Receipt form
c. Users clicks on WO's Due in c. Users clicks on WO's Due in
d. User selects or enters a WO. d. User selects or enters a WO.
e. User clicks scan codes, opens e. User clicks scan codes, opens
*/ */
debug debug
ProdVerNo = XLATE('WO_LOG', WONo, 'PROD_VER_NO', 'X') ProdVerNo = XLATE('WO_LOG', WONo, 'PROD_VER_NO', 'X')
ReactType = XLATE('WO_LOG', WONo, 'REACT_TYPE', 'X') ReactType = XLATE('WO_LOG', WONo, 'REACT_TYPE', 'X')
CassLotNo = '123456789' CassLotNo = '123456789'
CustPartNo = XLATE('WO_LOG', WONo, 'CUST_PART_NO', 'X') CustPartNo = XLATE('WO_LOG', WONo, 'CUST_PART_NO', 'X')
CassQty = 25 CassQty = 25
NumCassToRX = AmountToRX / 25 NumCassToRX = AmountToRX / 25
ExistingWOMatList = XLATE('WO_LOG', WONo, 'WO_MAT_KEY', 'X') ExistingWOMatList = XLATE('WO_LOG', WONo, 'WO_MAT_KEY', 'X')
LastCassNo = 0 LastCassNo = 0
for each cass in ExistingWOMatList using @VM setting iPos for each cass in ExistingWOMatList using @VM setting iPos
thisCassNo = FIELD(cass, '*', 2) thisCassNo = FIELD(cass, '*', 2)
if thisCassNo GT LastCassNo then LastCassNo = thisCassNo if thisCassNo GT LastCassNo then LastCassNo = thisCassNo
Next cass Next cass
for i = 1 to NumCassToRX for i = 1 to NumCassToRX
NextCassNo = LastCassNo + 1 NextCassNo = LastCassNo + 1
LastCassNo = nextCassNo LastCassNo = nextCassNo
Parms = WONo:@RM Parms = WONo:@RM
Parms := NextCassNo:@RM Parms := NextCassNo:@RM
Parms := ProdVerNo:@RM Parms := ProdVerNo:@RM
Parms := CassLotNo:@RM Parms := CassLotNo:@RM
Parms := CassQty:@RM Parms := CassQty:@RM
Parms := CustPartNo:@RM ;* This is the CUSTOMER part No Parms := CustPartNo:@RM ;* This is the CUSTOMER part No
Parms := 1:@RM Parms := 1:@RM
Parms := ReactType:@RM ;* 3 character Reactor Type Code Parms := ReactType:@RM ;* 3 character Reactor Type Code
Parms := '':@RM Parms := '':@RM
Parms := 'SR':@RM ;* Warehouse = 'SR' - Shipping/Receiving Area Parms := 'SR':@RM ;* Warehouse = 'SR' - Shipping/Receiving Area
Parms := 'RB':@RM ;* Location = 'RB' - Receiving Bench Parms := 'RB':@RM ;* Location = 'RB' - Receiving Bench
Parms := OCONV(SRP_Datetime('Now'), 'DT/4'):@RM Parms := OCONV(SRP_Datetime('Now'), 'DT/4'):@RM
Parms := 'JONATHAN_O':@RM Parms := 'JONATHAN_O':@RM
Parms := '':@RM Parms := '':@RM
Parms := '':@RM Parms := '':@RM
Parms := '':@RM ;* Added 8/18/2009 JCH Parms := '':@RM ;* Added 8/18/2009 JCH
Parms := '':@RM ;* Added 12/16/2009 JCH Parms := '':@RM ;* Added 12/16/2009 JCH
Parms := 25:@RM ;* Added 11/4/2009 JCH Parms := 25:@RM ;* Added 11/4/2009 JCH
Parms := 0:@RM ;* Added 05/14/2010 JCH Parms := 0:@RM ;* Added 05/14/2010 JCH
Parms := '':@RM ;* Added 07/14/2011 for SAP Project JCH Parms := '':@RM ;* Added 07/14/2011 for SAP Project JCH
Parms := 25 ; // Added 02/01/2018 dmb Parms := 25 ; // Added 02/01/2018 dmb
obj_WO_Mat('Create',Parms) obj_WO_Mat('Create',Parms)
If Error_Services('NoError') then If Error_Services('NoError') then
WOLogRec = Database_Services('ReadDataRow', 'WO_LOG', WONo) WOLogRec = Database_Services('ReadDataRow', 'WO_LOG', WONo)
WOLogRec<WO_LOG_WO_MAT_KEY$, -1> = WONo : '*' : LastCassNo WOLogRec<WO_LOG_WO_MAT_KEY$, -1> = WONo : '*' : LastCassNo
Database_Services('WriteDataRow', 'WO_LOG', WONo, WOLogRec, 1, 0, 1) Database_Services('WriteDataRow', 'WO_LOG', WONo, WOLogRec, 1, 0, 1)
end end
Next i Next i
Work_Order_Services('UpdateReceivedQty', WONo) Work_Order_Services('UpdateReceivedQty', WONo)
end service end service
Service ReleaseCassettes(WONo) Service ReleaseCassettes(WONo)
//Step 4: User clicks release cassettes(PUB_RELEASE) from WO_LOG form //Step 4: User clicks release cassettes(PUB_RELEASE) from WO_LOG form
Work_Order_Services('ReleaseCassettes', WONo) Work_Order_Services('ReleaseCassettes', WONo)
//Can get RDS number at this point //Can get RDS number at this point
end service end service
Service PerformPTI(CassID) Service PerformPTI(CassID)
//Step 5: User performs a PTI scan to tag lot into the fab. //Step 5: User performs a PTI scan to tag lot into the fab.
Warehouse = '1K' Warehouse = '1K'
Location = 'PTI' Location = 'PTI'
Material_Movement_Services('SaveRecord', CassID, Warehouse, Location, @USER4) Material_Movement_Services('SaveRecord', CassID, Warehouse, Location, @USER4)
end service end service
* Service BatchProcessLotList() * Service BatchProcessLotList()
* RDSList = '' * RDSList = ''
* *
* RDSList<1> = 627134 * RDSList<1> = 627134
* RDSList<2> = 627135 * RDSList<2> = 627135
* RDSList<3> = 627136 * RDSList<3> = 627136
* RDSList<4> = 627132 * RDSList<4> = 627132
* RDSList<5> = 627133 * RDSList<5> = 627133
* *
* for each rds in RDSList using @FM * for each rds in RDSList using @FM
* //Automated_Workflow_Services('Perform1VER', rds, 63, 25) * //Automated_Workflow_Services('Perform1VER', rds, 63, 25)
* Automated_Workflow_Services('PerformUnload', rds) * Automated_Workflow_Services('PerformUnload', rds)
* Next rds * Next rds
* end service * end service
Service Perform1VER(CassID, ReactorID, WfrQty) Service Perform1VER(CassID, ReactorID, WfrQty)
//Step 6 //Step 6
If RowExists('RDS', CassID) AND ReactorID NE '' then If RowExists('RDS', CassID) AND ReactorID NE '' then
ReadyToSign = QA_Services('PreEpiSignatureReady', CassID, @User4, WfrQty, ReactorID) ReadyToSign = QA_Services('PreEpiSignatureReady', CassID, @User4, WfrQty, ReactorID)
If (ReadyToSign EQ True$) then If (ReadyToSign EQ True$) then
QA_Services('SignPreEpiStage', CassID, @USER4, WfrQty, ReactorID) QA_Services('SignPreEpiStage', CassID, @USER4, WfrQty, ReactorID)
end end
end end
end service end service
Service PerformLoad(CassID, WfrInQty, LorRLL) Service PerformLoad(CassID, WfrInQty, LorRLL)
//Step 7 //Step 7
If RowExists('RDS', CassID) then If RowExists('RDS', CassID) then
ReadyToSign = Qa_Services('LoadSignatureReady', CassID, @User4, WfrInQty, LorRLL, 0) ReadyToSign = Qa_Services('LoadSignatureReady', CassID, @User4, WfrInQty, LorRLL, 0)
If ReadyToSign then If ReadyToSign then
Qa_Services('SignLoadStage', CassID, @User4, WfrInQty, LorRLL, 0) Qa_Services('SignLoadStage', CassID, @User4, WfrInQty, LorRLL, 0)
end else end else
ErrorReason = Error_Services('GetMessage') ErrorReason = Error_Services('GetMessage')
Begin Case Begin Case
Case ErrorReason EQ 'Process Error: Recipe parameters have not been entered.' Case ErrorReason EQ 'Process Error: Recipe parameters have not been entered.'
//Get the expected parameters and enter them. This is in the RDS_Layer Record //Get the expected parameters and enter them. This is in the RDS_Layer Record
//First lets get limits from the RDS Layer Record(s) //First lets get limits from the RDS Layer Record(s)
RDSLayerKeys = XLATE('RDS', CassID, RDS_RDS_LAYER_KEYS$, 'X') RDSLayerKeys = XLATE('RDS', CassID, RDS_RDS_LAYER_KEYS$, 'X')
for each RDSLayerKey in RDSLayerKeys using @VM setting rlPos for each RDSLayerKey in RDSLayerKeys using @VM setting rlPos
Automated_Workflow_Services('EnterRecipeParams', RDSLayerKey) Automated_Workflow_Services('EnterRecipeParams', RDSLayerKey)
If Error_Services('NoError') then If Error_Services('NoError') then
Automated_Workflow_Services('PerformLoad', CassID, WfrInQty, LorRLL) Automated_Workflow_Services('PerformLoad', CassID, WfrInQty, LorRLL)
end else end else
//Die //Die
Return Return
end end
Next RDSLayerKey Next RDSLayerKey
Case ErrorReason EQ 'RDS layer parameters must be reviewed for accuracy and acknowledged before the load operation can be signed.' Case ErrorReason EQ 'RDS layer parameters must be reviewed for accuracy and acknowledged before the load operation can be signed.'
Automated_Workflow_Services('VerifyRecipeParams', CassID) Automated_Workflow_Services('VerifyRecipeParams', CassID)
If Error_Services('NoError') then If Error_Services('NoError') then
Automated_Workflow_Services('PerformLoad', CassID, WfrInQty, LorRLL) Automated_Workflow_Services('PerformLoad', CassID, WfrInQty, LorRLL)
end else end else
//Die //Die
Return Return
end end
End Case End Case
end end
end end
end service end service
Service PerformUnload(RDSNo) Service PerformUnload(RDSNo)
//Step 8 //Step 8
If RDSNo NE '' then If RDSNo NE '' then
Reactor = XLATE('RDS', RDSNo, 'REACTOR', 'X') Reactor = XLATE('RDS', RDSNo, 'REACTOR', 'X')
If Reactor NE '' then If Reactor NE '' then
ReadyToSign = QA_Services('UnloadSignatureReady', RDSNo, @User4, Reactor) ReadyToSign = QA_Services('UnloadSignatureReady', RDSNo, @User4, Reactor)
If Error_Services('HasError') then If Error_Services('HasError') then
If ErrorMsg EQ 'Cassette runtime exceeds three days! An override by a LEAD or SUPERVISOR is required.' then If ErrorMsg EQ 'Cassette runtime exceeds three days! An override by a LEAD or SUPERVISOR is required.' then
Override_Services('SetOverride', 'RDS', RDSNo, 'UNLOAD_DTM', @USER4) Override_Services('SetOverride', 'RDS', RDSNo, 'UNLOAD_DTM', @USER4)
ReadyToSign = True$ ReadyToSign = True$
end end
end end
If ReadyToSign then If ReadyToSign then
QA_Services('SignUnloadStage', RDSNo, @User4) QA_Services('SignUnloadStage', RDSNo, @User4)
end end
end else end else
Error_Services('Add', 'No Reactor assigned to RDS!') Error_Services('Add', 'No Reactor assigned to RDS!')
end end
end else end else
Error_Services('Add', 'No RDS No. Supplied!') Error_Services('Add', 'No RDS No. Supplied!')
end end
end service end service
Service PerformFQA(RDSNo) Service PerformFQA(RDSNo)
ToolID = '' ToolID = ''
WHCd = 'CR' WHCd = 'CR'
LocCD = 'QA' LocCD = 'QA'
Tag = '' Tag = ''
SigDt = Date() SigDt = Date()
SigTm = Time() SigTm = Time()
WONo = XLATE('RDS', RDSNo, RDS_WO$, 'X') WONo = XLATE('RDS', RDSNo, RDS_WO$, 'X')
CassNo = XLATE('RDS', RDSNo, RDS_CASS_NO$, 'X') CassNo = XLATE('RDS', RDSNo, RDS_CASS_NO$, 'X')
Equ COL$LOG_FILE to 1 Equ COL$LOG_FILE to 1
Equ COL$LOG_DTM to 2 Equ COL$LOG_DTM to 2
Equ COL$ACTION to 3 Equ COL$ACTION to 3
Equ COL$WH_CD to 4 Equ COL$WH_CD to 4
Equ COL$LOC_CD to 5 Equ COL$LOC_CD to 5
Equ COL$WO_NOS to 6 Equ COL$WO_NOS to 6
Equ COL$CASS_NOS to 7 Equ COL$CASS_NOS to 7
Equ COL$USER_ID to 8 Equ COL$USER_ID to 8
Equ COL$TAGS to 9 Equ COL$TAGS to 9
Equ COL$TOOL_ID to 10 Equ COL$TOOL_ID to 10
EventParms = '' EventParms = ''
EventParms<COL$LOG_FILE> = 'WO_MAT' EventParms<COL$LOG_FILE> = 'WO_MAT'
EventParms<COL$LOG_DTM> = SigDt:' ':SigTm EventParms<COL$LOG_DTM> = SigDt:' ':SigTm
EventParms<COL$ACTION> = 1:'QA' EventParms<COL$ACTION> = 1:'QA'
EventParms<COL$WH_CD> = 'CR' EventParms<COL$WH_CD> = 'CR'
EventParms<COL$LOC_CD> = 'QA' EventParms<COL$LOC_CD> = 'QA'
EventParms<COL$WO_NOS> = WONo EventParms<COL$WO_NOS> = WONo
EventParms<COL$CASS_NOS> = CassNo EventParms<COL$CASS_NOS> = CassNo
EventParms<COL$USER_ID> = @USER4 EventParms<COL$USER_ID> = @USER4
EventParms<COL$TAGS> = '' EventParms<COL$TAGS> = ''
EventParms<COL$TOOL_ID> = '' EventParms<COL$TOOL_ID> = ''
CONVERT @FM TO @RM IN EventParms CONVERT @FM TO @RM IN EventParms
obj_WO_Mat_Log('Create',EventParms) ;* * * * * INV EVENT LOG * * * * * obj_WO_Mat_Log('Create',EventParms) ;* * * * * INV EVENT LOG * * * * *
Obj_Post_Log('POST') Obj_Post_Log('POST')
Qa_Services('SignFQAStage', RDSNo, @USER4) Qa_Services('SignFQAStage', RDSNo, @USER4)
end service end service
Service EnterRecipeParams(RDSLayerKey) Service EnterRecipeParams(RDSLayerKey)
RDSLayerRec = Database_Services('ReadDataRow', 'RDS_LAYER', RDSLayerKey) RDSLayerRec = Database_Services('ReadDataRow', 'RDS_LAYER', RDSLayerKey)
If RDSLayerRec NE '' then If RDSLayerRec NE '' then
If RDSLayerRec<RDS_LAYER_EPI_TIME_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_EPI_TIME_MAX$> NE '' then If RDSLayerRec<RDS_LAYER_EPI_TIME_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_EPI_TIME_MAX$> NE '' then
//Epi Deposit Time //Epi Deposit Time
RDSLayerRec<RDS_LAYER_EPI_TIME$> = ((RDSLayerRec<RDS_LAYER_EPI_TIME_MAX$> - RDSLayerRec<RDS_LAYER_EPI_TIME_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_EPI_TIME_MIN$> RDSLayerRec<RDS_LAYER_EPI_TIME$> = ((RDSLayerRec<RDS_LAYER_EPI_TIME_MAX$> - RDSLayerRec<RDS_LAYER_EPI_TIME_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_EPI_TIME_MIN$>
end end
If RDSLayerRec<RDS_LAYER_DILUENT_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_DILUENT_MAX$> NE '' then If RDSLayerRec<RDS_LAYER_DILUENT_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_DILUENT_MAX$> NE '' then
//Diluent //Diluent
RDSLayerRec<RDS_LAYER_DILUENT_ADJ_PARAM$> = ((RDSLayerRec<RDS_LAYER_DILUENT_MAX$> - RDSLayerRec<RDS_LAYER_DILUENT_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_DILUENT_MIN$> RDSLayerRec<RDS_LAYER_DILUENT_ADJ_PARAM$> = ((RDSLayerRec<RDS_LAYER_DILUENT_MAX$> - RDSLayerRec<RDS_LAYER_DILUENT_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_DILUENT_MIN$>
end end
If RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MAX$> NE '' then If RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MAX$> NE '' then
//Dopant Flow //Dopant Flow
RDSLayerRec<RDS_LAYER_DOPANT_FLOW$> = ((RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MAX$> - RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MIN$> RDSLayerRec<RDS_LAYER_DOPANT_FLOW$> = ((RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MAX$> - RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MIN$>
end end
If RDSLayerRec<RDS_LAYER_HCL_FLOW_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_HCL_FLOW_MAX$> NE '' then If RDSLayerRec<RDS_LAYER_HCL_FLOW_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_HCL_FLOW_MAX$> NE '' then
//HCL Flow //HCL Flow
RDSLayerRec<RDS_LAYER_HCL_FLOW$> = ((RDSLayerRec<RDS_LAYER_HCL_FLOW_MAX$> - RDSLayerRec<RDS_LAYER_HCL_FLOW_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_HCL_FLOW_MIN$> RDSLayerRec<RDS_LAYER_HCL_FLOW$> = ((RDSLayerRec<RDS_LAYER_HCL_FLOW_MAX$> - RDSLayerRec<RDS_LAYER_HCL_FLOW_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_HCL_FLOW_MIN$>
end end
If RDSLayerRec<RDS_LAYER_BAKE_TIME_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_BAKE_TIME_MAX$> NE '' then If RDSLayerRec<RDS_LAYER_BAKE_TIME_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_BAKE_TIME_MAX$> NE '' then
//Bake Time //Bake Time
RDSLayerRec<RDS_LAYER_BAKE_TIME$> = ((RDSLayerRec<RDS_LAYER_BAKE_TIME_MAX$> - RDSLayerRec<RDS_LAYER_BAKE_TIME_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_BAKE_TIME_MIN$> RDSLayerRec<RDS_LAYER_BAKE_TIME$> = ((RDSLayerRec<RDS_LAYER_BAKE_TIME_MAX$> - RDSLayerRec<RDS_LAYER_BAKE_TIME_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_BAKE_TIME_MIN$>
end end
If RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MAX$> NE '' then If RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MAX$> NE '' then
//H2 Flow //H2 Flow
RDSLayerRec<RDS_LAYER_EPI_H2_FLOW$> = ((RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MAX$> - RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MIN$> RDSLayerRec<RDS_LAYER_EPI_H2_FLOW$> = ((RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MAX$> - RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MIN$>
end end
If RDSLayerRec<RDS_LAYER_TCS_FLOW_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_TCS_FLOW_MAX$> NE '' then If RDSLayerRec<RDS_LAYER_TCS_FLOW_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_TCS_FLOW_MAX$> NE '' then
//TCS Flow //TCS Flow
RDSLayerRec<RDS_LAYER_TCS_FLOW$> = ((RDSLayerRec<RDS_LAYER_TCS_FLOW_MAX$> - RDSLayerRec<RDS_LAYER_TCS_FLOW_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_TCS_FLOW_MIN$> RDSLayerRec<RDS_LAYER_TCS_FLOW$> = ((RDSLayerRec<RDS_LAYER_TCS_FLOW_MAX$> - RDSLayerRec<RDS_LAYER_TCS_FLOW_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_TCS_FLOW_MIN$>
end end
If RDSLayerRec<RDS_LAYER_DCS_FLOW_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_DCS_FLOW_MAX$> NE '' then If RDSLayerRec<RDS_LAYER_DCS_FLOW_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_DCS_FLOW_MAX$> NE '' then
//DCS Flow //DCS Flow
RDSLayerRec<RDS_LAYER_DCS_FLOW$> = ((RDSLayerRec<RDS_LAYER_DCS_FLOW_MAX$> - RDSLayerRec<RDS_LAYER_DCS_FLOW_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_DCS_FLOW_MIN$> RDSLayerRec<RDS_LAYER_DCS_FLOW$> = ((RDSLayerRec<RDS_LAYER_DCS_FLOW_MAX$> - RDSLayerRec<RDS_LAYER_DCS_FLOW_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_DCS_FLOW_MIN$>
end end
If RDSLayerRec<RDS_LAYER_AUX1_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_AUX1_MAX$> NE '' then If RDSLayerRec<RDS_LAYER_AUX1_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_AUX1_MAX$> NE '' then
//AUX 1 //AUX 1
RDSLayerRec<RDS_LAYER_AUX1$> = ((RDSLayerRec<RDS_LAYER_AUX1_MAX$> - RDSLayerRec<RDS_LAYER_AUX1_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_AUX1_MIN$> RDSLayerRec<RDS_LAYER_AUX1$> = ((RDSLayerRec<RDS_LAYER_AUX1_MAX$> - RDSLayerRec<RDS_LAYER_AUX1_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_AUX1_MIN$>
end end
If RDSLayerRec<RDS_LAYER_AUX2_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_AUX2_MAX$> NE '' then If RDSLayerRec<RDS_LAYER_AUX2_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_AUX2_MAX$> NE '' then
//AUX2 //AUX2
RDSLayerRec<RDS_LAYER_AUX2$> = ((RDSLayerRec<RDS_LAYER_AUX2_MAX$> - RDSLayerRec<RDS_LAYER_AUX2_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_AUX2_MIN$> RDSLayerRec<RDS_LAYER_AUX2$> = ((RDSLayerRec<RDS_LAYER_AUX2_MAX$> - RDSLayerRec<RDS_LAYER_AUX2_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_AUX2_MIN$>
end end
If RDSLayerRec<RDS_LAYER_F_OFFSET_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_F_OFFSET_MAX$> NE '' then If RDSLayerRec<RDS_LAYER_F_OFFSET_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_F_OFFSET_MAX$> NE '' then
//F_OFFSET //F_OFFSET
RDSLayerRec<RDS_LAYER_F_OFFSET$> = ((RDSLayerRec<RDS_LAYER_F_OFFSET_MAX$> - RDSLayerRec<RDS_LAYER_F_OFFSET_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_F_OFFSET_MIN$> RDSLayerRec<RDS_LAYER_F_OFFSET$> = ((RDSLayerRec<RDS_LAYER_F_OFFSET_MAX$> - RDSLayerRec<RDS_LAYER_F_OFFSET_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_F_OFFSET_MIN$>
end end
If RDSLayerRec<RDS_LAYER_S_OFFSET_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_S_OFFSET_MAX$> NE '' then If RDSLayerRec<RDS_LAYER_S_OFFSET_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_S_OFFSET_MAX$> NE '' then
//S_OFFSET //S_OFFSET
RDSLayerRec<RDS_LAYER_S_OFFSET$> = ((RDSLayerRec<RDS_LAYER_S_OFFSET_MAX$> - RDSLayerRec<RDS_LAYER_S_OFFSET_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_S_OFFSET_MIN$> RDSLayerRec<RDS_LAYER_S_OFFSET$> = ((RDSLayerRec<RDS_LAYER_S_OFFSET_MAX$> - RDSLayerRec<RDS_LAYER_S_OFFSET_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_S_OFFSET_MIN$>
end end
If RDSLayerRec<RDS_LAYER_R_OFFSET_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_R_OFFSET_MAX$> NE '' then If RDSLayerRec<RDS_LAYER_R_OFFSET_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_R_OFFSET_MAX$> NE '' then
//R OFFSET //R OFFSET
RDSLayerRec<RDS_LAYER_R_OFFSET$> = ((RDSLayerRec<RDS_LAYER_R_OFFSET_MAX$> - RDSLayerRec<RDS_LAYER_R_OFFSET_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_R_OFFSET_MIN$> RDSLayerRec<RDS_LAYER_R_OFFSET$> = ((RDSLayerRec<RDS_LAYER_R_OFFSET_MAX$> - RDSLayerRec<RDS_LAYER_R_OFFSET_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_R_OFFSET_MIN$>
end end
If RDSLayerRec<RDS_LAYER_ETCH1_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_ETCH1_MAX$> NE '' then If RDSLayerRec<RDS_LAYER_ETCH1_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_ETCH1_MAX$> NE '' then
//ETCH 1 //ETCH 1
RDSLayerRec<RDS_LAYER_ETCH1$> = ((RDSLayerRec<RDS_LAYER_ETCH1_MAX$> - RDSLayerRec<RDS_LAYER_ETCH1_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_ETCH1_MIN$> RDSLayerRec<RDS_LAYER_ETCH1$> = ((RDSLayerRec<RDS_LAYER_ETCH1_MAX$> - RDSLayerRec<RDS_LAYER_ETCH1_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_ETCH1_MIN$>
end end
If RDSLayerRec<RDS_LAYER_ETCH2_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_ETCH2_MAX$> NE '' then If RDSLayerRec<RDS_LAYER_ETCH2_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_ETCH2_MAX$> NE '' then
//ETCH 2 //ETCH 2
RDSLayerRec<RDS_LAYER_ETCH2$> = ((RDSLayerRec<RDS_LAYER_ETCH2_MAX$> - RDSLayerRec<RDS_LAYER_ETCH2_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_ETCH2_MIN$> RDSLayerRec<RDS_LAYER_ETCH2$> = ((RDSLayerRec<RDS_LAYER_ETCH2_MAX$> - RDSLayerRec<RDS_LAYER_ETCH2_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_ETCH2_MIN$>
end end
If RDSLayerRec<RDS_LAYER_ETCH3_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_ETCH3_MAX$> NE '' then If RDSLayerRec<RDS_LAYER_ETCH3_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_ETCH3_MAX$> NE '' then
//ETCH 3 //ETCH 3
RDSLayerRec<RDS_LAYER_ETCH3$> = ((RDSLayerRec<RDS_LAYER_ETCH3_MAX$> - RDSLayerRec<RDS_LAYER_ETCH3_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_ETCH3_MIN$> RDSLayerRec<RDS_LAYER_ETCH3$> = ((RDSLayerRec<RDS_LAYER_ETCH3_MAX$> - RDSLayerRec<RDS_LAYER_ETCH3_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_ETCH3_MIN$>
end end
If RDSLayerRec<RDS_LAYER_UL_TEMP_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_UL_TEMP_MAX$> NE '' then If RDSLayerRec<RDS_LAYER_UL_TEMP_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_UL_TEMP_MAX$> NE '' then
//UL_TEMP //UL_TEMP
RDSLayerRec<RDS_LAYER_UL_TEMP$> = ((RDSLayerRec<RDS_LAYER_UL_TEMP_MAX$> - RDSLayerRec<RDS_LAYER_UL_TEMP_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_UL_TEMP_MIN$> RDSLayerRec<RDS_LAYER_UL_TEMP$> = ((RDSLayerRec<RDS_LAYER_UL_TEMP_MAX$> - RDSLayerRec<RDS_LAYER_UL_TEMP_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_UL_TEMP_MIN$>
end end
If RDSLayerRec<RDS_LAYER_SUSC_ETCH_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_SUSC_ETCH_MAX$> NE '' then If RDSLayerRec<RDS_LAYER_SUSC_ETCH_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_SUSC_ETCH_MAX$> NE '' then
//Susceptor Etch //Susceptor Etch
RDSLayerRec<RDS_LAYER_SUSC_ETCH$> = ((RDSLayerRec<RDS_LAYER_SUSC_ETCH_MAX$> - RDSLayerRec<RDS_LAYER_SUSC_ETCH_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_SUSC_ETCH_MIN$> RDSLayerRec<RDS_LAYER_SUSC_ETCH$> = ((RDSLayerRec<RDS_LAYER_SUSC_ETCH_MAX$> - RDSLayerRec<RDS_LAYER_SUSC_ETCH_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_SUSC_ETCH_MIN$>
end end
Database_Services('WriteDataRow', 'RDS_LAYER', RDSLayerKey, RDSLayerRec, True$, False$, True$) Database_Services('WriteDataRow', 'RDS_LAYER', RDSLayerKey, RDSLayerRec, True$, False$, True$)
end end
end service end service
Service VerifyRecipeParams(RDSNo) Service VerifyRecipeParams(RDSNo)
//Used to verify exisiting recipe params. This is if they are already set. //Used to verify exisiting recipe params. This is if they are already set.
IF RDSNo NE '' then IF RDSNo NE '' then
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
RDSRec<RDS_RDS_LAYER_ACK$> = True$ RDSRec<RDS_RDS_LAYER_ACK$> = True$
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$) Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
end else end else
Error_Services('Add', 'RDS No was blank!!!') Error_Services('Add', 'RDS No was blank!!!')
end end
end service end service
Service SendCassComp(WoMatKey) Service SendCassComp(WoMatKey)
Sap_Services('RetransmitCassComp', WoMatKey) Sap_Services('RetransmitCassComp', WoMatKey)
obj_sap('SendOutbound') obj_sap('SendOutbound')
end service end service

View File

@ -1,139 +1,139 @@
Function Changelog_API(@API) Function Changelog_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 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. permission from SRP Computer Solutions, Inc.
Name : Changelog_API Name : Changelog_API
Description : API logic for the Changelog resource. Description : API logic for the Changelog resource.
Notes : All web APIs should include the API_SETUP insert. This will provide several useful variables: 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.) 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). APIURL - The URL for the API entry point (e.g., api.mysite.com/v1).
FullEndpointURL - The URL submitted by the client, including query params. FullEndpointURL - The URL submitted by the client, including query params.
FullEndpointURLNoQuery - The URL submitted by the client, excluding query params. FullEndpointURLNoQuery - The URL submitted by the client, excluding query params.
EndpointSegment - The URL endpoint segment. EndpointSegment - The URL endpoint segment.
ParentURL - The URL path preceeding the current endpoint. ParentURL - The URL path preceeding the current endpoint.
CurrentAPI - The name of this stored procedure. CurrentAPI - The name of this stored procedure.
Parameters : Parameters :
API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]: API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
- APIPattern must follow this structure Changelog[.ID.[<Property>]] - APIPattern must follow this structure Changelog[.ID.[<Property>]]
- HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc. - HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
Examples: Examples:
- Changelog.POST - Changelog.POST
- Changelog.ID.PUT - Changelog.ID.PUT
- Changelog.ID.firstName.GET - Changelog.ID.firstName.GET
Response [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API 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 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 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. value is only helpful if the developers want to use it for debug purposes.
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
07/24/24 xxx Original programmer. 07/24/24 xxx Original programmer.
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
Declare function Datetime, SRP_Datetime, Change_Log_Services, Environment_Services, Logging_Services Declare function Datetime, SRP_Datetime, Change_Log_Services, Environment_Services, Logging_Services
Declare subroutine Logging_Services Declare subroutine Logging_Services
$insert APP_INSERTS $insert APP_INSERTS
$insert API_SETUP $insert API_SETUP
$insert HTTP_INSERTS $insert HTTP_INSERTS
EQU Comma$ to ',' EQU Comma$ to ','
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\API\Admin\ChangeLog' LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\API\Admin\ChangeLog'
LogDate = Oconv(Date(), 'D4/') LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS') LogTime = Oconv(Time(), 'MTS')
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ChangeLogArchiveService.csv' LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ChangeLogArchiveService.csv'
Headers = 'Logging DTM' : @FM : 'From IP Address' : @FM : 'Message' Headers = 'Logging DTM' : @FM : 'From IP Address' : @FM : 'Message'
objLogChangeLogAPI = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$) objLogChangeLogAPI = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
RequesterIPAddr = HTTP_Services('GetHTTPRemoteAddr') RequesterIPAddr = HTTP_Services('GetHTTPRemoteAddr')
GoToAPI else GoToAPI else
// The specific resource endpoint doesn't have a API handler yet. // The specific resource endpoint doesn't have a API handler yet.
HTTP_Services('SetResponseStatus', 200, 'This is a valid endpoint but a web API handler has not yet been created.') HTTP_Services('SetResponseStatus', 200, 'This is a valid endpoint but a web API handler has not yet been created.')
end end
Return Response OR '' Return Response OR ''
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Endpoint Handlers // Endpoint Handlers
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
API changelog.HEAD API changelog.HEAD
API changelog.GET API changelog.GET
StartDtm = Http_Services('GetQueryField', 'FromDatetime') StartDtm = Http_Services('GetQueryField', 'FromDatetime')
ToDtm = Http_Services('GetQueryField', 'ToDatetime') ToDtm = Http_Services('GetQueryField', 'ToDatetime')
StartDtm = IConv(StartDtm, 'DT') StartDtm = IConv(StartDtm, 'DT')
ToDtm = IConv(ToDtm, 'DT') ToDtm = IConv(ToDtm, 'DT')
If StartDtm EQ '' then If StartDtm EQ '' then
StartDtm = SRP_Datetime('AddDays', Datetime(), -60) StartDtm = SRP_Datetime('AddDays', Datetime(), -60)
end end
If ToDtm EQ '' then If ToDtm EQ '' then
ToDtm = Datetime() ToDtm = Datetime()
end end
EntityName = Http_Services('GetQueryField', 'EntityName') EntityName = Http_Services('GetQueryField', 'EntityName')
UserId = Http_Services('GetQueryField', 'UserID') UserId = Http_Services('GetQueryField', 'UserID')
ChangeLogIDs = Change_Log_Services('GetChangeLogRecIDs', EntityName, StartDtm, ToDtm, UserId) ChangeLogIDs = Change_Log_Services('GetChangeLogRecIDs', EntityName, StartDtm, ToDtm, UserId)
If Error_Services('NoError') then If Error_Services('NoError') then
GoSub CreateHALCollection GoSub CreateHALCollection
end else end else
ErrorMsg = Error_Services('GetMessage') ErrorMsg = Error_Services('GetMessage')
LogData = '' LogData = ''
LogData<1> = LoggingDTM LogData<1> = LoggingDTM
LogData<2> = RequesterIPAddr LogData<2> = RequesterIPAddr
LogData<3> = ErrorMsg LogData<3> = ErrorMsg
Logging_Services('AppendLog', objLogChangeLogAPI, LogData, @RM, @FM) Logging_Services('AppendLog', objLogChangeLogAPI, LogData, @RM, @FM)
HTTP_Services('SetResponseStatus', 500, 'Error Getting change log records from change_log table.') HTTP_Services('SetResponseStatus', 500, 'Error Getting change log records from change_log table.')
end end
end api end api
CreateHALCollection: CreateHALCollection:
hJsonCollection = '' hJsonCollection = ''
hChangeLogArray = '' hChangeLogArray = ''
hChangeLogObj = '' hChangeLogObj = ''
hChangeLog = '' hChangeLog = ''
hChangeLogJson = '' hChangeLogJson = ''
Abort = False$ Abort = False$
If SRP_JSON(hJSONCollection, 'New', 'Object') then If SRP_JSON(hJSONCollection, 'New', 'Object') then
If SRP_JSON(hChangeLogArray, 'New', 'Array') then If SRP_JSON(hChangeLogArray, 'New', 'Array') then
For each ChangeLogID in ChangeLogIDs using @VM setting fPos For each ChangeLogID in ChangeLogIDs using @VM setting fPos
//rdsJSON = Rds_Services('ConvertRecordToJSON', rds, '' ,FullEndpointURL:'/':rds) //rdsJSON = Rds_Services('ConvertRecordToJSON', rds, '' ,FullEndpointURL:'/':rds)
ChangeLogJson = Change_Log_Services('ConvertRecordToJSON', ChangeLogID) ChangeLogJson = Change_Log_Services('ConvertRecordToJSON', ChangeLogID)
If Error_Services('NoError') then If Error_Services('NoError') then
If (SRP_JSON(hChangeLog, 'Parse', ChangeLogJson) EQ '') then If (SRP_JSON(hChangeLog, 'Parse', ChangeLogJson) EQ '') then
SRP_JSON(hChangeLogArray, 'Add', hChangeLog) SRP_JSON(hChangeLogArray, 'Add', hChangeLog)
SRP_JSON(hChangeLog, 'Release') SRP_JSON(hChangeLog, 'Release')
end end
end else end else
Abort = True$ Abort = True$
end end
Until Abort Until Abort
Next rds Next rds
If Abort EQ False$ then If Abort EQ False$ then
SRP_JSON(hJSONCollection, 'Set', 'ChangeLogRecords', hChangeLogArray) SRP_JSON(hJSONCollection, 'Set', 'ChangeLogRecords', hChangeLogArray)
end end
SRP_JSON(hChangeLogArray, 'Release') SRP_JSON(hChangeLogArray, 'Release')
end end
JSONCollection = SRP_JSON(hJSONCollection, 'Stringify', 'Styled') JSONCollection = SRP_JSON(hJSONCollection, 'Stringify', 'Styled')
SRP_JSON(hJSONCollection, 'Release') SRP_JSON(hJSONCollection, 'Release')
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL) HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
HTTP_Services('SetResponseBody', JSONCollection, False$, 'application/hal+json') HTTP_Services('SetResponseBody', JSONCollection, False$, 'application/hal+json')
HTTP_Services('SetResponseStatus', 200) HTTP_Services('SetResponseStatus', 200)
end end
return return

View File

@ -1,140 +1,140 @@
Function Dakota_Test_Events(CtrlEntId, Event, @PARAMS) Function Dakota_Test_Events(CtrlEntId, Event, @PARAMS)
/*********************************************************************************************************************** /***********************************************************************************************************************
This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written 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. permission from Infineon.
Name : NDW_Main_Events Name : NDW_Main_Events
Description : This function acts as a commuter module for all events related to this window. 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 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 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 execute Basic+ logic without having use the Form Designer to make the association, although this is
limited to the events which are currently promoted. limited to the events which are currently promoted.
If the form needs to call the commuter module directly then the QuickEvent parameters should be If the form needs to call the commuter module directly then the QuickEvent parameters should be
formatted like this: formatted like this:
'@SELF','@EVENT',['@PARAM1','@PARAMx'] '@SELF','@EVENT',['@PARAM1','@PARAMx']
Parameters : Parameters :
CtrlEntId [in] -- The fully qualified name of the control calling the promoted event 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 Event [in] -- The event being executed. See the Notes section regarding "PRE" events
Param1-15 [in] -- Additional event parameter holders 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 EventFlow [out] -- Set to 1 or 0 so the calling event knows whether or not to chain forward. See comments in
EVENT_SETUP insert EVENT_SETUP insert
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
05/08/18 dmb Created initial commuter module. 05/08/18 dmb Created initial commuter module.
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
#Window DAKOTA_TEST #Window DAKOTA_TEST
$insert APP_INSERTS $insert APP_INSERTS
$insert EVENT_SETUP $insert EVENT_SETUP
SubclassInfo = Form_Services('FindSubclassControl') SubclassInfo = Form_Services('FindSubclassControl')
Subclass = SubclassInfo<1> Subclass = SubclassInfo<1>
// 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
Transfer Event to OIEvent Transfer Event to OIEvent
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
Return EventFlow else EVENT_CONTINUE$ Return EventFlow else EVENT_CONTINUE$
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Events // Events
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Event WINDOW.CREATE(CreateParam) Event WINDOW.CREATE(CreateParam)
Gosub Setup_OLE_Controls Gosub Setup_OLE_Controls
end event end event
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs // Internal GoSubs
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Setup_OLE_Controls: Setup_OLE_Controls:
Qualify = '' Qualify = ''
Qualify<1> = 1 Qualify<1> = 1
Qualify<4> = 0 Qualify<4> = 0
FontArray = '' FontArray = ''
ColorFill = '' ColorFill = ''
FontArray<1, 1, 2> = 11 FontArray<1, 1, 2> = 11
Send_Message(@Window : '.OLE_WIP_STATUS', 'QUALIFY_EVENT', 'OLE.OnClick', Qualify) Send_Message(@Window : '.OLE_WIP_STATUS', 'QUALIFY_EVENT', 'OLE.OnClick', Qualify)
Set_Property(@Window:".OLE_WIP_STATUS", "OLE.Font", FontArray) Set_Property(@Window:".OLE_WIP_STATUS", "OLE.Font", FontArray)
ColorFill<1> = "White" ColorFill<1> = "White"
ColorFill<2> = "White" ColorFill<2> = "White"
ColorFill<3> = "White" ColorFill<3> = "White"
ColorFill<5> = "White" ColorFill<5> = "White"
Set_Property(@Window:".OLE_WIP_STATUS", "OLE.ForeColor", ColorFill) Set_Property(@Window:".OLE_WIP_STATUS", "OLE.ForeColor", ColorFill)
ColorFill = '' ColorFill = ''
ColorFill<1> = "Vertical(Gradient(RGB(10, 130, 118), (10, 130, 118)),Border(RGB(10, 130, 118)),Rounded(1))" ColorFill<1> = "Vertical(Gradient(RGB(10, 130, 118), (10, 130, 118)),Border(RGB(10, 130, 118)),Rounded(1))"
ColorFill<2> = "Vertical(Gradient(RGB(10, 130, 118) L=40, RGB(10, 130, 118) L=40), Border(RGB(10, 130, 118)),Rounded(1))" ColorFill<2> = "Vertical(Gradient(RGB(10, 130, 118) L=40, RGB(10, 130, 118) L=40), Border(RGB(10, 130, 118)),Rounded(1))"
ColorFill<3> = "Vertical(Gradient(RGB(10, 130, 118) L=20, RGB(10, 130, 118) L=20), Border(RGB(10, 130, 118)),Rounded(1))" ColorFill<3> = "Vertical(Gradient(RGB(10, 130, 118) L=20, RGB(10, 130, 118) L=20), Border(RGB(10, 130, 118)),Rounded(1))"
ColorFill<5> = "Vertical(Gradient(RGB(10, 130, 118), (10, 130, 118)),Border(RGB(10, 130, 118)),Rounded(1))" ColorFill<5> = "Vertical(Gradient(RGB(10, 130, 118), (10, 130, 118)),Border(RGB(10, 130, 118)),Rounded(1))"
Set_Property(@Window : '.OLE_WIP_STATUS', "OLE.Background", ColorFill) Set_Property(@Window : '.OLE_WIP_STATUS', "OLE.Background", ColorFill)
Set_Property(@Window:".OLE_WIP_STATUS", "OLE.Caption", "WIP Status") Set_Property(@Window:".OLE_WIP_STATUS", "OLE.Caption", "WIP Status")
ColorFill = '' ColorFill = ''
Send_Message(@Window : '.OLE_RDS', 'QUALIFY_EVENT', 'OLE.OnClick', Qualify) Send_Message(@Window : '.OLE_RDS', 'QUALIFY_EVENT', 'OLE.OnClick', Qualify)
Set_Property(@Window:".OLE_RDS", "OLE.Font", FontArray) Set_Property(@Window:".OLE_RDS", "OLE.Font", FontArray)
ColorFill<1> = "White" ColorFill<1> = "White"
ColorFill<2> = "White" ColorFill<2> = "White"
ColorFill<3> = "White" ColorFill<3> = "White"
ColorFill<5> = "White" ColorFill<5> = "White"
Set_Property(@Window:".OLE_RDS", "OLE.ForeColor", ColorFill) Set_Property(@Window:".OLE_RDS", "OLE.ForeColor", ColorFill)
ColorFill = '' ColorFill = ''
ColorFill<1> = "Vertical(Gradient(RGB(10, 130, 118), (10, 130, 118)),Border(RGB(10, 130, 118)),Rounded(1))" ColorFill<1> = "Vertical(Gradient(RGB(10, 130, 118), (10, 130, 118)),Border(RGB(10, 130, 118)),Rounded(1))"
ColorFill<2> = "Vertical(Gradient(RGB(10, 130, 118) L=40, RGB(10, 130, 118) L=40), Border(RGB(10, 130, 118)),Rounded(1))" ColorFill<2> = "Vertical(Gradient(RGB(10, 130, 118) L=40, RGB(10, 130, 118) L=40), Border(RGB(10, 130, 118)),Rounded(1))"
ColorFill<3> = "Vertical(Gradient(RGB(10, 130, 118) L=20, RGB(10, 130, 118) L=20), Border(RGB(10, 130, 118)),Rounded(1))" ColorFill<3> = "Vertical(Gradient(RGB(10, 130, 118) L=20, RGB(10, 130, 118) L=20), Border(RGB(10, 130, 118)),Rounded(1))"
ColorFill<5> = "Vertical(Gradient(RGB(10, 130, 118), (10, 130, 118)),Border(RGB(10, 130, 118)),Rounded(1))" ColorFill<5> = "Vertical(Gradient(RGB(10, 130, 118), (10, 130, 118)),Border(RGB(10, 130, 118)),Rounded(1))"
Set_Property(@Window : '.OLE_RDS', "OLE.Background", ColorFill) Set_Property(@Window : '.OLE_RDS', "OLE.Background", ColorFill)
Set_Property(@Window:".OLE_RDS", "OLE.Caption", "RDS") Set_Property(@Window:".OLE_RDS", "OLE.Caption", "RDS")
ColorFill = '' ColorFill = ''
Send_Message(@Window : '.OLE_WM_OUT', 'QUALIFY_EVENT', 'OLE.OnClick', Qualify) Send_Message(@Window : '.OLE_WM_OUT', 'QUALIFY_EVENT', 'OLE.OnClick', Qualify)
Set_Property(@Window:".OLE_WM_OUT", "OLE.Font", FontArray) Set_Property(@Window:".OLE_WM_OUT", "OLE.Font", FontArray)
ColorFill<1> = "White" ColorFill<1> = "White"
ColorFill<2> = "White" ColorFill<2> = "White"
ColorFill<3> = "White" ColorFill<3> = "White"
ColorFill<5> = "White" ColorFill<5> = "White"
Set_Property(@Window:".OLE_WM_OUT", "OLE.ForeColor", ColorFill) Set_Property(@Window:".OLE_WM_OUT", "OLE.ForeColor", ColorFill)
ColorFill = '' ColorFill = ''
ColorFill<1> = "Vertical(Gradient(RGB(10, 130, 118), (10, 130, 118)),Border(RGB(10, 130, 118)),Rounded(1))" ColorFill<1> = "Vertical(Gradient(RGB(10, 130, 118), (10, 130, 118)),Border(RGB(10, 130, 118)),Rounded(1))"
ColorFill<2> = "Vertical(Gradient(RGB(10, 130, 118) L=40, RGB(10, 130, 118) L=40), Border(RGB(10, 130, 118)),Rounded(1))" ColorFill<2> = "Vertical(Gradient(RGB(10, 130, 118) L=40, RGB(10, 130, 118) L=40), Border(RGB(10, 130, 118)),Rounded(1))"
ColorFill<3> = "Vertical(Gradient(RGB(10, 130, 118) L=20, RGB(10, 130, 118) L=20), Border(RGB(10, 130, 118)),Rounded(1))" ColorFill<3> = "Vertical(Gradient(RGB(10, 130, 118) L=20, RGB(10, 130, 118) L=20), Border(RGB(10, 130, 118)),Rounded(1))"
ColorFill<5> = "Vertical(Gradient(RGB(10, 130, 118), (10, 130, 118)),Border(RGB(10, 130, 118)),Rounded(1))" ColorFill<5> = "Vertical(Gradient(RGB(10, 130, 118), (10, 130, 118)),Border(RGB(10, 130, 118)),Rounded(1))"
Set_Property(@Window : '.OLE_WM_OUT', "OLE.Background", ColorFill) Set_Property(@Window : '.OLE_WM_OUT', "OLE.Background", ColorFill)
Set_Property(@Window:".OLE_WM_OUT", "OLE.Caption", "WM Out") Set_Property(@Window:".OLE_WM_OUT", "OLE.Caption", "WM Out")
return return

View File

@ -258,6 +258,7 @@ RETURN
TxShipments: TxShipments:
* * * * * * * * * * * * * *
CtrlEntID = @WINDOW:'.TX_SHIP' CtrlEntID = @WINDOW:'.TX_SHIP'
ShipNos = Get_Property(@WINDOW:'.TX_SHIP','DEFPROP')<COL$SHIP_NO> ShipNos = Get_Property(@WINDOW:'.TX_SHIP','DEFPROP')<COL$SHIP_NO>

View File

@ -1,97 +1,97 @@
Function Engineinfo_API(@API) Function Engineinfo_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 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. permission from SRP Computer Solutions, Inc.
Name : Engineinfo_API Name : Engineinfo_API
Description : API logic for the Engineinfo resource. Description : API logic for the Engineinfo resource.
Notes : All web APIs should include the API_SETUP insert. This will provide several useful variables: 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.) 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). APIURL - The URL for the API entry point (e.g., api.mysite.com/v1).
FullEndpointURL - The URL submitted by the client, including query params. FullEndpointURL - The URL submitted by the client, including query params.
FullEndpointURLNoQuery - The URL submitted by the client, excluding query params. FullEndpointURLNoQuery - The URL submitted by the client, excluding query params.
EndpointSegment - The URL endpoint segment. EndpointSegment - The URL endpoint segment.
ParentURL - The URL path preceeding the current endpoint. ParentURL - The URL path preceeding the current endpoint.
CurrentAPI - The name of this stored procedure. CurrentAPI - The name of this stored procedure.
Parameters : Parameters :
API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]: API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
- APIPattern must follow this structure Engineinfo[.ID.[<Property>]] - APIPattern must follow this structure Engineinfo[.ID.[<Property>]]
- HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc. - HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
Examples: Examples:
- Engineinfo.POST - Engineinfo.POST
- Engineinfo.ID.PUT - Engineinfo.ID.PUT
- Engineinfo.ID.firstName.GET - Engineinfo.ID.firstName.GET
Response [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API 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 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 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. value is only helpful if the developers want to use it for debug purposes.
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
07/17/24 xxx Original programmer. 07/17/24 xxx Original programmer.
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$insert APP_INSERTS $insert APP_INSERTS
$insert API_SETUP $insert API_SETUP
$insert HTTP_INSERTS $insert HTTP_INSERTS
$insert ENGINE_HEALTH_EQUATES $insert ENGINE_HEALTH_EQUATES
Declare function System_Healthcheck_Services Declare function System_Healthcheck_Services
GoToAPI else GoToAPI else
// The specific resource endpoint doesn't have a API handler yet. // The specific resource endpoint doesn't have a API handler yet.
HTTP_Services('SetResponseStatus', 200, 'This is a valid endpoint but a web API handler has not yet been created.') HTTP_Services('SetResponseStatus', 200, 'This is a valid endpoint but a web API handler has not yet been created.')
end end
Return Response OR '' Return Response OR ''
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Endpoint Handlers // Endpoint Handlers
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
API remotehealthcheck.HEAD API remotehealthcheck.HEAD
API remotehealthcheck.GET API remotehealthcheck.GET
HTTP_Resource_Services('LoremIpsum') HTTP_Resource_Services('LoremIpsum')
end api end api
API engineinfo.HEAD API engineinfo.HEAD
API engineinfo.GET API engineinfo.GET
HTTP_Resource_Services('LoremIpsum') HTTP_Resource_Services('LoremIpsum')
end api end api
API engineinfo.ID.HEAD API engineinfo.ID.HEAD
API engineinfo.ID.GET API engineinfo.ID.GET
EngineID = EndpointSegment EngineID = EndpointSegment
If RowExists('APP_INFO', EngineID) then If RowExists('APP_INFO', EngineID) then
EngineHealthInfo = System_Healthcheck_Services('GetEngineHealthInfo', EngineID) EngineHealthInfo = System_Healthcheck_Services('GetEngineHealthInfo', EngineID)
If Error_Services('NoError') then If Error_Services('NoError') then
EngineJSON = System_Healthcheck_Services('ConvertEngineHealthInfoToJSON', EngineHealthInfo, FullEndpointURL) EngineJSON = System_Healthcheck_Services('ConvertEngineHealthInfoToJSON', EngineHealthInfo, FullEndpointURL)
ResponseCode = 200 ResponseCode = 200
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL) HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
HTTP_Services('SetResponseBody', EngineJSON, False$, 'application/hal+json') HTTP_Services('SetResponseBody', EngineJSON, False$, 'application/hal+json')
HTTP_Services('SetResponseStatus', ResponseCode) HTTP_Services('SetResponseStatus', ResponseCode)
end else end else
HTTP_Services('SetResponseStatus', 500, Error_Services('GetMessage')) HTTP_Services('SetResponseStatus', 500, Error_Services('GetMessage'))
end end
end else end else
HTTP_Services('SetResponseStatus', 401, 'Invalid Engine ID.') HTTP_Services('SetResponseStatus', 401, 'Invalid Engine ID.')
end end
end api end api

View File

@ -1,72 +1,72 @@
Function Healthinfo_API(@API) Function Healthinfo_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 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. permission from SRP Computer Solutions, Inc.
Name : Healthinfo_API Name : Healthinfo_API
Description : API logic for the Healthinfo resource. Description : API logic for the Healthinfo resource.
Notes : All web APIs should include the API_SETUP insert. This will provide several useful variables: 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.) 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). APIURL - The URL for the API entry point (e.g., api.mysite.com/v1).
FullEndpointURL - The URL submitted by the client, including query params. FullEndpointURL - The URL submitted by the client, including query params.
FullEndpointURLNoQuery - The URL submitted by the client, excluding query params. FullEndpointURLNoQuery - The URL submitted by the client, excluding query params.
EndpointSegment - The URL endpoint segment. EndpointSegment - The URL endpoint segment.
ParentURL - The URL path preceeding the current endpoint. ParentURL - The URL path preceeding the current endpoint.
CurrentAPI - The name of this stored procedure. CurrentAPI - The name of this stored procedure.
Parameters : Parameters :
API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]: API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
- APIPattern must follow this structure Healthinfo[.ID.[<Property>]] - APIPattern must follow this structure Healthinfo[.ID.[<Property>]]
- HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc. - HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
Examples: Examples:
- Healthinfo.POST - Healthinfo.POST
- Healthinfo.ID.PUT - Healthinfo.ID.PUT
- Healthinfo.ID.firstName.GET - Healthinfo.ID.firstName.GET
Response [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API 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 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 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. value is only helpful if the developers want to use it for debug purposes.
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
07/17/24 xxx Original programmer. 07/17/24 xxx Original programmer.
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$insert APP_INSERTS $insert APP_INSERTS
$insert API_SETUP $insert API_SETUP
$insert HTTP_INSERTS $insert HTTP_INSERTS
GoToAPI else GoToAPI else
// The specific resource endpoint doesn't have a API handler yet. // The specific resource endpoint doesn't have a API handler yet.
HTTP_Services('SetResponseStatus', 200, 'This is a valid endpoint but a web API handler has not yet been created.') HTTP_Services('SetResponseStatus', 200, 'This is a valid endpoint but a web API handler has not yet been created.')
end end
Return Response OR '' Return Response OR ''
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Endpoint Handlers // Endpoint Handlers
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
API remotehealthcheck.HEAD API remotehealthcheck.HEAD
API remotehealthcheck.GET API remotehealthcheck.GET
HTTP_Resource_Services('LoremIpsum') HTTP_Resource_Services('LoremIpsum')
end api end api
API healthinfo.HEAD API healthinfo.HEAD
API healthinfo.GET API healthinfo.GET
HTTP_Resource_Services('LoremIpsum') HTTP_Resource_Services('LoremIpsum')
end api end api

View File

@ -39,6 +39,27 @@ Return Response or ""
// SERVICES // SERVICES
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Service UpdateYesterdayAvail()
Today = 20702
DataArray = ''
//ASM Reactors
ASMRecordKey = 'ASM*': Today
ASMUptimeRec = Reactor_Services('GetReactorUptimeMetricsByTypeAndTimeSpan', Today, Today + 1, 'ASM')
Database_Services('WriteDataRow', 'REACTOR_DAILY_UPTIME', ASMRecordKey, ASMUptimeRec, True$, False$, True$)
//HTR Reactors
HTRRecordKey = 'HTR*': Today
HTRUptimeRec = Reactor_Services('GetReactorUptimeMetricsByTypeAndTimeSpan', Today, Today + 1, 'HTR')
Database_Services('WriteDataRow', 'REACTOR_DAILY_UPTIME', HTRRecordKey, HTRUptimeRec, True$, False$, True$)
//EPP Reactors
EPPRecordKey = 'EPP*': Today
EPPUptimeRec = Reactor_Services('GetReactorUptimeMetricsByTypeAndTimeSpan', Today, Today + 1, 'EPP')
Database_Services('WriteDataRow', 'REACTOR_DAILY_UPTIME', EPPRecordKey, EPPUptimeRec, True$, False$, True$)
//All Reactors
ALLRecordKey = 'ALL*': Today
ALLUptimeRec = Reactor_Services('GetReactorUptimeMetricsByTypeAndTimeSpan', Today, Today + 1, 'ALL')
Database_Services('WriteDataRow', 'REACTOR_DAILY_UPTIME', ALLRecordKey, ALLUptimeRec, True$, False$, True$)
end service
Service GetReactorNumbersByType() Service GetReactorNumbersByType()
Debug Debug
test = Reactor_Services('GetReactorNumbers', 'ASM') test = Reactor_Services('GetReactorNumbers', 'ASM')

View File

@ -1,167 +1,167 @@
Function Lock_API(@API) Function Lock_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 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. permission from SRP Computer Solutions, Inc.
Name : Lock_API Name : Lock_API
Description : API logic for the Lock resource. Description : API logic for the Lock resource.
Notes : All web APIs should include the API_SETUP insert. This will provide several useful variables: 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.) 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). APIURL - The URL for the API entry point (e.g., api.mysite.com/v1).
FullEndpointURL - The URL submitted by the client, including query params. FullEndpointURL - The URL submitted by the client, including query params.
FullEndpointURLNoQuery - The URL submitted by the client, excluding query params. FullEndpointURLNoQuery - The URL submitted by the client, excluding query params.
EndpointSegment - The URL endpoint segment. EndpointSegment - The URL endpoint segment.
ParentURL - The URL path preceeding the current endpoint. ParentURL - The URL path preceeding the current endpoint.
CurrentAPI - The name of this stored procedure. CurrentAPI - The name of this stored procedure.
Parameters : Parameters :
API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]: API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
- APIPattern must follow this structure Lock[.ID.[<Property>]] - APIPattern must follow this structure Lock[.ID.[<Property>]]
- HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc. - HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
Examples: Examples:
- Lock.POST - Lock.POST
- Lock.ID.PUT - Lock.ID.PUT
- Lock.ID.firstName.GET - Lock.ID.firstName.GET
Response [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API 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 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 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. value is only helpful if the developers want to use it for debug purposes.
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
03/14/24 djm Original programmer. 03/14/24 djm Original programmer.
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$insert APP_INSERTS $insert APP_INSERTS
$insert API_SETUP $insert API_SETUP
$insert HTTP_INSERTS $insert HTTP_INSERTS
Declare function Database_Services, Oi_Wizard_Services, Memberof, Lock_Services Declare function Database_Services, Oi_Wizard_Services, Memberof, Lock_Services
Declare subroutine Lock_Services Declare subroutine Lock_Services
GoToAPI else GoToAPI else
// The specific resource endpoint doesn't have a API handler yet. // 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.') HTTP_Services('SetResponseStatus', 204, 'This is a valid endpoint but a web API handler has not yet been created.')
end end
Return Response OR '' Return Response OR ''
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Endpoint Handlers // Endpoint Handlers
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
API Lock.HEAD API Lock.HEAD
// GET Method removed until RTI_LH_Info(CMD_LOCKS_INFO$, '') is fixed //////////////////////////////// // GET Method removed until RTI_LH_Info(CMD_LOCKS_INFO$, '') is fixed ////////////////////////////////
* API Lock.GET * API Lock.GET
* *
* OIWizardID = '' * OIWizardID = ''
* Cookies = HTTP_Services('GetHTTPCookie') * Cookies = HTTP_Services('GetHTTPCookie')
* For each Cookie in Cookies using ';' * For each Cookie in Cookies using ';'
* Key = Trim(Field(Cookie, '=', 1)) * Key = Trim(Field(Cookie, '=', 1))
* If Key EQ 'sessionID' then * If Key EQ 'sessionID' then
* OIWizardID = Field(Cookie, '=', 2) * OIWizardID = Field(Cookie, '=', 2)
* end * end
* If Key EQ 'userID' then * If Key EQ 'userID' then
* CurrUser = Field(Cookie, '=', 2) * CurrUser = Field(Cookie, '=', 2)
* end * end
* Next Cookie * Next Cookie
* *
* ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID) * ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
* *
* If ValidSession then * If ValidSession then
* *
* Allowed = Lock_Services("GetLockPermissions", CurrUser) * Allowed = Lock_Services("GetLockPermissions", CurrUser)
* *
* If Allowed NE FALSE$ then * If Allowed NE FALSE$ then
* *
* StatusCode = 200 * StatusCode = 200
* LockJSON = Lock_Services("GetAllowedLocks", CurrUser) * LockJSON = Lock_Services("GetAllowedLocks", CurrUser)
* *
* If Error_Services('NoError') then * If Error_Services('NoError') then
* HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL) * HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
* HTTP_Services('SetResponseBody', LockJSON, False$, 'application/hal+json') * HTTP_Services('SetResponseBody', LockJSON, False$, 'application/hal+json')
* If Assigned(Message) then * If Assigned(Message) then
* HTTP_Services('SetResponseStatus', StatusCode, Message) * HTTP_Services('SetResponseStatus', StatusCode, Message)
* end else * end else
* HTTP_Services('SetResponseStatus', StatusCode) * HTTP_Services('SetResponseStatus', StatusCode)
* end * end
* end else * end else
* Message = Error_Services('GetMessage') * Message = Error_Services('GetMessage')
* HTTP_Services('SetResponseStatus', 500, 'Error in the ' : CurrentAPI : ' API. Message: ': Message) * HTTP_Services('SetResponseStatus', 500, 'Error in the ' : CurrentAPI : ' API. Message: ': Message)
* end * end
* End Else * End Else
* HTTP_Services('SetResponseStatus', 403, 'User is not permitted to access this resource.') * HTTP_Services('SetResponseStatus', 403, 'User is not permitted to access this resource.')
* end * end
* End else * End else
* HTTP_Services('SetResponseStatus', 401, 'User must be signed in to access this resource.') * HTTP_Services('SetResponseStatus', 401, 'User must be signed in to access this resource.')
* end * end
* *
* end api * end api
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 ';'
Key = Trim(Field(Cookie, '=', 1)) Key = Trim(Field(Cookie, '=', 1))
If Key EQ 'sessionID' then If Key EQ 'sessionID' then
OIWizardID = Field(Cookie, '=', 2) OIWizardID = Field(Cookie, '=', 2)
end end
If Key EQ 'userID' then If Key EQ 'userID' then
CurrUser = Field(Cookie, '=', 2) CurrUser = Field(Cookie, '=', 2)
end end
Next Cookie Next Cookie
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID) ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
If ValidSession then If ValidSession then
Allowed = Lock_Services("GetLockPermissions", CurrUser) Allowed = Lock_Services("GetLockPermissions", CurrUser)
If Allowed NE FALSE$ then If Allowed NE FALSE$ then
StatusCode = '' StatusCode = ''
Body = HTTP_Services('GetHTTPPostString', True$) Body = HTTP_Services('GetHTTPPostString', True$)
// The POST string will have been encoded so use percent (URL) decoding. // The POST string will have been encoded so use percent (URL) decoding.
DecodedJSON = HTTP_Services('DecodePercentString', Body) DecodedJSON = HTTP_Services('DecodePercentString', Body)
If SRP_JSON(objBody, 'Parse', Body) EQ '' then If SRP_JSON(objBody, 'Parse', Body) EQ '' then
Table = SRP_JSON(objBody, 'GetValue', 'table') Table = SRP_JSON(objBody, 'GetValue', 'table')
Key = SRP_JSON(objBody, 'GetValue', 'key') Key = SRP_JSON(objBody, 'GetValue', 'key')
SRP_JSON(objBody, 'Release') SRP_JSON(objBody, 'Release')
end end
If (Table NE '') AND (Key NE '') then If (Table NE '') AND (Key NE '') then
Result = Lock_Services("AttemptUnlock",CurrUser, Table, Key) Result = Lock_Services("AttemptUnlock",CurrUser, Table, Key)
If Result EQ TRUE$ then If Result EQ TRUE$ then
HTTP_Services('SetResponseStatus', 200, 'Record successfully unlocked.') HTTP_Services('SetResponseStatus', 200, 'Record successfully unlocked.')
Lock_Services("LogUnlockRequest", Table, Key, CurrUser, TRUE$) Lock_Services("LogUnlockRequest", Table, Key, CurrUser, TRUE$)
end else end else
ErrCode = Error_Services('GetMessage') ErrCode = Error_Services('GetMessage')
HTTP_Services('SetResponseStatus', 500, ErrCode) HTTP_Services('SetResponseStatus', 500, ErrCode)
Lock_Services("LogUnlockRequest", Table, Key, CurrUser, FALSE$) Lock_Services("LogUnlockRequest", Table, Key, CurrUser, FALSE$)
end end
end else end else
HTTP_Services('SetResponseStatus', 400, 'The table or key property is missing.') HTTP_Services('SetResponseStatus', 400, 'The table or key property is missing.')
end end
End Else End Else
HTTP_Services('SetResponseStatus', 403, 'User is not permitted to access this resource.') HTTP_Services('SetResponseStatus', 403, 'User is not permitted to access this resource.')
end end
End else End else
HTTP_Services('SetResponseStatus', 401, 'User must be signed in to access this resource.') HTTP_Services('SetResponseStatus', 401, 'User must be signed in to access this resource.')
end end
end api end api

View File

@ -1,372 +1,372 @@
Compile function Lock_Services(@Service, @Params) Compile function Lock_Services(@Service, @Params)
/*********************************************************************************************************************** /***********************************************************************************************************************
Name : Lock_Services Name : Lock_Services
Description : Handler program for all Lock services. Description : Handler program for all Lock services.
Notes : Application errors should be logged using the Error Services module. There are a few methodological 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 assumptions built into way errors are managed which are important to understand in order to properly
work with Error Services: work with Error Services:
- The term 'top' refers to the originating procedure of a call stack and the term 'bottom' refers to - 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 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 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 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'. 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 - 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 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 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 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 itself. This continues as the call stack 'bubbles' its way back to the top to where the
originating procedure is waiting. originating procedure is waiting.
- Native OpenInsight commands that handle errors (e.g., Set_Status, Set_FSError, Set_EventStatus) - 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 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. 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 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 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 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 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.) 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 - Service modules will use the SERVICE_SETUP insert and therefore automatically clear out any
error conditions that were set before. error conditions that were set before.
Parameters : Parameters :
Service [in] -- Name of the service being requested Service [in] -- Name of the service being requested
Param1-10 [in/out] -- Additional request parameter holders Param1-10 [in/out] -- Additional request parameter holders
Response [out] -- Response to be sent back to the Controller (MCP) or requesting procedure Response [out] -- Response to be sent back to the Controller (MCP) or requesting procedure
Metadata : Metadata :
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
3/18/24 djm Original programmer. 3/18/24 djm Original programmer.
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$insert LOGICAL $insert LOGICAL
$Insert SERVICE_SETUP $Insert SERVICE_SETUP
$Insert UNLOCK_REQUESTS_EQUATES $Insert UNLOCK_REQUESTS_EQUATES
$Insert REACT_RUN_EQUATES $Insert REACT_RUN_EQUATES
$Insert WO_MAT_EQUATES $Insert WO_MAT_EQUATES
$Insert WM_OUT_EQUATES $Insert WM_OUT_EQUATES
$Insert RDS_EQUATES $Insert RDS_EQUATES
$Insert RDS_LAYER_EQUATES $Insert RDS_LAYER_EQUATES
Declare function Database_Services, Oi_Wizard_Services, Memberof, Lock_Services, SRP_Json, List_Volume_Sub, Datetime Declare function Database_Services, Oi_Wizard_Services, Memberof, Lock_Services, SRP_Json, List_Volume_Sub, Datetime
Declare subroutine SRP_Json, Database_Services Declare subroutine SRP_Json, Database_Services
GoToService GoToService
Return Response or "" Return Response or ""
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// SERVICES // SERVICES
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
// GetLockPermissions // GetLockPermissions
// //
// CurrUser - [Required] // CurrUser - [Required]
// //
// Returns LockPermissionLevel 0 - No lock access, 1 - Lock access to unprotected tables, or 2 - Lock access to all tables. // Returns LockPermissionLevel 0 - No lock access, 1 - Lock access to unprotected tables, or 2 - Lock access to all tables.
// //
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service GetLockPermissions(CurrUser) Service GetLockPermissions(CurrUser)
LockPermissionLevel = 0 LockPermissionLevel = 0
OIAdmin = Memberof(CurrUser, 'OI_ADMIN') OIAdmin = Memberof(CurrUser, 'OI_ADMIN')
SupervisorLead = MemberOf(CurrUser, 'LEAD') OR MemberOf(CurrUser, 'SUPERVISOR') SupervisorLead = MemberOf(CurrUser, 'LEAD') OR MemberOf(CurrUser, 'SUPERVISOR')
If OIAdmin then If OIAdmin then
LockPermissionLevel = 2 LockPermissionLevel = 2
end else end else
If SupervisorLead then If SupervisorLead then
LockPermissionLevel = 1 LockPermissionLevel = 1
end end
end end
Response = LockPermissionLevel Response = LockPermissionLevel
End Service End Service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
// GetAllowedLocks // GetAllowedLocks
// //
// CurrUser - [Required] // CurrUser - [Required]
// //
// Returns an array of accessible locks based on user LockPermissionLevel // Returns an array of accessible locks based on user LockPermissionLevel
// //
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service GetAllowedLocks(CurrUser) Service GetAllowedLocks(CurrUser)
LockPermissionLevel = Lock_Services('GetLockPermissions', CurrUser) LockPermissionLevel = Lock_Services('GetLockPermissions', CurrUser)
LockJSON = '' LockJSON = ''
If LockPermissionLevel NE 0 then If LockPermissionLevel NE 0 then
LockList = Database_Services('GetUserLocks') LockList = Database_Services('GetUserLocks')
If Error_Services('NoError') then If Error_Services('NoError') then
If SRP_JSON(objJSON, 'New', 'Object') then If SRP_JSON(objJSON, 'New', 'Object') then
If SRP_JSON(LockArray, 'New', 'Array') then If SRP_JSON(LockArray, 'New', 'Array') then
For each Row in LockList using @FM setting fPos For each Row in LockList using @FM setting fPos
If Row<0,3> = "Rev30536" then Row<0,3> = 'RDS*LSL2' If Row<0,3> = "Rev30536" then Row<0,3> = 'RDS*LSL2'
If Field(Row<0,3>, "*", 2) EQ 'LSL2' OR LockPermissionLevel EQ 2 then If Field(Row<0,3>, "*", 2) EQ 'LSL2' OR LockPermissionLevel EQ 2 then
If SRP_JSON(objRow, 'New', 'Object') then If SRP_JSON(objRow, 'New', 'Object') then
SRP_JSON(objRow, 'SetValue', 'ComputerName', Row<0, 1>) SRP_JSON(objRow, 'SetValue', 'ComputerName', Row<0, 1>)
SRP_JSON(objRow, 'SetValue', 'Volume', Row<0, 2>) SRP_JSON(objRow, 'SetValue', 'Volume', Row<0, 2>)
If Field(Row<0,3>, "*", 2) EQ 'LSL2' then Row<0,3> = Field(Row<0,3>, "*", 1) If Field(Row<0,3>, "*", 2) EQ 'LSL2' then Row<0,3> = Field(Row<0,3>, "*", 1)
SRP_JSON(objRow, 'SetValue', 'OSFile', Row<0, 3>) SRP_JSON(objRow, 'SetValue', 'OSFile', Row<0, 3>)
SRP_JSON(objRow, 'SetValue', 'RecordKey', Row<0, 4>, "String") SRP_JSON(objRow, 'SetValue', 'RecordKey', Row<0, 4>, "String")
SRP_JSON(objRow, 'SetValue', 'Exclusive', Row<0, 5>) SRP_JSON(objRow, 'SetValue', 'Exclusive', Row<0, 5>)
SRP_JSON(objRow, 'SetValue', 'REVFile', Row<0, 6>) SRP_JSON(objRow, 'SetValue', 'REVFile', Row<0, 6>)
SRP_JSON(LockArray, 'Add', objRow) SRP_JSON(LockArray, 'Add', objRow)
SRP_JSON(objRow, 'Release') SRP_JSON(objRow, 'Release')
end end
End End
Next Row Next Row
SRP_JSON(objJSON, 'Set', 'Locks', LockArray) SRP_JSON(objJSON, 'Set', 'Locks', LockArray)
SRP_JSON(LockArray, 'Release') SRP_JSON(LockArray, 'Release')
end end
LockJSON = SRP_JSON(objJSON, 'Stringify', 'Styled') LockJSON = SRP_JSON(objJSON, 'Stringify', 'Styled')
SRP_JSON(objJSON, 'Release') SRP_JSON(objJSON, 'Release')
end end
end end
End End
Response = LockJSON Response = LockJSON
End Service End Service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
// AttemptUnlock // AttemptUnlock
// //
// CurrUser - [Required] // CurrUser - [Required]
// LotType - [Required] // LotType - [Required]
// Key - [Required] // Key - [Required]
// //
// Returns either 1 for success, or error message // Returns either 1 for success, or error message
// //
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service AttemptUnlock(CurrUser, LotType, Key) Service AttemptUnlock(CurrUser, LotType, Key)
LockPermissionLevel = Lock_Services('GetLockPermissions', CurrUser) LockPermissionLevel = Lock_Services('GetLockPermissions', CurrUser)
If LockPermissionLevel NE 0 then If LockPermissionLevel NE 0 then
If LotType EQ 'RDS' or LotType EQ 'WM_OUT' then If LotType EQ 'RDS' or LotType EQ 'WM_OUT' then
If Xlate(LotType, Key, '', 'X', '') NE '' then If Xlate(LotType, Key, '', 'X', '') NE '' then
LockArray = Lock_Services('GetChildRecords', LotType, Key) LockArray = Lock_Services('GetChildRecords', LotType, Key)
LockCount = DCount(LockArray<1>, @VM) LockCount = DCount(LockArray<1>, @VM)
For I = 1 to LockCount For I = 1 to LockCount
Table = LockArray<1,I> Table = LockArray<1,I>
KeyID = LockArray<2,I> KeyID = LockArray<2,I>
Resp = Database_Services('UnlockKeyID', Table, KeyID) Resp = Database_Services('UnlockKeyID', Table, KeyID)
Next I Next I
If Error_Services('NoError') Then If Error_Services('NoError') Then
Response = TRUE$ Response = TRUE$
end else end else
Response = FALSE$ Response = FALSE$
Error_Services('Add', 'Records failed to unlock.') Error_Services('Add', 'Records failed to unlock.')
end end
end else end else
Response = FALSE$ Response = FALSE$
Error_Services('Add', 'This record does not exist.') Error_Services('Add', 'This record does not exist.')
end end
End Else End Else
Response = FALSE$ Response = FALSE$
Error_Services('Add', 'LotType must be either RDS or WM_OUT.') Error_Services('Add', 'LotType must be either RDS or WM_OUT.')
end end
end else end else
Response = FALSE$ Response = FALSE$
Error_Services('Add', 'User is not permitted to access this resource.') Error_Services('Add', 'User is not permitted to access this resource.')
end end
End Service End Service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
// GetChildRecords // GetChildRecords
// //
// LotType - [Required] // LotType - [Required]
// Key - [Required] // Key - [Required]
// //
// Returns an array of associated child records for unlocking // Returns an array of associated child records for unlocking
// //
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service GetChildRecords(LotType, Key) Service GetChildRecords(LotType, Key)
RecordArray = '' RecordArray = ''
Begin Case Begin Case
Case LotType EQ 'RDS' Case LotType EQ 'RDS'
RDSRec = Xlate('RDS', Key, '', 'X', '') RDSRec = Xlate('RDS', Key, '', 'X', '')
If RDSRec NE '' then If RDSRec NE '' then
//Add RDS key //Add RDS key
RecordArray<1> = LotType RecordArray<1> = LotType
RecordArray<2> = Key RecordArray<2> = Key
//Get REACT_RUN record //Get REACT_RUN record
ReactRunRec = Xlate('REACT_RUN', Key, '', 'X', '') ReactRunRec = Xlate('REACT_RUN', Key, '', 'X', '')
//Get and Add CLEAN_INSP keys //Get and Add CLEAN_INSP keys
CINos = ReactRunRec<REACT_RUN_CI_NO$> CINos = ReactRunRec<REACT_RUN_CI_NO$>
If CINos NE '' then If CINos NE '' then
CICount = Dcount(CINos, @VM) CICount = Dcount(CINos, @VM)
For I = 1 to CICount For I = 1 to CICount
If CINos<I> NE '' then If CINos<I> NE '' then
RecordArray<1,-1> = 'CLEAN_INSP' RecordArray<1,-1> = 'CLEAN_INSP'
RecordArray<2,-1> = CINos<I> RecordArray<2,-1> = CINos<I>
end end
Next I Next I
end end
//Get and Add RDS_TEST keys //Get and Add RDS_TEST keys
RDSLayerKeys = ReactRunRec<REACT_RUN_RDS_LAYER_KEYS$> RDSLayerKeys = ReactRunRec<REACT_RUN_RDS_LAYER_KEYS$>
If RDSLayerKeys NE '' then If RDSLayerKeys NE '' then
LayerKeyCount = DCount(RDSLayerKeys, @VM) LayerKeyCount = DCount(RDSLayerKeys, @VM)
For K = 1 to LayerKeyCount For K = 1 to LayerKeyCount
RDSTestKeys = Xlate('RDS_LAYER', RDSLayerKeys<K>, 'RDS_TEST_KEYS', 'X', '') RDSTestKeys = Xlate('RDS_LAYER', RDSLayerKeys<K>, 'RDS_TEST_KEYS', 'X', '')
If RDSTestKeys NE '' then If RDSTestKeys NE '' then
RDSTestCount = DCount(RDSTestKeys, @VM) RDSTestCount = DCount(RDSTestKeys, @VM)
For L = 1 to RDSTestCount For L = 1 to RDSTestCount
If RDSTestKeys<K,L> NE '' then If RDSTestKeys<K,L> NE '' then
RecordArray<1,-1> = 'RDS_TEST' RecordArray<1,-1> = 'RDS_TEST'
RecordArray<2,-1> = RDSTestKeys<K,L> RecordArray<2,-1> = RDSTestKeys<K,L>
end end
Next L Next L
end end
Next K Next K
end end
//Get WO_MAT key //Get WO_MAT key
WONo = RDSRec<RDS_WO$> WONo = RDSRec<RDS_WO$>
CassNo = RDSRec<RDS_CASS_NO$> CassNo = RDSRec<RDS_CASS_NO$>
WOMatKey = WONo : '*' : CassNo WOMatKey = WONo : '*' : CassNo
//Get and Add WO_MAT_QA //Get and Add WO_MAT_QA
WOMatQA = Xlate('WO_MAT_QA', WOMatKey, '', 'X', '') WOMatQA = Xlate('WO_MAT_QA', WOMatKey, '', 'X', '')
If WOMatQA NE '' then If WOMatQA NE '' then
RecordArray<1,-1> = 'WO_MAT_QA' RecordArray<1,-1> = 'WO_MAT_QA'
RecordArray<2,-1> = WOMatKey RecordArray<2,-1> = WOMatKey
End End
//Get and Add NCR keys //Get and Add NCR keys
NCRKeys = Xlate('WO_MAT', WOMatKey, 'NCR_KEYS', 'X', '') NCRKeys = Xlate('WO_MAT', WOMatKey, 'NCR_KEYS', 'X', '')
If NCRKeys NE '' then If NCRKeys NE '' then
NCRCount = Dcount(NCRKeys, @VM) NCRCount = Dcount(NCRKeys, @VM)
For J = 1 to NCRCount For J = 1 to NCRCount
If NCRKeys<J> NE '' then If NCRKeys<J> NE '' then
RecordArray<1,-1> = 'NCR' RecordArray<1,-1> = 'NCR'
RecordArray<2,-1> = NCRKeys<J> RecordArray<2,-1> = NCRKeys<J>
end end
Next J Next J
end end
end else end else
Error_Services('Add', 'This RDS does not exist.') Error_Services('Add', 'This RDS does not exist.')
Return Return
end end
Case LotType EQ 'WM_OUT' Case LotType EQ 'WM_OUT'
WMOutRec = Xlate('WM_OUT', Key, '', 'X', '') WMOutRec = Xlate('WM_OUT', Key, '', 'X', '')
If WMOutRec NE '' then If WMOutRec NE '' then
//Add WM_OUT key //Add WM_OUT key
RecordArray<1> = LotType RecordArray<1> = LotType
RecordArray<2> = Key RecordArray<2> = Key
//Get and Add CLEAN_INSP keys //Get and Add CLEAN_INSP keys
CINos = WMOutRec<WM_OUT_CI_NO$> CINos = WMOutRec<WM_OUT_CI_NO$>
If CINos NE '' then If CINos NE '' then
CICount = Dcount(CINos, @VM) CICount = Dcount(CINos, @VM)
For I = 1 to CICount For I = 1 to CICount
If CINos<I> NE '' then If CINos<I> NE '' then
RecordArray<1,-1> = 'CLEAN_INSP' RecordArray<1,-1> = 'CLEAN_INSP'
RecordArray<2,-1> = CINos<I> RecordArray<2,-1> = CINos<I>
end end
Next I Next I
end end
//Get WO_MAT key //Get WO_MAT key
WONo = FIELD(Key,'*',1) WONo = FIELD(Key,'*',1)
CassNo = FIELD(Key,'*',3) CassNo = FIELD(Key,'*',3)
WOMatKey = WONo : '*' : CassNo WOMatKey = WONo : '*' : CassNo
//Get and Add WO_MAT_QA key //Get and Add WO_MAT_QA key
WOMatQA = Xlate('WO_MAT_QA', WOMatKey, '', 'X', '') WOMatQA = Xlate('WO_MAT_QA', WOMatKey, '', 'X', '')
If WOMatQA NE '' then If WOMatQA NE '' then
RecordArray<1,-1> = 'WO_MAT_QA' RecordArray<1,-1> = 'WO_MAT_QA'
RecordArray<2,-1> = WOMatKey RecordArray<2,-1> = WOMatKey
End End
//Get and Add NCR keys //Get and Add NCR keys
NCRKeys = Xlate('WO_MAT', WOMatKey, 'NCR_KEYS', 'X', '') NCRKeys = Xlate('WO_MAT', WOMatKey, 'NCR_KEYS', 'X', '')
If NCRKeys NE '' then If NCRKeys NE '' then
NCRCount = Dcount(NCRKeys, @VM) NCRCount = Dcount(NCRKeys, @VM)
For J = 1 to NCRCount For J = 1 to NCRCount
If NCRKeys<J> NE '' then If NCRKeys<J> NE '' then
RecordArray<1,-1> = 'NCR' RecordArray<1,-1> = 'NCR'
RecordArray<2,-1> = NCRKeys<J> RecordArray<2,-1> = NCRKeys<J>
end end
Next J Next J
end end
end else end else
Error_Services('Add', 'This WM_OUT does not exist.') Error_Services('Add', 'This WM_OUT does not exist.')
end end
Case OTHERWISE$ Case OTHERWISE$
Error_Services('Add', 'LotType must be either RDS or WM_OUT.') Error_Services('Add', 'LotType must be either RDS or WM_OUT.')
return return
End Case End Case
If RecordArray NE '' then If RecordArray NE '' then
Response = RecordArray Response = RecordArray
end end
End Service End Service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
// GetUnprotectedTables // GetUnprotectedTables
// //
// Returns an array of unprotected tables // Returns an array of unprotected tables
// //
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service GetUnprotectedTables() Service GetUnprotectedTables()
TableArray = List_Volume_Sub('LSL', '', 'TABLE_NAME', 'TABLE_NAME') TableArray = List_Volume_Sub('LSL', '', 'TABLE_NAME', 'TABLE_NAME')
UnprotectedArray = '' UnprotectedArray = ''
For Each Table in TableArray Using @FM For Each Table in TableArray Using @FM
If Table[1,1] NE '!' AND Table[1,5] NE 'DICT.' then If Table[1,1] NE '!' AND Table[1,5] NE 'DICT.' then
UnprotectedArray<-1> = Table UnprotectedArray<-1> = Table
end end
Next Table Next Table
Response = UnprotectedArray Response = UnprotectedArray
End Service End Service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
// LogUnlockRequest // LogUnlockRequest
// //
// CurrUser - [Required] // CurrUser - [Required]
// TableName - [Required] // TableName - [Required]
// RecordKey - [Required] // RecordKey - [Required]
// Success - [Required] // Success - [Required]
// //
// Creates an UNLOCK_REQUESTS record to log unlock attempts. // Creates an UNLOCK_REQUESTS record to log unlock attempts.
// //
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service LogUnlockRequest(TableName, RecordKey, CurrUser, Success) Service LogUnlockRequest(TableName, RecordKey, CurrUser, Success)
NewRequestRec = '' NewRequestRec = ''
CurrDateTime = Datetime() CurrDateTime = Datetime()
RecordID = CurrDateTime :'*': TableName RecordID = CurrDateTime :'*': TableName
NewRequestRec<UNLOCK_REQUESTS_RECORD_KEY$> = RecordKey NewRequestRec<UNLOCK_REQUESTS_RECORD_KEY$> = RecordKey
NewRequestRec<UNLOCK_REQUESTS_USER_NAME$> = CurrUser NewRequestRec<UNLOCK_REQUESTS_USER_NAME$> = CurrUser
NewRequestRec<UNLOCK_REQUESTS_SUCCESS$> = Success NewRequestRec<UNLOCK_REQUESTS_SUCCESS$> = Success
Database_Services('WriteDataRow', 'UNLOCK_REQUESTS', RecordID, NewRequestRec, 1, 0, 0) Database_Services('WriteDataRow', 'UNLOCK_REQUESTS', RecordID, NewRequestRec, 1, 0, 0)
End Service End Service

View File

@ -1,206 +1,206 @@
Function MAKEUP_WAFERS_Actions(Action, CalcColName, FSList, Handle, Name, FMC, Record, Status, OrigRecord, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10) Function MAKEUP_WAFERS_Actions(Action, CalcColName, FSList, Handle, Name, FMC, Record, Status, OrigRecord, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
/*********************************************************************************************************************** /***********************************************************************************************************************
This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written 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. permission from Infineon.
Name : Makeup_Wafers_Actions Name : Makeup_Wafers_Actions
Description : Handles calculated columns and MFS calls for the current table. 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. 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. If called from outside of a calculated column these will need to be set and restored.
Parameters : Parameters :
Action [in] -- Name of the action to be taken 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 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. 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 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 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. 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 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 entire handle structure that the Basic+ Open statement would provide. Normally set by a
calling MFS. calling MFS.
Name [in] -- The name (key) of the record or file being accessed. 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. 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 Record [in] -- The entire record (for record-oriented functions) or a newly-created handle (for
"get handle" functions). Normally set by a calling MFS. "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 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. 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 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 automatically being assigned by the WRITE_RECORD and DELETE_RECORD actions within
BASE_MFS. BASE_MFS.
Param1-10 [in/out] -- Additional request parameter holders Param1-10 [in/out] -- Additional request parameter holders
ActionFlow [out] -- Used to control the action chain (see the ACTION_SETUP insert for more information.) 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 Can also be used to return a special value, such as the results of the CalcField
method. method.
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
07/09/24 djs Original programmer. 07/09/24 djs Original programmer.
***********************************************************************************************************************/ ***********************************************************************************************************************/
$insert APP_INSERTS $insert APP_INSERTS
$insert FILE.SYSTEM.EQUATES $insert FILE.SYSTEM.EQUATES
$insert ACTION_SETUP $insert ACTION_SETUP
$insert MAKEUP_WAFERS_EQUATES $insert MAKEUP_WAFERS_EQUATES
Declare function SRP_Date Declare function SRP_Date
If KeyID then GoSub Initialize_System_Variables If KeyID then GoSub Initialize_System_Variables
Begin Case Begin Case
Case Action _EQC 'CalculateColumn' ; GoSub CalculateColumn Case Action _EQC 'CalculateColumn' ; GoSub CalculateColumn
Case Action _EQC 'READ_RECORD_PRE' ; GoSub READ_RECORD_PRE Case Action _EQC 'READ_RECORD_PRE' ; GoSub READ_RECORD_PRE
Case Action _EQC 'READ_RECORD' ; GoSub READ_RECORD Case Action _EQC 'READ_RECORD' ; GoSub READ_RECORD
Case Action _EQC 'READONLY_RECORD_PRE' ; GoSub READONLY_RECORD_PRE Case Action _EQC 'READONLY_RECORD_PRE' ; GoSub READONLY_RECORD_PRE
Case Action _EQC 'READONLY_RECORD' ; GoSub READONLY_RECORD Case Action _EQC 'READONLY_RECORD' ; GoSub READONLY_RECORD
Case Action _EQC 'WRITE_RECORD_PRE' ; GoSub WRITE_RECORD_PRE Case Action _EQC 'WRITE_RECORD_PRE' ; GoSub WRITE_RECORD_PRE
Case Action _EQC 'WRITE_RECORD' ; GoSub WRITE_RECORD Case Action _EQC 'WRITE_RECORD' ; GoSub WRITE_RECORD
Case Action _EQC 'DELETE_RECORD_PRE' ; GoSub DELETE_RECORD_PRE Case Action _EQC 'DELETE_RECORD_PRE' ; GoSub DELETE_RECORD_PRE
Case Action _EQC 'DELETE_RECORD' ; GoSub DELETE_RECORD Case Action _EQC 'DELETE_RECORD' ; GoSub DELETE_RECORD
Case Otherwise$ ; Status = 'Invalid Action' Case Otherwise$ ; Status = 'Invalid Action'
End Case End Case
If KeyID then GoSub Restore_System_Variables If KeyID then GoSub Restore_System_Variables
If Assigned(ActionFlow) else ActionFlow = ACTION_CONTINUE$ If Assigned(ActionFlow) else ActionFlow = ACTION_CONTINUE$
Return ActionFlow Return ActionFlow
// ----- Calculated Columns -------------------------------------------------------------------------------------------- // ----- Calculated Columns --------------------------------------------------------------------------------------------
// //
// The typical structure of a calculated column will look like this: // The typical structure of a calculated column will look like this:
// //
// Declare function TableName_Actions // Declare function TableName_Actions
// //
// A = {COL1} ; * Reference as many data columns in this way to ensure the dictionary dependency is generated. // A = {COL1} ; * Reference as many data columns in this way to ensure the dictionary dependency is generated.
// //
// @ANS = TableName_Actions('CalcField', 'CalcColName') // @ANS = TableName_Actions('CalcField', 'CalcColName')
// //
// --------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------
CalculateColumn: CalculateColumn:
// Make sure the ActionFlow return variable is cleared in case nothing is calculated. // Make sure the ActionFlow return variable is cleared in case nothing is calculated.
ActionFlow = '' ActionFlow = ''
Begin Case Begin Case
Case CalcColName EQ 'EXAMPLE' ; GoSub EXAMPLE Case CalcColName EQ 'EXAMPLE' ; GoSub EXAMPLE
End Case End Case
return return
EXAMPLE: EXAMPLE:
ActionFlow = '' ActionFlow = ''
return return
// ----- MFS calls ----------------------------------------------------------------------------------------------------- // ----- MFS calls -----------------------------------------------------------------------------------------------------
READ_RECORD_PRE: READ_RECORD_PRE:
// In order to stop a record from being read in this action these lines of code must be used: // In order to stop a record from being read in this action these lines of code must be used:
// //
// OrigFileError = 100 : @FM : KeyID // OrigFileError = 100 : @FM : KeyID
// Status = 0 // Status = 0
// Record = '' // Record = ''
// ActionFlow = ACTION_STOP$ // ActionFlow = ACTION_STOP$
return return
READ_RECORD: READ_RECORD:
// In order to stop a record from being read in this action these lines of code must be used: // In order to stop a record from being read in this action these lines of code must be used:
// //
// OrigFileError = 100 : @FM : KeyID // OrigFileError = 100 : @FM : KeyID
// Status = 0 // Status = 0
// Record = '' // Record = ''
return return
READONLY_RECORD_PRE: READONLY_RECORD_PRE:
// In order to stop a record from being read in this action these lines of code must be used: // In order to stop a record from being read in this action these lines of code must be used:
// //
// OrigFileError = 100 : @FM : KeyID // OrigFileError = 100 : @FM : KeyID
// Status = 0 // Status = 0
// Record = '' // Record = ''
// ActionFlow = ACTION_STOP$ // ActionFlow = ACTION_STOP$
return return
READONLY_RECORD: READONLY_RECORD:
// In order to stop a record from being read in this action these lines of code must be used: // In order to stop a record from being read in this action these lines of code must be used:
// //
// OrigFileError = 100 : @FM : KeyID // OrigFileError = 100 : @FM : KeyID
// Status = 0 // Status = 0
// Record = '' // Record = ''
return return
WRITE_RECORD_PRE: WRITE_RECORD_PRE:
SaveRecord<MAKEUP_WAFERS.EXPIRED$> = ( {UNLOAD_DTM} LT SRP_Date('AddYears', Date(), -3) ) SaveRecord<MAKEUP_WAFERS.EXPIRED$> = ( {UNLOAD_DTM} LT SRP_Date('AddYears', Date(), -3) )
return return
WRITE_RECORD: WRITE_RECORD:
return return
DELETE_RECORD_PRE: DELETE_RECORD_PRE:
return return
DELETE_RECORD: DELETE_RECORD:
return return
// ----- Internal Methods ---------------------------------------------------------------------------------------------- // ----- Internal Methods ----------------------------------------------------------------------------------------------
Initialize_System_Variables: Initialize_System_Variables:
// Save these for restoration later // Save these for restoration later
SaveDict = @DICT SaveDict = @DICT
SaveID = @ID SaveID = @ID
SaveRecord = @RECORD SaveRecord = @RECORD
OrigFileError = @FILE.ERROR OrigFileError = @FILE.ERROR
// Now make sure @DICT, ID, and @RECORD are populated // Now make sure @DICT, ID, and @RECORD are populated
CurrentDictName = '' CurrentDictName = ''
If @DICT then If @DICT then
DictHandle = @DICT<1, 2> DictHandle = @DICT<1, 2>
Locate DictHandle in @TABLES(5) Using @FM Setting fPos then Locate DictHandle in @TABLES(5) Using @FM Setting fPos then
CurrentDictName = Field(@TABLES(0), @FM, fPos, 1) CurrentDictName = Field(@TABLES(0), @FM, fPos, 1)
end end
end end
If CurrentDictName NE DictName then If CurrentDictName NE DictName then
Open DictName to @DICT else Status = 'Unable to initialize @DICT' Open DictName to @DICT else Status = 'Unable to initialize @DICT'
end end
@ID = KeyID @ID = KeyID
If Record else If Record else
// Record might not have been passed in. Read the record from the database table just to make sure. // Record might not have been passed in. Read the record from the database table just to make sure.
@FILE.ERROR = '' @FILE.ERROR = ''
Open TableName to hTable then Open TableName to hTable then
FullFSList = hTable[1, 'F' : @VM] FullFSList = hTable[1, 'F' : @VM]
BFS = FullFSList[-1, 'B' : @SVM] BFS = FullFSList[-1, 'B' : @SVM]
LastHandle = hTable[-1, 'B' : \0D\] LastHandle = hTable[-1, 'B' : \0D\]
FileHandle = \0D\ : LastHandle[1, @VM] FileHandle = \0D\ : LastHandle[1, @VM]
Call @BFS(READO.RECORD, BFS, FileHandle, KeyID, FMC, Record, ReadOStatus) Call @BFS(READO.RECORD, BFS, FileHandle, KeyID, FMC, Record, ReadOStatus)
end end
end end
@RECORD = Record @RECORD = Record
return return
Restore_System_Variables: Restore_System_Variables:
Transfer SaveDict to @DICT Transfer SaveDict to @DICT
Transfer SaveID to @ID Transfer SaveID to @ID
Transfer SaveRecord to @RECORD Transfer SaveRecord to @RECORD
@FILE.ERROR = OrigFileError @FILE.ERROR = OrigFileError
return return

View File

@ -1,46 +1,46 @@
Compile Function MITCHEM_TEST_Events(CtrlEntId, Event, @PARAMS) Compile Function MITCHEM_TEST_Events(CtrlEntId, Event, @PARAMS)
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
#window MITCHEM_TEST #window MITCHEM_TEST
Declare function Get_Property, Reactor_Services, Database_Services Declare function Get_Property, Reactor_Services, Database_Services
Declare subroutine Set_Property, RList, Msg , Reactor_Services, End_Window, Post_Event Declare subroutine Set_Property, RList, Msg , Reactor_Services, End_Window, Post_Event
$Insert APP_INSERTS $Insert APP_INSERTS
$Insert EVENT_SETUP $Insert EVENT_SETUP
$Insert REACTOR_EQUATES $Insert REACTOR_EQUATES
$insert logical $insert logical
$Insert RLIST_EQUATES $Insert RLIST_EQUATES
$Insert REACTOR_MODES_EQUATES $Insert REACTOR_MODES_EQUATES
$Insert REACT_MODE_NG_EQUATES $Insert REACT_MODE_NG_EQUATES
$Insert MSG_EQUATES $Insert MSG_EQUATES
// 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
Transfer Event to OIEvent Transfer Event to OIEvent
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 else GoToEvent Event for CtrlEntId else
// Event not implemented // Event not implemented
end end
Return EventFlow or 1 Return EventFlow or 1
Event WINDOW.CREATE(CreateParam) Event WINDOW.CREATE(CreateParam)
debug debug
Set_Property(@Window, 'BACKCOLOR', -2) Set_Property(@Window, 'BACKCOLOR', -2)
Color = Get_Property(@Window:'.EB_SPEC_SUBSTRATE', 'BACKCOLOR') Color = Get_Property(@Window:'.EB_SPEC_SUBSTRATE', 'BACKCOLOR')
//Set_Property(@Window:'.EB_SPEC_SUBSTRATE', 'BACKCOLOR', -2) //Set_Property(@Window:'.EB_SPEC_SUBSTRATE', 'BACKCOLOR', -2)
Color = Get_Property(@Window:'.EB_SPEC_SUBSTRATE', 'BACKCOLOR') Color = Get_Property(@Window:'.EB_SPEC_SUBSTRATE', 'BACKCOLOR')
EventFlow = 1 EventFlow = 1
End Event End Event

View File

@ -1,138 +1,138 @@
Function Monaengines_API(@API) Function Monaengines_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 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. permission from SRP Computer Solutions, Inc.
Name : Monaengines_API Name : Monaengines_API
Description : API logic for the Monaengines resource. Description : API logic for the Monaengines resource.
Notes : All web APIs should include the API_SETUP insert. This will provide several useful variables: 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.) 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). APIURL - The URL for the API entry point (e.g., api.mysite.com/v1).
FullEndpointURL - The URL submitted by the client, including query params. FullEndpointURL - The URL submitted by the client, including query params.
FullEndpointURLNoQuery - The URL submitted by the client, excluding query params. FullEndpointURLNoQuery - The URL submitted by the client, excluding query params.
EndpointSegment - The URL endpoint segment. EndpointSegment - The URL endpoint segment.
ParentURL - The URL path preceeding the current endpoint. ParentURL - The URL path preceeding the current endpoint.
CurrentAPI - The name of this stored procedure. CurrentAPI - The name of this stored procedure.
Parameters : Parameters :
API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]: API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
- APIPattern must follow this structure Monaengines[.ID.[<Property>]] - APIPattern must follow this structure Monaengines[.ID.[<Property>]]
- HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc. - HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
Examples: Examples:
- Monaengines.POST - Monaengines.POST
- Monaengines.ID.PUT - Monaengines.ID.PUT
- Monaengines.ID.firstName.GET - Monaengines.ID.firstName.GET
Response [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API 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 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 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. value is only helpful if the developers want to use it for debug purposes.
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
07/17/24 xxx Original programmer. 07/17/24 xxx Original programmer.
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$insert APP_INSERTS $insert APP_INSERTS
$insert API_SETUP $insert API_SETUP
$insert HTTP_INSERTS $insert HTTP_INSERTS
$insert ENGINE_HEALTH_EQUATES $insert ENGINE_HEALTH_EQUATES
Equ Comma$ to ',' Equ Comma$ to ','
Declare function System_Healthcheck_Services, Environment_Services, Logging_Services Declare function System_Healthcheck_Services, Environment_Services, Logging_Services
Declare subroutine Logging_Services Declare subroutine Logging_Services
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Healthchecks\Engines\MonA' LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Healthchecks\Engines\MonA'
LogDate = Oconv(Date(), 'D4/') LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS') LogTime = Oconv(Time(), 'MTS')
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Mona_Engine_Health_Check_Log.csv' LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Mona_Engine_Health_Check_Log.csv'
Headers = 'Logging DTM' : @FM : 'EngineID' : @FM : 'ResponseCode' : @FM : 'Message' : @FM : 'Requester' Headers = 'Logging DTM' : @FM : 'EngineID' : @FM : 'ResponseCode' : @FM : 'Message' : @FM : 'Requester'
objLogMonaEngines = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$) objLogMonaEngines = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
GoToAPI else GoToAPI else
// The specific resource endpoint doesn't have a API handler yet. // The specific resource endpoint doesn't have a API handler yet.
HTTP_Services('SetResponseStatus', 200, 'This is a valid endpoint but a web API handler has not yet been created.') HTTP_Services('SetResponseStatus', 200, 'This is a valid endpoint but a web API handler has not yet been created.')
end end
Return Response OR '' Return Response OR ''
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Endpoint Handlers // Endpoint Handlers
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
API monaengines.HEAD API monaengines.HEAD
API monaengines.GET API monaengines.GET
HTTP_Resource_Services('LoremIpsum') HTTP_Resource_Services('LoremIpsum')
end api end api
API monaengines.ID.HEAD API monaengines.ID.HEAD
API monaengines.ID.GET API monaengines.ID.GET
//Returns status of a defined engine //Returns status of a defined engine
EngineID = EndpointSegment EngineID = EndpointSegment
If RowExists('APP_INFO', EngineID) then If RowExists('APP_INFO', EngineID) then
EngineHealthInfo = System_Healthcheck_Services('GetEngineHealthInfo', EngineID) EngineHealthInfo = System_Healthcheck_Services('GetEngineHealthInfo', EngineID)
If Error_Services('NoError') then If Error_Services('NoError') then
Healthy = EngineHealthInfo<ENGINE_HEALTH_HEALTH_STATUS$> Healthy = EngineHealthInfo<ENGINE_HEALTH_HEALTH_STATUS$>
If Healthy then If Healthy then
ResponseCode = 200 ResponseCode = 200
Message = 'Engine is healthy' Message = 'Engine is healthy'
HTTP_Services('SetResponseStatus', ResponseCode, Message) HTTP_Services('SetResponseStatus', ResponseCode, Message)
LogData = '' LogData = ''
LogData<1> = LoggingDTM LogData<1> = LoggingDTM
LogData<2> = EngineID LogData<2> = EngineID
LogData<3> = ResponseCode LogData<3> = ResponseCode
LogData<4> = Message LogData<4> = Message
LogData<5> = FullEndpointURL LogData<5> = FullEndpointURL
Logging_Services('AppendLog', objLogMonaEngines, LogData, @RM, @FM) Logging_Services('AppendLog', objLogMonaEngines, LogData, @RM, @FM)
end else end else
ResponseCode = 418 ResponseCode = 418
Message = 'Engine is unhealthy.' Message = 'Engine is unhealthy.'
HTTP_Services('SetResponseStatus', ResponseCode, Message) HTTP_Services('SetResponseStatus', ResponseCode, Message)
LogData = '' LogData = ''
LogData<1> = LoggingDTM LogData<1> = LoggingDTM
LogData<2> = EngineID LogData<2> = EngineID
LogData<3> = ResponseCode LogData<3> = ResponseCode
LogData<4> = Message LogData<4> = Message
LogData<5> = FullEndpointURL LogData<5> = FullEndpointURL
Logging_Services('AppendLog', objLogMonaEngines, LogData, @RM, @FM) Logging_Services('AppendLog', objLogMonaEngines, LogData, @RM, @FM)
end end
end else end else
ResponseCode = 500 ResponseCode = 500
Message = Error_Services('GetMessage') Message = Error_Services('GetMessage')
HTTP_Services('SetResponseStatus', ResponseCode, Message) HTTP_Services('SetResponseStatus', ResponseCode, Message)
LogData = '' LogData = ''
LogData<1> = LoggingDTM LogData<1> = LoggingDTM
LogData<2> = EngineID LogData<2> = EngineID
LogData<3> = ResponseCode LogData<3> = ResponseCode
LogData<4> = Message LogData<4> = Message
LogData<5> = FullEndpointURL LogData<5> = FullEndpointURL
Logging_Services('AppendLog', objLogMonaEngines, LogData, @RM, @FM) Logging_Services('AppendLog', objLogMonaEngines, LogData, @RM, @FM)
end end
end else end else
ResponseCode = 404 ResponseCode = 404
Message = 'Invalid Engine ID' Message = 'Invalid Engine ID'
HTTP_Services('SetResponseStatus', ResponseCode, 'Invalid Engine ID.') HTTP_Services('SetResponseStatus', ResponseCode, 'Invalid Engine ID.')
LogData = '' LogData = ''
LogData<1> = LoggingDTM LogData<1> = LoggingDTM
LogData<2> = EngineID LogData<2> = EngineID
LogData<3> = ResponseCode LogData<3> = ResponseCode
LogData<4> = Message LogData<4> = Message
LogData<5> = FullEndpointURL LogData<5> = FullEndpointURL
Logging_Services('AppendLog', objLogMonaEngines, LogData, @RM, @FM) Logging_Services('AppendLog', objLogMonaEngines, LogData, @RM, @FM)
end end
end api end api

View File

@ -1,64 +1,64 @@
Function Mona_API(@API) Function Mona_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 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. permission from SRP Computer Solutions, Inc.
Name : Mona_API Name : Mona_API
Description : API logic for the Mona resource. Description : API logic for the Mona resource.
Notes : All web APIs should include the API_SETUP insert. This will provide several useful variables: 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.) 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). APIURL - The URL for the API entry point (e.g., api.mysite.com/v1).
FullEndpointURL - The URL submitted by the client, including query params. FullEndpointURL - The URL submitted by the client, including query params.
FullEndpointURLNoQuery - The URL submitted by the client, excluding query params. FullEndpointURLNoQuery - The URL submitted by the client, excluding query params.
EndpointSegment - The URL endpoint segment. EndpointSegment - The URL endpoint segment.
ParentURL - The URL path preceeding the current endpoint. ParentURL - The URL path preceeding the current endpoint.
CurrentAPI - The name of this stored procedure. CurrentAPI - The name of this stored procedure.
Parameters : Parameters :
API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]: API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
- APIPattern must follow this structure Mona[.ID.[<Property>]] - APIPattern must follow this structure Mona[.ID.[<Property>]]
- HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc. - HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
Examples: Examples:
- Mona.POST - Mona.POST
- Mona.ID.PUT - Mona.ID.PUT
- Mona.ID.firstName.GET - Mona.ID.firstName.GET
Response [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API 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 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 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. value is only helpful if the developers want to use it for debug purposes.
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
07/17/24 xxx Original programmer. 07/17/24 xxx Original programmer.
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$insert APP_INSERTS $insert APP_INSERTS
$insert API_SETUP $insert API_SETUP
$insert HTTP_INSERTS $insert HTTP_INSERTS
GoToAPI else GoToAPI else
// The specific resource endpoint doesn't have a API handler yet. // The specific resource endpoint doesn't have a API handler yet.
HTTP_Services('SetResponseStatus', 200, 'This is a valid endpoint but a web API handler has not yet been created.') HTTP_Services('SetResponseStatus', 200, 'This is a valid endpoint but a web API handler has not yet been created.')
end end
Return Response OR '' Return Response OR ''
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Endpoint Handlers // Endpoint Handlers
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
API mona.HEAD API mona.HEAD
API mona.GET API mona.GET
HTTP_Resource_Services('LoremIpsum') HTTP_Resource_Services('LoremIpsum')
end api end api

View File

@ -159,7 +159,8 @@ Service SendBufferedAverageMetric(MonaResource, MetricName, MetricValue)
retries = retries - 1 retries = retries - 1
response = Httpclient_Services('SendHTTPRequest', 'POST', ApiUrl, 'Content-Type':@VM:'application/json':@FM:'Accept':@VM:'*/*', RequestBodyJson, '', '', False$, True$, '') response = Httpclient_Services('SendHTTPRequest', 'POST', ApiUrl, 'Content-Type':@VM:'application/json':@FM:'Accept':@VM:'*/*', RequestBodyJson, '', '', False$, False$, '')
If response EQ '"Request queued for processing"' then If response EQ '"Request queued for processing"' then
isSuccessful = True$ isSuccessful = True$
end end
@ -167,5 +168,3 @@ Service SendBufferedAverageMetric(MonaResource, MetricName, MetricValue)
end service end service

View File

@ -1,187 +1,187 @@
Compile function NDW_LOAD_UNLOAD_EXTRA_EVENTS(CtrlEntId, Event, @PARAMS) Compile function NDW_LOAD_UNLOAD_EXTRA_EVENTS(CtrlEntId, Event, @PARAMS)
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
#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 Declare subroutine Set_Property, Rds_Services
Declare function Database_Services, Error_Services Declare function Database_Services, Error_Services
Declare function Get_Property Declare function Get_Property
$Insert EVENT_SETUP $Insert EVENT_SETUP
$Insert LOGICAL $Insert LOGICAL
$Insert RDS_EQUATES $Insert RDS_EQUATES
GoToEvent Event for CtrlEntId else GoToEvent Event for CtrlEntId else
// Event not implemented // Event not implemented
end end
Return EventFlow or 1 Return EventFlow or 1
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// EVENT HANDLERS // EVENT HANDLERS
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Event WINDOW.CREATE(CreateParam) Event WINDOW.CREATE(CreateParam)
ResponseValue = Set_Property(@Window, '@responsevalue', 0) ResponseValue = Set_Property(@Window, '@responsevalue', 0)
RDSNo = CreateParam RDSNo = CreateParam
If RowExists('RDS', RDSNo) then If RowExists('RDS', RDSNo) then
Set_Property(@Window : '.EDL_RDS', 'TEXT', RDSNo) Set_Property(@Window : '.EDL_RDS', 'TEXT', RDSNo)
GoSub Refresh GoSub Refresh
end else end else
ResponseValue = Set_Property(@Window, '@responsevalue', 0) ResponseValue = Set_Property(@Window, '@responsevalue', 0)
Post_Event(@Window, 'CLOSE') Post_Event(@Window, 'CLOSE')
end end
End Event End Event
Event WINDOW.CLOSE(CancelFlag) Event WINDOW.CLOSE(CancelFlag)
ResponseValue = Get_Property(@Window, '@responsevalue') ResponseValue = Get_Property(@Window, '@responsevalue')
End_Dialog(@Window, ResponseValue) End_Dialog(@Window, ResponseValue)
end event 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')
Rds_Services('SignUnloadExtra1', RDSNo, @USER4) Rds_Services('SignUnloadExtra1', RDSNo, @USER4)
If Error_Services('NoError') then If Error_Services('NoError') then
Msg(@Window, 'Unload Extra 1 Signed!') Msg(@Window, 'Unload Extra 1 Signed!')
end else end else
Msg(@Window, Error_Services('GetMessage')) Msg(@Window, Error_Services('GetMessage'))
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')
Rds_Services('SignLoadExtra1', RDSNo, @USER4) Rds_Services('SignLoadExtra1', RDSNo, @USER4)
If Error_Services('NoError') then If Error_Services('NoError') then
Msg(@Window, 'Load Extra 1 Signed!') Msg(@Window, 'Load Extra 1 Signed!')
end else end else
Msg(@Window, Error_Services('GetMessage')) 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')
Rds_Services('SignUnloadExtra2', RDSNo, @USER4) Rds_Services('SignUnloadExtra2', RDSNo, @USER4)
If Error_Services('NoError') then If Error_Services('NoError') then
Msg(@Window, 'Unload Extra 2 Signed!') Msg(@Window, 'Unload Extra 2 Signed!')
end else end else
Msg(@Window, Error_Services('GetMessage')) Msg(@Window, Error_Services('GetMessage'))
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')
Rds_Services('SignLoadExtra2', RDSNo, @USER4) Rds_Services('SignLoadExtra2', RDSNo, @USER4)
If Error_Services('NoError') then If Error_Services('NoError') then
Msg(@Window, 'Load Extra 2 Signed!') Msg(@Window, 'Load Extra 2 Signed!')
end else end else
Msg(@Window, Error_Services('GetMessage')) Msg(@Window, Error_Services('GetMessage'))
end end
GoSub Refresh GoSub Refresh
end event end event
//Clear Signature Buttons //Clear Signature Buttons
Event PUB_CLEAR_UNLOAD_EX_1.CLICK() Event PUB_CLEAR_UNLOAD_EX_1.CLICK()
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT') RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
Rds_Services('UnsignUnloadExtra1', RDSNo, @User4) Rds_Services('UnsignUnloadExtra1', RDSNo, @User4)
If Error_Services('NoError') then If Error_Services('NoError') then
Msg(@Window, 'Unload Extra 1 unsigned!') Msg(@Window, 'Unload Extra 1 unsigned!')
end else end else
Msg(@Window, Error_Services('GetMessage')) Msg(@Window, Error_Services('GetMessage'))
end end
GoSub Refresh GoSub Refresh
end event end event
Event PUB_CLEAR_LOAD_EX_1.CLICK() Event PUB_CLEAR_LOAD_EX_1.CLICK()
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT') RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
Rds_Services('UnsignLoadExtra1', RDSNo, @User4) Rds_Services('UnsignLoadExtra1', RDSNo, @User4)
If Error_Services('NoError') then If Error_Services('NoError') then
Msg(@Window, 'Load Extra 1 unsigned!') Msg(@Window, 'Load Extra 1 unsigned!')
end else end else
Msg(@Window, Error_Services('GetMessage')) Msg(@Window, Error_Services('GetMessage'))
end end
GoSub Refresh GoSub Refresh
end event end event
Event PUB_CLEAR_UNLOAD_EX_2.CLICK() Event PUB_CLEAR_UNLOAD_EX_2.CLICK()
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT') RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
Rds_Services('UnsignUnloadExtra2', RDSNo, @User4) Rds_Services('UnsignUnloadExtra2', RDSNo, @User4)
If Error_Services('NoError') then If Error_Services('NoError') then
Msg(@Window, 'Unload Extra 2 unsigned!') Msg(@Window, 'Unload Extra 2 unsigned!')
end else end else
Msg(@Window, Error_Services('GetMessage')) Msg(@Window, Error_Services('GetMessage'))
end end
GoSub Refresh GoSub Refresh
end event end event
Event PUB_CLEAR_LOAD_EX_2.CLICK() Event PUB_CLEAR_LOAD_EX_2.CLICK()
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT') RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
Rds_Services('UnsignLoadExtra2', RDSNo, @User4) Rds_Services('UnsignLoadExtra2', RDSNo, @User4)
If Error_Services('NoError') then If Error_Services('NoError') then
Msg(@Window, 'Load Extra 2 unsigned!') Msg(@Window, 'Load Extra 2 unsigned!')
end else end else
Msg(@Window, Error_Services('GetMessage')) Msg(@Window, Error_Services('GetMessage'))
end end
GoSub Refresh GoSub Refresh
end event end event
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// INTERNAL GO-SUBS // INTERNAL GO-SUBS
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
*************** ***************
Refresh: 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)
//Unload Extra 1 //Unload Extra 1
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$> UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
UnloadExtra1UserFirstLast = xlate( 'LSL_USERS', UnloadExtra1Signature, 'FIRST_LAST', 'X' ) UnloadExtra1UserFirstLast = xlate( 'LSL_USERS', UnloadExtra1Signature, 'FIRST_LAST', 'X' )
UnloadExtra1Date = OConv(RDSRec<RDS_OP_OUT_EX1_DATE$>, 'D') UnloadExtra1Date = OConv(RDSRec<RDS_OP_OUT_EX1_DATE$>, 'D')
UnloadExtra1Time = Oconv(RDSRec<RDS_OP_OUT_EX1_TIME$>, 'MT') UnloadExtra1Time = Oconv(RDSRec<RDS_OP_OUT_EX1_TIME$>, 'MT')
//Load Extra 1 //Load Extra 1
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$> LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
LoadExtra1UserFirstLast = xlate( 'LSL_USERS', LoadExtra1Signature, 'FIRST_LAST', 'X' ) LoadExtra1UserFirstLast = xlate( 'LSL_USERS', LoadExtra1Signature, 'FIRST_LAST', 'X' )
LoadExtra1Date = Oconv(RDSRec<RDS_OP_IN_EX2_DATE$>, 'D') LoadExtra1Date = Oconv(RDSRec<RDS_OP_IN_EX2_DATE$>, 'D')
LoadExtra1Time = Oconv(RDSRec<RDS_OP_IN_EX2_TIME$>, 'MT') LoadExtra1Time = Oconv(RDSRec<RDS_OP_IN_EX2_TIME$>, 'MT')
//Unload Extra 2 //Unload Extra 2
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$> UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
UnloadExtra2UserFirstLast = xlate( 'LSL_USERS', UnloadExtra2Signature, 'FIRST_LAST', 'X' ) UnloadExtra2UserFirstLast = xlate( 'LSL_USERS', UnloadExtra2Signature, 'FIRST_LAST', 'X' )
UnloadExtra2Date = Oconv(RDSRec<RDS_OP_OUT_EX2_DATE$>, 'D') UnloadExtra2Date = Oconv(RDSRec<RDS_OP_OUT_EX2_DATE$>, 'D')
UnloadExtra2Time = Oconv(RDSRec<RDS_OP_OUT_EX2_TIME$>, 'MT') UnloadExtra2Time = Oconv(RDSRec<RDS_OP_OUT_EX2_TIME$>, 'MT')
//Load Extra 2 //Load Extra 2
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$> LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
LoadExtra2UserFirstLast = xlate( 'LSL_USERS', LoadExtra2Signature, 'FIRST_LAST', 'X' ) LoadExtra2UserFirstLast = xlate( 'LSL_USERS', LoadExtra2Signature, 'FIRST_LAST', 'X' )
LoadExtra2Date = Oconv(RDSRec<RDS_OP_IN_EX3_DATE$>, 'D') LoadExtra2Date = Oconv(RDSRec<RDS_OP_IN_EX3_DATE$>, 'D')
LoadExtra2Time = Oconv(RDSRec<RDS_OP_IN_EX3_TIME$>, 'MT') LoadExtra2Time = Oconv(RDSRec<RDS_OP_IN_EX3_TIME$>, 'MT')
//Populate text fields //Populate text fields
Set_Property(@Window : '.EDL_UNLOAD_EX_1_USER', 'TEXT', UnloadExtra1UserFirstLast) 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_DATE', 'TEXT', UnloadExtra1Date)
Set_Property(@Window : '.EDL_UNLOAD_EX_1_TIME', 'TEXT', UnloadExtra1Time) 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_USER', 'TEXT', LoadExtra1UserFirstLast)
Set_Property(@Window : '.EDL_LOAD_EX_1_DATE', 'TEXT', LoadExtra1Date) Set_Property(@Window : '.EDL_LOAD_EX_1_DATE', 'TEXT', LoadExtra1Date)
Set_Property(@Window : '.EDL_LOAD_EX_1_TIME', 'TEXT', LoadExtra1Time) 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_USER', 'TEXT', UnloadExtra2UserFirstLast)
Set_Property(@Window : '.EDL_UNLOAD_EX_2_DATE', 'TEXT', UnloadExtra2Date) Set_Property(@Window : '.EDL_UNLOAD_EX_2_DATE', 'TEXT', UnloadExtra2Date)
Set_Property(@Window : '.EDL_UNLOAD_EX_2_TIME', 'TEXT', UnloadExtra2Time) 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_USER', 'TEXT', LoadExtra2UserFirstLast)
Set_Property(@Window : '.EDL_LOAD_EX_2_DATE', 'TEXT', LoadExtra2Date) Set_Property(@Window : '.EDL_LOAD_EX_2_DATE', 'TEXT', LoadExtra2Date)
Set_Property(@Window : '.EDL_LOAD_EX_2_TIME', 'TEXT', LoadExtra2Time) 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')
end end
return return

View File

@ -148,8 +148,9 @@ Event WINDOW.CREATE(CreateParam)
If (AccessLevel EQ -1) OR (AccessLevel EQ '') then If (AccessLevel EQ -1) OR (AccessLevel EQ '') then
Set_Property(@Window, '@CLOSE', 1) Set_Property(@Window, '@CLOSE', 1)
Post_Event(@Window, 'CLOSE')
// This prevents OI from throwing an error message if the cancel button is pressed on the LOGON form. // This prevents OI from throwing an error message if the cancel button is pressed on the LOGON form.
If (Server EQ 'MESST5201') or (Server EQ 'MESST5202') then Utility("DESTROY", "SYSTEM") //If (Server EQ 'MESST5201') or (Server EQ 'MESST5202') then Utility("DESTROY", "SYSTEM")
end end
If AccessLevel GE 0 then If AccessLevel GE 0 then

View File

@ -1,149 +1,149 @@
Compile function NDW_MANUAL_WAFER_COUNT_EVENTS(CtrlEntId, Event, @PARAMS) Compile function NDW_MANUAL_WAFER_COUNT_EVENTS(CtrlEntId, Event, @PARAMS)
/*********************************************************************************************************************** /***********************************************************************************************************************
This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written 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. permission from Infineon.
Name : NDW_Manual_Wafer_Count_Events Name : NDW_Manual_Wafer_Count_Events
Description : This function acts as a commuter module for all events related to this window. 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 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 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 execute Basic+ logic without having use the Form Designer to make the association, although this is
limited to the events which are currently promoted. limited to the events which are currently promoted.
If the form needs to call the commuter module directly then the QuickEvent parameters should be If the form needs to call the commuter module directly then the QuickEvent parameters should be
formatted like this: formatted like this:
'@SELF','@EVENT',['@PARAM1','@PARAMx'] '@SELF','@EVENT',['@PARAM1','@PARAMx']
Parameters : Parameters :
CtrlEntId [in] -- The fully qualified name of the control calling the promoted event 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 Event [in] -- The event being executed. See the Notes section regarding "PRE" events
Param1-15 [in] -- Additional event parameter holders 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 EventFlow [out] -- Set to 1 or 0 so the calling event knows whether or not to chain forward. See comments in
EVENT_SETUP insert EVENT_SETUP insert
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
04/12/24 djs Created initial commuter module. 04/12/24 djs Created initial commuter module.
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
#window NDW_MANUAL_WAFER_COUNT #window NDW_MANUAL_WAFER_COUNT
$Insert EVENT_SETUP $Insert EVENT_SETUP
$Insert APP_INSERTS $Insert APP_INSERTS
$Insert MSG_EQUATES $Insert MSG_EQUATES
Equ MSG_WIDTH$ to 650 Equ MSG_WIDTH$ to 650
Equ Comma$ to ',' Equ Comma$ to ','
Declare function Environment_Services, Logging_Services, Datetime Declare function Environment_Services, Logging_Services, Datetime
Declare subroutine Set_Property, Logging_Services Declare subroutine Set_Property, Logging_Services
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WaferCounter' LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WaferCounter'
LogDate = Oconv(Date(), 'D4/') LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS') LogTime = Oconv(Time(), 'MTS')
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Wafer Counter Verify Log.csv' LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Wafer Counter Verify Log.csv'
Headers = 'Logging DTM':@FM:'Logging Text' Headers = 'Logging DTM':@FM:'Logging Text'
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$) objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
// 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
Transfer Event to OIEvent Transfer Event to OIEvent
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
Return EventFlow else EVENT_CONTINUE$ Return EventFlow else EVENT_CONTINUE$
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// EVENT HANDLERS // EVENT HANDLERS
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Event WINDOW.CREATE(CreateParam) Event WINDOW.CREATE(CreateParam)
If CreateParam NE '' then If CreateParam NE '' then
Set_Property(@Window, '@EXPECTED_QTY', CreateParam) Set_Property(@Window, '@EXPECTED_QTY', CreateParam)
List = '' List = ''
For SlotIndex = 0 to 25 For SlotIndex = 0 to 25
List<SlotIndex + 1> = SlotIndex List<SlotIndex + 1> = SlotIndex
Next SlotIndex Next SlotIndex
Set_Property(@Window:'.CBO_WAFER_COUNT', 'LIST', List) Set_Property(@Window:'.CBO_WAFER_COUNT', 'LIST', List)
end else end else
ErrorMsg = 'Wafer counter error. Null expected quantity passed in.' ErrorMsg = 'Wafer counter error. Null expected quantity passed in.'
LogData = '' LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H') LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = @User4 LogData<2> = @User4
LogData<3> = ErrorMsg LogData<3> = ErrorMsg
Logging_Services('AppendLog', objLog, LogData, @RM, @FM) Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
MsgStruct = '' MsgStruct = ''
MsgStruct<MTEXTWIDTH$> = MSG_WIDTH$ MsgStruct<MTEXTWIDTH$> = MSG_WIDTH$
Msg(@Window, MsgStruct, 'PROCESS_ERROR', '', ErrorMsg) Msg(@Window, MsgStruct, 'PROCESS_ERROR', '', ErrorMsg)
End_Dialog(@Window, '') End_Dialog(@Window, '')
end end
End Event End Event
Event CBO_WAFER_COUNT.CHANGED(NewData) Event CBO_WAFER_COUNT.CHANGED(NewData)
Set_Property(@Window:'.PUB_OK', 'ENABLED', (NewData NE '') ) Set_Property(@Window:'.PUB_OK', 'ENABLED', (NewData NE '') )
end event end event
Event PUB_OK.CLICK() Event PUB_OK.CLICK()
ExpectedQty = Get_Property(@Window, '@EXPECTED_QTY') ExpectedQty = Get_Property(@Window, '@EXPECTED_QTY')
WaferCount = Get_Property(@Window:'.CBO_WAFER_COUNT', 'TEXT') WaferCount = Get_Property(@Window:'.CBO_WAFER_COUNT', 'TEXT')
If ExpectedQty EQ WaferCount then If ExpectedQty EQ WaferCount then
LogData = '' LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H') LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = @User4 LogData<2> = @User4
LogData<3> = 'Expected quantity equals entered quantity. Proceeding...' LogData<3> = 'Expected quantity equals entered quantity. Proceeding...'
Logging_Services('AppendLog', objLog, LogData, @RM, @FM) Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
End_Dialog(@Window, WaferCount) End_Dialog(@Window, WaferCount)
end else end else
ErrorMsg = 'Wafer counter error. Expected quantity "':ExpectedQty:'" does not match entered quantity "':WaferCount:'".' ErrorMsg = 'Wafer counter error. Expected quantity "':ExpectedQty:'" does not match entered quantity "':WaferCount:'".'
LogData = '' LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H') LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = @User4 LogData<2> = @User4
LogData<3> = ErrorMsg LogData<3> = ErrorMsg
Logging_Services('AppendLog', objLog, LogData, @RM, @FM) Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
MsgStruct = '' MsgStruct = ''
MsgStruct<MTEXTWIDTH$> = MSG_WIDTH$ MsgStruct<MTEXTWIDTH$> = MSG_WIDTH$
Msg(@Window, MsgStruct, 'PROCESS_ERROR', '', ErrorMsg) Msg(@Window, MsgStruct, 'PROCESS_ERROR', '', ErrorMsg)
end end
end event end event
Event PUB_CANCEL.CLICK() Event PUB_CANCEL.CLICK()
LogData = '' LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H') LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = @User4 LogData<2> = @User4
LogData<3> = 'Manual verification process canceled' LogData<3> = 'Manual verification process canceled'
Logging_Services('AppendLog', objLog, LogData, @RM, @FM) Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
End_Dialog(@Window, '') End_Dialog(@Window, '')
end event end event

View File

@ -1,120 +1,120 @@
Compile function NDW_PM_OVERRIDE_EVENTS(CtrlEntId, Event, @PARAMS) Compile function NDW_PM_OVERRIDE_EVENTS(CtrlEntId, Event, @PARAMS)
/*********************************************************************************************************************** /***********************************************************************************************************************
This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written 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. permission from Infineon.
Name : NDW_PM_Override_Events Name : NDW_PM_Override_Events
Description : This function acts as a commuter module for all events related to this window. 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 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 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 execute Basic+ logic without having use the Form Designer to make the association, although this is
limited to the events which are currently promoted. limited to the events which are currently promoted.
If the form needs to call the commuter module directly then the QuickEvent parameters should be If the form needs to call the commuter module directly then the QuickEvent parameters should be
formatted like this: formatted like this:
'@SELF','@EVENT',['@PARAM1','@PARAMx'] '@SELF','@EVENT',['@PARAM1','@PARAMx']
Parameters : Parameters :
CtrlEntId [in] -- The fully qualified name of the control calling the promoted event 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 Event [in] -- The event being executed. See the Notes section regarding "PRE" events
Param1-15 [in] -- Additional event parameter holders 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 EventFlow [out] -- Set to 1 or 0 so the calling event knows whether or not to chain forward. See comments in
EVENT_SETUP insert EVENT_SETUP insert
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
06/25/24 djs Created initial commuter module. 06/25/24 djs Created initial commuter module.
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
#window NDW_PM_OVERRIDE #window NDW_PM_OVERRIDE
$Insert APP_INSERTS $Insert APP_INSERTS
$Insert EVENT_SETUP $Insert EVENT_SETUP
$Insert REACTOR_LOG_EQUATES $Insert REACTOR_LOG_EQUATES
$insert MESSAGE_BOX_EQUATES $insert MESSAGE_BOX_EQUATES
Declare subroutine Placedialog, Message_Box Declare subroutine Placedialog, Message_Box
// 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
Transfer Event to OIEvent Transfer Event to OIEvent
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 else GoToEvent Event for CtrlEntId else
// Event not implemented // Event not implemented
end end
Return EventFlow or 1 Return EventFlow or 1
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// EVENT HANDLERS // EVENT HANDLERS
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Event WINDOW.CREATE(CreateParam) Event WINDOW.CREATE(CreateParam)
RlNo = CreateParam RlNo = CreateParam
PmOrderTypes = Xlate('REACTOR_LOG', RLNo, REACTOR_LOG_CHECKLIST_TYPE$, 'X') PmOrderTypes = Xlate('REACTOR_LOG', RLNo, REACTOR_LOG_CHECKLIST_TYPE$, 'X')
for each PmOrderType in PmOrderTypes using @VM setting dummy for each PmOrderType in PmOrderTypes using @VM setting dummy
Begin Case Begin Case
Case PmOrderType _EQC 'ASM_HTR_TUBE_CHANGE' Case PmOrderType _EQC 'ASM_HTR_TUBE_CHANGE'
Set_Property(@Window:'.CHB_ASM_HTR_TUBE_CHANGE', 'ENABLED', True$) Set_Property(@Window:'.CHB_ASM_HTR_TUBE_CHANGE', 'ENABLED', True$)
Case PmOrderType _EQC 'SEMIANNUAL_PM' Case PmOrderType _EQC 'SEMIANNUAL_PM'
Set_Property(@Window:'.CHB_SEMIANNUAL_PM', 'ENABLED', True$) Set_Property(@Window:'.CHB_SEMIANNUAL_PM', 'ENABLED', True$)
Case PmOrderType _EQC 'ANNUAL_PM' Case PmOrderType _EQC 'ANNUAL_PM'
Set_Property(@Window:'.CHB_ANNUAL_PM', 'ENABLED', True$) Set_Property(@Window:'.CHB_ANNUAL_PM', 'ENABLED', True$)
Case Otherwise$ Case Otherwise$
Null Null
End Case End Case
Next PmOrderType Next PmOrderType
Placedialog(-2, -2) Placedialog(-2, -2)
End Event End Event
Event PUB_SUBMIT.CLICK() Event PUB_SUBMIT.CLICK()
OverrideData = '' OverrideData = ''
SelectedTypes = '' SelectedTypes = ''
If Get_Property(@Window:'.CHB_ASM_HTR_TUBE_CHANGE', 'CHECK') then SelectedTypes<0, -1> = "ASM_HTR_TUBE_CHANGE" If Get_Property(@Window:'.CHB_ASM_HTR_TUBE_CHANGE', 'CHECK') then SelectedTypes<0, -1> = "ASM_HTR_TUBE_CHANGE"
If Get_Property(@Window:'.CHB_SEMIANNUAL_PM', 'CHECK') then SelectedTypes<0, -1> = 'SEMIANNUAL_PM' If Get_Property(@Window:'.CHB_SEMIANNUAL_PM', 'CHECK') then SelectedTypes<0, -1> = 'SEMIANNUAL_PM'
If Get_Property(@Window:'.CHB_ANNUAL_PM', 'CHECK') then SelectedTypes<0, -1> = 'ANNUAL_PM' If Get_Property(@Window:'.CHB_ANNUAL_PM', 'CHECK') then SelectedTypes<0, -1> = 'ANNUAL_PM'
If SelectedTypes EQ '' then If SelectedTypes EQ '' then
Message_Box(@Window, "You must select at least one PM type!", "Error", MSG_ICON_EXCLAM$) Message_Box(@Window, "You must select at least one PM type!", "Error", MSG_ICON_EXCLAM$)
return return
end else end else
OverrideData<1, 1> = SelectedTypes OverrideData<1, 1> = SelectedTypes
end end
OverrideData<2, 1> = Get_Property(@Window:'.EDB_COMMENT', 'TEXT') OverrideData<2, 1> = Get_Property(@Window:'.EDB_COMMENT', 'TEXT')
If OverrideData<2, 1> EQ '' or Len(OverrideData<2, 1>) LT 4 then If OverrideData<2, 1> EQ '' or Len(OverrideData<2, 1>) LT 4 then
Message_Box(@Window, "Your comment must be at least 4 characters!", "Error", MSG_ICON_EXCLAM$) Message_Box(@Window, "Your comment must be at least 4 characters!", "Error", MSG_ICON_EXCLAM$)
return return
end end
End_Dialog(@Window, OverrideData) End_Dialog(@Window, OverrideData)
end event end event
Event PUB_CANCEL.CLICK() Event PUB_CANCEL.CLICK()
End_Dialog(@Window, '') End_Dialog(@Window, '')
end event end event

View File

@ -1,189 +1,189 @@
Function NDW_Remove_Supplements_Events(CtrlEntId, Event, @PARAMS) Function NDW_Remove_Supplements_Events(CtrlEntId, Event, @PARAMS)
/*********************************************************************************************************************** /***********************************************************************************************************************
This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written 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. permission from Infineon.
Name : NDW_Remove_Supplements_Events Name : NDW_Remove_Supplements_Events
Description : This function acts as a commuter module for all events related to this window. 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 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 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 execute Basic+ logic without having use the Form Designer to make the association, although this is
limited to the events which are currently promoted. limited to the events which are currently promoted.
If the form needs to call the commuter module directly then the QuickEvent parameters should be If the form needs to call the commuter module directly then the QuickEvent parameters should be
formatted like this: formatted like this:
'@SELF','@EVENT',['@PARAM1','@PARAMx'] '@SELF','@EVENT',['@PARAM1','@PARAMx']
Parameters : Parameters :
CtrlEntId [in] -- The fully qualified name of the control calling the promoted event 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 Event [in] -- The event being executed. See the Notes section regarding "PRE" events
Param1-15 [in] -- Additional event parameter holders 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 EventFlow [out] -- Set to 1 or 0 so the calling event knows whether or not to chain forward. See comments in
EVENT_SETUP insert EVENT_SETUP insert
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
05/24/18 djs Created initial commuter module. 05/24/18 djs Created initial commuter module.
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
#Window NDW_ADD_SUPPLEMENT #Window NDW_ADD_SUPPLEMENT
$insert APP_INSERTS $insert APP_INSERTS
$insert EVENT_SETUP $insert EVENT_SETUP
$insert MSG_EQUATES $insert MSG_EQUATES
$Insert SUPPLEMENTS_EQUATES $Insert SUPPLEMENTS_EQUATES
Declare subroutine SRP_Show_Window, Supplement_Services Declare subroutine SRP_Show_Window, Supplement_Services
Declare function SRP_Array, Supplement_Services Declare function SRP_Array, Supplement_Services
SubclassInfo = Form_Services('FindSubclassControl') SubclassInfo = Form_Services('FindSubclassControl')
Subclass = SubclassInfo<1> Subclass = SubclassInfo<1>
// 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
Transfer Event to OIEvent Transfer Event to OIEvent
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
Return EventFlow else EVENT_CONTINUE$ Return EventFlow else EVENT_CONTINUE$
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Events // Events
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Event WINDOW.CREATE(CreateParam) Event WINDOW.CREATE(CreateParam)
Result = '' Result = ''
SupplInst = '' SupplInst = ''
GoSub Setup_OLE_Controls GoSub Setup_OLE_Controls
If CreateParam NE '' then If CreateParam NE '' then
Gosub PopulateStages Gosub PopulateStages
Set_Property(@Window : '.CMB_STAGE', 'LIST', StageList) Set_Property(@Window : '.CMB_STAGE', 'LIST', StageList)
Set_Property(@Window : '.CMB_STAGE', 'SELPOS', 1) Set_Property(@Window : '.CMB_STAGE', 'SELPOS', 1)
Set_Property(@Window : '.PUB_OK', 'ENABLED', True$) Set_Property(@Window : '.PUB_OK', 'ENABLED', True$)
end end
Gosub CheckForSupplements Gosub CheckForSupplements
SRP_Show_Window(@Window, '', 'C', 'C', 1, '', False$, False$, FormSize) SRP_Show_Window(@Window, '', 'C', 'C', 1, '', False$, False$, FormSize)
end event end event
Event WINDOW.CLOSE(CancelFlag) Event WINDOW.CLOSE(CancelFlag)
Result = '' Result = ''
Result<1> = False$ Result<1> = False$
End_Dialog(@Window, Result) End_Dialog(@Window, Result)
end event end event
Event CMB_STAGE.CHANGED(CreateParam) Event CMB_STAGE.CHANGED(CreateParam)
Gosub CheckForSupplements Gosub CheckForSupplements
end event end event
Event PUB_OK.CLICK() Event PUB_OK.CLICK()
Removal = '' Removal = ''
StageSel = Get_Property(@Window : '.CMB_STAGE', 'TEXT') StageSel = Get_Property(@Window : '.CMB_STAGE', 'TEXT')
StageSel = Field(StageSel, '-', 2) StageSel = Field(StageSel, '-', 2)
For Each RDSKey in @ReCur1 Using @VM For Each RDSKey in @ReCur1 Using @VM
Removal = Supplement_Services('DeleteSupplementByLotStage', @USER4, 'RDS', RDSKey, StageSel) Removal = Supplement_Services('DeleteSupplementByLotStage', @USER4, 'RDS', RDSKey, StageSel)
Next RDSKey Next RDSKey
If Error_Services('NoError') then If Error_Services('NoError') then
Result = True$ Result = True$
End else End else
End End
End_Dialog(@Window, Result) End_Dialog(@Window, Result)
end event end event
Event PUB_CANCEL.CLICK() Event PUB_CANCEL.CLICK()
Result = '' Result = ''
Result<1> = False$ Result<1> = False$
End_Dialog(@Window, Result) End_Dialog(@Window, Result)
end event end event
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs // Internal GoSubs
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Setup_OLE_Controls: Setup_OLE_Controls:
Qualify = '' Qualify = ''
Qualify<1> = 1 Qualify<1> = 1
Qualify<4> = 0 Qualify<4> = 0
return return
PopulateStages: PopulateStages:
DraftStageList = '' DraftStageList = ''
PlainTextStages = '' PlainTextStages = ''
RDSList = SRP_Array("Rotate", CreateParam) RDSList = SRP_Array("Rotate", CreateParam)
@ReCur1 = RDSList<5> @ReCur1 = RDSList<5>
For Each RDSKey in @ReCur1 Using @VM For Each RDSKey in @ReCur1 Using @VM
RDSStageList = Supplement_Services('GetStagesForLot', 'RDS', RDSKey) RDSStageList = Supplement_Services('GetStagesForLot', 'RDS', RDSKey)
RDSStageList2 = RDSStageList<2> :@FM: RDSStageList<1> RDSStageList2 = RDSStageList<2> :@FM: RDSStageList<1>
RDSStageList3 = SRP_Array("Rotate", RDSStageList2) RDSStageList3 = SRP_Array("Rotate", RDSStageList2)
DraftStageList := RDSStageList3 :@FM DraftStageList := RDSStageList3 :@FM
Next RDSKey Next RDSKey
Swap @VM with ' -' in DraftStageList Swap @VM with ' -' in DraftStageList
StageList = SRP_Array('Clean', DraftStageList, "TrimAndMakeUnique", @FM) StageList = SRP_Array('Clean', DraftStageList, "TrimAndMakeUnique", @FM)
return return
CheckForSupplements: CheckForSupplements:
SuppFound = '' SuppFound = ''
StageSel = Get_Property(@Window : '.CMB_STAGE', 'TEXT') StageSel = Get_Property(@Window : '.CMB_STAGE', 'TEXT')
Stage = Field(StageSel, '-', 2) Stage = Field(StageSel, '-', 2)
For Each RDSKey in @ReCur1 Using @VM For Each RDSKey in @ReCur1 Using @VM
SuppFound = Supplement_Services('GetSupplementsForLot', 'RDS', RDSKey, Stage) SuppFound = Supplement_Services('GetSupplementsForLot', 'RDS', RDSKey, Stage)
Until SuppFound NE False$ Until SuppFound NE False$
Next RDSKey Next RDSKey
If SuppFound NE False$ then If SuppFound NE False$ then
SuppText = Xlate('SUPPLEMENTS', SuppFound, SUPPLEMENTS_SUPPL_TEXT$, 'X', '') SuppText = Xlate('SUPPLEMENTS', SuppFound, SUPPLEMENTS_SUPPL_TEXT$, 'X', '')
If SuppText NE '' then If SuppText NE '' then
Set_Property(@Window : '.EDL_SUPPL_INST', 'TEXT', SuppText) Set_Property(@Window : '.EDL_SUPPL_INST', 'TEXT', SuppText)
Set_Property(@Window : '.PUB_OK', 'ENABLED', True$) Set_Property(@Window : '.PUB_OK', 'ENABLED', True$)
end else end else
Set_Property(@Window : '.EDL_SUPPL_INST', 'TEXT', '') Set_Property(@Window : '.EDL_SUPPL_INST', 'TEXT', '')
Set_Property(@Window : '.PUB_OK', 'ENABLED', False$) Set_Property(@Window : '.PUB_OK', 'ENABLED', False$)
end end
end else end else
Set_Property(@Window : '.EDL_SUPPL_INST', 'TEXT', '') Set_Property(@Window : '.EDL_SUPPL_INST', 'TEXT', '')
Set_Property(@Window : '.PUB_OK', 'ENABLED', False$) Set_Property(@Window : '.PUB_OK', 'ENABLED', False$)
end end
return return

File diff suppressed because it is too large Load Diff

View File

@ -429,21 +429,23 @@ SAPCreate:
SendReason = 'Initial Tx (Auto)' SendReason = 'Initial Tx (Auto)'
SendDtm = ICONV(OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS'),'DT') SendDtm = ICONV(OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS'),'DT')
SendUser = @User4 SendUser = @User4
TaskID = RTI_Task_Submit('', 'PRINT_SHIPMENT_DEV', ShipNo, ShipRec, 1, True$) * TaskID = RTI_Task_Submit('', 'PRINT_SHIPMENT_DEV', ShipNo, ShipRec, 1, True$)
Logging_Services('AppendLog', objLog, LoggingDTM : @FM : WONo : @FM: ShipNo : @FM : ' Called PRINT_SHIPMENT_DEV Task. TaskID : ' : TaskID, @RM, @FM, '') Print_Shipment_Dev(ShipNo, ShipRec, True$, True$)
If TaskID NE 0 then
Done = False$ * Logging_Services('AppendLog', objLog, LoggingDTM : @FM : WONo : @FM: ShipNo : @FM : ' Called PRINT_SHIPMENT_DEV Task. TaskID : ' : TaskID, @RM, @FM, '')
TaskResponse = '' * If TaskID NE 0 then
Loop * Done = False$
Status = RTI_Task_Status(TaskID, TaskResponse) * TaskResponse = ''
If (Status EQ 'COMPLETED') OR (Status EQ 'ERROR') then Done = True$ * Loop
Until Done * Status = RTI_Task_Status(TaskID, TaskResponse)
Repeat * If (Status EQ 'COMPLETED') OR (Status EQ 'ERROR') then Done = True$
end else * Until Done
// Track if task id wasn't created at all. * Repeat
end * end else
Logging_Services('AppendLog', objLog, LoggingDTM : @FM : WONo : @FM: ShipNo : @FM : ' Finished PRINT_SHIPMENT_DEV Task. Status : ' : Status, @RM, @FM, '') * // Track if task id wasn't created at all.
* end
* Logging_Services('AppendLog', objLog, LoggingDTM : @FM : WONo : @FM: ShipNo : @FM : ' Finished PRINT_SHIPMENT_DEV Task. Status : ' : Status, @RM, @FM, '')
StatusError = Get_Status(errCode) StatusError = Get_Status(errCode)
Logging_Services('AppendLog', objLog, LoggingDTM : @FM : WONo : @FM: ShipNo : @FM : ' GetStatus PRINT_SHIPMENT_DEV Task. ErrCode : ' : ErrCode, @RM, @FM, '') Logging_Services('AppendLog', objLog, LoggingDTM : @FM : WONo : @FM: ShipNo : @FM : ' GetStatus PRINT_SHIPMENT_DEV Task. ErrCode : ' : ErrCode, @RM, @FM, '')
If (Index(errCode, 'SHELLEXECUTE', 1)) NE 0 then StatusError = 0 If (Index(errCode, 'SHELLEXECUTE', 1)) NE 0 then StatusError = 0

View File

@ -1,79 +1,79 @@
Function Pm_API(@API) Function Pm_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 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. permission from SRP Computer Solutions, Inc.
Name : Pm_API Name : Pm_API
Description : API logic for the Pm resource. Description : API logic for the Pm resource.
Notes : All web APIs should include the API_SETUP insert. This will provide several useful variables: 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.) 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). APIURL - The URL for the API entry point (e.g., api.mysite.com/v1).
FullEndpointURL - The URL submitted by the client, including query params. FullEndpointURL - The URL submitted by the client, including query params.
FullEndpointURLNoQuery - The URL submitted by the client, excluding query params. FullEndpointURLNoQuery - The URL submitted by the client, excluding query params.
EndpointSegment - The URL endpoint segment. EndpointSegment - The URL endpoint segment.
ParentURL - The URL path preceeding the current endpoint. ParentURL - The URL path preceeding the current endpoint.
CurrentAPI - The name of this stored procedure. CurrentAPI - The name of this stored procedure.
Parameters : Parameters :
API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]: API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
- APIPattern must follow this structure Pm[.ID.[<Property>]] - APIPattern must follow this structure Pm[.ID.[<Property>]]
- HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc. - HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
Examples: Examples:
- Pm.POST - Pm.POST
- Pm.ID.PUT - Pm.ID.PUT
- Pm.ID.firstName.GET - Pm.ID.firstName.GET
Response [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API 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 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 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. value is only helpful if the developers want to use it for debug purposes.
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
06/05/24 xxx Original programmer. 06/05/24 xxx Original programmer.
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$insert APP_INSERTS $insert APP_INSERTS
$insert API_SETUP $insert API_SETUP
$insert HTTP_INSERTS $insert HTTP_INSERTS
GoToAPI else GoToAPI else
// The specific resource endpoint doesn't have a API handler yet. // 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.') HTTP_Services('SetResponseStatus', 204, 'This is a valid endpoint but a web API handler has not yet been created.')
end end
Return Response OR '' Return Response OR ''
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Endpoint Handlers // Endpoint Handlers
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
API pm.HEAD API pm.HEAD
API pm.GET API pm.GET
HTTP_Resource_Services('LoremIpsum') HTTP_Resource_Services('LoremIpsum')
end api end api
API pm.ID.HEAD API pm.ID.HEAD
API pm.ID.GET API pm.ID.GET
HTTP_Resource_Services('LoremIpsum') HTTP_Resource_Services('LoremIpsum')
end api end api
API pm.ID.POST API pm.ID.POST
HTTP_Resource_Services('LoremIpsum') HTTP_Resource_Services('LoremIpsum')
end api end api

View File

@ -1,64 +1,64 @@
Function Pm_spec_API(@API) Function Pm_spec_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 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. permission from SRP Computer Solutions, Inc.
Name : Pm_spec_API Name : Pm_spec_API
Description : API logic for the Pm_spec resource. Description : API logic for the Pm_spec resource.
Notes : All web APIs should include the API_SETUP insert. This will provide several useful variables: 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.) 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). APIURL - The URL for the API entry point (e.g., api.mysite.com/v1).
FullEndpointURL - The URL submitted by the client, including query params. FullEndpointURL - The URL submitted by the client, including query params.
FullEndpointURLNoQuery - The URL submitted by the client, excluding query params. FullEndpointURLNoQuery - The URL submitted by the client, excluding query params.
EndpointSegment - The URL endpoint segment. EndpointSegment - The URL endpoint segment.
ParentURL - The URL path preceeding the current endpoint. ParentURL - The URL path preceeding the current endpoint.
CurrentAPI - The name of this stored procedure. CurrentAPI - The name of this stored procedure.
Parameters : Parameters :
API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]: API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
- APIPattern must follow this structure Pm_spec[.ID.[<Property>]] - APIPattern must follow this structure Pm_spec[.ID.[<Property>]]
- HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc. - HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
Examples: Examples:
- Pm_spec.POST - Pm_spec.POST
- Pm_spec.ID.PUT - Pm_spec.ID.PUT
- Pm_spec.ID.firstName.GET - Pm_spec.ID.firstName.GET
Response [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API 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 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 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. value is only helpful if the developers want to use it for debug purposes.
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
06/05/24 xxx Original programmer. 06/05/24 xxx Original programmer.
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$insert APP_INSERTS $insert APP_INSERTS
$insert API_SETUP $insert API_SETUP
$insert HTTP_INSERTS $insert HTTP_INSERTS
GoToAPI else GoToAPI else
// The specific resource endpoint doesn't have a API handler yet. // 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.') HTTP_Services('SetResponseStatus', 204, 'This is a valid endpoint but a web API handler has not yet been created.')
end end
Return Response OR '' Return Response OR ''
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Endpoint Handlers // Endpoint Handlers
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
API pm_spec.HEAD API pm_spec.HEAD
API pm_spec.GET API pm_spec.GET
HTTP_Resource_Services('LoremIpsum') HTTP_Resource_Services('LoremIpsum')
end api end api

View File

@ -1,154 +1,154 @@
Compile function PM_Spec_Services(@Service, @Params) Compile function PM_Spec_Services(@Service, @Params)
/*********************************************************************************************************************** /***********************************************************************************************************************
Name : PM_Spec_Services Name : PM_Spec_Services
Description : Handler program for all PM_SPEC services. Description : Handler program for all PM_SPEC services.
Notes : Application errors should be logged using the Error Services module. There are a few methodological 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 assumptions built into way errors are managed which are important to understand in order to properly
work with Error Services: work with Error Services:
- The term 'top' refers to the originating procedure of a call stack and the term 'bottom' refers to - 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 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 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 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'. 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 - 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 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 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 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 itself. This continues as the call stack 'bubbles' its way back to the top to where the
originating procedure is waiting. originating procedure is waiting.
- Native OpenInsight commands that handle errors (e.g., Set_Status, Set_FSError, Set_EventStatus) - 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 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. 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 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 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 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 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.) 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 - Service modules will use the SERVICE_SETUP insert and therefore automatically clear out any
error conditions that were set before. error conditions that were set before.
Parameters : Parameters :
Service [in] -- Name of the service being requested Service [in] -- Name of the service being requested
Param1-10 [in/out] -- Additional request parameter holders Param1-10 [in/out] -- Additional request parameter holders
Response [out] -- Response to be sent back to the Controller (MCP) or requesting procedure Response [out] -- Response to be sent back to the Controller (MCP) or requesting procedure
Metadata : Metadata :
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
03/29/24 djs Original programmer. 03/29/24 djs Original programmer.
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$Insert APP_INSERTS $Insert APP_INSERTS
$Insert SERVICE_SETUP $Insert SERVICE_SETUP
$Insert PM_EQUATES $Insert PM_EQUATES
$Insert PM_SPEC_EQUATES $Insert PM_SPEC_EQUATES
$Insert TOOL_EQUATES $Insert TOOL_EQUATES
// Reduce Modes // Reduce Modes
Equ NEW_EXIST$ To 0 Equ NEW_EXIST$ To 0
Equ NEXT_CUR$ To 1 Equ NEXT_CUR$ To 1
Equ ADD_EXIST$ To 2 Equ ADD_EXIST$ To 2
Declare subroutine Error_Services, Reduce, Push.Select, Pop.Select Declare subroutine Error_Services, Reduce, Push.Select, Pop.Select
GoToService GoToService
Return Response or "" Return Response or ""
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Service Parameter Options // Service Parameter Options
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Options BOOLEAN = True$, False$ Options BOOLEAN = True$, False$
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// SERVICES // SERVICES
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Service UpdatePMCompDtm(PMSpecID) Service UpdatePMCompDtm(PMSpecID)
F1 = '' F1 = ''
F2 = '' F2 = ''
F3 = '' F3 = ''
F4 = '' F4 = ''
Push.Select(F1, F2, F3, F4) Push.Select(F1, F2, F3, F4)
ErrorMsg = '' ErrorMsg = ''
If (PMSpecID NE '') then If (PMSpecID NE '') then
If RowExists('PM_SPEC', PMSpecID) then If RowExists('PM_SPEC', PMSpecID) then
TableName = "PM" TableName = "PM"
Flag = "" Flag = ""
Done = False$ Done = False$
CursorVar = "" CursorVar = ""
GoSub ClearCursors GoSub ClearCursors
SortList = "#COMP_DTM" SortList = "#COMP_DTM"
ReduceScript = "WITH {PMS_ID} EQ ":PMSpecID ReduceScript = "WITH {PMS_ID} EQ ":PMSpecID
Mode = NEXT_CUR$ Mode = NEXT_CUR$
Reduce(ReduceScript, SortList, Mode, TableName, CursorVar, Flag) Reduce(ReduceScript, SortList, Mode, TableName, CursorVar, Flag)
If Flag then If Flag then
Select TableName By SortList Using CursorVar then Select TableName By SortList Using CursorVar then
Open TableName To FileVar then Open TableName To FileVar then
Loop Loop
ReadNext Key Using CursorVar By AT else Done = TRUE$ ReadNext Key Using CursorVar By AT else Done = TRUE$
Until Done Until Done
Read Rec From FileVar, Key then Read Rec From FileVar, Key then
NewStopDtm = Rec<PM_COMP_DTM$> NewStopDtm = Rec<PM_COMP_DTM$>
Done = True$ Done = True$
Open 'PM_SPEC' to hPMSpec then Open 'PM_SPEC' to hPMSpec then
WriteV NewStopDtm on hPMSpec, PMSpecID, PM_SPEC_LAST_PM_COMP_DTM$ else WriteV NewStopDtm on hPMSpec, PMSpecID, PM_SPEC_LAST_PM_COMP_DTM$ else
ErrorMsg = 'Error in ':Service:' service. Error writing LAST_PM_COMP_DTM on PM_SPEC record ':PMSpecID:'.' ErrorMsg = 'Error in ':Service:' service. Error writing LAST_PM_COMP_DTM on PM_SPEC record ':PMSpecID:'.'
end end
end else end else
ErrorMsg = 'Error in ':Service:' service. Error opening PM_SPEC table.' ErrorMsg = 'Error in ':Service:' service. Error opening PM_SPEC table.'
end end
end else end else
ErrorMsg = 'Error in ':Service:' service. Error reading PM record ':Key:'.' ErrorMsg = 'Error in ':Service:' service. Error reading PM record ':Key:'.'
end end
Repeat Repeat
end else end else
ErrorMsg = 'Error in ':Service:' service. Error opening PM table.' ErrorMsg = 'Error in ':Service:' service. Error opening PM table.'
end end
end else end else
ErrorMsg = 'Error in ':Service:' service. Error calling Select on PM table.' ErrorMsg = 'Error in ':Service:' service. Error calling Select on PM table.'
end end
end else end else
ErrorMsg = 'Error in ':Service:' service. Error calling Reduce on PM table.' ErrorMsg = 'Error in ':Service:' service. Error calling Reduce on PM table.'
end end
end else end else
ErrorMsg = 'Error in ':Service:' service. PM_SPEC record ':PMSpecID:' does not exist!' ErrorMsg = 'Error in ':Service:' service. PM_SPEC record ':PMSpecID:' does not exist!'
end end
end else end else
ErrorMsg = 'Error in ':Service:' service. Null PMSpecID passed into service!' ErrorMsg = 'Error in ':Service:' service. Null PMSpecID passed into service!'
end end
Pop.Select(F1, F2, F3, F4) Pop.Select(F1, F2, F3, F4)
If ErrorMsg NE '' then If ErrorMsg NE '' then
Error_Services('Add', ErrorMsg) Error_Services('Add', ErrorMsg)
Response = False$ Response = False$
end else end else
Repsponse = True$ Repsponse = True$
end end
end service end service
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs // Internal GoSubs
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ClearCursors: ClearCursors:
For counter = 0 To 8 For counter = 0 To 8
ClearSelect counter ClearSelect counter
Next counter Next counter
return return

View File

@ -1,90 +1,90 @@
Compile function PROVE_IN_OVERRIDE_EVENTS(CtrlEntId, Event, @PARAMS) Compile function PROVE_IN_OVERRIDE_EVENTS(CtrlEntId, Event, @PARAMS)
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
#window PROVE_IN_OVERRIDE #window PROVE_IN_OVERRIDE
$Insert APP_INSERTS $Insert APP_INSERTS
$Insert REACTOR_EQUATES $Insert REACTOR_EQUATES
$insert Message_Box_Equates $insert Message_Box_Equates
Declare subroutine Placedialog, Message_Box Declare subroutine Placedialog, Message_Box
GoToEvent Event for CtrlEntId else GoToEvent Event for CtrlEntId else
// Event not implemented // Event not implemented
end end
Return EventFlow or 1 Return EventFlow or 1
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// EVENT HANDLERS // EVENT HANDLERS
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Event WINDOW.CREATE(CreateParam) Event WINDOW.CREATE(CreateParam)
ReactNo = CreateParam ReactNo = CreateParam
Placedialog(-2, -2) Placedialog(-2, -2)
ProveInTypes = Xlate('REACTOR', ReactNo, REACTOR_PROVE_IN_TYPE$, 'X') ProveInTypes = Xlate('REACTOR', ReactNo, REACTOR_PROVE_IN_TYPE$, 'X')
for each ProveInType in ProveInTypes using @VM setting dummy for each ProveInType in ProveInTypes using @VM setting dummy
Begin Case Begin Case
Case ProveInType _EQC 'changeover' Case ProveInType _EQC 'changeover'
Set_Property(@Window:'.CHB_CHANGEOVER', 'ENABLED', True$) Set_Property(@Window:'.CHB_CHANGEOVER', 'ENABLED', True$)
Case ProveInType _EQC 'initiate_idle' Case ProveInType _EQC 'initiate_idle'
Set_Property(@Window:'.CHB_IDLE_SHUTDOWN', 'ENABLED', True$) Set_Property(@Window:'.CHB_IDLE_SHUTDOWN', 'ENABLED', True$)
Case ProveInType _EQC 'idle' Case ProveInType _EQC 'idle'
Set_Property(@Window:'.CHB_IDLE_STARTUP', 'ENABLED', True$) Set_Property(@Window:'.CHB_IDLE_STARTUP', 'ENABLED', True$)
Case ProveInType _EQC 'intrusive_maint' Case ProveInType _EQC 'intrusive_maint'
Set_Property(@Window:'.CHB_INTRUSIVE_MAINT', 'ENABLED', True$) Set_Property(@Window:'.CHB_INTRUSIVE_MAINT', 'ENABLED', True$)
Case Otherwise$ Case Otherwise$
Null Null
End Case End Case
Next ProveInType Next ProveInType
End Event End Event
Event PUB_SUBMIT.CLICK() Event PUB_SUBMIT.CLICK()
OverrideData = '' OverrideData = ''
SelectedTypes = '' SelectedTypes = ''
If Get_Property(@Window:'.CHB_CHANGEOVER', 'CHECK') then If Get_Property(@Window:'.CHB_CHANGEOVER', 'CHECK') then
SelectedTypes = "CHANGEOVER" SelectedTypes = "CHANGEOVER"
end end
If Get_Property(@Window:'.CHB_IDLE_SHUTDOWN', 'CHECK') then If Get_Property(@Window:'.CHB_IDLE_SHUTDOWN', 'CHECK') then
If SelectedTypes NE '' then If SelectedTypes NE '' then
SelectedTypes := @VM SelectedTypes := @VM
end end
SelectedTypes := 'INITIATE_IDLE' SelectedTypes := 'INITIATE_IDLE'
end end
If Get_Property(@Window:'.CHB_IDLE_STARTUP', 'CHECK') then If Get_Property(@Window:'.CHB_IDLE_STARTUP', 'CHECK') then
If SelectedTypes NE '' then If SelectedTypes NE '' then
SelectedTypes := @VM SelectedTypes := @VM
end end
SelectedTypes := 'IDLE' SelectedTypes := 'IDLE'
end end
If Get_Property(@Window:'.CHB_INTRUSIVE_MAINT', 'CHECK') then If Get_Property(@Window:'.CHB_INTRUSIVE_MAINT', 'CHECK') then
If SelectedTypes NE '' then If SelectedTypes NE '' then
SelectedTypes := @VM SelectedTypes := @VM
end end
SelectedTypes := 'INTRUSIVE_MAINT' SelectedTypes := 'INTRUSIVE_MAINT'
end end
If SelectedTypes EQ '' then If SelectedTypes EQ '' then
Message_Box(@Window, "You must select at least one prove in type!", "Error", MSG_ICON_EXCLAM$) Message_Box(@Window, "You must select at least one prove in type!", "Error", MSG_ICON_EXCLAM$)
return return
end else end else
OverrideData<1, 1> = SelectedTypes OverrideData<1, 1> = SelectedTypes
end end
OverrideData<2, 1> = Get_Property(@Window:'.EDB_COMMENT', 'TEXT') OverrideData<2, 1> = Get_Property(@Window:'.EDB_COMMENT', 'TEXT')
If OverrideData<2, 1> EQ '' or Len(OverrideData<2, 1>) LT 4 then If OverrideData<2, 1> EQ '' or Len(OverrideData<2, 1>) LT 4 then
Message_Box(@Window, "Your comment must be at least 4 characters!", "Error", MSG_ICON_EXCLAM$) Message_Box(@Window, "Your comment must be at least 4 characters!", "Error", MSG_ICON_EXCLAM$)
return return
end end
End_Dialog(@Window, OverrideData) End_Dialog(@Window, OverrideData)
end event end event
Event PUB_CANCEL.CLICK() Event PUB_CANCEL.CLICK()
End_Dialog(@Window, '') End_Dialog(@Window, '')
end event end event

View File

@ -1,106 +1,106 @@
Function Reactorloadings_API(@API) Function Reactorloadings_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 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. permission from SRP Computer Solutions, Inc.
Name : Reactorloadings_API Name : Reactorloadings_API
Description : API logic for the Reactorloadings resource. Description : API logic for the Reactorloadings resource.
Notes : All web APIs should include the API_SETUP insert. This will provide several useful variables: 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.) 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). APIURL - The URL for the API entry point (e.g., api.mysite.com/v1).
FullEndpointURL - The URL submitted by the client, including query params. FullEndpointURL - The URL submitted by the client, including query params.
FullEndpointURLNoQuery - The URL submitted by the client, excluding query params. FullEndpointURLNoQuery - The URL submitted by the client, excluding query params.
EndpointSegment - The URL endpoint segment. EndpointSegment - The URL endpoint segment.
ParentURL - The URL path preceeding the current endpoint. ParentURL - The URL path preceeding the current endpoint.
CurrentAPI - The name of this stored procedure. CurrentAPI - The name of this stored procedure.
Parameters : Parameters :
API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]: API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
- APIPattern must follow this structure Reactorloadings[.ID.[<Property>]] - APIPattern must follow this structure Reactorloadings[.ID.[<Property>]]
- HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc. - HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
Examples: Examples:
- Reactorloadings.POST - Reactorloadings.POST
- Reactorloadings.ID.PUT - Reactorloadings.ID.PUT
- Reactorloadings.ID.firstName.GET - Reactorloadings.ID.firstName.GET
Response [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API 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 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 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. value is only helpful if the developers want to use it for debug purposes.
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
05/22/24 xxx Original programmer. 05/22/24 xxx Original programmer.
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
Declare function Oi_Wizard_Services, Memberof, Oi_Wizard_Services Declare function Oi_Wizard_Services, Memberof, Oi_Wizard_Services
Declare subroutine Reactor_Services, Oi_Wizard_Services Declare subroutine Reactor_Services, Oi_Wizard_Services
$insert APP_INSERTS $insert APP_INSERTS
$insert API_SETUP $insert API_SETUP
$insert HTTP_INSERTS $insert HTTP_INSERTS
GoToAPI else GoToAPI else
// The specific resource endpoint doesn't have a API handler yet. // 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.') HTTP_Services('SetResponseStatus', 204, 'This is a valid endpoint but a web API handler has not yet been created.')
end end
Return Response OR '' Return Response OR ''
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Endpoint Handlers // Endpoint Handlers
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
API reactorloadings.POST API reactorloadings.POST
OIWizardID = '' OIWizardID = ''
CurrUser = '' CurrUser = ''
Cookies = HTTP_Services('GetHTTPCookie') Cookies = HTTP_Services('GetHTTPCookie')
For each Cookie in Cookies using ';' For each Cookie in Cookies using ';'
Key = Trim(Field(Cookie, '=', 1)) Key = Trim(Field(Cookie, '=', 1))
If Key EQ 'sessionID' then If Key EQ 'sessionID' then
OIWizardID = Field(Cookie, '=', 2) OIWizardID = Field(Cookie, '=', 2)
end end
Next Cookie Next Cookie
If OIWizardID NE '' then If OIWizardID NE '' then
// Call validate session to extend session expiry // Call validate session to extend session expiry
OI_Wizard_Services('ValidateSession', OIWizardID) OI_Wizard_Services('ValidateSession', OIWizardID)
CurrUser = Xlate('OI_WIZARD', OIWizardID, 'EMPLOYEE_ID', 'X') CurrUser = Xlate('OI_WIZARD', OIWizardID, 'EMPLOYEE_ID', 'X')
end end
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID) ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
If ValidSession then If ValidSession then
If Memberof(CurrUser, 'OI_ADMIN') OR Memberof(CurrUser, 'LEAD') OR Memberof(CurrUser, 'SUPERVISOR') then If Memberof(CurrUser, 'OI_ADMIN') OR Memberof(CurrUser, 'LEAD') OR Memberof(CurrUser, 'SUPERVISOR') then
Body = HTTP_Services('GetHTTPPostString', True$) Body = HTTP_Services('GetHTTPPostString', True$)
// The POST string will have been encoded so use percent (URL) decoding. // The POST string will have been encoded so use percent (URL) decoding.
DecodedJSON = HTTP_Services('DecodePercentString', Body) DecodedJSON = HTTP_Services('DecodePercentString', Body)
If SRP_JSON(objBody, 'Parse', Body) EQ '' then If SRP_JSON(objBody, 'Parse', Body) EQ '' then
rdsNo = SRP_JSON(objBody, 'GetValue', 'rdsNo') rdsNo = SRP_JSON(objBody, 'GetValue', 'rdsNo')
reactorNo = SRP_JSON(objBody, 'GetValue', 'reactorNo') reactorNo = SRP_JSON(objBody, 'GetValue', 'reactorNo')
SRP_JSON(objBody, 'Release') SRP_JSON(objBody, 'Release')
end end
Reactor_Services('RemoveRDSFromReactorLoad', rdsNo, reactorNo, CurrUser) Reactor_Services('RemoveRDSFromReactorLoad', rdsNo, reactorNo, CurrUser)
If Error_Services('NoError') then If Error_Services('NoError') then
HTTP_Services('SetResponseStatus', 200, 'RDS Successfully removed.') HTTP_Services('SetResponseStatus', 200, 'RDS Successfully removed.')
end else end else
ErrCode = Error_Services('GetMessage') ErrCode = Error_Services('GetMessage')
HTTP_Services('SetResponseStatus', 500, ErrCode) HTTP_Services('SetResponseStatus', 500, ErrCode)
end end
end else end else
HTTP_Services('SetResponseStatus', 503, 'User is not authorized!') HTTP_Services('SetResponseStatus', 503, 'User is not authorized!')
end end
End else End else
HTTP_Services('SetResponseStatus', 401, 'User must be signed in to access this resource.') HTTP_Services('SetResponseStatus', 401, 'User must be signed in to access this resource.')
end end
end api end api

View File

@ -3287,7 +3287,7 @@ Service CreateReactorProveInOrder(ReactNo, ProveInType)
Retries = Retries - 1 Retries = Retries - 1
HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'POST', ProveInUrl, 'Accept':@VM:'*/*', '', '', '', '', '', '') HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'POST', ProveInUrl, 'Accept':@VM:'*/*', '', '', '', False$, False$, '')
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
@ -3340,6 +3340,7 @@ Service CreateReactorProveInOrder(ReactNo, ProveInType)
end service end service
Service GetReactorProveInStatus(ReactNo) Service GetReactorProveInStatus(ReactNo)
Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log' Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log'
ColumnWidths = 20 : @FM : 15 : @FM : 300 ColumnWidths = 20 : @FM : 15 : @FM : 300
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ReactorProveIn' LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ReactorProveIn'
@ -3386,7 +3387,7 @@ Service GetReactorProveInStatus(ReactNo)
Retries = Retries - 1 Retries = Retries - 1
HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'GET', ProveInUrl, 'Accept':@VM:'*/*', '', '', '', '', '', '') HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'GET', ProveInUrl, 'Accept':@VM:'*/*', '', '', '', False$, False$, '')
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
@ -3488,7 +3489,7 @@ Service CancelReactorProveIn(ReactNo, OrderId)
Retries = Retries - 1 Retries = Retries - 1
HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'PUT', ProveInUrl, 'Accept':@VM:'*/*', '', '', '', '', '', '') HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'PUT', ProveInUrl, 'Accept':@VM:'*/*', '', '', '', False$, False$, '')
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

@ -1,254 +1,254 @@
Function REACT_ITEM_Actions(Action, CalcColName, FSList, Handle, Name, FMC, Record, Status, OrigRecord, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10) Function REACT_ITEM_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 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. permission from Infineon.
Name : RDS_Actions Name : RDS_Actions
Description : Handles calculated columns and MFS calls for the current table. 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. 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. If called from outside of a calculated column these will need to be set and restored.
Parameters : Parameters :
Action [in] -- Name of the action to be taken 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 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. 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 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 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. 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 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 entire handle structure that the Basic+ Open statement would provide. Normally set by a
calling MFS. calling MFS.
Name [in] -- The name (key) of the record or file being accessed. 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. 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 Record [in] -- The entire record (for record-oriented functions) or a newly-created handle (for
"get handle" functions). Normally set by a calling MFS. "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 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. 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 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 automatically being assigned by the WRITE_RECORD and DELETE_RECORD actions within
BASE_MFS. BASE_MFS.
Param1-10 [in/out] -- Additional request parameter holders Param1-10 [in/out] -- Additional request parameter holders
ActionFlow [out] -- Used to control the action chain (see the ACTION_SETUP insert for more information.) 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 Can also be used to return a special value, such as the results of the CalcField
method. method.
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
04/10/18 dmb Original programmer. 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 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 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) with the most recent associated TOOL_PARMS record. (related by PSN and Reactor)
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$Insert FILE.SYSTEM.EQUATES $Insert FILE.SYSTEM.EQUATES
$Insert ACTION_SETUP $Insert ACTION_SETUP
$Insert RDS_EQUATES $Insert RDS_EQUATES
$Insert CLEAN_INSP_EQUATES $Insert CLEAN_INSP_EQUATES
$Insert COMPANY_EQUATES $Insert COMPANY_EQUATES
$Insert RDS_LAYER_EQUATES $Insert RDS_LAYER_EQUATES
$Insert TOOL_PARMS_EQUATES $Insert TOOL_PARMS_EQUATES
$Insert RLIST_EQUATES $Insert RLIST_EQUATES
$Insert APP_INSERTS $Insert APP_INSERTS
$Insert QA_MET_EQUATES $Insert QA_MET_EQUATES
$Insert PRS_STAGE_EQUATES $Insert PRS_STAGE_EQUATES
$Insert WO_MAT_EQUATES $Insert WO_MAT_EQUATES
$Insert WO_MAT_QA_EQUATES $Insert WO_MAT_QA_EQUATES
Equ COMMA$ to ',' Equ COMMA$ to ','
Declare function Error_Services, Database_Services, obj_RDS_Test, Logging_Services, Environment_Services, SRP_Math Declare function Error_Services, Database_Services, obj_RDS_Test, Logging_Services, Environment_Services, SRP_Math
Declare function Tool_Parms_Services, Signature_Services, obj_WO_Mat_QA, Datetime, Override_Services, obj_WO_Mat Declare function Tool_Parms_Services, Signature_Services, obj_WO_Mat_QA, Datetime, Override_Services, obj_WO_Mat
Declare subroutine Error_Services, Database_Services, Logging_Services, Set_Status, Schedule_Services_Dev Declare subroutine Error_Services, Database_Services, Logging_Services, Set_Status, Schedule_Services_Dev
Declare subroutine Work_Order_Services, Material_Services, Set_FSError Declare subroutine Work_Order_Services, Material_Services, Set_FSError
If KeyID then GoSub Initialize_System_Variables If KeyID then GoSub Initialize_System_Variables
Begin Case Begin Case
Case Action _EQC 'CalculateColumn' ; GoSub CalculateColumn Case Action _EQC 'CalculateColumn' ; GoSub CalculateColumn
Case Action _EQC 'READ_RECORD_PRE' ; GoSub READ_RECORD_PRE Case Action _EQC 'READ_RECORD_PRE' ; GoSub READ_RECORD_PRE
Case Action _EQC 'READ_RECORD' ; GoSub READ_RECORD Case Action _EQC 'READ_RECORD' ; GoSub READ_RECORD
Case Action _EQC 'READONLY_RECORD_PRE' ; GoSub READONLY_RECORD_PRE Case Action _EQC 'READONLY_RECORD_PRE' ; GoSub READONLY_RECORD_PRE
Case Action _EQC 'READONLY_RECORD' ; GoSub READONLY_RECORD Case Action _EQC 'READONLY_RECORD' ; GoSub READONLY_RECORD
Case Action _EQC 'WRITE_RECORD_PRE' ; GoSub WRITE_RECORD_PRE Case Action _EQC 'WRITE_RECORD_PRE' ; GoSub WRITE_RECORD_PRE
Case Action _EQC 'WRITE_RECORD' ; GoSub WRITE_RECORD Case Action _EQC 'WRITE_RECORD' ; GoSub WRITE_RECORD
Case Action _EQC 'DELETE_RECORD_PRE' ; GoSub DELETE_RECORD_PRE Case Action _EQC 'DELETE_RECORD_PRE' ; GoSub DELETE_RECORD_PRE
Case Action _EQC 'DELETE_RECORD' ; GoSub DELETE_RECORD Case Action _EQC 'DELETE_RECORD' ; GoSub DELETE_RECORD
Case Otherwise$ ; Status = 'Invalid Action' Case Otherwise$ ; Status = 'Invalid Action'
End Case End Case
If KeyID then GoSub Restore_System_Variables If KeyID then GoSub Restore_System_Variables
If Assigned(ActionFlow) else ActionFlow = ACTION_CONTINUE$ If Assigned(ActionFlow) else ActionFlow = ACTION_CONTINUE$
Return ActionFlow Return ActionFlow
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Calculated Columns // Calculated Columns
// //
// The typical structure of a calculated column will look like this: // The typical structure of a calculated column will look like this:
// //
// Declare function Database_Services // Declare function Database_Services
// //
// @ANS = Database_Services('CalculateColumn') // @ANS = Database_Services('CalculateColumn')
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CalculateColumn: CalculateColumn:
// Make sure the ActionFlow return variable is cleared in case nothing is calculated. // Make sure the ActionFlow return variable is cleared in case nothing is calculated.
ActionFlow = '' ActionFlow = ''
return return
// ----- MFS calls ----------------------------------------------------------------------------------------------------- // ----- MFS calls -----------------------------------------------------------------------------------------------------
READ_RECORD_PRE: READ_RECORD_PRE:
// In order to stop a record from being read in this action these lines of code must be used: // In order to stop a record from being read in this action these lines of code must be used:
// //
// OrigFileError = 100 : @FM : KeyID // OrigFileError = 100 : @FM : KeyID
// Status = 0 // Status = 0
// Record = '' // Record = ''
// ActionFlow = ACTION_STOP$ // ActionFlow = ACTION_STOP$
return return
READ_RECORD: READ_RECORD:
// In order to stop a record from being read in this action these lines of code must be used: // In order to stop a record from being read in this action these lines of code must be used:
// //
// OrigFileError = 100 : @FM : KeyID // OrigFileError = 100 : @FM : KeyID
// Status = 0 // Status = 0
// Record = '' // Record = ''
return return
READONLY_RECORD_PRE: READONLY_RECORD_PRE:
// In order to stop a record from being read in this action these lines of code must be used: // In order to stop a record from being read in this action these lines of code must be used:
// //
// OrigFileError = 100 : @FM : KeyID // OrigFileError = 100 : @FM : KeyID
// Status = 0 // Status = 0
// Record = '' // Record = ''
// ActionFlow = ACTION_STOP$ // ActionFlow = ACTION_STOP$
return return
READONLY_RECORD: READONLY_RECORD:
// In order to stop a record from being read in this action these lines of code must be used: // In order to stop a record from being read in this action these lines of code must be used:
// //
// OrigFileError = 100 : @FM : KeyID // OrigFileError = 100 : @FM : KeyID
// Status = 0 // Status = 0
// Record = '' // Record = ''
return return
WRITE_RECORD_PRE: WRITE_RECORD_PRE:
ErrMsg = '' ErrMsg = ''
//Req'd parameter checks //Req'd parameter checks
ItemType = {RI_TYPE} ItemType = {RI_TYPE}
If ItemType EQ '' then If ItemType EQ '' then
ErrMsg := 'Item Type was not specified. ' ErrMsg := 'Item Type was not specified. '
end end
If ErrMsg NE '' then If ErrMsg NE '' then
Error_Services('Add', 'Error Saving Reactor Item: ' : ErrMsg) Error_Services('Add', 'Error Saving Reactor Item: ' : ErrMsg)
OrigFileError = 104:': Error Saving Reactor Item: ' : ErrMsg OrigFileError = 104:': Error Saving Reactor Item: ' : ErrMsg
Status = 0 Status = 0
Record = '' Record = ''
ActionFlow = ACTION_STOP$ ActionFlow = ACTION_STOP$
end end
return return
WRITE_RECORD: WRITE_RECORD:
return return
DELETE_RECORD_PRE: DELETE_RECORD_PRE:
return return
DELETE_RECORD: DELETE_RECORD:
return return
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs // Internal GoSubs
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ClearCursors: ClearCursors:
For counter = 0 to 8 For counter = 0 to 8
ClearSelect counter ClearSelect counter
Next counter Next counter
return return
Initialize_System_Variables: Initialize_System_Variables:
// Save these for restoration later // Save these for restoration later
SaveDict = @DICT SaveDict = @DICT
SaveID = @ID SaveID = @ID
SaveRecord = @RECORD SaveRecord = @RECORD
OrigFileError = @FILE.ERROR OrigFileError = @FILE.ERROR
// Now make sure @DICT, ID, and @RECORD are populated // Now make sure @DICT, ID, and @RECORD are populated
CurrentDictName = '' CurrentDictName = ''
If @DICT then If @DICT then
DictHandle = @DICT<1, 2> DictHandle = @DICT<1, 2>
Locate DictHandle in @TABLES(5) Using @FM Setting fPos then Locate DictHandle in @TABLES(5) Using @FM Setting fPos then
CurrentDictName = Field(@TABLES(0), @FM, fPos, 1) CurrentDictName = Field(@TABLES(0), @FM, fPos, 1)
end end
end end
If CurrentDictName NE DictName then If CurrentDictName NE DictName then
Open DictName to @DICT else Status = 'Unable to initialize @DICT' Open DictName to @DICT else Status = 'Unable to initialize @DICT'
end end
@ID = KeyID @ID = KeyID
If Record else If Record else
// Record might not have been passed in. Read the record from the database table just to make sure. // Record might not have been passed in. Read the record from the database table just to make sure.
@FILE.ERROR = '' @FILE.ERROR = ''
Open TableName to hTable then Open TableName to hTable then
FullFSList = hTable[1, 'F' : @VM] FullFSList = hTable[1, 'F' : @VM]
BFS = FullFSList[-1, 'B' : @SVM] BFS = FullFSList[-1, 'B' : @SVM]
LastHandle = hTable[-1, 'B' : \0D\] LastHandle = hTable[-1, 'B' : \0D\]
FileHandle = \0D\ : LastHandle[1, @VM] FileHandle = \0D\ : LastHandle[1, @VM]
Call @BFS(READO.RECORD, BFS, FileHandle, KeyID, FMC, Record, ReadOStatus) Call @BFS(READO.RECORD, BFS, FileHandle, KeyID, FMC, Record, ReadOStatus)
end end
end end
@RECORD = Record @RECORD = Record
return return
Restore_System_Variables: Restore_System_Variables:
Transfer SaveDict to @DICT Transfer SaveDict to @DICT
Transfer SaveID to @ID Transfer SaveID to @ID
Transfer SaveRecord to @RECORD Transfer SaveRecord to @RECORD
@FILE.ERROR = OrigFileError @FILE.ERROR = OrigFileError
return return

View File

@ -1,64 +1,64 @@
Function Remotehealthcheck_API(@API) Function Remotehealthcheck_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 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. permission from SRP Computer Solutions, Inc.
Name : Remotehealthcheck_API Name : Remotehealthcheck_API
Description : API logic for the Remotehealthcheck resource. Description : API logic for the Remotehealthcheck resource.
Notes : All web APIs should include the API_SETUP insert. This will provide several useful variables: 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.) 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). APIURL - The URL for the API entry point (e.g., api.mysite.com/v1).
FullEndpointURL - The URL submitted by the client, including query params. FullEndpointURL - The URL submitted by the client, including query params.
FullEndpointURLNoQuery - The URL submitted by the client, excluding query params. FullEndpointURLNoQuery - The URL submitted by the client, excluding query params.
EndpointSegment - The URL endpoint segment. EndpointSegment - The URL endpoint segment.
ParentURL - The URL path preceeding the current endpoint. ParentURL - The URL path preceeding the current endpoint.
CurrentAPI - The name of this stored procedure. CurrentAPI - The name of this stored procedure.
Parameters : Parameters :
API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]: API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
- APIPattern must follow this structure Remotehealthcheck[.ID.[<Property>]] - APIPattern must follow this structure Remotehealthcheck[.ID.[<Property>]]
- HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc. - HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
Examples: Examples:
- Remotehealthcheck.POST - Remotehealthcheck.POST
- Remotehealthcheck.ID.PUT - Remotehealthcheck.ID.PUT
- Remotehealthcheck.ID.firstName.GET - Remotehealthcheck.ID.firstName.GET
Response [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API 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 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 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. value is only helpful if the developers want to use it for debug purposes.
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
07/17/24 xxx Original programmer. 07/17/24 xxx Original programmer.
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$insert APP_INSERTS $insert APP_INSERTS
$insert API_SETUP $insert API_SETUP
$insert HTTP_INSERTS $insert HTTP_INSERTS
GoToAPI else GoToAPI else
// The specific resource endpoint doesn't have a API handler yet. // The specific resource endpoint doesn't have a API handler yet.
HTTP_Services('SetResponseStatus', 200, 'This is a valid endpoint but a web API handler has not yet been created.') HTTP_Services('SetResponseStatus', 200, 'This is a valid endpoint but a web API handler has not yet been created.')
end end
Return Response OR '' Return Response OR ''
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Endpoint Handlers // Endpoint Handlers
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
API remotehealthcheck.HEAD API remotehealthcheck.HEAD
API remotehealthcheck.GET API remotehealthcheck.GET
HTTP_Resource_Services('LoremIpsum') HTTP_Resource_Services('LoremIpsum')
end api end api

View File

@ -77,7 +77,6 @@ Return Response or ""
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Service CalculateMaterialTrackData(RptColumns, LocationFilter, NoMatFlag) Service CalculateMaterialTrackData(RptColumns, LocationFilter, NoMatFlag)
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS') hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
Lock hSysLists, ServiceKeyID then Lock hSysLists, ServiceKeyID then
@ -131,7 +130,7 @@ Service CalculateMaterialTrackData(RptColumns, LocationFilter, NoMatFlag)
PrevReactNo = '' PrevReactNo = ''
PrevWO = '' PrevWO = ''
SelectSent = 'SELECT SCHED_DET_NG WITH STOP_DTM GE ':Today:' BY REACT_NO' SelectSent = 'SELECT SCHED_DET_NG WITH STOP_DTM GE "':OCONV(Today, 'DT'):'" BY REACT_NO'
RList(SelectSent,TARGET_ACTIVELIST$,'','','') RList(SelectSent,TARGET_ACTIVELIST$,'','','')
IF Get_Status(errCode) THEN IF Get_Status(errCode) THEN
@ -432,7 +431,7 @@ DETAIL:
WPDAdjusted = Epi_Part_Services('GetAdjustedWafersPerDayScheduler', EpiPartNo, S.React_Type) WPDAdjusted = Epi_Part_Services('GetAdjustedWafersPerDayScheduler', EpiPartNo, S.React_Type)
If WPDAdjusted NE '' then If WPDAdjusted NE '' then
CPDAdjusted = SRP_Math('CEILING', (WPDAdjusted/25) ) CPDAdjusted = SRP_Math('CEILING', (WPDAdjusted/25) )
CassInCR = DCount(KittCassList, ',') + DCount(PTICassList, ',') + DCount(LoadedCassList, ',') CassInCR = DCount(KitCassList, ',') + DCount(PTICassList, ',') + DCount(LoadedCassList, ',')
CassNeeded = CassInCR - CPDAdjusted CassNeeded = CassInCR - CPDAdjusted
end end
end end

View File

@ -149,7 +149,7 @@ Service GetMaterialTrackReport(RptColumns, LocationFilter, NoMatFlag)
PrevReactNo = '' PrevReactNo = ''
PrevWO = '' PrevWO = ''
SelectSent = 'SELECT SCHED_DET_NG WITH STOP_DTM GE ':Today:' BY REACT_NO' SelectSent = 'SELECT SCHED_DET_NG WITH STOP_DTM GE "':OCONV(Today, 'DT'):'" BY REACT_NO'
RList(SelectSent,TARGET_ACTIVELIST$,'','','') RList(SelectSent,TARGET_ACTIVELIST$,'','','')
IF Get_Status(errCode) THEN IF Get_Status(errCode) THEN
@ -461,7 +461,7 @@ DETAIL:
WPDAdjusted = Epi_Part_Services('GetAdjustedWafersPerDayScheduler', EpiPartNo, S.React_Type) WPDAdjusted = Epi_Part_Services('GetAdjustedWafersPerDayScheduler', EpiPartNo, S.React_Type)
If WPDAdjusted NE '' then If WPDAdjusted NE '' then
CPDAdjusted = SRP_Math('CEILING', (WPDAdjusted/25) ) CPDAdjusted = SRP_Math('CEILING', (WPDAdjusted/25) )
CassInCR = DCount(KittCassList, ',') + DCount(PTICassList, ',') + DCount(LoadedCassList, ',') CassInCR = DCount(KitCassList, ',') + DCount(PTICassList, ',') + DCount(LoadedCassList, ',')
CassNeeded = CassInCR - CPDAdjusted CassNeeded = CassInCR - CPDAdjusted
end end
end end

View File

@ -218,7 +218,7 @@ end service
// Calculates and stores the current inbound pending count for SAP. // Calculates and stores the current inbound pending count for SAP.
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service SetInboundPending() Service SetInboundPending()
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS') hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
Lock hSysLists, ServiceKeyID then Lock hSysLists, ServiceKeyID then
@ -387,7 +387,7 @@ end service
// Gets the incoming SAP transactions and processes them. // Gets the incoming SAP transactions and processes them.
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service GetInboundTransactions() Service GetInboundTransactions()
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS') hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
Lock hSysLists, ServiceKeyID then Lock hSysLists, ServiceKeyID then
SAPHoldStartDateTime = SAP_Services('GetSAPHoldStartDateTime') SAPHoldStartDateTime = SAP_Services('GetSAPHoldStartDateTime')

File diff suppressed because it is too large Load Diff

View File

@ -1,23 +1,23 @@
Compile subroutine ScrapeOEngineInit(void) Compile subroutine ScrapeOEngineInit(void)
#pragma SRP_Precompiler #pragma SRP_Precompiler
$Insert ENVIRON_CONSTANTS $Insert ENVIRON_CONSTANTS
Declare subroutine Set_Env, GetEngineVersion Declare subroutine Set_Env, GetEngineVersion
Declare function RTI_Xlate_Controller Declare function RTI_Xlate_Controller
Version = '' Version = ''
GetEngineVersion(Version) GetEngineVersion(Version)
MajorVersion = Version[1, 'F.'] MajorVersion = Version[1, 'F.']
If MajorVersion GE 10 then If MajorVersion GE 10 then
// Stopgap performance fix for OI 10.2.2 RC1. Revelation will re-enable caching by default in 10.2.2 RC2. // Stopgap performance fix for OI 10.2.2 RC1. Revelation will re-enable caching by default in 10.2.2 RC2.
// Do not invoke this in OI 9 as the function does not exist! // Do not invoke this in OI 9 as the function does not exist!
rv = RTI_Xlate_Controller('EnableCache') rv = RTI_Xlate_Controller('EnableCache')
end end
Set_Env(ENV_DEBUGGER_ENABLED$, 2, 1) Set_Env(ENV_DEBUGGER_ENABLED$, 2, 1)
Set_Env(ENV_DEBUGGER_INTERCEPT_PROC$,'SCRAPE_ENGINE_DEBUGGER_INTERCEPT',1) Set_Env(ENV_DEBUGGER_INTERCEPT_PROC$,'SCRAPE_ENGINE_DEBUGGER_INTERCEPT',1)
return return

View File

@ -1,48 +1,48 @@
Subroutine Scrape_Engine_Debugger_Intercept(Void) Subroutine Scrape_Engine_Debugger_Intercept(Void)
/*********************************************************************************************************************** /***********************************************************************************************************************
This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written 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. permission from SRP Computer Solutions, Inc.
Name : Scrape_Engine_Debugger_Intercept Name : Scrape_Engine_Debugger_Intercept
Description : Handler program for the HTTP Debugger service module. Description : Handler program for the HTTP Debugger service module.
Notes : Service handler for HTTP Requests that abort due to a Runtime Error and the Debugger Intercept Notes : Service handler for HTTP Requests that abort due to a Runtime Error and the Debugger Intercept
has been enabled. has been enabled.
Parameters : Parameters :
Metadata : Metadata :
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
07/25/23 djs Original programmer. 07/25/23 djs Original programmer.
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$insert APP_INSERTS $insert APP_INSERTS
$insert RTI_DEBUG_COMMON $insert RTI_DEBUG_COMMON
Declare function Environment_Services, Logging_Services Declare function Environment_Services, Logging_Services
Declare subroutine Logging_Services Declare subroutine Logging_Services
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Scrape' LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Scrape'
LogDate = Oconv(Date(), 'D4/') LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS') LogTime = Oconv(Time(), 'MTS')
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' OEngine Log.csv' LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' OEngine Log.csv'
Headers = 'Stored Proc Status' : @FM : 'Stored Proc Status Code' : @FM : 'Current Program' : @FM : 'Call Depth' : @FM : 'Line No' : @FM : 'Call Stack' Headers = 'Stored Proc Status' : @FM : 'Stored Proc Status Code' : @FM : 'Current Program' : @FM : 'Call Depth' : @FM : 'Line No' : @FM : 'Call Stack'
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$) objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
LogData = '' LogData = ''
LogData<1> = SPStatus@ LogData<1> = SPStatus@
LogData<2> = SPStatCode@ LogData<2> = SPStatCode@
LogData<3> = Curr_Program@ LogData<3> = Curr_Program@
LogData<4> = CallDepth@ LogData<4> = CallDepth@
LogData<5> = LineNo@ LogData<5> = LineNo@
LogData<6> = CallStack@ LogData<6> = CallStack@
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, '', '', '') Logging_Services('AppendLog', objLog, LogData, @RM, @FM, '', '', '')
Return Return

View File

@ -1,131 +1,131 @@
Function Scrubber_pm_API(@API) Function Scrubber_pm_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 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. permission from SRP Computer Solutions, Inc.
Name : Scrubber_pm_API Name : Scrubber_pm_API
Description : API logic for the Scrubber_pm resource. Description : API logic for the Scrubber_pm resource.
Notes : All web APIs should include the API_SETUP insert. This will provide several useful variables: 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.) 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). APIURL - The URL for the API entry point (e.g., api.mysite.com/v1).
FullEndpointURL - The URL submitted by the client, including query params. FullEndpointURL - The URL submitted by the client, including query params.
FullEndpointURLNoQuery - The URL submitted by the client, excluding query params. FullEndpointURLNoQuery - The URL submitted by the client, excluding query params.
EndpointSegment - The URL endpoint segment. EndpointSegment - The URL endpoint segment.
ParentURL - The URL path preceeding the current endpoint. ParentURL - The URL path preceeding the current endpoint.
CurrentAPI - The name of this stored procedure. CurrentAPI - The name of this stored procedure.
Parameters : Parameters :
API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]: API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
- APIPattern must follow this structure Scrubber_pm[.ID.[<Property>]] - APIPattern must follow this structure Scrubber_pm[.ID.[<Property>]]
- HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc. - HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
Examples: Examples:
- Scrubber_pm.POST - Scrubber_pm.POST
- Scrubber_pm.ID.PUT - Scrubber_pm.ID.PUT
- Scrubber_pm.ID.firstName.GET - Scrubber_pm.ID.firstName.GET
Response [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API 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 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 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. value is only helpful if the developers want to use it for debug purposes.
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
06/05/24 xxx Original programmer. 06/05/24 xxx Original programmer.
***********************************************************************************************************************/ ***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
Declare Subroutine Pm_Services, Http_Services, Logging_Services Declare Subroutine Pm_Services, Http_Services, Logging_Services
Declare function Error_Services, Logging_Services, Environment_Services, Datetime Declare function Error_Services, Logging_Services, Environment_Services, Datetime
$insert APP_INSERTS $insert APP_INSERTS
$insert API_SETUP $insert API_SETUP
$insert HTTP_INSERTS $insert HTTP_INSERTS
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Scrubbers\API' LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Scrubbers\API'
LogDate = Oconv(Date(), 'D4/') LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS') LogTime = Oconv(Time(), 'MTS')
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Tool Log.csv' LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Tool Log.csv'
Headers = 'Logging DTM' : @FM : 'ScrubberID' : @FM : 'Notes' : @FM : 'Message' Headers = 'Logging DTM' : @FM : 'ScrubberID' : @FM : 'Notes' : @FM : 'Message'
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$) objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
GoToAPI else GoToAPI else
// The specific resource endpoint doesn't have a API handler yet. // 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.') HTTP_Services('SetResponseStatus', 204, 'This is a valid endpoint but a web API handler has not yet been created.')
end end
Return Response OR '' Return Response OR ''
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Endpoint Handlers // Endpoint Handlers
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
API scrubber_pm.POST API scrubber_pm.POST
Body = HTTP_Services('GetHTTPPostString') Body = HTTP_Services('GetHTTPPostString')
If Body NE '' then If Body NE '' then
// The POST string will have been encoded so use percent (URL) decoding. // The POST string will have been encoded so use percent (URL) decoding.
PMJson = HTTP_Services('DecodePercentString', Body) PMJson = HTTP_Services('DecodePercentString', Body)
ParseResponse = SRP_JSON(objJson, 'PARSE', PMJson) ParseResponse = SRP_JSON(objJson, 'PARSE', PMJson)
If (ParseResponse EQ '') then If (ParseResponse EQ '') then
EquipmentID = SRP_JSON(objJson, 'GetValue', 'EquipmentId') EquipmentID = SRP_JSON(objJson, 'GetValue', 'EquipmentId')
User = SRP_JSON(objJson, 'GetValue', 'User') User = SRP_JSON(objJson, 'GetValue', 'User')
end else end else
HTTP_Services('SetResponseStatus', 400, 'Unable to parse the JSON data from the request.') HTTP_Services('SetResponseStatus', 400, 'Unable to parse the JSON data from the request.')
end end
end else end else
HTTP_Services('SetResponseStatus', 400, 'JSON object is missing in the body of the request.') HTTP_Services('SetResponseStatus', 400, 'JSON object is missing in the body of the request.')
end end
end api end api
API scrubber_pm.HEAD API scrubber_pm.HEAD
API scrubber_pm.GET API scrubber_pm.GET
HTTP_Resource_Services('LoremIpsum') HTTP_Resource_Services('LoremIpsum')
end api end api
API scrubber_pm.ID.HEAD API scrubber_pm.ID.HEAD
API scrubber_pm.ID.GET API scrubber_pm.ID.GET
ScrubberID = EndpointSegment ScrubberID = EndpointSegment
IF RowExists('TOOL', ScrubberID) then IF RowExists('TOOL', ScrubberID) then
Pm_Services('CompleteScrubberPM', ScrubberID) Pm_Services('CompleteScrubberPM', ScrubberID)
If Error_Services('HasError') then If Error_Services('HasError') then
ErrMsg = Error_Services('GetMessage') ErrMsg = Error_Services('GetMessage')
HTTP_Services('SetResponseStatus', 500, ErrMsg) HTTP_Services('SetResponseStatus', 500, ErrMsg)
LogData = '' LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H') LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = ScrubberID LogData<2> = ScrubberID
LogData<3> = 'Error' LogData<3> = 'Error'
LogData<4> = ErrMsg LogData<4> = ErrMsg
Logging_Services('AppendLog', objLog, LogData, @RM, @FM) Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
end else end else
LogData = '' LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H') LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = ScrubberID LogData<2> = ScrubberID
LogData<3> = 'Success' LogData<3> = 'Success'
LogData<4> = 'Scrubber PM Completion was successful' LogData<4> = 'Scrubber PM Completion was successful'
Logging_Services('AppendLog', objLog, LogData, @RM, @FM) Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
end end
end else end else
ErrMsg = 'Scrubber does not exist!' ErrMsg = 'Scrubber does not exist!'
HTTP_Services('SetResponseStatus', 500, ErrMsg) HTTP_Services('SetResponseStatus', 500, ErrMsg)
LogData = '' LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H') LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = ScrubberID LogData<2> = ScrubberID
LogData<3> = 'Error' LogData<3> = 'Error'
LogData<4> = ErrMsg LogData<4> = ErrMsg
Logging_Services('AppendLog', objLog, LogData, @RM, @FM) Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
end end
end api end api

File diff suppressed because it is too large Load Diff

View File

@ -1,106 +1,106 @@
Compile function System_Healthcheck_Services(@Service, @Params) Compile function System_Healthcheck_Services(@Service, @Params)
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$insert LOGICAL $insert LOGICAL
$Insert ENGINE_HEALTH_EQUATES $Insert ENGINE_HEALTH_EQUATES
Declare Subroutine Error_Services, SRP_Json Declare Subroutine Error_Services, SRP_Json
Declare function System_Healthcheck_Services, Error_Services, SRP_Datetime, SRP_Json Declare function System_Healthcheck_Services, Error_Services, SRP_Datetime, SRP_Json
GoToService GoToService
Return Response or "" Return Response or ""
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// SERVICES // SERVICES
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Service GetEngineLastRunDTM(EngineID) Service GetEngineLastRunDTM(EngineID)
If EngineID NE '' then If EngineID NE '' then
If RowExists('APP_INFO', EngineID) then If RowExists('APP_INFO', EngineID) then
Open "APP_INFO" To AITable then Open "APP_INFO" To AITable then
LastRunDTM = '' LastRunDTM = ''
ReadV LastRunDTM From AITable, EngineID, 1 Then ReadV LastRunDTM From AITable, EngineID, 1 Then
If LastRunDTM NE '' then If LastRunDTM NE '' then
Response = LastRunDTM Response = LastRunDTM
end else end else
Error_Services('Add', 'Error in System_Healthcheck_Services -> GetEngineLastRunDTM: Last Run Time not found') Error_Services('Add', 'Error in System_Healthcheck_Services -> GetEngineLastRunDTM: Last Run Time not found')
end end
end else end else
Error_Services('Add', 'Error in System_Healthcheck_Services -> GetEngineLastRunDTM: Error reading specified engine record') Error_Services('Add', 'Error in System_Healthcheck_Services -> GetEngineLastRunDTM: Error reading specified engine record')
end end
end else end else
Error_Services('Add', 'Error in System_Healthcheck_Services -> GetEngineLastRunDTM: Unable to open APP_INFO table') Error_Services('Add', 'Error in System_Healthcheck_Services -> GetEngineLastRunDTM: Unable to open APP_INFO table')
end end
end else end else
Error_Services('Add', 'Error in System_Healthcheck_Services -> GetEngineLastRunDTM: No engine record found') Error_Services('Add', 'Error in System_Healthcheck_Services -> GetEngineLastRunDTM: No engine record found')
end end
end else end else
Error_Services('Add', 'Error in System_Healthcheck_Services -> GetEngineLastRunDTM: No Engine ID entered') Error_Services('Add', 'Error in System_Healthcheck_Services -> GetEngineLastRunDTM: No Engine ID entered')
end end
End Service End Service
Service GetEngineHealthInfo(EngineID) Service GetEngineHealthInfo(EngineID)
EngineHealthInfo = '' EngineHealthInfo = ''
If EngineID NE '' then If EngineID NE '' then
If RowExists('APP_INFO', EngineID) then If RowExists('APP_INFO', EngineID) then
LastRunDTM = System_HealthCheck_Services('GetEngineLastRunDTM', EngineID) LastRunDTM = System_HealthCheck_Services('GetEngineLastRunDTM', EngineID)
If Error_Services('NoError') then If Error_Services('NoError') then
CurrDTM = SRP_Datetime('Now') CurrDTM = SRP_Datetime('Now')
EngineHealthThreshold = XLATE('APP_INFO', 'ENGINE_HEALTH_THRESHOLD_MINUTES', 1, 'X') EngineHealthThreshold = XLATE('APP_INFO', 'ENGINE_HEALTH_THRESHOLD_MINUTES', 1, 'X')
MinutesSinceLastRun = SRP_Datetime('MinuteSpan', LastRunDTM, CurrDTM) MinutesSinceLastRun = SRP_Datetime('MinuteSpan', LastRunDTM, CurrDTM)
Healthy = MinutesSinceLastRun LT EngineHealthThreshold Healthy = MinutesSinceLastRun LT EngineHealthThreshold
EngineHealthInfo<ENGINE_HEALTH_ENGINE_ID$> = EngineID EngineHealthInfo<ENGINE_HEALTH_ENGINE_ID$> = EngineID
EngineHealthInfo<ENGINE_HEALTH_LAST_RUN_DTM$> = LastRunDTM EngineHealthInfo<ENGINE_HEALTH_LAST_RUN_DTM$> = LastRunDTM
EngineHealthInfo<ENGINE_HEALTH_MINUTES_SINCE_LAST_RUN$> = MinutesSinceLastRun EngineHealthInfo<ENGINE_HEALTH_MINUTES_SINCE_LAST_RUN$> = MinutesSinceLastRun
EngineHealthInfo<ENGINE_HEALTH_HEALTH_STATUS$> = Healthy EngineHealthInfo<ENGINE_HEALTH_HEALTH_STATUS$> = Healthy
Response = EngineHealthInfo Response = EngineHealthInfo
end else end else
Error_Services('Add', Error_Services('GetMessage')) Error_Services('Add', Error_Services('GetMessage'))
end end
end else end else
Error_Services('Add', 'Error in System_Healthcheck_Services -> GetEngineHealth: No engine record found') Error_Services('Add', 'Error in System_Healthcheck_Services -> GetEngineHealth: No engine record found')
end end
end else end else
Error_Services('Add', 'Error in System_Healthcheck_Services -> GetEngineHealth: No Engine ID entered') Error_Services('Add', 'Error in System_Healthcheck_Services -> GetEngineHealth: No Engine ID entered')
end end
end service end service
Service ConvertEngineHealthInfoToJSON(EngineHealthInfo, ItemURL) Service ConvertEngineHealthInfoToJSON(EngineHealthInfo, ItemURL)
objJSON = '' objJSON = ''
If SRP_JSON(objJSON, 'New', 'Object') then If SRP_JSON(objJSON, 'New', 'Object') then
objEngine = '' objEngine = ''
If SRP_JSON(objEngine, 'New', 'Object') then If SRP_JSON(objEngine, 'New', 'Object') then
SRP_JSON(objEngine, 'SetValue', 'EngineID', EngineHealthInfo<ENGINE_HEALTH_ENGINE_ID$>) SRP_JSON(objEngine, 'SetValue', 'EngineID', EngineHealthInfo<ENGINE_HEALTH_ENGINE_ID$>)
SRP_JSON(objEngine, 'SetValue', 'LastRunDTM', EngineHealthInfo<ENGINE_HEALTH_LAST_RUN_DTM$>) SRP_JSON(objEngine, 'SetValue', 'LastRunDTM', EngineHealthInfo<ENGINE_HEALTH_LAST_RUN_DTM$>)
SRP_JSON(objEngine, 'SetValue', 'MinutesSinceLastRun', EngineHealthInfo<ENGINE_HEALTH_MINUTES_SINCE_LAST_RUN$>) SRP_JSON(objEngine, 'SetValue', 'MinutesSinceLastRun', EngineHealthInfo<ENGINE_HEALTH_MINUTES_SINCE_LAST_RUN$>)
SRP_JSON(objEngine, 'SetValue', 'Healthy', EngineHealthInfo<ENGINE_HEALTH_HEALTH_STATUS$>) SRP_JSON(objEngine, 'SetValue', 'Healthy', EngineHealthInfo<ENGINE_HEALTH_HEALTH_STATUS$>)
SRP_JSON(objJSON, 'Set', 'Engine', objEngine) SRP_JSON(objJSON, 'Set', 'Engine', objEngine)
SRP_JSON(objEngine, 'Release') SRP_JSON(objEngine, 'Release')
end end
If itemURL NE '' then If itemURL NE '' then
objLinks = '' objLinks = ''
If SRP_JSON(objLinks, 'New', 'Object') then If SRP_JSON(objLinks, 'New', 'Object') then
objLink = '' objLink = ''
If SRP_JSON(objLink, 'New', 'Object') then If SRP_JSON(objLink, 'New', 'Object') then
SRP_JSON(objLink, 'SetValue', 'href', ItemURL, 'String') SRP_JSON(objLink, 'SetValue', 'href', ItemURL, 'String')
SRP_JSON(objLink, 'SetValue', 'title', 'Self', 'String') SRP_JSON(objLink, 'SetValue', 'title', 'Self', 'String')
SRP_JSON(objLinks, 'Set', 'self', objLink) SRP_JSON(objLinks, 'Set', 'self', objLink)
SRP_JSON(objLink, 'Release') SRP_JSON(objLink, 'Release')
end end
SRP_JSON(objJSON, 'Set', '_links', objLinks) SRP_JSON(objJSON, 'Set', '_links', objLinks)
SRP_JSON(objLinks, 'Release') SRP_JSON(objLinks, 'Release')
end end
SRP_JSON(objJSON, 'SetValue', '_class', 'resource') SRP_JSON(objJSON, 'SetValue', '_class', 'resource')
end end
JSON = SRP_JSON(objJSON, 'Stringify', 'Styled') JSON = SRP_JSON(objJSON, 'Stringify', 'Styled')
SRP_JSON(objJSON, 'Release') SRP_JSON(objJSON, 'Release')
end else end else
Error_Services('Add', 'Error creating JSON Object') Error_Services('Add', 'Error creating JSON Object')
end end
Response = JSON Response = JSON
end service end service

View File

@ -86,13 +86,13 @@ Testing:
* DebuggerOn = Get_Env(AttributeList) * DebuggerOn = Get_Env(AttributeList)
* DebuggerOn = AttributeList * DebuggerOn = AttributeList
TickCount = GetTickCount() * TickCount = GetTickCount()
Response = 'Hello World2! Ticks: ':TickCount:' Debugger is off' * Response = 'Hello World2! Ticks: ':TickCount:' Debugger is off'
OSWrite Response on 'D:\tmp\HelloWorld2.txt' * OSWrite Response on 'D:\tmp\HelloWorld2.txt'
*
* Response = Param1
Response = Param1 return
return Response
* Testing: * Testing:
* *

View File

@ -94,29 +94,32 @@ $Insert PS_EQUATES
Main: Main:
debug debug
TaskID = RTI_Task_Submit('', 'TEST_DANIEL2', '', '', '')
* Slots = Xlate('WM_OUT', '173011*1*2', 'SLOT_WAFER_ID', 'X') * Slots = Xlate('WM_OUT', '173011*1*2', 'SLOT_WAFER_ID', 'X')
* RDSNos = Xlate('WM_OUT', '173011*1*3', 'RDS', 'X') * RDSNos = Xlate('WM_OUT', '173011*1*3', 'RDS', 'X')
WONo = 172637 * WONo = 172637
WOStep = 1 * WOStep = 1
CassNo = 30 * CassNo = 30
WMOKey = WONo:'*':WOStep:'*':CassNo * WMOKey = WONo:'*':WOStep:'*':CassNo
WOMatKey = WONo:'*':CassNo * WOMatKey = WONo:'*':CassNo
NCRNos = Xlate('WM_OUT', WMOKey, 'SLOT_NCR', 'X') * NCRNos = Xlate('WM_OUT', WMOKey, 'SLOT_NCR', 'X')
NumScrapSlots = 0 * NumScrapSlots = 0
If NCRNos NE '' then * If NCRNos NE '' then
For each NCRNo in NCRNos using @VM * For each NCRNo in NCRNos using @VM
NumScrapSlots += (NCRNo NE '') * NumScrapSlots += (NCRNo NE '')
Next NCRNo * Next NCRNo
end * end
*
SchedCassQty = XLATE('WO_MAT', WOMatKey, 'WAFER_QTY', 'X') * SchedCassQty = XLATE('WO_MAT', WOMatKey, 'WAFER_QTY', 'X')
*
If NumScrapSlots GE SchedCassQty then * If NumScrapSlots GE SchedCassQty then
FullBoxReject = True$ * FullBoxReject = True$
end else * end else
FullBoxReject = False$ * FullBoxReject = False$
end * end
* Version = '' * Version = ''
* GetEngineVersion(Version) * GetEngineVersion(Version)
@ -124,7 +127,7 @@ Main:
* rv = RTI_Xlate_Controller('EnableCache') * rv = RTI_Xlate_Controller('EnableCache')
* end * end
return return TaskID
* Path = Drive() * Path = Drive()
* UNCPath = SRP_Path("PathToUnc", Path) * UNCPath = SRP_Path("PathToUnc", Path)

View File

@ -1,57 +1,57 @@
Compile function Test_Wafer_Counter(@Test) Compile function Test_Wafer_Counter(@Test)
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$Insert APP_INSERTS $Insert APP_INSERTS
Declare function Wafer_Counter_Services, Error_Services Declare function Wafer_Counter_Services, Error_Services
// TODO: Code to run before each test goes here // TODO: Code to run before each test goes here
GotoTest GotoTest
// TODO: Code to run after each test goes here // TODO: Code to run after each test goes here
Return TestResult or 1 Return TestResult or 1
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// TESTS // TESTS
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Test Test1 Test Test1
FileData = 'T25':CRLF$:'P1FFFFFF' FileData = 'T25':CRLF$:'P1FFFFFF'
Value = Wafer_Counter_Services('ConvertWaferData', FileData) Value = Wafer_Counter_Services('ConvertWaferData', FileData)
If Error_Services('HasError') then Value = Error_Services('GetMessage') If Error_Services('HasError') then Value = Error_Services('GetMessage')
Assert Value equals 1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1 Assert Value equals 1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1:@VM:1
End Test End Test
Test Test2 Test Test2
FileData = 'T00':CRLF$:'P0000000' FileData = 'T00':CRLF$:'P0000000'
Value = Wafer_Counter_Services('ConvertWaferData', FileData) Value = Wafer_Counter_Services('ConvertWaferData', FileData)
If Error_Services('HasError') then Value = Error_Services('GetMessage') If Error_Services('HasError') then Value = Error_Services('GetMessage')
Assert Value equals 0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0 Assert Value equals 0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0:@VM:0
End Test End Test
Test Test3 Test Test3
FileData = 'T12':CRLF$:'P0AAAAAA' FileData = 'T12':CRLF$:'P0AAAAAA'
Value = Wafer_Counter_Services('ConvertWaferData', FileData) Value = Wafer_Counter_Services('ConvertWaferData', FileData)
If Error_Services('HasError') then Value = Error_Services('GetMessage') If Error_Services('HasError') then Value = Error_Services('GetMessage')
Assert Value equals 0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0 Assert Value equals 0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0
end test end test
Test Test4 Test Test4
FileData = 'T13':CRLF$:'P1555555' FileData = 'T13':CRLF$:'P1555555'
Value = Wafer_Counter_Services('ConvertWaferData', FileData) Value = Wafer_Counter_Services('ConvertWaferData', FileData)
If Error_Services('HasError') then Value = Error_Services('GetMessage') If Error_Services('HasError') then Value = Error_Services('GetMessage')
Assert Value equals 1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1 Assert Value equals 1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1:@VM:0:@VM:1
end test end test

View File

@ -1,17 +1,17 @@
compile insert CHANGE_LOG_EQUATES compile insert CHANGE_LOG_EQUATES
/*---------------------------------------- /*----------------------------------------
Author : Table Create Insert Routine Author : Table Create Insert Routine
Written : 18/07/2024 Written : 18/07/2024
Description : Insert for Table CHANGE_LOG Description : Insert for Table CHANGE_LOG
----------------------------------------*/ ----------------------------------------*/
Equ CHANGE_LOG_CHANGE_ID$ To 0 Equ CHANGE_LOG_CHANGE_ID$ To 0
Equ CHANGE_LOG_CHANGE_DTM$ To 1 Equ CHANGE_LOG_CHANGE_DTM$ To 1
Equ CHANGE_LOG_APPLICATION$ To 2 Equ CHANGE_LOG_APPLICATION$ To 2
Equ CHANGE_LOG_ENTITY_TYPE$ To 3 Equ CHANGE_LOG_ENTITY_TYPE$ To 3
Equ CHANGE_LOG_ENTITY_CLASS$ To 4 Equ CHANGE_LOG_ENTITY_CLASS$ To 4
Equ CHANGE_LOG_ENTITY_NAME$ To 5 Equ CHANGE_LOG_ENTITY_NAME$ To 5
Equ CHANGE_LOG_UPDATED_BY$ To 6 Equ CHANGE_LOG_UPDATED_BY$ To 6
Equ CHANGE_LOG_ENVIRONMENT$ To 7 Equ CHANGE_LOG_ENVIRONMENT$ To 7

View File

@ -1,12 +1,12 @@
compile insert ENGINE_HEALTH_EQUATES compile insert ENGINE_HEALTH_EQUATES
/*---------------------------------------- /*----------------------------------------
Author : Table Create Insert Routine Author : Table Create Insert Routine
Written : 05/02/2010 Written : 05/02/2010
Description : Insert for Table EMAIL_BOX Description : Insert for Table EMAIL_BOX
----------------------------------------*/ ----------------------------------------*/
EQU ENGINE_HEALTH_ENGINE_ID$ to 1 EQU ENGINE_HEALTH_ENGINE_ID$ to 1
EQU ENGINE_HEALTH_LAST_RUN_DTM$ to 2 EQU ENGINE_HEALTH_LAST_RUN_DTM$ to 2
EQU ENGINE_HEALTH_MINUTES_SINCE_LAST_RUN$ to 3 EQU ENGINE_HEALTH_MINUTES_SINCE_LAST_RUN$ to 3
EQU ENGINE_HEALTH_HEALTH_STATUS$ to 4 EQU ENGINE_HEALTH_HEALTH_STATUS$ to 4

View File

@ -20,7 +20,7 @@ Declare function NDW_Messaging_Processor_Events, RetStack, SRP_Encode, SRP_De
Declare subroutine Error_Services, Messaging_Services, Memory_Services, SRP_JSON, SRP_COM Declare subroutine Error_Services, Messaging_Services, Memory_Services, SRP_JSON, SRP_COM
Declare subroutine NDW_Messaging_Processor_Events, SRP_Stopwatch, Send_Event, Send_Message, RTP27 Declare subroutine NDW_Messaging_Processor_Events, SRP_Stopwatch, Send_Event, Send_Message, RTP27
Equ Server.Name$ to 'MESTSA01EC' Equ Server.Name$ to 'MESSA01EC'
Equ Server.Port$ to 25000 Equ Server.Port$ to 25000
Equ Server.KeepAlive$ to 60000 Equ Server.KeepAlive$ to 60000
Equ MessageProcessor$ to 'NDW_MESSAGING_PROCESSOR' Equ MessageProcessor$ to 'NDW_MESSAGING_PROCESSOR'

View File

@ -1,38 +1,38 @@
compile insert REACTOR_DAILY_UPTIME_EQUATES compile insert REACTOR_DAILY_UPTIME_EQUATES
/*---------------------------------------- /*----------------------------------------
Author : Table Create Insert Routine Author : Table Create Insert Routine
Written : 21/08/2024 Written : 21/08/2024
Description : Insert for Table REACTOR_DAILY_UPTIME Description : Insert for Table REACTOR_DAILY_UPTIME
----------------------------------------*/ ----------------------------------------*/
Equ REACTOR_DAILY_UPTIME_DATE$ To 0 Equ REACTOR_DAILY_UPTIME_DATE$ To 0
Equ REACTOR_DAILY_UPTIME_REACT_TYPE$ To 0 Equ REACTOR_DAILY_UPTIME_REACT_TYPE$ To 0
Equ REACTOR_DAILY_UPTIME_TOTAL_PROD_PERCENTAGE$ To 1 Equ REACTOR_DAILY_UPTIME_TOTAL_PROD_PERCENTAGE$ To 1
Equ REACTOR_DAILY_UPTIME_TOTAL_PROD_MINUTES$ To 2 Equ REACTOR_DAILY_UPTIME_TOTAL_PROD_MINUTES$ To 2
Equ REACTOR_DAILY_UPTIME_TOTAL_ENG_PERCENTAGE$ To 3 Equ REACTOR_DAILY_UPTIME_TOTAL_ENG_PERCENTAGE$ To 3
Equ REACTOR_DAILY_UPTIME_TOTAL_ENG_MINUTES$ To 4 Equ REACTOR_DAILY_UPTIME_TOTAL_ENG_MINUTES$ To 4
Equ REACTOR_DAILY_UPTIME_TOTAL_DOWN_UNSCHED_PERCENTAGE$ To 5 Equ REACTOR_DAILY_UPTIME_TOTAL_DOWN_UNSCHED_PERCENTAGE$ To 5
Equ REACTOR_DAILY_UPTIME_TOTAL_DOWN_UNSCHED_MINUTES$ To 6 Equ REACTOR_DAILY_UPTIME_TOTAL_DOWN_UNSCHED_MINUTES$ To 6
Equ REACTOR_DAILY_UPTIME_TOTAL_DOWN_SCHED_PERCENTAGE$ To 7 Equ REACTOR_DAILY_UPTIME_TOTAL_DOWN_SCHED_PERCENTAGE$ To 7
Equ REACTOR_DAILY_UPTIME_TOTAL_DOWN_SCHED_MINUTES$ To 8 Equ REACTOR_DAILY_UPTIME_TOTAL_DOWN_SCHED_MINUTES$ To 8
Equ REACTOR_DAILY_UPTIME_INCL_REACTORS$ To 9 Equ REACTOR_DAILY_UPTIME_INCL_REACTORS$ To 9
Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_PROD_PERCENTAGE$ To 10 Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_PROD_PERCENTAGE$ To 10
Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_PROD_MINUTES$ To 11 Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_PROD_MINUTES$ To 11
Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_ENG_PERCENTAGE$ To 12 Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_ENG_PERCENTAGE$ To 12
Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_ENG_MINUTES$ To 13 Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_ENG_MINUTES$ To 13
Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_DOWN_UNSCHED_PERCENTAGE$ To 14 Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_DOWN_UNSCHED_PERCENTAGE$ To 14
Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_DOWN_UNSCHED_MINUTES$ To 15 Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_DOWN_UNSCHED_MINUTES$ To 15
Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_DOWN_SCHED_PERCENTAGE$ To 16 Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_DOWN_SCHED_PERCENTAGE$ To 16
Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_DOWN_SCHED_MINUTES$ To 17 Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_DOWN_SCHED_MINUTES$ To 17
Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_IDLE_PERCENTAGE$ To 18 Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_IDLE_PERCENTAGE$ To 18
Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_IDLE_MINUTES$ To 19 Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_IDLE_MINUTES$ To 19
Equ REACTOR_DAILY_UPTIME_EXCLUDED_REACTORS$ To 20 Equ REACTOR_DAILY_UPTIME_EXCLUDED_REACTORS$ To 20
Equ REACTOR_DAILY_UPTIME_TOTAL_UPTIME_PERCENTAGE$ To 21 Equ REACTOR_DAILY_UPTIME_TOTAL_UPTIME_PERCENTAGE$ To 21
Equ REACTOR_DAILY_UPTIME_TOTAL_IDLE_PERCENTAGE$ To 22 Equ REACTOR_DAILY_UPTIME_TOTAL_IDLE_PERCENTAGE$ To 22
Equ REACTOR_DAILY_UPTIME_TOTAL_IDLE_MINUTES$ To 23 Equ REACTOR_DAILY_UPTIME_TOTAL_IDLE_MINUTES$ To 23
Equ REACTOR_DAILY_UPTIME_TOTAL_UPTIME_MINUTES$ To 24 Equ REACTOR_DAILY_UPTIME_TOTAL_UPTIME_MINUTES$ To 24
Equ REACTOR_DAILY_UPTIME_TOTAL_AVAIL_MINUTES$ To 25 Equ REACTOR_DAILY_UPTIME_TOTAL_AVAIL_MINUTES$ To 25
Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_SINGLE_LL$ To 26 Equ REACTOR_DAILY_UPTIME_INCL_REACTOR_SINGLE_LL$ To 26
Equ REACTOR_DAILY_UPTIME_TOTAL_SINGLE_LL$ To 27 Equ REACTOR_DAILY_UPTIME_TOTAL_SINGLE_LL$ To 27

View File

@ -1,207 +1,207 @@
compile insert SRP_EDITOR_TEMP_MSG_EQUATES_SYSPROG compile insert SRP_EDITOR_TEMP_MSG_EQUATES_SYSPROG
****************************************************************************** ******************************************************************************
* *
* Product : OpenInsight for Workgroups * Product : OpenInsight for Workgroups
* Version : 3.5 * Version : 3.5
* *
* History : (date, initials, notes) * History : (date, initials, notes)
* 12/15/95 apk Original programmer. * 12/15/95 apk Original programmer.
* 02/26/96 cp Changed OK return value to "" from 0 (backwards compat.) * 02/26/96 cp Changed OK return value to "" from 0 (backwards compat.)
* 03/28/96 cp Added MHELP$, MREQRESP$, and MBEEP$ fields * 03/28/96 cp Added MHELP$, MREQRESP$, and MBEEP$ fields
* Commented message structure and instructions * Commented message structure and instructions
* 06/24/97 cp Added G (gauge) type, removed unused equates * 06/24/97 cp Added G (gauge) type, removed unused equates
****************************************************************************** ******************************************************************************
declare subroutine Msg ;* Msg(Parent, MsgDef [, MsgKey, Instruction, Params]) declare subroutine Msg ;* Msg(Parent, MsgDef [, MsgKey, Instruction, Params])
declare function Msg ;* Ans = Msg(Parent, MsgDef [, MsgKey, Instruction, Params]) declare function Msg ;* Ans = Msg(Parent, MsgDef [, MsgKey, Instruction, Params])
* message structure field definitions * message structure field definitions
equ MTEXT$ to 1 ;* the text to display in the message, multiple lines delimited by @tm, cr/lf, or "|" equ MTEXT$ to 1 ;* the text to display in the message, multiple lines delimited by @tm, cr/lf, or "|"
equ MTYPE$ to 2 ;* the message type, defaults to "BO" (see below) equ MTYPE$ to 2 ;* the message type, defaults to "BO" (see below)
equ MMODAL$ to 3 ;* modality of message, defaults to "A" (see below) equ MMODAL$ to 3 ;* modality of message, defaults to "A" (see below)
equ MICON$ to 4 ;* icon to display (see below) equ MICON$ to 4 ;* icon to display (see below)
equ MDEFBTN$ to 5 ;* default button (1 for first, 2 for second, etc.) equ MDEFBTN$ to 5 ;* default button (1 for first, 2 for second, etc.)
equ MCOL$ to 6 ;* message h-pos in pixels, or -2 (center screen, the default), -1 (center parent) equ MCOL$ to 6 ;* message h-pos in pixels, or -2 (center screen, the default), -1 (center parent)
equ MROW$ to 7 ;* message v-pos in pixels equ MROW$ to 7 ;* message v-pos in pixels
equ MJUST$ to 8 ;* justification: T (text, the default), L (left), R (right), C (center) equ MJUST$ to 8 ;* justification: T (text, the default), L (left), R (right), C (center)
equ MBKCOLOR$ to 9 ;* background color (RGB value, @vm-delimited), see Utility("CHOOSECOLOR") equ MBKCOLOR$ to 9 ;* background color (RGB value, @vm-delimited), see Utility("CHOOSECOLOR")
equ MFGCOLOR$ to 10 ;* foreground color (RGB value, @vm-delimited), see Utility("CHOOSECOLOR") equ MFGCOLOR$ to 10 ;* foreground color (RGB value, @vm-delimited), see Utility("CHOOSECOLOR")
equ MTEXTWIDTH$ to 11 ;* the message width (or the response field width for response messages) equ MTEXTWIDTH$ to 11 ;* the message width (or the response field width for response messages)
equ MCAPTION$ to 12 ;* the message title equ MCAPTION$ to 12 ;* the message title
equ MVALID$ to 13 ;* for response messages, this is the validation pattern (ie. (MD0) for integer) equ MVALID$ to 13 ;* for response messages, this is the validation pattern (ie. (MD0) for integer)
equ MDEFINPUT$ to 14 ;* for reponse messages, this is the default response equ MDEFINPUT$ to 14 ;* for reponse messages, this is the default response
equ MMASKINPUT$ to 15 ;* boolean, true for password (masked) input, false (default) for readable input equ MMASKINPUT$ to 15 ;* boolean, true for password (masked) input, false (default) for readable input
equ MBITMAP$ to 16 ;* name of a bitmap registered in repository (as it appears in the outliner) equ MBITMAP$ to 16 ;* name of a bitmap registered in repository (as it appears in the outliner)
equ MCLIPBMP$ to 17 ;* boolean, true to clip bitmaps, false to resize (see IMAGECLIP property) equ MCLIPBMP$ to 17 ;* boolean, true to clip bitmaps, false to resize (see IMAGECLIP property)
equ MFONT$ to 18 ;* font structure for the text of the message equ MFONT$ to 18 ;* font structure for the text of the message
equ MLITERAL$ to 19 ;* boolean, defaults to false, true specifies that default value is a function (see below) equ MLITERAL$ to 19 ;* boolean, defaults to false, true specifies that default value is a function (see below)
equ MHELP$ to 20 ;* help button, Type:@vm:Specifier:@vm:Text (see below), defaults to null (no help) equ MHELP$ to 20 ;* help button, Type:@vm:Specifier:@vm:Text (see below), defaults to null (no help)
equ MREQRESP$ to 21 ;* boolean, for type "R" messages, false allows nulls (default) while true doesn't equ MREQRESP$ to 21 ;* boolean, for type "R" messages, false allows nulls (default) while true doesn't
equ MBEEP$ to 22 ;* integer, specifies beep (see MessageBeep in the Windows API) equ MBEEP$ to 22 ;* integer, specifies beep (see MessageBeep in the Windows API)
equ MEXTENT$ to 23 ;* integer, specifies extent of the gauge (number of items to process for type="G") equ MEXTENT$ to 23 ;* integer, specifies extent of the gauge (number of items to process for type="G")
equ MNUMFIELDS$ to 23 equ MNUMFIELDS$ to 23
* MTYPE$ details: * MTYPE$ details:
* *
* there are six base types, B (buttons), R (response), U (up), and D (down), * there are six base types, B (buttons), R (response), U (up), and D (down),
* T (timed), and G (gauge) * T (timed), and G (gauge)
* *
* the button type has several pre-defined button sets which are localized * the button type has several pre-defined button sets which are localized
* using entries from the SYSTEM_RESOURCES record in the SYSENV table; for * using entries from the SYSTEM_RESOURCES record in the SYSENV table; for
* non-standard labels, the buttons can be specified in a comma-delimited * non-standard labels, the buttons can be specified in a comma-delimited
* list, like "B&One,&Two,&Three" (where the & specifies the accelerator) * list, like "B&One,&Two,&Three" (where the & specifies the accelerator)
* *
* B Type Description * B Type Description
* ------ -------------------- * ------ --------------------
* BO OK * BO OK
* BOC OK/Cancel * BOC OK/Cancel
* BNY Yes/No * BNY Yes/No
* BNYC Yes/No/Cancel * BNYC Yes/No/Cancel
* BRC Retry/Cancel * BRC Retry/Cancel
* BAR Abort/Retry * BAR Abort/Retry
* BARI Abort/Retry/Ignore * BARI Abort/Retry/Ignore
* B{list} User-defined buttons * B{list} User-defined buttons
* *
* the response type displays an edit field and OK and Cancel buttons; * the response type displays an edit field and OK and Cancel buttons;
* the optional sub-types are C (upper-case only) and E (escape or * the optional sub-types are C (upper-case only) and E (escape or
* cancel button returns escape character instead of default response); * cancel button returns escape character instead of default response);
* for example, the following types are valid: "R", "RC", "RE", "RCE" * for example, the following types are valid: "R", "RC", "RE", "RCE"
* *
* for B and R types, the type can be preceded with an N to specify that * for B and R types, the type can be preceded with an N to specify that
* the default value for the message is to be returned without the message * the default value for the message is to be returned without the message
* being displayed; this is one way to change messages from interactive * being displayed; this is one way to change messages from interactive
* to non-interactive for batch processes; for example, instead of "BARI", * to non-interactive for batch processes; for example, instead of "BARI",
* pass "NBARI" (meaning don't display the abort/retry/ignore message) * pass "NBARI" (meaning don't display the abort/retry/ignore message)
* *
* to display a message while processing, use the "U" type: * to display a message while processing, use the "U" type:
* *
* Def = "" * Def = ""
* Def<MTEXT$> = "Processing..." * Def<MTEXT$> = "Processing..."
* Def<MTYPE$> = "U" * Def<MTYPE$> = "U"
* MsgUp = Msg(@window, Def) ;* display the processing message * MsgUp = Msg(@window, Def) ;* display the processing message
* ... * ...
* Msg(@window, MsgUp) ;* take down the processing message * Msg(@window, MsgUp) ;* take down the processing message
* *
* to display a message for a specific length of time, use the "T" type: * to display a message for a specific length of time, use the "T" type:
* *
* Def = "" * Def = ""
* Def<MTEXT$> = "Waiting..." * Def<MTEXT$> = "Waiting..."
* Def<MTYPE$> = "T2" ;* 2-second message * Def<MTYPE$> = "T2" ;* 2-second message
* Msg(@window, Def) * Msg(@window, Def)
* *
* the optional sub-type for T type is A (asynchronous), which displays * the optional sub-type for T type is A (asynchronous), which displays
* the message and returns (allowing processing to continue) and takes * the message and returns (allowing processing to continue) and takes
* the message down after the specified period of time; since this relies * the message down after the specified period of time; since this relies
* on a timer event, your event code must either complete within the * on a timer event, your event code must either complete within the
* specified period of time or you must regularly use Yield() to allow * specified period of time or you must regularly use Yield() to allow
* the processing of posted events (like the timer): * the processing of posted events (like the timer):
* *
* Def = "" * Def = ""
* Def<MTYPE$> = "TA5" ;* 5-second splash-screen * Def<MTYPE$> = "TA5" ;* 5-second splash-screen
* Msg(@window, Def, "SPLASHSCREEN") * Msg(@window, Def, "SPLASHSCREEN")
* loop * loop
* Done = AppLogonProcessing() * Done = AppLogonProcessing()
* Yield() * Yield()
* until Done * until Done
* repeat * repeat
* *
* to display a gauge (percent bar), use the "G" type; sub-types are C (show * to display a gauge (percent bar), use the "G" type; sub-types are C (show
* cancel button) and Y (yield on each cycle): * cancel button) and Y (yield on each cycle):
* *
* Def = "" * Def = ""
* Def<MCAPTION$> = "Processing Orders..." * Def<MCAPTION$> = "Processing Orders..."
* Def<MTYPE$ > = "GC" * Def<MTYPE$ > = "GC"
* Def<MEXTENT$ > = OrderCnt * Def<MEXTENT$ > = OrderCnt
* MsgUp = Msg(@window, Def) * MsgUp = Msg(@window, Def)
* for Order = 1 to OrderCnt * for Order = 1 to OrderCnt
* gosub ProcessOrder * gosub ProcessOrder
* * update the gauge and check if cancel was pressed * * update the gauge and check if cancel was pressed
* while Msg(@window, MsgUp, Order, MSGINSTUPDATE$) * while Msg(@window, MsgUp, Order, MSGINSTUPDATE$)
* next Order * next Order
* Msg(@window, MsgUp) ;* take down the gauge * Msg(@window, MsgUp) ;* take down the gauge
* MMODAL$ detail: * MMODAL$ detail:
* *
* Code Modality Description * Code Modality Description
* ----------- ----------- ----------------------------- * ----------- ----------- -----------------------------
* W Window only the parent is disabled * W Window only the parent is disabled
* A (default) Application all OI windows are disabled * A (default) Application all OI windows are disabled
* S System all applications are disabled * S System all applications are disabled
* MICON$ detail: * MICON$ detail:
* *
* Code Icon * Code Icon
* ---- --------------- * ---- ---------------
* null None * null None
* * Asterisk (Info) * * Asterisk (Info)
* ? Question * ? Question
* ! Exclaim (Warning) * ! Exclaim (Warning)
* H Halt (Stop sign) * H Halt (Stop sign)
* B User-specified bitmap (specified in MBITMAP$ field) * B User-specified bitmap (specified in MBITMAP$ field)
* MLITERAL$ details (applies only to response type messages): * MLITERAL$ details (applies only to response type messages):
* *
* if MLITERAL$ is true, the Msg() function assumes that the default value is * if MLITERAL$ is true, the Msg() function assumes that the default value is
* the name of a function which returns the default value for the message; * the name of a function which returns the default value for the message;
* for example, if you wrote a function called CURRENTUSER which returned * for example, if you wrote a function called CURRENTUSER which returned
* the user name of the current user, you could specify CURRENTUSER as the * the user name of the current user, you could specify CURRENTUSER as the
* default value (MDEFINPUT$) and set MLITERAL$ to true, so that the current * default value (MDEFINPUT$) and set MLITERAL$ to true, so that the current
* user name would be the default value for the message; parameters are * user name would be the default value for the message; parameters are
* passed to the specified function depending on the number of parameters * passed to the specified function depending on the number of parameters
* that are supported by the function: * that are supported by the function:
* *
* # Params Values Passed * # Params Values Passed
* --------- -------------- * --------- --------------
* 0 None * 0 None
* 1 MsgKey * 1 MsgKey
* 2 or more MsgKey, MsgDef * 2 or more MsgKey, MsgDef
* MHELP$ details: * MHELP$ details:
* *
* Type Description Specifier * Type Description Specifier
* ---- ------------- ----------------- * ---- ------------- -----------------
* Q QuickHelp (AppNote) Name of AppNote * Q QuickHelp (AppNote) Name of AppNote
* M Message Name of Message * M Message Name of Message
* H WinHelp HelpFile,HelpID * H WinHelp HelpFile,HelpID
* S Stored Procedure ProcName[,Param1] * S Stored Procedure ProcName[,Param1]
* *
* Note: Specify the AppNote, Message, HelpFile, or ProcName as it appears * Note: Specify the AppNote, Message, HelpFile, or ProcName as it appears
* in the repository outliner. For example, the OINSIGHT.HLP file is * in the repository outliner. For example, the OINSIGHT.HLP file is
* registered as OINSIGHT, so specify the HelpFile as "OINSIGHT" (look * registered as OINSIGHT, so specify the HelpFile as "OINSIGHT" (look
* in the outline under "General", "Windows Components", "Help Files") * in the outline under "General", "Windows Components", "Help Files")
* *
* Text defaults to "&Help" or a localized equivalent * Text defaults to "&Help" or a localized equivalent
* Replaceable message parameters: * Replaceable message parameters:
* *
* Msg(@window, "Hello, %1%, how are you %2%?", "", "", @username: @fm: "today") * Msg(@window, "Hello, %1%, how are you %2%?", "", "", @username: @fm: "today")
* Msg() function instruction values * Msg() function instruction values
equ MSGINSTSTART$ to 1 ;* (default instruction) equ MSGINSTSTART$ to 1 ;* (default instruction)
equ MSGINSTREAD$ to 2 ;* bErr = Msg("", MsgDef, MsgID, MSGINSTREAD$) equ MSGINSTREAD$ to 2 ;* bErr = Msg("", MsgDef, MsgID, MSGINSTREAD$)
equ MSGINSTWRITE$ to 3 ;* bErr = Msg("", MsgDef, MsgID, MSGINSTWRITE$) equ MSGINSTWRITE$ to 3 ;* bErr = Msg("", MsgDef, MsgID, MSGINSTWRITE$)
equ MSGINSTLOCK$ to 4 ;* bErr = Msg("", "", MsgID, MSGINSTLOCK$) equ MSGINSTLOCK$ to 4 ;* bErr = Msg("", "", MsgID, MSGINSTLOCK$)
equ MSGINSTUNLOCK$ to 5 ;* bErr = Msg("", "", MsgID, MSGINSTUNLOCK$) equ MSGINSTUNLOCK$ to 5 ;* bErr = Msg("", "", MsgID, MSGINSTUNLOCK$)
equ MSGINSTBUTTON$ to 6 ;* reserved equ MSGINSTBUTTON$ to 6 ;* reserved
equ MSGINSTCREATE$ to 7 ;* reserved equ MSGINSTCREATE$ to 7 ;* reserved
equ MSGINSTRESPCHG$ to 8 ;* reserved equ MSGINSTRESPCHG$ to 8 ;* reserved
equ MSGINSTCLOSE$ to 9 ;* reserved equ MSGINSTCLOSE$ to 9 ;* reserved
equ MSGINSTTIMER$ to 10 ;* reserved equ MSGINSTTIMER$ to 10 ;* reserved
equ MSGINSTHELP$ to 11 ;* reserved equ MSGINSTHELP$ to 11 ;* reserved
equ MSGINSTUPDATE$ to 12 ;* (see above) equ MSGINSTUPDATE$ to 12 ;* (see above)
* Msg() function return values from MSGINSTSTART$ * Msg() function return values from MSGINSTSTART$
equ RET_OK$ to "" equ RET_OK$ to ""
equ RET_CANCEL$ to \1B\ ;* escape character equ RET_CANCEL$ to \1B\ ;* escape character
equ RET_YES$ to 1 equ RET_YES$ to 1
equ RET_NO$ to 0 equ RET_NO$ to 0
equ RET_ABORT$ to 1 equ RET_ABORT$ to 1
equ RET_RETRY$ to 2 equ RET_RETRY$ to 2
equ RET_IGNORE$ to 3 equ RET_IGNORE$ to 3
* misc strings * misc strings
equ MSGTYPE$ to "MSG" equ MSGTYPE$ to "MSG"
equ MSGCLASS$ to "" equ MSGCLASS$ to ""

View File

@ -1,20 +1,20 @@
compile insert SUPPLEMENTS_EQUATES compile insert SUPPLEMENTS_EQUATES
/*---------------------------------------- /*----------------------------------------
Author : Table Create Insert Routine Author : Table Create Insert Routine
Written : 20/03/2024 Written : 20/03/2024
Description : Insert for Table SUPPLEMENTS Description : Insert for Table SUPPLEMENTS
----------------------------------------*/ ----------------------------------------*/
Equ SUPPLEMENTS_SUPPL_ID$ To 0 Equ SUPPLEMENTS_SUPPL_ID$ To 0
Equ SUPPLEMENTS_LOT_TYPE$ To 1 Equ SUPPLEMENTS_LOT_TYPE$ To 1
Equ SUPPLEMENTS_LOT_ID$ To 2 Equ SUPPLEMENTS_LOT_ID$ To 2
Equ SUPPLEMENTS_STAGE$ To 3 Equ SUPPLEMENTS_STAGE$ To 3
Equ SUPPLEMENTS_SUPPL_TEXT$ To 4 Equ SUPPLEMENTS_SUPPL_TEXT$ To 4
Equ SUPPLEMENTS_SUPPL_ACK$ To 5 Equ SUPPLEMENTS_SUPPL_ACK$ To 5
Equ SUPPLEMENTS_ACK_USER$ To 6 Equ SUPPLEMENTS_ACK_USER$ To 6
Equ SUPPLEMENTS_ACK_DTM$ To 7 Equ SUPPLEMENTS_ACK_DTM$ To 7
Equ SUPPLEMENTS_ENTRY_USER$ To 8 Equ SUPPLEMENTS_ENTRY_USER$ To 8
Equ SUPPLEMENTS_ENTRY_DATETIME$ To 9 Equ SUPPLEMENTS_ENTRY_DATETIME$ To 9

View File

@ -1,14 +1,14 @@
compile insert UNLOCK_REQUESTS_EQUATES compile insert UNLOCK_REQUESTS_EQUATES
/*---------------------------------------- /*----------------------------------------
Author : Table Create Insert Routine Author : Table Create Insert Routine
Written : 19/03/2024 Written : 19/03/2024
Description : Insert for Table UNLOCK_REQUESTS Description : Insert for Table UNLOCK_REQUESTS
----------------------------------------*/ ----------------------------------------*/
Equ UNLOCK_REQUESTS_REQUEST_DATETIME$ To 0 Equ UNLOCK_REQUESTS_REQUEST_DATETIME$ To 0
Equ UNLOCK_REQUESTS_TABLE_NAME$ To 0 Equ UNLOCK_REQUESTS_TABLE_NAME$ To 0
Equ UNLOCK_REQUESTS_RECORD_KEY$ To 1 Equ UNLOCK_REQUESTS_RECORD_KEY$ To 1
Equ UNLOCK_REQUESTS_USER_NAME$ To 2 Equ UNLOCK_REQUESTS_USER_NAME$ To 2
Equ UNLOCK_REQUESTS_SUCCESS$ To 3 Equ UNLOCK_REQUESTS_SUCCESS$ To 3

View File

@ -1,17 +1,17 @@
compile insert WAFER_COUNTER_EQUATES compile insert WAFER_COUNTER_EQUATES
/*---------------------------------------- /*----------------------------------------
Author : Table Create Insert Routine Author : Table Create Insert Routine
Written : 22/03/2024 Written : 22/03/2024
Description : Insert for Table WAFER_COUNTER Description : Insert for Table WAFER_COUNTER
----------------------------------------*/ ----------------------------------------*/
Equ WAFER_COUNTER.SCAN_ID$ To 0 Equ WAFER_COUNTER.SCAN_ID$ To 0
Equ WAFER_COUNTER.LOT_ID$ To 1 Equ WAFER_COUNTER.LOT_ID$ To 1
Equ WAFER_COUNTER.SCAN_QTY$ To 2 Equ WAFER_COUNTER.SCAN_QTY$ To 2
Equ WAFER_COUNTER.SCAN_DTM$ To 3 Equ WAFER_COUNTER.SCAN_DTM$ To 3
Equ WAFER_COUNTER.SCAN_TOOL$ To 4 Equ WAFER_COUNTER.SCAN_TOOL$ To 4
Equ WAFER_COUNTER.SCAN_USER$ To 5 Equ WAFER_COUNTER.SCAN_USER$ To 5
Equ WAFER_COUNTER.SCAN_LOCATION$ To 6 Equ WAFER_COUNTER.SCAN_LOCATION$ To 6
Equ WAFER_COUNTER.SCAN_WAFER_MAP$ To 7 Equ WAFER_COUNTER.SCAN_WAFER_MAP$ To 7

View File

@ -445,7 +445,7 @@ return
Populate: Populate:
Set_Property('SYSTEM', 'CURSOR', 'H') Set_Property('SYSTEM', 'CURSOR', 'H')
Set_Property(@Window:".OLE_RPT_WORK", "OLE.EmptyTablePrompt", "Loading...") Set_Property(@Window:".OLE_RPT_WORK", "OLE.EmptyTablePrompt", "Loading...")
Set_Property(@Window:'.OLE_RPT_WORK', 'OLE.List', "") Set_Property(@Window:'.OLE_RPT_WORK', 'OLE.List', "")