Compare commits
8 Commits
292bc4646b
...
18919090d8
Author | SHA1 | Date | |
---|---|---|---|
|
18919090d8 | ||
|
550f376a0b | ||
|
6aad8036e5 | ||
|
4fc7eb189b | ||
|
5e917e65ac | ||
|
97f3c3fce2 | ||
|
27d55d83a1 | ||
|
4e213ff253 |
675
LSL2/OIWIN/NDW_ACKNOWLEDGE_MESSAGE.json
Normal file
675
LSL2/OIWIN/NDW_ACKNOWLEDGE_MESSAGE.json
Normal file
@ -0,0 +1,675 @@
|
||||
{
|
||||
"header": {
|
||||
"version": 1,
|
||||
"type": "record"
|
||||
},
|
||||
"body": {
|
||||
"record1": {
|
||||
"<1>": "1010",
|
||||
"<2>": "3",
|
||||
"<3>": ""
|
||||
},
|
||||
"record2": {
|
||||
"<1>": {
|
||||
"<1,1>": "NDW_ACKNOWLEDGE_MESSAGE",
|
||||
"<1,2>": "",
|
||||
"<1,3>": "WINDOW",
|
||||
"<1,4>": "",
|
||||
"<1,5>": "137",
|
||||
"<1,6>": "173",
|
||||
"<1,7>": "-765",
|
||||
"<1,8>": "-539",
|
||||
"<1,9>": "Process Message",
|
||||
"<1,10>": {
|
||||
"<1,10,1>": "0x84C80000",
|
||||
"<1,10,2>": "0x101"
|
||||
},
|
||||
"<1,11>": {
|
||||
"<1,11,1>": "0x8000",
|
||||
"<1,11,2>": "0x80000000"
|
||||
},
|
||||
"<1,12>": "",
|
||||
"<1,13>": {
|
||||
"<1,13,1>": "-2",
|
||||
"<1,13,2>": "-2",
|
||||
"<1,13,3>": "0"
|
||||
},
|
||||
"<1,14>": "",
|
||||
"<1,15>": "",
|
||||
"<1,16>": "",
|
||||
"<1,17>": "",
|
||||
"<1,18>": {
|
||||
"<1,18,1>": {
|
||||
"<1,18,1,1>": "X",
|
||||
"<1,18,1,2>": "EXECUTE",
|
||||
"<1,18,1,3>": "@WINDOW_EVENTS",
|
||||
"<1,18,1,4>": {
|
||||
"<1,18,1,4,1>": "@SELF",
|
||||
"<1,18,1,4,2>": "@EVENT",
|
||||
"<1,18,1,4,3>": "@PARAM1",
|
||||
"<1,18,1,4,4>": "@PARAM2",
|
||||
"<1,18,1,4,5>": "@PARAM3",
|
||||
"<1,18,1,4,6>": "@PARAM4",
|
||||
"<1,18,1,4,7>": "@PARAM5",
|
||||
"<1,18,1,4,8>": "@PARAM6"
|
||||
},
|
||||
"<1,18,1,5>": "",
|
||||
"<1,18,1,6>": "",
|
||||
"<1,18,1,7>": "",
|
||||
"<1,18,1,8>": "",
|
||||
"<1,18,1,9>": "",
|
||||
"<1,18,1,10>": "",
|
||||
"<1,18,1,11>": "",
|
||||
"<1,18,1,12>": "",
|
||||
"<1,18,1,13>": "",
|
||||
"<1,18,1,14>": "",
|
||||
"<1,18,1,15>": "COMMEVT",
|
||||
"<1,18,1,16>": "0"
|
||||
}
|
||||
},
|
||||
"<1,19>": "CREATE",
|
||||
"<1,20>": "",
|
||||
"<1,21>": "",
|
||||
"<1,22>": "",
|
||||
"<1,23>": "",
|
||||
"<1,24>": {
|
||||
"<1,24,1>": "",
|
||||
"<1,24,2>": "0",
|
||||
"<1,24,3>": "0",
|
||||
"<1,24,4>": "0",
|
||||
"<1,24,5>": "",
|
||||
"<1,24,6>": "0",
|
||||
"<1,24,7>": "",
|
||||
"<1,24,8>": "",
|
||||
"<1,24,9>": "",
|
||||
"<1,24,10>": "0",
|
||||
"<1,24,11>": "0",
|
||||
"<1,24,12>": "0",
|
||||
"<1,24,13>": "0",
|
||||
"<1,24,14>": "0",
|
||||
"<1,24,15>": "0",
|
||||
"<1,24,16>": "0",
|
||||
"<1,24,17>": "0"
|
||||
},
|
||||
"<1,25>": "",
|
||||
"<1,26>": "",
|
||||
"<1,27>": "",
|
||||
"<1,28>": "",
|
||||
"<1,29>": "",
|
||||
"<1,30>": "",
|
||||
"<1,31>": "",
|
||||
"<1,32>": "",
|
||||
"<1,33>": "",
|
||||
"<1,34>": "LSL2*IMAGE*ICO*INFINEON",
|
||||
"<1,35>": "",
|
||||
"<1,36>": "",
|
||||
"<1,37>": {
|
||||
"<1,37,1>": "0X10001",
|
||||
"<1,37,2>": "0X10001"
|
||||
},
|
||||
"<1,38>": "",
|
||||
"<1,39>": "",
|
||||
"<1,40>": "",
|
||||
"<1,41>": "",
|
||||
"<1,42>": "",
|
||||
"<1,43>": "",
|
||||
"<1,44>": "",
|
||||
"<1,45>": "",
|
||||
"<1,46>": "",
|
||||
"<1,47>": "",
|
||||
"<1,48>": "",
|
||||
"<1,49>": "",
|
||||
"<1,50>": "",
|
||||
"<1,51>": "",
|
||||
"<1,52>": "",
|
||||
"<1,53>": "",
|
||||
"<1,54>": "",
|
||||
"<1,55>": "",
|
||||
"<1,56>": "",
|
||||
"<1,57>": "",
|
||||
"<1,58>": "",
|
||||
"<1,59>": "",
|
||||
"<1,60>": "",
|
||||
"<1,61>": "",
|
||||
"<1,62>": {
|
||||
"<1,62,1>": "0",
|
||||
"<1,62,2>": "",
|
||||
"<1,62,3>": "",
|
||||
"<1,62,4>": "2",
|
||||
"<1,62,5>": "0",
|
||||
"<1,62,6>": "0",
|
||||
"<1,62,7>": "",
|
||||
"<1,62,8>": "0.50",
|
||||
"<1,62,9>": "5.00",
|
||||
"<1,62,10>": "0.00"
|
||||
},
|
||||
"<1,63>": "",
|
||||
"<1,64>": "",
|
||||
"<1,65>": "",
|
||||
"<1,66>": "",
|
||||
"<1,67>": "",
|
||||
"<1,68>": "",
|
||||
"<1,69>": "",
|
||||
"<1,70>": "",
|
||||
"<1,71>": "",
|
||||
"<1,72>": "",
|
||||
"<1,73>": "",
|
||||
"<1,74>": "",
|
||||
"<1,75>": "",
|
||||
"<1,76>": "",
|
||||
"<1,77>": "",
|
||||
"<1,78>": "",
|
||||
"<1,79>": "",
|
||||
"<1,80>": "",
|
||||
"<1,81>": "",
|
||||
"<1,82>": "",
|
||||
"<1,83>": "",
|
||||
"<1,84>": "",
|
||||
"<1,85>": "",
|
||||
"<1,86>": "",
|
||||
"<1,87>": "",
|
||||
"<1,88>": "",
|
||||
"<1,89>": "",
|
||||
"<1,90>": "",
|
||||
"<1,91>": "",
|
||||
"<1,92>": "",
|
||||
"<1,93>": "",
|
||||
"<1,94>": "",
|
||||
"<1,95>": "",
|
||||
"<1,96>": "",
|
||||
"<1,97>": "",
|
||||
"<1,98>": "",
|
||||
"<1,99>": "",
|
||||
"<1,100>": "",
|
||||
"<1,101>": "",
|
||||
"<1,102>": "",
|
||||
"<1,103>": "",
|
||||
"<1,104>": "",
|
||||
"<1,105>": "",
|
||||
"<1,106>": "0",
|
||||
"<1,107>": "",
|
||||
"<1,108>": ""
|
||||
}
|
||||
},
|
||||
"record3": {
|
||||
"<1>": {
|
||||
"<1,1>": "EDB_DATA",
|
||||
"<1,2>": "",
|
||||
"<1,3>": "EDITBOX",
|
||||
"<1,4>": "NDW_ACKNOWLEDGE_MESSAGE",
|
||||
"<1,5>": "16",
|
||||
"<1,6>": "12",
|
||||
"<1,7>": "-17",
|
||||
"<1,8>": "-48",
|
||||
"<1,9>": "",
|
||||
"<1,10>": {
|
||||
"<1,10,1>": "0x56200840",
|
||||
"<1,10,2>": "0x200"
|
||||
},
|
||||
"<1,11>": {
|
||||
"<1,11,1>": "0xC400",
|
||||
"<1,11,2>": "0x80000000"
|
||||
},
|
||||
"<1,12>": "3",
|
||||
"<1,13>": {
|
||||
"<1,13,1>": "-2",
|
||||
"<1,13,2>": "-2",
|
||||
"<1,13,3>": ""
|
||||
},
|
||||
"<1,14>": "-2",
|
||||
"<1,15>": {
|
||||
"<1,15,1>": {
|
||||
"<1,15,1,1>": "Segoe UI",
|
||||
"<1,15,1,2>": "-15",
|
||||
"<1,15,1,3>": "400",
|
||||
"<1,15,1,4>": "0",
|
||||
"<1,15,1,5>": "0",
|
||||
"<1,15,1,6>": "0",
|
||||
"<1,15,1,7>": "0",
|
||||
"<1,15,1,8>": "34",
|
||||
"<1,15,1,9>": "0",
|
||||
"<1,15,1,10>": "3",
|
||||
"<1,15,1,11>": "2",
|
||||
"<1,15,1,12>": "1"
|
||||
}
|
||||
},
|
||||
"<1,16>": "",
|
||||
"<1,17>": "",
|
||||
"<1,18>": "",
|
||||
"<1,19>": "",
|
||||
"<1,20>": "",
|
||||
"<1,21>": "",
|
||||
"<1,22>": "",
|
||||
"<1,23>": "",
|
||||
"<1,24>": "",
|
||||
"<1,25>": "",
|
||||
"<1,26>": "",
|
||||
"<1,27>": "",
|
||||
"<1,28>": "<<None>>",
|
||||
"<1,29>": "<<None>>",
|
||||
"<1,30>": "",
|
||||
"<1,31>": "0",
|
||||
"<1,32>": "",
|
||||
"<1,33>": "",
|
||||
"<1,34>": "",
|
||||
"<1,35>": "",
|
||||
"<1,36>": "",
|
||||
"<1,37>": "",
|
||||
"<1,38>": "",
|
||||
"<1,39>": "",
|
||||
"<1,40>": "",
|
||||
"<1,41>": "",
|
||||
"<1,42>": "",
|
||||
"<1,43>": "",
|
||||
"<1,44>": "",
|
||||
"<1,45>": "",
|
||||
"<1,46>": "",
|
||||
"<1,47>": "",
|
||||
"<1,48>": "",
|
||||
"<1,49>": "",
|
||||
"<1,50>": "",
|
||||
"<1,51>": "",
|
||||
"<1,52>": "",
|
||||
"<1,53>": "",
|
||||
"<1,54>": "",
|
||||
"<1,55>": "",
|
||||
"<1,56>": "",
|
||||
"<1,57>": "",
|
||||
"<1,58>": "",
|
||||
"<1,59>": "",
|
||||
"<1,60>": "",
|
||||
"<1,61>": "",
|
||||
"<1,62>": "0",
|
||||
"<1,63>": "",
|
||||
"<1,64>": "",
|
||||
"<1,65>": "",
|
||||
"<1,66>": "",
|
||||
"<1,67>": "",
|
||||
"<1,68>": "",
|
||||
"<1,69>": "",
|
||||
"<1,70>": "",
|
||||
"<1,71>": "",
|
||||
"<1,72>": "",
|
||||
"<1,73>": "",
|
||||
"<1,74>": "",
|
||||
"<1,75>": "",
|
||||
"<1,76>": "",
|
||||
"<1,77>": "",
|
||||
"<1,78>": "",
|
||||
"<1,79>": "",
|
||||
"<1,80>": "",
|
||||
"<1,81>": "",
|
||||
"<1,82>": "",
|
||||
"<1,83>": "",
|
||||
"<1,84>": "",
|
||||
"<1,85>": "",
|
||||
"<1,86>": "",
|
||||
"<1,87>": "",
|
||||
"<1,88>": "",
|
||||
"<1,89>": "",
|
||||
"<1,90>": "",
|
||||
"<1,91>": "",
|
||||
"<1,92>": "",
|
||||
"<1,93>": "",
|
||||
"<1,94>": "",
|
||||
"<1,95>": "",
|
||||
"<1,96>": "",
|
||||
"<1,97>": "",
|
||||
"<1,98>": "",
|
||||
"<1,99>": "",
|
||||
"<1,100>": "",
|
||||
"<1,101>": "",
|
||||
"<1,102>": "",
|
||||
"<1,103>": "",
|
||||
"<1,104>": "",
|
||||
"<1,105>": "",
|
||||
"<1,106>": "",
|
||||
"<1,107>": "",
|
||||
"<1,108>": ""
|
||||
},
|
||||
"<2>": {
|
||||
"<2,1>": "PUB_OK",
|
||||
"<2,2>": "",
|
||||
"<2,3>": "PUSHBUTTON",
|
||||
"<2,4>": "NDW_ACKNOWLEDGE_MESSAGE",
|
||||
"<2,5>": "-184",
|
||||
"<2,6>": "-37",
|
||||
"<2,7>": "80",
|
||||
"<2,8>": "24",
|
||||
"<2,9>": "&OK",
|
||||
"<2,10>": {
|
||||
"<2,10,1>": "0x56000300",
|
||||
"<2,10,2>": "0x0"
|
||||
},
|
||||
"<2,11>": {
|
||||
"<2,11,1>": "0x3005",
|
||||
"<2,11,2>": "0x80000000"
|
||||
},
|
||||
"<2,12>": "1",
|
||||
"<2,13>": {
|
||||
"<2,13,1>": "-2",
|
||||
"<2,13,2>": "-2",
|
||||
"<2,13,3>": "0"
|
||||
},
|
||||
"<2,14>": "-2",
|
||||
"<2,15>": {
|
||||
"<2,15,1>": {
|
||||
"<2,15,1,1>": "Segoe UI",
|
||||
"<2,15,1,2>": "-12",
|
||||
"<2,15,1,3>": "400",
|
||||
"<2,15,1,4>": "0",
|
||||
"<2,15,1,5>": "0",
|
||||
"<2,15,1,6>": "0",
|
||||
"<2,15,1,7>": "1",
|
||||
"<2,15,1,8>": "0",
|
||||
"<2,15,1,9>": "0",
|
||||
"<2,15,1,10>": "0",
|
||||
"<2,15,1,11>": "0",
|
||||
"<2,15,1,12>": "0"
|
||||
}
|
||||
},
|
||||
"<2,16>": "",
|
||||
"<2,17>": "",
|
||||
"<2,18>": {
|
||||
"<2,18,1>": {
|
||||
"<2,18,1,1>": "X",
|
||||
"<2,18,1,2>": "EXECUTE",
|
||||
"<2,18,1,3>": "@WINDOW_EVENTS",
|
||||
"<2,18,1,4>": {
|
||||
"<2,18,1,4,1>": "@SELF",
|
||||
"<2,18,1,4,2>": "@EVENT",
|
||||
"<2,18,1,4,3>": "@PARAM1",
|
||||
"<2,18,1,4,4>": "@PARAM2",
|
||||
"<2,18,1,4,5>": "@PARAM3",
|
||||
"<2,18,1,4,6>": "@PARAM4",
|
||||
"<2,18,1,4,7>": "@PARAM5",
|
||||
"<2,18,1,4,8>": "@PARAM6"
|
||||
},
|
||||
"<2,18,1,5>": "",
|
||||
"<2,18,1,6>": "",
|
||||
"<2,18,1,7>": "",
|
||||
"<2,18,1,8>": "",
|
||||
"<2,18,1,9>": "",
|
||||
"<2,18,1,10>": "",
|
||||
"<2,18,1,11>": "",
|
||||
"<2,18,1,12>": "",
|
||||
"<2,18,1,13>": "",
|
||||
"<2,18,1,14>": "",
|
||||
"<2,18,1,15>": "COMMEVT",
|
||||
"<2,18,1,16>": "0"
|
||||
}
|
||||
},
|
||||
"<2,19>": "CLICK",
|
||||
"<2,20>": "",
|
||||
"<2,21>": "",
|
||||
"<2,22>": "",
|
||||
"<2,23>": "",
|
||||
"<2,24>": "",
|
||||
"<2,25>": "",
|
||||
"<2,26>": "",
|
||||
"<2,27>": "",
|
||||
"<2,28>": "",
|
||||
"<2,29>": "",
|
||||
"<2,30>": "",
|
||||
"<2,31>": "",
|
||||
"<2,32>": "",
|
||||
"<2,33>": "",
|
||||
"<2,34>": "",
|
||||
"<2,35>": "",
|
||||
"<2,36>": "",
|
||||
"<2,37>": "",
|
||||
"<2,38>": "",
|
||||
"<2,39>": "",
|
||||
"<2,40>": "-1",
|
||||
"<2,41>": {
|
||||
"<2,41,1>": "",
|
||||
"<2,41,2>": "-1"
|
||||
},
|
||||
"<2,42>": "",
|
||||
"<2,43>": "",
|
||||
"<2,44>": "",
|
||||
"<2,45>": "",
|
||||
"<2,46>": "",
|
||||
"<2,47>": "",
|
||||
"<2,48>": "",
|
||||
"<2,49>": "",
|
||||
"<2,50>": "",
|
||||
"<2,51>": "",
|
||||
"<2,52>": "",
|
||||
"<2,53>": "",
|
||||
"<2,54>": "",
|
||||
"<2,55>": "",
|
||||
"<2,56>": "",
|
||||
"<2,57>": "",
|
||||
"<2,58>": "",
|
||||
"<2,59>": "",
|
||||
"<2,60>": "",
|
||||
"<2,61>": "",
|
||||
"<2,62>": "0",
|
||||
"<2,63>": "",
|
||||
"<2,64>": {
|
||||
"<2,64,1>": "-2",
|
||||
"<2,64,2>": "-2",
|
||||
"<2,64,3>": "0"
|
||||
},
|
||||
"<2,65>": "-2",
|
||||
"<2,66>": "",
|
||||
"<2,67>": "",
|
||||
"<2,68>": "",
|
||||
"<2,69>": "",
|
||||
"<2,70>": "",
|
||||
"<2,71>": "",
|
||||
"<2,72>": "",
|
||||
"<2,73>": "",
|
||||
"<2,74>": "",
|
||||
"<2,75>": "",
|
||||
"<2,76>": "",
|
||||
"<2,77>": "",
|
||||
"<2,78>": "",
|
||||
"<2,79>": "",
|
||||
"<2,80>": "",
|
||||
"<2,81>": "",
|
||||
"<2,82>": "",
|
||||
"<2,83>": "",
|
||||
"<2,84>": "",
|
||||
"<2,85>": "",
|
||||
"<2,86>": "",
|
||||
"<2,87>": "",
|
||||
"<2,88>": "",
|
||||
"<2,89>": "",
|
||||
"<2,90>": "0",
|
||||
"<2,91>": "0",
|
||||
"<2,92>": "",
|
||||
"<2,93>": "",
|
||||
"<2,94>": "",
|
||||
"<2,95>": "",
|
||||
"<2,96>": "",
|
||||
"<2,97>": "",
|
||||
"<2,98>": "",
|
||||
"<2,99>": "",
|
||||
"<2,100>": "",
|
||||
"<2,101>": "",
|
||||
"<2,102>": "",
|
||||
"<2,103>": "",
|
||||
"<2,104>": "",
|
||||
"<2,105>": "",
|
||||
"<2,106>": "",
|
||||
"<2,107>": "",
|
||||
"<2,108>": ""
|
||||
},
|
||||
"<3>": {
|
||||
"<3,1>": "PUB_CANCEL",
|
||||
"<3,2>": "",
|
||||
"<3,3>": "PUSHBUTTON",
|
||||
"<3,4>": "NDW_ACKNOWLEDGE_MESSAGE",
|
||||
"<3,5>": "-97",
|
||||
"<3,6>": "-37",
|
||||
"<3,7>": "80",
|
||||
"<3,8>": "24",
|
||||
"<3,9>": "&Cancel",
|
||||
"<3,10>": {
|
||||
"<3,10,1>": "0x56000300",
|
||||
"<3,10,2>": "0x0"
|
||||
},
|
||||
"<3,11>": {
|
||||
"<3,11,1>": "0x3002",
|
||||
"<3,11,2>": "0x80000000"
|
||||
},
|
||||
"<3,12>": "2",
|
||||
"<3,13>": {
|
||||
"<3,13,1>": "-2",
|
||||
"<3,13,2>": "-2",
|
||||
"<3,13,3>": "0"
|
||||
},
|
||||
"<3,14>": "-2",
|
||||
"<3,15>": {
|
||||
"<3,15,1>": {
|
||||
"<3,15,1,1>": "Segoe UI",
|
||||
"<3,15,1,2>": "-12",
|
||||
"<3,15,1,3>": "400",
|
||||
"<3,15,1,4>": "0",
|
||||
"<3,15,1,5>": "0",
|
||||
"<3,15,1,6>": "0",
|
||||
"<3,15,1,7>": "1",
|
||||
"<3,15,1,8>": "0",
|
||||
"<3,15,1,9>": "0",
|
||||
"<3,15,1,10>": "0",
|
||||
"<3,15,1,11>": "0",
|
||||
"<3,15,1,12>": "0"
|
||||
}
|
||||
},
|
||||
"<3,16>": "",
|
||||
"<3,17>": "",
|
||||
"<3,18>": {
|
||||
"<3,18,1>": {
|
||||
"<3,18,1,1>": "X",
|
||||
"<3,18,1,2>": "EXECUTE",
|
||||
"<3,18,1,3>": "@WINDOW_EVENTS",
|
||||
"<3,18,1,4>": {
|
||||
"<3,18,1,4,1>": "@SELF",
|
||||
"<3,18,1,4,2>": "@EVENT",
|
||||
"<3,18,1,4,3>": "@PARAM1",
|
||||
"<3,18,1,4,4>": "@PARAM2",
|
||||
"<3,18,1,4,5>": "@PARAM3",
|
||||
"<3,18,1,4,6>": "@PARAM4",
|
||||
"<3,18,1,4,7>": "@PARAM5",
|
||||
"<3,18,1,4,8>": "@PARAM6"
|
||||
},
|
||||
"<3,18,1,5>": "",
|
||||
"<3,18,1,6>": "",
|
||||
"<3,18,1,7>": "",
|
||||
"<3,18,1,8>": "",
|
||||
"<3,18,1,9>": "",
|
||||
"<3,18,1,10>": "",
|
||||
"<3,18,1,11>": "",
|
||||
"<3,18,1,12>": "",
|
||||
"<3,18,1,13>": "",
|
||||
"<3,18,1,14>": "",
|
||||
"<3,18,1,15>": "COMMEVT",
|
||||
"<3,18,1,16>": "0"
|
||||
}
|
||||
},
|
||||
"<3,19>": "CLICK",
|
||||
"<3,20>": "",
|
||||
"<3,21>": "",
|
||||
"<3,22>": "",
|
||||
"<3,23>": "",
|
||||
"<3,24>": "",
|
||||
"<3,25>": "",
|
||||
"<3,26>": "",
|
||||
"<3,27>": "",
|
||||
"<3,28>": "",
|
||||
"<3,29>": "",
|
||||
"<3,30>": "",
|
||||
"<3,31>": "",
|
||||
"<3,32>": "",
|
||||
"<3,33>": "",
|
||||
"<3,34>": "",
|
||||
"<3,35>": "",
|
||||
"<3,36>": "",
|
||||
"<3,37>": "",
|
||||
"<3,38>": "",
|
||||
"<3,39>": "",
|
||||
"<3,40>": "-1",
|
||||
"<3,41>": {
|
||||
"<3,41,1>": "",
|
||||
"<3,41,2>": "-1"
|
||||
},
|
||||
"<3,42>": "",
|
||||
"<3,43>": "",
|
||||
"<3,44>": "",
|
||||
"<3,45>": "",
|
||||
"<3,46>": "",
|
||||
"<3,47>": "",
|
||||
"<3,48>": "",
|
||||
"<3,49>": "",
|
||||
"<3,50>": "",
|
||||
"<3,51>": "",
|
||||
"<3,52>": "",
|
||||
"<3,53>": "",
|
||||
"<3,54>": "",
|
||||
"<3,55>": "",
|
||||
"<3,56>": "",
|
||||
"<3,57>": "",
|
||||
"<3,58>": "",
|
||||
"<3,59>": "",
|
||||
"<3,60>": "",
|
||||
"<3,61>": "",
|
||||
"<3,62>": "0",
|
||||
"<3,63>": "",
|
||||
"<3,64>": {
|
||||
"<3,64,1>": "-2",
|
||||
"<3,64,2>": "-2",
|
||||
"<3,64,3>": "0"
|
||||
},
|
||||
"<3,65>": "-2",
|
||||
"<3,66>": "",
|
||||
"<3,67>": "",
|
||||
"<3,68>": "",
|
||||
"<3,69>": "",
|
||||
"<3,70>": "",
|
||||
"<3,71>": "",
|
||||
"<3,72>": "",
|
||||
"<3,73>": "",
|
||||
"<3,74>": "",
|
||||
"<3,75>": "",
|
||||
"<3,76>": "",
|
||||
"<3,77>": "",
|
||||
"<3,78>": "",
|
||||
"<3,79>": "",
|
||||
"<3,80>": "",
|
||||
"<3,81>": "",
|
||||
"<3,82>": "",
|
||||
"<3,83>": "",
|
||||
"<3,84>": "",
|
||||
"<3,85>": "",
|
||||
"<3,86>": "",
|
||||
"<3,87>": "",
|
||||
"<3,88>": "",
|
||||
"<3,89>": "",
|
||||
"<3,90>": "0",
|
||||
"<3,91>": "0",
|
||||
"<3,92>": "",
|
||||
"<3,93>": "",
|
||||
"<3,94>": "",
|
||||
"<3,95>": "",
|
||||
"<3,96>": "",
|
||||
"<3,97>": "",
|
||||
"<3,98>": "",
|
||||
"<3,99>": "",
|
||||
"<3,100>": "",
|
||||
"<3,101>": "",
|
||||
"<3,102>": "",
|
||||
"<3,103>": "",
|
||||
"<3,104>": "",
|
||||
"<3,105>": "",
|
||||
"<3,106>": "",
|
||||
"<3,107>": "",
|
||||
"<3,108>": ""
|
||||
}
|
||||
},
|
||||
"record4": {
|
||||
"<1>": ""
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -6655,13 +6655,6 @@
|
||||
"<41,35,3,3>": "",
|
||||
"<41,35,3,4>": "",
|
||||
"<41,35,3,5>": ""
|
||||
},
|
||||
"<41,35,4>": {
|
||||
"<41,35,4,1>": "",
|
||||
"<41,35,4,2>": "",
|
||||
"<41,35,4,3>": "",
|
||||
"<41,35,4,4>": "",
|
||||
"<41,35,4,5>": ""
|
||||
}
|
||||
},
|
||||
"<41,36>": "",
|
||||
@ -7886,7 +7879,7 @@
|
||||
"<45,10,2>": "0x200"
|
||||
},
|
||||
"<45,11>": {
|
||||
"<45,11,1>": "0x0",
|
||||
"<45,11,1>": "0x80000",
|
||||
"<45,11,2>": "0x80000000"
|
||||
},
|
||||
"<45,12>": "45",
|
||||
@ -7922,7 +7915,7 @@
|
||||
"<45,21>": "",
|
||||
"<45,22>": "",
|
||||
"<45,23>": "WM_OUT",
|
||||
"<45,24>": "SPECIAL_INST",
|
||||
"<45,24>": "SPEC_INST",
|
||||
"<45,25>": "",
|
||||
"<45,26>": "",
|
||||
"<45,27>": "",
|
||||
|
@ -9,7 +9,7 @@
|
||||
"<2>": "-1",
|
||||
"<3>": "-1",
|
||||
"<4>": "-1",
|
||||
"<5>": "16777215",
|
||||
"<5>": "-2",
|
||||
"<6>": {
|
||||
"<6,1>": {
|
||||
"<6,1,1>": "Tahoma",
|
||||
@ -31,7 +31,7 @@
|
||||
}
|
||||
},
|
||||
"<7>": "REACT_ITEM",
|
||||
"<8>": "BY @ID",
|
||||
"<8>": "BY-DSND ENTER_DTM",
|
||||
"<9>": {
|
||||
"<9,1>": {
|
||||
"<9,1,1>": "RI_NO",
|
||||
@ -120,6 +120,22 @@
|
||||
"<9,11,4>": "C",
|
||||
"<9,11,5>": "D4/",
|
||||
"<9,11,6>": "Retire Dt"
|
||||
},
|
||||
"<9,12>": {
|
||||
"<9,12,1>": "ENTER_DTM",
|
||||
"<9,12,2>": "14",
|
||||
"<9,12,3>": "L",
|
||||
"<9,12,4>": "C",
|
||||
"<9,12,5>": "DT2/^H",
|
||||
"<9,12,6>": "Enter Dtm"
|
||||
},
|
||||
"<9,13>": {
|
||||
"<9,13,1>": "CURR_STATUS",
|
||||
"<9,13,2>": "5",
|
||||
"<9,13,3>": "L",
|
||||
"<9,13,4>": "C",
|
||||
"<9,13,5>": "[CONV_ITEM_CURR_STATUS]",
|
||||
"<9,13,6>": "Curr Status"
|
||||
}
|
||||
},
|
||||
"<10>": "T",
|
||||
@ -147,7 +163,17 @@
|
||||
"<32>": "0",
|
||||
"<33>": "1",
|
||||
"<34>": "16777215",
|
||||
"<35>": "16777215"
|
||||
"<35>": "16766894",
|
||||
"<36>": "",
|
||||
"<37>": "",
|
||||
"<38>": "",
|
||||
"<39>": "",
|
||||
"<40>": "-2",
|
||||
"<41>": "1000",
|
||||
"<42>": "",
|
||||
"<43>": "",
|
||||
"<44>": "",
|
||||
"<45>": ""
|
||||
}
|
||||
}
|
||||
}
|
@ -9,7 +9,7 @@
|
||||
"<2>": "-1",
|
||||
"<3>": "-1",
|
||||
"<4>": "-1",
|
||||
"<5>": "16777215",
|
||||
"<5>": "-2",
|
||||
"<6>": {
|
||||
"<6,1>": {
|
||||
"<6,1,1>": "MS Sans Serif",
|
||||
@ -91,7 +91,17 @@
|
||||
"<32>": "0",
|
||||
"<33>": "1",
|
||||
"<34>": "16777215",
|
||||
"<35>": "16777215"
|
||||
"<35>": "16777215",
|
||||
"<36>": "",
|
||||
"<37>": "",
|
||||
"<38>": "",
|
||||
"<39>": "",
|
||||
"<40>": "-2",
|
||||
"<41>": "1000",
|
||||
"<42>": "",
|
||||
"<43>": "",
|
||||
"<44>": "",
|
||||
"<45>": ""
|
||||
}
|
||||
}
|
||||
}
|
@ -20,7 +20,7 @@ Declare Function Get_Property, Get_Status, Dialog_Box, Utility, Popup, Collect.I
|
||||
Declare Function Send_Message, Msg, Security_Check, obj_React_Item, Select_Into, MemberOf, Create_Dialog, obj_Calendar
|
||||
Declare Function GetAsyncKeyState, obj_Tables, MemberOf, Environment_Services, Database_Services, Rds_Services
|
||||
Declare Function Reactor_Services, Error_Services, React_Servs_Services, Reactor_Log_Services, Send_Event, SRP_List
|
||||
Declare Function Nica_Orders_Services
|
||||
Declare Function Nica_Orders_Services, SRP_Date, React_Item_Services, SRP_Datetime, Datetime
|
||||
|
||||
$Insert MSG_EQUATES
|
||||
$Insert APPCOLORS
|
||||
@ -1229,64 +1229,51 @@ SvcsOptions:
|
||||
If ItemType NE '' then
|
||||
|
||||
RetVal = ''
|
||||
ItemType = ICONV(ItemType,'[CONV_CODE_DESC,REACT_ITEM_TYPE]')
|
||||
|
||||
ItemType = ICONV(ItemType,'[CONV_CODE_DESC,REACT_ITEM_TYPE]')
|
||||
RIKeys = React_Item_Services('GetReactItems', ItemType, 'N,U')
|
||||
|
||||
OPEN 'DICT.REACT_ITEM' to DictReactItem else
|
||||
ErrMsg('Unable to open DICT.REACT_ITEM')
|
||||
return
|
||||
end
|
||||
|
||||
SearchString = 'RI_TYPE':@VM:ItemType:@FM
|
||||
SearchString := 'CURR_STATUS':@VM:'N':@VM:'U':@FM
|
||||
|
||||
RIKeys = ''
|
||||
Option = ''
|
||||
Flag = ''
|
||||
|
||||
Btree.Extract(SearchString,'REACT_ITEM',DictReactItem,RIKeys,Option,Flag)
|
||||
If Get_Status(errCode) then
|
||||
ErrMsg(errCode)
|
||||
return
|
||||
end
|
||||
|
||||
TypeOver = ''
|
||||
TypeOVer<PMODE$> = 'K'
|
||||
TypeOver<PDISPLAY$> = RIKeys
|
||||
RetVal = Popup(@Window,TypeOver,'REACT_ITEM')
|
||||
|
||||
If RetVal NE '' then
|
||||
obj_AppWindow('LUValReturn',RetVal:@RM:@Window:'.SERV_INFO':@RM:SelPos)
|
||||
|
||||
RIRec = XLATE('REACT_ITEM',RetVal,'','X')
|
||||
|
||||
If RIRec<REACT_ITEM_RI_TYPE$> = 'T' then
|
||||
CardWindow = 'REACT_ITEM'
|
||||
CardKey = RetVal
|
||||
DefaultRec = ''
|
||||
NewCardCtrl = ''
|
||||
RecalcCtrl = @Window:'.SERV_INFO'
|
||||
RecalcPos = SelPos
|
||||
RetCtrl = @Window:'.SERV_INFO'
|
||||
RetPos = SelPos
|
||||
|
||||
oAParms = CardWindow:@RM:CardKey:@RM:DefaultRec:@RM:NewCardCtrl:@RM:RecalcCtrl:@RM:RecalcPos:@RM:RetCtrl:@RM:RetPos
|
||||
|
||||
obj_AppWindow('ViewNewCard',oAParms)
|
||||
|
||||
Set_Property('REACT_ITEM.TUBE_GRADE','FOCUS',1)
|
||||
|
||||
If Get_Status(errCode) then
|
||||
ErrMsg(errCode)
|
||||
end
|
||||
end
|
||||
|
||||
GoSub Refresh
|
||||
If Error_Services('NoError') then
|
||||
|
||||
TypeOver = ''
|
||||
TypeOVer<PMODE$> = 'K'
|
||||
TypeOver<PDISPLAY$> = RIKeys
|
||||
RetVal = Popup(@Window,TypeOver,'REACT_ITEM')
|
||||
|
||||
If RetVal NE '' then
|
||||
obj_AppWindow('LUValReturn',RetVal:@RM:@Window:'.SERV_INFO':@RM:SelPos)
|
||||
|
||||
RIRec = XLATE('REACT_ITEM',RetVal,'','X')
|
||||
|
||||
If RIRec<REACT_ITEM_RI_TYPE$> = 'T' then
|
||||
CardWindow = 'REACT_ITEM'
|
||||
CardKey = RetVal
|
||||
DefaultRec = ''
|
||||
NewCardCtrl = ''
|
||||
RecalcCtrl = @Window:'.SERV_INFO'
|
||||
RecalcPos = SelPos
|
||||
RetCtrl = @Window:'.SERV_INFO'
|
||||
RetPos = SelPos
|
||||
|
||||
oAParms = CardWindow:@RM:CardKey:@RM:DefaultRec:@RM:NewCardCtrl:@RM:RecalcCtrl:@RM:RecalcPos:@RM:RetCtrl:@RM:RetPos
|
||||
|
||||
obj_AppWindow('ViewNewCard',oAParms)
|
||||
|
||||
Set_Property('REACT_ITEM.TUBE_GRADE','FOCUS',1)
|
||||
|
||||
If Get_Status(errCode) then
|
||||
ErrMsg(errCode)
|
||||
end
|
||||
end
|
||||
|
||||
GoSub Refresh
|
||||
end
|
||||
end else
|
||||
Error_Services('DisplayError')
|
||||
end
|
||||
|
||||
end ;* End of check for null SNReq
|
||||
|
||||
|
||||
End Case
|
||||
|
||||
GoSub Refresh
|
||||
@ -1877,4 +1864,3 @@ ColorRemRiTable:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
@ -1099,7 +1099,7 @@ SignSupVer:
|
||||
************************************************************************
|
||||
WMOKey = Get_Property(@WINDOW,'ID')
|
||||
PSNo = Get_Property(@WINDOW:'.PS_NO)','TEXT')
|
||||
VerInst = XLATE('PRS_STAGE',PSNo:'*QA',PRS_STAGE_INST$,'X')
|
||||
VerInst = XLATE('PRS_STAGE',PSNo:'*MO_QA',PRS_STAGE_INST$,'X')
|
||||
IF (VerInst NE '') THEN
|
||||
Yes = Dialog_Box( 'RDS_VER', @WINDOW, VerInst )
|
||||
IF NOT(Yes) THEN
|
||||
@ -1711,129 +1711,142 @@ AddMakeup:
|
||||
END
|
||||
NEXT I
|
||||
|
||||
Response = Dialog_Box('NDW_MAKEUP_WAFERS', @Window, WOMatKey)
|
||||
Continue = True$
|
||||
ShowSpecInst = Xlate('PROD_SPEC', PSNo, PROD_SPEC_SHOW_SPEC_INST_ON_MU_ADD$, 'X')
|
||||
If ShowSpecInst then
|
||||
SpecInst = Xlate('PROD_SPEC', PSNo, PROD_SPEC_SPEC_INST$, 'X')
|
||||
If SpecInst NE '' then
|
||||
Continue = Dialog_Box('NDW_ACKNOWLEDGE_MESSAGE', @Window, SpecInst)
|
||||
If Not(Continue) then
|
||||
Msg(@Window, '', 'OK', '', 'Process Error':@FM:'This PSN requires you to acknowledge special instructions to add makeup wafers.')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Begin Case
|
||||
Case Response EQ True$
|
||||
// User requested to convert the current cassette into a makeup box.
|
||||
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
||||
If Error_Services('NoError') then
|
||||
SAPBatchNo = WOMatRec<WO_MAT_SAP_BATCH_NO$>
|
||||
SAPTXDtm = WOMatRec<WO_MAT_SAP_TX_DTM$>
|
||||
AwaitingBatchNo = ( (SAPTXDtm NE '') and (SAPBatchNo EQ '') )
|
||||
HasBatchNo = (SAPBatchNo NE '')
|
||||
FullBoxReject = (SAPBatchNo[-1, 1] = 'R')
|
||||
Begin Case
|
||||
Case AwaitingBatchNo
|
||||
InvalidRequest = True$
|
||||
ErrMsg('WARNING: Cassette ineligible to be converted as it is awaiting a batch number from SAP.')
|
||||
Return
|
||||
Case FullBoxReject
|
||||
InvalidRequest = True$
|
||||
ErrMsg('WARNING: Cassette is ineligible to be converted as it is a full box reject.')
|
||||
Return
|
||||
Case HasBatchNo
|
||||
// Operation limited to LEAD and SUPERVISOR groups
|
||||
OverrideMsg = "Cassette has a batch number. SUPERVISOR or LEAD must override."
|
||||
Response = Msg(@Window, '', 'OVERRIDE', '', OverrideMsg)
|
||||
|
||||
Begin Case
|
||||
Case Response EQ 1
|
||||
Response = True$ ; // User Clicked Override
|
||||
Case Response EQ 2
|
||||
Response = False$ ; // User Clicked Cancel
|
||||
Case Response EQ char(27)
|
||||
Response = False$ ; // User Pressed Escape Key
|
||||
End Case
|
||||
|
||||
If Response EQ True$ then
|
||||
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:'LEAD':@VM:'SUPERVISOR')
|
||||
Authorized = Response<1>
|
||||
end else
|
||||
Authorized = False$
|
||||
end
|
||||
If Not(Authorized) then Return
|
||||
Case Otherwise$
|
||||
Null
|
||||
End Case
|
||||
|
||||
AvailMU_WMOKeys = ''
|
||||
UserResp = Response
|
||||
MakeupBox = ''
|
||||
|
||||
If Continue then
|
||||
Response = Dialog_Box('NDW_MAKEUP_WAFERS', @Window, WOMatKey)
|
||||
|
||||
Begin Case
|
||||
Case Response EQ True$
|
||||
// User requested to convert the current cassette into a makeup box.
|
||||
// Verify the quantity before proceeding.
|
||||
If WMOutKey NE '' then
|
||||
Parms = ''
|
||||
Parms<1> = WMOutKey ; // Cassette to verify wafer count of.
|
||||
Parms<2> = 0 ; // Wafer count adjustment - 0 because converting box.
|
||||
Parms<3> = 'MU' ; // Wafer counter tool location
|
||||
Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
|
||||
If Proceed NE True$ then Return
|
||||
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
||||
If Error_Services('NoError') then
|
||||
SAPBatchNo = WOMatRec<WO_MAT_SAP_BATCH_NO$>
|
||||
SAPTXDtm = WOMatRec<WO_MAT_SAP_TX_DTM$>
|
||||
AwaitingBatchNo = ( (SAPTXDtm NE '') and (SAPBatchNo EQ '') )
|
||||
HasBatchNo = (SAPBatchNo NE '')
|
||||
FullBoxReject = (SAPBatchNo[-1, 1] = 'R')
|
||||
Begin Case
|
||||
Case AwaitingBatchNo
|
||||
InvalidRequest = True$
|
||||
ErrMsg('WARNING: Cassette ineligible to be converted as it is awaiting a batch number from SAP.')
|
||||
Return
|
||||
Case FullBoxReject
|
||||
InvalidRequest = True$
|
||||
ErrMsg('WARNING: Cassette is ineligible to be converted as it is a full box reject.')
|
||||
Return
|
||||
Case HasBatchNo
|
||||
// Operation limited to LEAD and SUPERVISOR groups
|
||||
OverrideMsg = "Cassette has a batch number. SUPERVISOR or LEAD must override."
|
||||
Response = Msg(@Window, '', 'OVERRIDE', '', OverrideMsg)
|
||||
|
||||
Begin Case
|
||||
Case Response EQ 1
|
||||
Response = True$ ; // User Clicked Override
|
||||
Case Response EQ 2
|
||||
Response = False$ ; // User Clicked Cancel
|
||||
Case Response EQ char(27)
|
||||
Response = False$ ; // User Pressed Escape Key
|
||||
End Case
|
||||
|
||||
If Response EQ True$ then
|
||||
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:'LEAD':@VM:'SUPERVISOR')
|
||||
Authorized = Response<1>
|
||||
end else
|
||||
Authorized = False$
|
||||
end
|
||||
If Not(Authorized) then Return
|
||||
Case Otherwise$
|
||||
Null
|
||||
End Case
|
||||
|
||||
AvailMU_WMOKeys = ''
|
||||
UserResp = Response
|
||||
MakeupBox = ''
|
||||
|
||||
// User requested to convert the current cassette into a makeup box.
|
||||
// Verify the quantity before proceeding.
|
||||
If WMOutKey NE '' then
|
||||
Parms = ''
|
||||
Parms<1> = WMOutKey ; // Cassette to verify wafer count of.
|
||||
Parms<2> = 0 ; // Wafer count adjustment - 0 because converting box.
|
||||
Parms<3> = 'MU' ; // Wafer counter tool location
|
||||
Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
|
||||
If Proceed NE True$ then Return
|
||||
end else
|
||||
ErrMsg('Error starting wafer counter check. WM_OUT key is missing.')
|
||||
end
|
||||
|
||||
CheckValue = 1
|
||||
|
||||
FieldNo = WO_MAT_EPO_MAKEUP_BOX$
|
||||
obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue) ;* Set WMO_MAKEUP flag on WM_OUT
|
||||
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||
|
||||
Set_Property(@WINDOW:'.MAKEUP_BOX','DEFPROP',CheckValue) ;* Make this the makeup box
|
||||
Send_Event(@WINDOW,'WRITE') ;* Write the record
|
||||
|
||||
WMOKey = WONo:'*':ProcStepNo:'*':CassNo
|
||||
obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WMOKey) ;* Reread the updated record
|
||||
|
||||
Return
|
||||
end else
|
||||
ErrMsg('Error starting wafer counter check. WM_OUT key is missing.')
|
||||
ErrMsg('WARNING: Error reading WO_MAT record.')
|
||||
Return
|
||||
end
|
||||
Case Response EQ ''
|
||||
// User has cancelled this process.
|
||||
Return
|
||||
Case Otherwise$
|
||||
// User has selected a makeup box to use and backfill.
|
||||
AvailMU_WMOKeys = Response
|
||||
MakeupBox = Response
|
||||
MuWfrsNeeded = SelCnt
|
||||
If AvailMU_WMOKeys NE '' then
|
||||
// Wafer counter check - Account for the possibility of selecting more than one makeup box.
|
||||
For each MuWmoKey in AvailMU_WMOKeys using @FM
|
||||
MuWoMatKey = Field(MuWmoKey, '*', 1):'*':Field(MuWmoKey, '*', 3)
|
||||
QtyAdj = MuWfrsNeeded
|
||||
CurrMuWfrCnt = obj_WO_Mat('CurrWaferCnt', MuWoMatKey)
|
||||
If MuWfrsNeeded GT CurrMuWfrCnt then
|
||||
QtyAdj = CurrMuWfrCnt
|
||||
MuWfrsNeeded -= CurrMuWfrCnt
|
||||
end
|
||||
Parms = ''
|
||||
Parms<1> = MuWmoKey ; // Cassette to verify wafer count of.
|
||||
Parms<2> = QtyAdj ; // Wafer count adjustment - 0 because converting box.
|
||||
Parms<3> = 'MU' ; // Wafer counter tool location
|
||||
Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
|
||||
If Proceed NE True$ then Return
|
||||
Next MuWmoKey
|
||||
end
|
||||
|
||||
CheckValue = 1
|
||||
* Signature block added 10/6/2010 JCH *
|
||||
Valid = Dialog_Box('NDW_VERIFY_USER', @Window, @User4)
|
||||
|
||||
FieldNo = WO_MAT_EPO_MAKEUP_BOX$
|
||||
obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue) ;* Set WMO_MAKEUP flag on WM_OUT
|
||||
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||
IF NOT(Valid) THEN RETURN ;* User is not worthy or can't type
|
||||
|
||||
Set_Property(@WINDOW:'.MAKEUP_BOX','DEFPROP',CheckValue) ;* Make this the makeup box
|
||||
Send_Event(@WINDOW,'WRITE') ;* Write the record
|
||||
Send_Event(@WINDOW,'WRITE')
|
||||
|
||||
WMOKey = WONo:'*':ProcStepNo:'*':CassNo
|
||||
obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WMOKey) ;* Reread the updated record
|
||||
obj_WM_Out('AddMakeupWafers',WMOutKey:@RM:EmptySlots:@RM:MakeupBox)
|
||||
//Remove the signatures for the WO_MAT_QA record because they are changing its results.
|
||||
WOMatQaKey = Field(WMOutKey, '*', 1) : '*' : Field(WMOutKey, '*', 3)
|
||||
Wo_Mat_Qa_Services('ClearSignatureByStage', WOMatQaKey, 'MO_QA')
|
||||
obj_Appwindow('LoadFormKeys',@WINDOW:@RM:WMOutKey)
|
||||
|
||||
Return
|
||||
end else
|
||||
ErrMsg('WARNING: Error reading WO_MAT record.')
|
||||
Return
|
||||
end
|
||||
Case Response EQ ''
|
||||
// User has cancelled this process.
|
||||
Return
|
||||
Case Otherwise$
|
||||
// User has selected a makeup box to use and backfill.
|
||||
AvailMU_WMOKeys = Response
|
||||
MakeupBox = Response
|
||||
MuWfrsNeeded = SelCnt
|
||||
If AvailMU_WMOKeys NE '' then
|
||||
// Wafer counter check - Account for the possibility of selecting more than one makeup box.
|
||||
For each MuWmoKey in AvailMU_WMOKeys using @FM
|
||||
MuWoMatKey = Field(MuWmoKey, '*', 1):'*':Field(MuWmoKey, '*', 3)
|
||||
QtyAdj = MuWfrsNeeded
|
||||
CurrMuWfrCnt = obj_WO_Mat('CurrWaferCnt', MuWoMatKey)
|
||||
If MuWfrsNeeded GT CurrMuWfrCnt then
|
||||
QtyAdj = CurrMuWfrCnt
|
||||
MuWfrsNeeded -= CurrMuWfrCnt
|
||||
end
|
||||
Parms = ''
|
||||
Parms<1> = MuWmoKey ; // Cassette to verify wafer count of.
|
||||
Parms<2> = QtyAdj ; // Wafer count adjustment - 0 because converting box.
|
||||
Parms<3> = 'MU' ; // Wafer counter tool location
|
||||
Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
|
||||
If Proceed NE True$ then Return
|
||||
Next MuWmoKey
|
||||
end
|
||||
|
||||
* Signature block added 10/6/2010 JCH *
|
||||
Valid = Dialog_Box('NDW_VERIFY_USER', @Window, @User4)
|
||||
|
||||
IF NOT(Valid) THEN RETURN ;* User is not worthy or can't type
|
||||
|
||||
Send_Event(@WINDOW,'WRITE')
|
||||
|
||||
obj_WM_Out('AddMakeupWafers',WMOutKey:@RM:EmptySlots:@RM:MakeupBox)
|
||||
//Remove the signatures for the WO_MAT_QA record because they are changing its results.
|
||||
WOMatQaKey = Field(WMOutKey, '*', 1) : '*' : Field(WMOutKey, '*', 3)
|
||||
Wo_Mat_Qa_Services('ClearSignatureByStage', WOMatQaKey, 'MO_QA')
|
||||
obj_Appwindow('LoadFormKeys',@WINDOW:@RM:WMOutKey)
|
||||
|
||||
RETURN
|
||||
End Case
|
||||
|
||||
RETURN
|
||||
End Case
|
||||
end
|
||||
end else
|
||||
// Cassette is on hold so makeup wafers cannot be added.
|
||||
ErrorMessage = 'Add MU Wafer Denied!. The cassette must be taken off hold before adding makeup wafers.'
|
||||
|
@ -440,7 +440,7 @@ END
|
||||
IF CurrStatus NE '' THEN
|
||||
SWAP @VM WITH '" "' IN CurrStatus
|
||||
IF SelectSent NE '' THEN SelectSent := ' AND'
|
||||
SelectSent := ' WITH CURR_STATUS ':QUOTE(CurrStatus)
|
||||
SelectSent := ' WITH CURR_STATUS_STATIC ':QUOTE(CurrStatus)
|
||||
END
|
||||
|
||||
IF PartTypes NE '' THEN
|
||||
@ -471,7 +471,7 @@ SelectSent = 'SELECT REACT_ITEM ':SelectSent
|
||||
|
||||
|
||||
Def = ""
|
||||
Def<MTEXT$> = "Selecting Reactor Events..."
|
||||
Def<MTEXT$> = "Selecting Reactor Items..."
|
||||
Def<MTYPE$> = "U"
|
||||
|
||||
* display the processing message and do the processing
|
||||
@ -502,6 +502,3 @@ End_Dialog(@WINDOW,RINos)
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1177,3 +1177,4 @@ end service
|
||||
|
||||
|
||||
|
||||
|
||||
|
99
LSL2/STPROC/NDW_ACKNOWLEDGE_MESSAGE_EVENTS.txt
Normal file
99
LSL2/STPROC/NDW_ACKNOWLEDGE_MESSAGE_EVENTS.txt
Normal file
@ -0,0 +1,99 @@
|
||||
Compile function NDW_ACKNOWLEDGE_MESSAGE_EVENTS(CtrlEntId, Event, @PARAMS)
|
||||
/***********************************************************************************************************************
|
||||
|
||||
This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
|
||||
permission from Infineon.
|
||||
|
||||
Name : NDW_ACKNOWLEDGE_MESSAGE_EVENTS
|
||||
|
||||
Description : This function acts as a commuter module for all events related to this window.
|
||||
|
||||
Notes : Commuter Modules are automatically called from the Promoted_Events function which is called by the
|
||||
application-specific promoted event handler. This makes it possible to add QuickEvents that need to
|
||||
execute Basic+ logic without having use the Form Designer to make the association, although this is
|
||||
limited to the events which are currently promoted.
|
||||
|
||||
If the form needs to call the commuter module directly then the QuickEvent parameters should be
|
||||
formatted like this:
|
||||
|
||||
'@SELF','@EVENT',['@PARAM1','@PARAMx']
|
||||
|
||||
Parameters :
|
||||
CtrlEntId [in] -- The fully qualified name of the control calling the promoted event
|
||||
Event [in] -- The event being executed. See the Notes section regarding "PRE" events
|
||||
Param1-15 [in] -- Additional event parameter holders
|
||||
EventFlow [out] -- Set to 1 or 0 so the calling event knows whether or not to chain forward. See comments in
|
||||
EVENT_SETUP insert
|
||||
|
||||
History : (Date, Initials, Notes)
|
||||
05/23/25 djs Created initial commuter module.
|
||||
|
||||
***********************************************************************************************************************/
|
||||
#pragma precomp SRP_PreCompiler
|
||||
#window NDW_ACKNOWLEDGE_MESSAGE
|
||||
|
||||
$Insert APP_INSERTS
|
||||
$Insert EVENT_SETUP
|
||||
|
||||
Declare subroutine PlaceDialog
|
||||
|
||||
SubclassInfo = Form_Services('FindSubclassControl')
|
||||
Subclass = SubclassInfo<1>
|
||||
|
||||
// Update the arguments so that the OpenInsight OLE event will treate the ActiveX event as a native event handler.
|
||||
If Event EQ 'OLE' then
|
||||
Transfer Event to OIEvent
|
||||
Transfer Param1 to Event
|
||||
Transfer Param2 to Param1
|
||||
Transfer Param3 to Param2
|
||||
Transfer Param4 to Param3
|
||||
Transfer Param5 to Param4
|
||||
Transfer Param6 to Param5
|
||||
Transfer Param7 to Param6
|
||||
Transfer Param8 to Param7
|
||||
end
|
||||
|
||||
GoToEvent Event for CtrlEntId else
|
||||
// Event not implemented
|
||||
end
|
||||
|
||||
Return EventFlow or 1
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// EVENT HANDLERS
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
Event WINDOW.CREATE(CreateParam)
|
||||
|
||||
TextToAcknowledge = CreateParam
|
||||
If TextToAcknowledge NE '' then
|
||||
Swap @TM with CRLF$ in TextToAcknowledge
|
||||
Set_Property(@Window:'.EDB_DATA', 'TEXT', TextToAcknowledge)
|
||||
PlaceDialog(-2, -2)
|
||||
end else
|
||||
Post_Event(@Window, 'CLOSE')
|
||||
end
|
||||
|
||||
End Event
|
||||
|
||||
|
||||
Event WINDOW.CLOSE(CancelFlag, CloseFlags)
|
||||
|
||||
End_Dialog(@Window, False$)
|
||||
|
||||
end event
|
||||
|
||||
|
||||
Event PUB_OK.CLICK()
|
||||
|
||||
End_Dialog(@Window, True$)
|
||||
|
||||
end event
|
||||
|
||||
|
||||
Event PUB_CANCEL.CLICK()
|
||||
|
||||
End_Dialog(@Window, False$)
|
||||
|
||||
end event
|
||||
|
@ -3,7 +3,7 @@ Compile function NDW_ADJUST_LOT_QTY_EVENTS(CtrlEntId, Event, @PARAMS)
|
||||
#window NDW_ADJUST_LOT_QTY
|
||||
|
||||
Declare function MemberOf, Database_Services, Error_Services, Datetime
|
||||
Declare subroutine PlaceDialog, Database_Services, Lot_Services
|
||||
Declare subroutine PlaceDialog, Database_Services, Lot_Services, Lot_Event_Services
|
||||
$Insert App_Inserts
|
||||
$Insert Lot_Equates
|
||||
|
||||
@ -125,10 +125,16 @@ Event PUB_SUBMIT.CLICK()
|
||||
Begin Case
|
||||
Case NewWfrQty LT CurrWfrQty
|
||||
AmountToDecrease = CurrWfrQty - NewWfrQty
|
||||
Lot_Services('ReduceLotWaferCount', LotId, AmountToDecrease, @User4)
|
||||
Lot_Services('ReduceLotWaferCount', LotId, AmountToDecrease, @User4)
|
||||
If Error_Services('NoError') then
|
||||
Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'COMMENT', 'Manual Lot Qty decrease performed.', '', @User4, '' , '')
|
||||
end
|
||||
Case NewWfrQty GT CurrWfrQty
|
||||
AmountToIncrease = NewWfrQty - CurrWfrQty
|
||||
Lot_Services('IncreaseLotWaferCount', LotId, AmountToIncrease, @User4)
|
||||
If Error_Services('NoError') then
|
||||
Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'COMMENT', 'Manual Lot Qty increase performed.', '', @User4, '' , '')
|
||||
end
|
||||
End Case
|
||||
If Error_Services('NoError') then
|
||||
msg(@Window, 'Wafer quantity adjusted successfully!')
|
||||
@ -176,3 +182,4 @@ return
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -535,9 +535,9 @@ Service CancelOrder(OrderId)
|
||||
If HttpResponseJson NE '' then
|
||||
ObjResponseJson = ''
|
||||
If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then
|
||||
IsComplete = SRP_JSON(ObjResponseJson, 'GetValue', 'pendingUpdate')
|
||||
NicaOrderRec<NICA_ORDERS.ORDER_STATUS$> = SRP_JSON(ObjResponseJson, 'GetValue', 'state')
|
||||
NicaOrderRec<NICA_ORDERS.IS_COMPLETE$> = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete')
|
||||
IsComplete = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete')
|
||||
NicaOrderRec<NICA_ORDERS.ORDER_STATUS$> = 'cancelled'
|
||||
NicaOrderRec<NICA_ORDERS.IS_COMPLETE$> = IsComplete
|
||||
CloseDtm = Datetime()
|
||||
NicaOrderRec<NICA_ORDERS.CLOSED_DTM$> = CloseDtm
|
||||
If IsComplete EQ False$ then
|
||||
@ -904,4 +904,3 @@ end service
|
||||
// Internal GoSubs
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
@ -18,7 +18,7 @@ COMPILE FUNCTION obj_Reactor_Log(Method,Parms)
|
||||
*/
|
||||
|
||||
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, Btree.Extract, obj_React_Item_Hist, Update_Index, obj_Post_Log
|
||||
Declare subroutine Error_Services, Database_Services
|
||||
Declare subroutine Error_Services, Database_Services, React_Item_Services
|
||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, obj_React_Item, obj_Calendar, Database_Services
|
||||
|
||||
|
||||
@ -195,18 +195,16 @@ PostReactItems:
|
||||
ReactorLogRec<REACTOR_LOG_RI_POST_DTM$> = PostDTM
|
||||
|
||||
otParms = FIELDSTORE(otParms,@RM,4,0,ReactorLogRec)
|
||||
//obj_Tables('WriteRec',otParms)
|
||||
|
||||
Database_Services('WriteDataRow', 'REACTOR_LOG', RLNo, ReactorLogRec, 1, 0, 1)
|
||||
|
||||
|
||||
Update_Index('REACT_ITEM_HIST', 'INST_RL_ID', False$, True$) ;* Don't wait for indexer - flush pending indexes now
|
||||
Update_Index('REACT_ITEM_HIST', 'REM_RL_ID', False$, True$)
|
||||
|
||||
end else
|
||||
Error_Services('Add', ValidationFailureReason)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
@ -386,10 +384,3 @@ RemHistKeys:
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -18,11 +18,12 @@ COMPILE FUNCTION obj_React_Item_Hist(Method,Parms)
|
||||
*/
|
||||
|
||||
|
||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Send_Dyn, obj_Popup
|
||||
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn
|
||||
DECLARE SUBROUTINE ErrMsg, Btree.Extract
|
||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Send_Dyn, obj_Popup
|
||||
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, Btree.Extract, React_Item_Services
|
||||
|
||||
$Insert LOGICAL
|
||||
$INSERT REACT_ITEM_HIST_EQUATES
|
||||
$INSERT RLIST_EQUATES
|
||||
|
||||
EQU CRLF$ TO \0D0A\
|
||||
EQU TAB$ TO CHAR(9)
|
||||
@ -62,26 +63,26 @@ RETURN Result
|
||||
Install:
|
||||
* * * * * * *
|
||||
|
||||
RIHKey = Parms[1,@RM]
|
||||
RL_Id = Parms[COL2()+1,@RM]
|
||||
ReactWfrCnt = Parms[COL2()+1,@RM]
|
||||
ReactHrs = Parms[COL2()+1,@RM]
|
||||
RIHKey = Parms[1,@RM]
|
||||
RL_Id = Parms[COL2()+1,@RM]
|
||||
ReactWfrCnt = Parms[COL2()+1,@RM]
|
||||
ReactHrs = Parms[COL2()+1,@RM]
|
||||
|
||||
IF RIHKey = '' THEN ErrorMsg = 'Null Parameter "RIHKey" passed to routine. (':Method:')'
|
||||
IF RL_Id = '' THEN ErrorMsg = 'Null Parameter "RL_Id" passed to routine. (':Method:')'
|
||||
*IF ReactWfrCnt = '' THEN ErrorMsg = 'Null Parameter "ReactWfrCnt" passed to routine. (':Method:')' ;* Optional
|
||||
*IF ReactHrs = '' THEN ErrorMsg = 'Null Parameter "ReactHrs" passed to routine. (':Method:')' ;* Optional
|
||||
IF RIHKey = '' THEN ErrorMsg = 'Null Parameter "RIHKey" passed to routine. (':Method:')'
|
||||
IF RL_Id = '' THEN ErrorMsg = 'Null Parameter "RL_Id" passed to routine. (':Method:')'
|
||||
|
||||
IF ErrorMsg NE '' THEN RETURN
|
||||
IF ErrorMsg NE '' THEN RETURN
|
||||
|
||||
RIHRec = ''
|
||||
RIHRec<REACT_ITEM_HIST_INST_RL_ID$> = RL_ID
|
||||
RIHRec<REACT_ITEM_HIST_INST_REACT_WFR_CNT$> = ReactWfrCnt
|
||||
RIHRec<REACT_ITEM_HIST_INST_REACT_HRS$> = ReactHrs
|
||||
RIHRec = ''
|
||||
RIHRec<REACT_ITEM_HIST_INST_RL_ID$> = RL_ID
|
||||
RIHRec<REACT_ITEM_HIST_INST_REACT_WFR_CNT$> = ReactWfrCnt
|
||||
RIHRec<REACT_ITEM_HIST_INST_REACT_HRS$> = ReactHrs
|
||||
|
||||
otParms = 'REACT_ITEM_HIST':@RM:RIHKey:@RM:@RM:RIHRec
|
||||
otParms = 'REACT_ITEM_HIST':@RM:RIHKey:@RM:@RM:RIHRec
|
||||
|
||||
obj_Tables('WriteRec',otParms)
|
||||
obj_Tables('WriteRec',otParms)
|
||||
RINo = Field(RIHKey, '*', 2, 1)
|
||||
React_Item_Services('UpdateReactItemStatus', RINo)
|
||||
|
||||
RETURN
|
||||
|
||||
@ -90,38 +91,36 @@ RETURN
|
||||
Remove:
|
||||
* * * * * * *
|
||||
|
||||
RIHKey = Parms[1,@RM]
|
||||
RemoveDTM = Parms[COL2()+1,@RM] ;* Internal format *
|
||||
RL_Id = Parms[COL2()+1,@RM]
|
||||
ReactWfrCnt = Parms[COL2()+1,@RM]
|
||||
ReactHrs = Parms[COL2()+1,@RM]
|
||||
RIHKey = Parms[1,@RM]
|
||||
RemoveDTM = Parms[COL2()+1,@RM] ;* Internal format *
|
||||
RL_Id = Parms[COL2()+1,@RM]
|
||||
ReactWfrCnt = Parms[COL2()+1,@RM]
|
||||
ReactHrs = Parms[COL2()+1,@RM]
|
||||
|
||||
IF RIHKey = '' THEN ErrorMsg = 'Null Parameter "RIHKey" passed to routine. (':Method:')'
|
||||
IF RemoveDTM = '' THEN ErrorMsg = 'Null Parameter "RemoveDTM" passed to routine. (':Method:')'
|
||||
IF RL_Id = '' THEN ErrorMsg = 'Null Parameter "RL_Id" passed to routine. (':Method:')'
|
||||
*IF ReactWfrCnt = '' THEN ErrorMsg = 'Null Parameter "ReactWfrCnt" passed to routine. (':Method:')' ;* Optional
|
||||
*IF ReactHrs = '' THEN ErrorMsg = 'Null Parameter "ReactHrs" passed to routine. (':Method:')' ;* Optional
|
||||
IF RIHKey = '' THEN ErrorMsg = 'Null Parameter "RIHKey" passed to routine. (':Method:')'
|
||||
IF RemoveDTM = '' THEN ErrorMsg = 'Null Parameter "RemoveDTM" passed to routine. (':Method:')'
|
||||
IF RL_Id = '' THEN ErrorMsg = 'Null Parameter "RL_Id" passed to routine. (':Method:')'
|
||||
|
||||
IF ErrorMsg NE '' THEN RETURN
|
||||
IF ErrorMsg NE '' THEN RETURN
|
||||
|
||||
* Read and update record *
|
||||
otParms = 'REACT_ITEM_HIST':@RM:RIHKey
|
||||
|
||||
otParms = 'REACT_ITEM_HIST':@RM:RIHKey
|
||||
RIHRec = obj_Tables('ReadRec',otParms)
|
||||
|
||||
RIHRec = obj_Tables('ReadRec',otParms)
|
||||
IF Get_Status(errCode) THEN
|
||||
Set_Status(0)
|
||||
RIHRec = ''
|
||||
END
|
||||
|
||||
IF Get_Status(errCode) THEN
|
||||
Set_Status(0)
|
||||
RIHRec = ''
|
||||
END
|
||||
RIHRec<REACT_ITEM_HIST_REM_DTM$> = RemoveDTM
|
||||
RIHRec<REACT_ITEM_HIST_REM_RL_ID$> = RL_Id
|
||||
RIHRec<REACT_ITEM_HIST_REM_REACT_WFR_CNT$> = ReactWfrCnt
|
||||
RIHRec<REACT_ITEM_HIST_REM_REACT_HRS$> = ReactHrs
|
||||
|
||||
RIHRec<REACT_ITEM_HIST_REM_DTM$> = RemoveDTM
|
||||
RIHRec<REACT_ITEM_HIST_REM_RL_ID$> = RL_Id
|
||||
RIHRec<REACT_ITEM_HIST_REM_REACT_WFR_CNT$> = ReactWfrCnt
|
||||
RIHRec<REACT_ITEM_HIST_REM_REACT_HRS$> = ReactHrs
|
||||
|
||||
otParms = FIELDSTORE(otParms,@RM,4,0,RIHRec)
|
||||
obj_Tables('WriteRec',otParms)
|
||||
otParms = FIELDSTORE(otParms,@RM,4,0,RIHRec)
|
||||
obj_Tables('WriteRec',otParms)
|
||||
RINo = Field(RIHKey, '*', 2, 1)
|
||||
React_Item_Services('UpdateReactItemStatus', RINo)
|
||||
|
||||
RETURN
|
||||
|
||||
@ -130,24 +129,21 @@ RETURN
|
||||
ClearRemove:
|
||||
* * * * * * *
|
||||
|
||||
RIHKey = Parms[1,@RM]
|
||||
RIHKey = Parms[1,@RM]
|
||||
|
||||
IF RIHKey = '' THEN RETURN
|
||||
IF RIHKey = '' THEN RETURN
|
||||
|
||||
otParms = 'REACT_ITEM_HIST':@RM:RIHKey
|
||||
|
||||
* Read and update record *
|
||||
RIHRec = obj_Tables('ReadRec',otParms)
|
||||
|
||||
otParms = 'REACT_ITEM_HIST':@RM:RIHKey
|
||||
RIHRec<REACT_ITEM_HIST_REM_DTM$> = ''
|
||||
RIHRec<REACT_ITEM_HIST_REM_RL_ID$> = ''
|
||||
RIHRec<REACT_ITEM_HIST_REM_REACT_WFR_CNT$> = ''
|
||||
RIHRec<REACT_ITEM_HIST_REM_REACT_HRS$> = ''
|
||||
|
||||
RIHRec = obj_Tables('ReadRec',otParms)
|
||||
|
||||
RIHRec<REACT_ITEM_HIST_REM_DTM$> = ''
|
||||
RIHRec<REACT_ITEM_HIST_REM_RL_ID$> = ''
|
||||
RIHRec<REACT_ITEM_HIST_REM_REACT_WFR_CNT$> = ''
|
||||
RIHRec<REACT_ITEM_HIST_REM_REACT_HRS$> = ''
|
||||
|
||||
otParms = FIELDSTORE(otParms,@RM,4,0,RIHRec)
|
||||
obj_Tables('WriteRec',otParms)
|
||||
otParms = FIELDSTORE(otParms,@RM,4,0,RIHRec)
|
||||
obj_Tables('WriteRec',otParms)
|
||||
|
||||
RETURN
|
||||
|
||||
@ -156,49 +152,50 @@ RETURN
|
||||
GetHistory:
|
||||
* * * * * * *
|
||||
|
||||
ReactNo = Parms[1,@RM]
|
||||
RINo = Parms[COL2()+1,@RM]
|
||||
RIType = Parms[COL2()+1,@RM]
|
||||
ReactNo = Parms[1,@RM]
|
||||
RINo = Parms[COL2()+1,@RM]
|
||||
RIType = Parms[COL2()+1,@RM]
|
||||
|
||||
IF ReactNo = '' AND RINo = '' AND RIType = '' THEN RETURN
|
||||
IF ReactNo = '' AND RINo = '' AND RIType = '' THEN RETURN
|
||||
|
||||
OPEN 'DICT.REACT_ITEM_HIST' TO DictVar ELSE
|
||||
ErrorMsg = 'Unable to open DICT.REACT_ITEM_HIST for index lookup'
|
||||
RETURN
|
||||
END
|
||||
OPEN 'DICT.REACT_ITEM_HIST' TO DictVar ELSE
|
||||
ErrorMsg = 'Unable to open DICT.REACT_ITEM_HIST for index lookup'
|
||||
RETURN
|
||||
END
|
||||
|
||||
Search = ''
|
||||
Search = ''
|
||||
|
||||
IF ReactNo NE '' THEN Search := 'REACT_NO':@VM:ReactNo:@FM
|
||||
IF RINo NE '' THEN Search := 'RI_NO':@VM:RINo:@FM
|
||||
IF RIType NE '' THEN Search := 'RI_TYPE':@VM:RIType:@FM
|
||||
IF ReactNo NE '' THEN Search := 'REACT_NO':@VM:ReactNo:@FM
|
||||
IF RINo NE '' THEN Search := 'RI_NO':@VM:RINo:@FM
|
||||
IF RIType NE '' THEN Search := 'RI_TYPE':@VM:RIType:@FM
|
||||
|
||||
Option = ''
|
||||
Flag = ''
|
||||
Option = ''
|
||||
Flag = ''
|
||||
|
||||
Btree.Extract(Search, 'REACT_ITEM_HIST', DictVar, RIKeys, Option, Flag) ;* Get unsorted keys based on Search parameters
|
||||
Btree.Extract(Search, 'REACT_ITEM_HIST', DictVar, RIKeys, Option, Flag) ;* Get unsorted keys based on Search parameters
|
||||
|
||||
* Put sort data in first column (Install DTM)
|
||||
// Put sort data in first column (Install DTM)
|
||||
|
||||
WorkList = ''
|
||||
riCnt = COUNT(RIKeys,@VM) + (RIKeys NE '')
|
||||
FOR I = 1 TO riCnt
|
||||
RIKey = RIKeys<1,I>
|
||||
WorkList<I> = FIELD(RIKey,'*',3):@VM:RIKey
|
||||
NEXT I
|
||||
WorkList = ''
|
||||
riCnt = COUNT(RIKeys,@VM) + (RIKeys NE '')
|
||||
FOR I = 1 TO riCnt
|
||||
RIKey = RIKeys<1,I>
|
||||
WorkList<I> = FIELD(RIKey,'*',3):@VM:RIKey
|
||||
NEXT I
|
||||
|
||||
WorkList := @RM
|
||||
WorkList := @RM
|
||||
|
||||
CONVERT @FM:@VM TO @RM:@FM IN WorkList ;* push delimiters higher for V119
|
||||
CONVERT @FM:@VM TO @RM:@FM IN WorkList ;* push delimiters higher for V119
|
||||
|
||||
CALL V119('S','','D','L',WorkList,'') ;* Descending Left justified sort
|
||||
CALL V119('S','','D','L',WorkList,'') ;* Descending Left justified sort
|
||||
|
||||
CONVERT @FM:@RM TO @VM:@FM IN WorkList ;* pull delimiters lower
|
||||
CONVERT @FM:@RM TO @VM:@FM IN WorkList ;* pull delimiters lower
|
||||
|
||||
WorkList[-1,1] = '' ;* Trim trailing delimiter
|
||||
WorkList[-1,1] = '' ;* Trim trailing delimiter
|
||||
|
||||
FOR I = 1 TO riCnt
|
||||
Result<1,I> = WorkList<I,2> ;* Strip Sort column(s)
|
||||
NEXT I
|
||||
FOR I = 1 TO riCnt
|
||||
Result<1,I> = WorkList<I,2> ;* Strip Sort column(s)
|
||||
NEXT I
|
||||
|
||||
RETURN
|
||||
|
||||
|
@ -84,6 +84,7 @@ $Insert NOTIFICATION_EQUATES
|
||||
$Insert DICT_EQUATES
|
||||
$Insert COMPANY_EQUATES
|
||||
$Insert RETURN_TO_FAB_LOTS_EQUATES
|
||||
$Insert TEST_RUN_EQUATES
|
||||
|
||||
EQU COL$LSID TO 1
|
||||
EQU COL$RECIPE TO 2
|
||||
@ -848,6 +849,27 @@ Service IsTWLoggingReqd(RDSNo)
|
||||
Response = IsTWReqd
|
||||
end service
|
||||
|
||||
Service TestWaferRanAfterLoad(RDSNo)
|
||||
TestWaferRanAfterLoad = False$
|
||||
TestWaferKeys = Test_Run_Services('GetTestRunKeysByRDS', RDSNo)
|
||||
for each Key in TestWaferKeys using @VM
|
||||
TestWaferDtm = Xlate('TEST_RUN', Key, TEST_RUN_RUN_DTM$, 'X')
|
||||
TestWaferDate = SRP_DateTime('Date', TestWaferDtm)
|
||||
TestWaferTime = SRP_DateTime('Time', TestWaferDtm)
|
||||
|
||||
RdsDateIn = Xlate('RDS', RDSNo, RDS_DATE_IN$, 'X')
|
||||
RdsTimeIn = Xlate('RDS', RDSNo, RDS_TIME_IN$, 'X')
|
||||
|
||||
TestWaferRanAfterLoad = TestWaferDate > RdsDateIn
|
||||
If TestWaferRanAfterLoad EQ False$ then
|
||||
TestWaferRanAfterLoad = (TestWaferDate EQ RdsDateIn) and TestWaferTime GT RdsTimeIn
|
||||
end
|
||||
Until TestWaferRanAfterLoad EQ True$
|
||||
Next Key
|
||||
|
||||
Response = TestWaferRanAfterLoad
|
||||
end service
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
// VerifyEPPMetrology
|
||||
//
|
||||
@ -1805,3 +1827,4 @@ return
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -277,6 +277,7 @@ Event PUB_SIGN.CLICK()
|
||||
end
|
||||
If (Valid EQ True$) then
|
||||
ReactorType = XLATE('RDS',RDSNo,'REACTOR_TYPE','X')
|
||||
ErrMsg = ''
|
||||
If Len(ReactorType) GE 3 and ReactorType[1, 3] _EQC 'HTR' then
|
||||
WoMatKey = WONo:'*':CassNo
|
||||
IsLastCassetteInWo = WO_MAT_Services('CassetteIsLastInWo', WoMatKey)
|
||||
@ -298,26 +299,44 @@ Event PUB_SIGN.CLICK()
|
||||
WoMatRecord = Database_Services('ReadDataRow', 'WO_MAT', WoMatKey)
|
||||
WoMatRecord<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACK_REQ$> = True$
|
||||
|
||||
Message = ''
|
||||
If NextEventScheduled EQ False$ or NextEventIsBlock EQ True$ then
|
||||
Message = 'No material scheduled. Test wafer required.'
|
||||
end else if NextEventHasSamePsn EQ False$ then
|
||||
Message = 'Next work order is a NEW PSN number. Test wafer required.'
|
||||
TestWaferRanSinceLoad = WoMatRecord<WO_MAT_LAST_CASSETTE_TEST_WAFER_RAN$>
|
||||
|
||||
If TestWaferRanSinceLoad NE True$ then
|
||||
TestWaferRanSinceLoad = Rds_Services('TestWaferRanAfterLoad', RDSNo)
|
||||
WoMatRecord<WO_MAT_LAST_CASSETTE_TEST_WAFER_RAN$> = TestWaferRanSinceLoad
|
||||
|
||||
If TestWaferRanSinceLoad NE True$ then
|
||||
Message = ''
|
||||
If NextEventScheduled EQ False$ or NextEventIsBlock EQ True$ then
|
||||
Message = 'No material scheduled. Test wafer required.'
|
||||
end else if NextEventHasSamePsn EQ False$ then
|
||||
Message = 'Next work order is a NEW PSN number. Test wafer required.'
|
||||
end
|
||||
|
||||
Message_Box(@Window, Message, "Test Wafer Required", MSG_BTN_OK$ + MSG_ICON_EXCLAM$)
|
||||
|
||||
TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : '' : @VM : 'REACTOR' : @VM : Reactor)
|
||||
|
||||
WoMatRecord<WO_MAT_LAST_CASSETTE_TEST_WAFER_RAN$> = TWLogResult
|
||||
|
||||
If TWLogResult NE True$ then
|
||||
ErrMsg = 'Unload blocked! You must run a test wafer before signing the unload'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
MesageAcked = Message_Box(@Window, Message, "Test Wafer Required", MSG_BTN_OK$ + MSG_ICON_EXCLAM$)
|
||||
|
||||
WoMatRecord<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACKED$> = True$
|
||||
Database_Services('WriteDataRow', 'WO_MAT', WoMatKey, WoMatRecord, True$, False$, False$)
|
||||
|
||||
ConfirmNote = 'Test wafer requirement acknowledged. [RDS:' : RDSNo : '], [WO:' : WONo : '], [Cassette:' : CassNo : ']'
|
||||
Reactor_Log_Services('AddComment', Reactor, ConfirmNote, @User4)
|
||||
end
|
||||
Database_Services('WriteDataRow', 'WO_MAT', WoMatKey, WoMatRecord, True$, False$, False$)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
QA_Services('SignUnloadStage', RDSNo, @User4)
|
||||
If ErrMsg NE '' then
|
||||
Error_Services('Add', ErrMsg)
|
||||
end
|
||||
|
||||
If Error_Services('NoError') then
|
||||
QA_Services('SignUnloadStage', RDSNo, @User4)
|
||||
end
|
||||
end
|
||||
end
|
||||
If Error_Services('HasError') then
|
||||
@ -446,3 +465,4 @@ return
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -62,24 +62,80 @@ API reactItems.HEAD
|
||||
API reactItems.GET
|
||||
|
||||
QueryFields = HTTP_Services('GetHTTPGetString')
|
||||
If Index(QueryFields, 'riType', 1) then
|
||||
RIType = HTTP_Services('GetQueryField', 'riType')
|
||||
If IndexC(QueryFields, 'includeNullRetireDt', 1) then
|
||||
IncludeNullRetireDt = HTTP_Services('GetQueryField', 'includeNullRetireDt')
|
||||
Begin Case
|
||||
Case ( (IncludeNullRetireDt EQ 1) or (IncludeNullRetireDt EQ 0) )
|
||||
Null
|
||||
Case ( (IncludeNullRetireDt _EQC 'true') or (IncludeNullRetireDt _EQC 'yes') )
|
||||
IncludeNullRetireDt = True$
|
||||
Case ( (IncludeNullRetireDt _EQC 'false') or (IncludeNullRetireDt _EQC 'no') )
|
||||
IncludeNullRetireDt = False$
|
||||
Case Otherwise$
|
||||
Error_Services('Add', 'Error in ':CurrentAPI:' API. Invalid value "':IncludeNullRetireDt:'" passed in for includeNullRetireDt.')
|
||||
End Case
|
||||
end else
|
||||
RIType = ''
|
||||
IncludeNullRetireDt = ''
|
||||
end
|
||||
|
||||
If Error_Services('NoError') then
|
||||
If IndexC(QueryFields, 'showAllDetails', 1) then
|
||||
ShowAllDetails = HTTP_Services('GetQueryField', 'showAllDetails')
|
||||
Begin Case
|
||||
Case ( (ShowAllDetails EQ 1) or (ShowAllDetails EQ 0) )
|
||||
Null
|
||||
Case ( (ShowAllDetails _EQC 'true') or (ShowAllDetails _EQC 'yes') )
|
||||
ShowAllDetails = True$
|
||||
Case ( (ShowAllDetails _EQC 'false') or (ShowAllDetails _EQC 'no') )
|
||||
ShowAllDetails = False$
|
||||
Case Otherwise$
|
||||
Error_Services('Add', 'Error in ':CurrentAPI:' API. Invalid value "':ShowAllDetails:'" passed in for showAllDetails.')
|
||||
End Case
|
||||
end else
|
||||
ShowAllDetails = False$
|
||||
end
|
||||
|
||||
If Error_Services('NoError') then
|
||||
If IndexC(QueryFields, 'currStatus', 1) then
|
||||
CurrStatus = HTTP_Services('GetQueryField', 'currStatus')
|
||||
end else
|
||||
CurrStatus = ''
|
||||
end
|
||||
If IndexC(QueryFields, 'riType', 1) then
|
||||
RIType = HTTP_Services('GetQueryField', 'riType')
|
||||
end else
|
||||
RIType = ''
|
||||
end
|
||||
If IndexC(QueryFields, 'entryDtStart', 1) then
|
||||
EntryDtStart = HTTP_Services('GetQueryField', 'entryDtStart')
|
||||
end else
|
||||
EntryDtStart = ''
|
||||
end
|
||||
If IndexC(QueryFields, 'entryDtEnd', 1) then
|
||||
EntryDtEnd = HTTP_Services('GetQueryField', 'entryDtEnd')
|
||||
end else
|
||||
EntryDtEnd = ''
|
||||
end
|
||||
If IndexC(QueryFields, 'retireDtStart', 1) then
|
||||
RetireDtStart = HTTP_Services('GetQueryField', 'retireDtStart')
|
||||
end else
|
||||
RetireDtStart = ''
|
||||
end
|
||||
If IndexC(QueryFields, 'retireDtEnd', 1) then
|
||||
RetireDtEnd = HTTP_Services('GetQueryField', 'retireDtEnd')
|
||||
end else
|
||||
RetireDtEnd = ''
|
||||
end
|
||||
|
||||
StatusCode = 200
|
||||
GoSub CreateHALCollection
|
||||
end else
|
||||
HTTP_Services('SetResponseStatus', 400, Error_Services("GetMessage"))
|
||||
end
|
||||
end else
|
||||
HTTP_Services('SetResponseStatus', 400, Error_Services("GetMessage"))
|
||||
end
|
||||
If Index(QueryFields, 'currStatus', 1 ) then
|
||||
CurrStatus = Http_Services('GetQueryField', 'currStatus')
|
||||
end else
|
||||
CurrStatus = ''
|
||||
end
|
||||
If Index(QueryFields, 'showAllDetails', 1 ) then
|
||||
ShowAllDetails = Http_Services('GetQueryField', 'showAllDetails')
|
||||
end else
|
||||
ShowAllDetails = False$
|
||||
end
|
||||
StatusCode = 200
|
||||
|
||||
GoSub CreateHALCollection
|
||||
|
||||
end api
|
||||
|
||||
|
||||
@ -254,11 +310,7 @@ CreateHALCollection:
|
||||
|
||||
JSONCollection = ''
|
||||
Abort = False$
|
||||
If RIType NE '' OR CurrStatus NE '' then
|
||||
ReactItems = React_Item_Services('GetReactItems', RIType, CurrStatus)
|
||||
end else
|
||||
ReactItems = React_Item_Services('GetAllReactItemKeys')
|
||||
end
|
||||
ReactItems = React_Item_Services('GetReactItems', RIType, CurrStatus, EntryDtStart, EntryDtEnd, RetireDtStart, RetireDtEnd, IncludeNullRetireDt)
|
||||
|
||||
If ReactItems NE '' then
|
||||
If SRP_JSON(hJSONCollection, 'New', 'Object') then
|
||||
@ -304,3 +356,4 @@ CreateHALCollection:
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,254 +1,235 @@
|
||||
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
|
||||
permission from Infineon.
|
||||
|
||||
Name : RDS_Actions
|
||||
|
||||
Description : Handles calculated columns and MFS calls for the current table.
|
||||
|
||||
Notes : This function uses @ID, @RECORD, and @DICT to make sure {ColumnName} references work correctly.
|
||||
If called from outside of a calculated column these will need to be set and restored.
|
||||
|
||||
Parameters :
|
||||
Action [in] -- Name of the action to be taken
|
||||
CalcColName [in] -- Name of the calculated column that needs to be processed. Normally this should only be
|
||||
populated when the CalcField action is being used.
|
||||
FSList [in] -- The list of MFSs and the BFS name for the current file or volume. This is an @SVM
|
||||
delimited array, with the current MFS name as the first value in the array, and the BFS
|
||||
name as the last value. Normally set by a calling MFS.
|
||||
Handle [in] -- The file handle of the file or media map being accessed. Note, this does contain the
|
||||
entire handle structure that the Basic+ Open statement would provide. Normally set by a
|
||||
calling MFS.
|
||||
Name [in] -- The name (key) of the record or file being accessed. Normally set by a calling MFS.
|
||||
FMC [in] -- Various functions. Normally set by a calling MFS.
|
||||
Record [in] -- The entire record (for record-oriented functions) or a newly-created handle (for
|
||||
"get handle" functions). Normally set by a calling MFS.
|
||||
Status [in/out] -- Indicator of the success or failure of an action. Normally set by the calling MFS but
|
||||
for some actions can be set by the action handler to indicate failure.
|
||||
OrigRecord [in] -- Original content of the record being processed by the current action. This is
|
||||
automatically being assigned by the WRITE_RECORD and DELETE_RECORD actions within
|
||||
BASE_MFS.
|
||||
Param1-10 [in/out] -- Additional request parameter holders
|
||||
ActionFlow [out] -- Used to control the action chain (see the ACTION_SETUP insert for more information.)
|
||||
Can also be used to return a special value, such as the results of the CalcField
|
||||
method.
|
||||
|
||||
History : (Date, Initials, Notes)
|
||||
04/10/18 dmb Original programmer.
|
||||
10/04/18 djs Added a trigger within the WRITE_RECORD event, which fires when the reactor number has
|
||||
changed. When this occurs the related RDS_LAYER records for this RDS record are populated
|
||||
with the most recent associated TOOL_PARMS record. (related by PSN and Reactor)
|
||||
|
||||
***********************************************************************************************************************/
|
||||
|
||||
#pragma precomp SRP_PreCompiler
|
||||
|
||||
$Insert FILE.SYSTEM.EQUATES
|
||||
$Insert ACTION_SETUP
|
||||
$Insert RDS_EQUATES
|
||||
$Insert CLEAN_INSP_EQUATES
|
||||
$Insert COMPANY_EQUATES
|
||||
$Insert RDS_LAYER_EQUATES
|
||||
$Insert TOOL_PARMS_EQUATES
|
||||
$Insert RLIST_EQUATES
|
||||
$Insert APP_INSERTS
|
||||
$Insert QA_MET_EQUATES
|
||||
$Insert PRS_STAGE_EQUATES
|
||||
$Insert WO_MAT_EQUATES
|
||||
$Insert WO_MAT_QA_EQUATES
|
||||
|
||||
Equ COMMA$ to ','
|
||||
|
||||
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 subroutine Error_Services, Database_Services, Logging_Services, Set_Status, Schedule_Services_Dev
|
||||
Declare subroutine Work_Order_Services, Material_Services, Set_FSError
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
If KeyID then GoSub Initialize_System_Variables
|
||||
|
||||
Begin Case
|
||||
|
||||
Case Action _EQC 'CalculateColumn' ; GoSub CalculateColumn
|
||||
Case Action _EQC 'READ_RECORD_PRE' ; GoSub READ_RECORD_PRE
|
||||
Case Action _EQC 'READ_RECORD' ; GoSub READ_RECORD
|
||||
Case Action _EQC 'READONLY_RECORD_PRE' ; GoSub READONLY_RECORD_PRE
|
||||
Case Action _EQC 'READONLY_RECORD' ; GoSub READONLY_RECORD
|
||||
Case Action _EQC 'WRITE_RECORD_PRE' ; GoSub WRITE_RECORD_PRE
|
||||
Case Action _EQC 'WRITE_RECORD' ; GoSub WRITE_RECORD
|
||||
Case Action _EQC 'DELETE_RECORD_PRE' ; GoSub DELETE_RECORD_PRE
|
||||
Case Action _EQC 'DELETE_RECORD' ; GoSub DELETE_RECORD
|
||||
Case Otherwise$ ; Status = 'Invalid Action'
|
||||
|
||||
End Case
|
||||
|
||||
If KeyID then GoSub Restore_System_Variables
|
||||
|
||||
If Assigned(ActionFlow) else ActionFlow = ACTION_CONTINUE$
|
||||
|
||||
Return ActionFlow
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Calculated Columns
|
||||
//
|
||||
// The typical structure of a calculated column will look like this:
|
||||
//
|
||||
// Declare function Database_Services
|
||||
//
|
||||
// @ANS = Database_Services('CalculateColumn')
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
CalculateColumn:
|
||||
|
||||
// Make sure the ActionFlow return variable is cleared in case nothing is calculated.
|
||||
ActionFlow = ''
|
||||
|
||||
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
// ----- MFS calls -----------------------------------------------------------------------------------------------------
|
||||
|
||||
READ_RECORD_PRE:
|
||||
// In order to stop a record from being read in this action these lines of code must be used:
|
||||
//
|
||||
// OrigFileError = 100 : @FM : KeyID
|
||||
// Status = 0
|
||||
// Record = ''
|
||||
// ActionFlow = ACTION_STOP$
|
||||
|
||||
|
||||
return
|
||||
|
||||
READ_RECORD:
|
||||
|
||||
// In order to stop a record from being read in this action these lines of code must be used:
|
||||
//
|
||||
// OrigFileError = 100 : @FM : KeyID
|
||||
// Status = 0
|
||||
// Record = ''
|
||||
|
||||
return
|
||||
|
||||
READONLY_RECORD_PRE:
|
||||
// In order to stop a record from being read in this action these lines of code must be used:
|
||||
//
|
||||
// OrigFileError = 100 : @FM : KeyID
|
||||
// Status = 0
|
||||
// Record = ''
|
||||
// ActionFlow = ACTION_STOP$
|
||||
return
|
||||
|
||||
READONLY_RECORD:
|
||||
// In order to stop a record from being read in this action these lines of code must be used:
|
||||
//
|
||||
// OrigFileError = 100 : @FM : KeyID
|
||||
// Status = 0
|
||||
// Record = ''
|
||||
return
|
||||
|
||||
WRITE_RECORD_PRE:
|
||||
|
||||
ErrMsg = ''
|
||||
|
||||
//Req'd parameter checks
|
||||
ItemType = {RI_TYPE}
|
||||
|
||||
If ItemType EQ '' then
|
||||
ErrMsg := 'Item Type was not specified. '
|
||||
end
|
||||
|
||||
If ErrMsg NE '' then
|
||||
Error_Services('Add', 'Error Saving Reactor Item: ' : ErrMsg)
|
||||
OrigFileError = 104:': Error Saving Reactor Item: ' : ErrMsg
|
||||
Status = 0
|
||||
Record = ''
|
||||
ActionFlow = ACTION_STOP$
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
WRITE_RECORD:
|
||||
|
||||
|
||||
|
||||
return
|
||||
|
||||
DELETE_RECORD_PRE:
|
||||
|
||||
|
||||
return
|
||||
|
||||
DELETE_RECORD:
|
||||
return
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Internal GoSubs
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
ClearCursors:
|
||||
For counter = 0 to 8
|
||||
ClearSelect counter
|
||||
Next counter
|
||||
return
|
||||
|
||||
|
||||
Initialize_System_Variables:
|
||||
|
||||
// Save these for restoration later
|
||||
SaveDict = @DICT
|
||||
SaveID = @ID
|
||||
SaveRecord = @RECORD
|
||||
OrigFileError = @FILE.ERROR
|
||||
|
||||
// Now make sure @DICT, ID, and @RECORD are populated
|
||||
CurrentDictName = ''
|
||||
If @DICT then
|
||||
DictHandle = @DICT<1, 2>
|
||||
Locate DictHandle in @TABLES(5) Using @FM Setting fPos then
|
||||
CurrentDictName = Field(@TABLES(0), @FM, fPos, 1)
|
||||
end
|
||||
end
|
||||
|
||||
If CurrentDictName NE DictName then
|
||||
Open DictName to @DICT else Status = 'Unable to initialize @DICT'
|
||||
end
|
||||
|
||||
@ID = KeyID
|
||||
If Record else
|
||||
// Record might not have been passed in. Read the record from the database table just to make sure.
|
||||
@FILE.ERROR = ''
|
||||
Open TableName to hTable then
|
||||
FullFSList = hTable[1, 'F' : @VM]
|
||||
BFS = FullFSList[-1, 'B' : @SVM]
|
||||
LastHandle = hTable[-1, 'B' : \0D\]
|
||||
FileHandle = \0D\ : LastHandle[1, @VM]
|
||||
|
||||
Call @BFS(READO.RECORD, BFS, FileHandle, KeyID, FMC, Record, ReadOStatus)
|
||||
end
|
||||
end
|
||||
@RECORD = Record
|
||||
|
||||
return
|
||||
|
||||
|
||||
Restore_System_Variables:
|
||||
|
||||
Transfer SaveDict to @DICT
|
||||
Transfer SaveID to @ID
|
||||
Transfer SaveRecord to @RECORD
|
||||
@FILE.ERROR = OrigFileError
|
||||
|
||||
return
|
||||
|
||||
|
||||
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
|
||||
permission from Infineon.
|
||||
|
||||
Name : React_Item_Actions
|
||||
|
||||
Description : Handles calculated columns and MFS calls for the current table.
|
||||
|
||||
Notes : This function uses @ID, @RECORD, and @DICT to make sure {ColumnName} references work correctly.
|
||||
If called from outside of a calculated column these will need to be set and restored.
|
||||
|
||||
Parameters :
|
||||
Action [in] -- Name of the action to be taken
|
||||
CalcColName [in] -- Name of the calculated column that needs to be processed. Normally this should only be
|
||||
populated when the CalcField action is being used.
|
||||
FSList [in] -- The list of MFSs and the BFS name for the current file or volume. This is an @SVM
|
||||
delimited array, with the current MFS name as the first value in the array, and the BFS
|
||||
name as the last value. Normally set by a calling MFS.
|
||||
Handle [in] -- The file handle of the file or media map being accessed. Note, this does contain the
|
||||
entire handle structure that the Basic+ Open statement would provide. Normally set by a
|
||||
calling MFS.
|
||||
Name [in] -- The name (key) of the record or file being accessed. Normally set by a calling MFS.
|
||||
FMC [in] -- Various functions. Normally set by a calling MFS.
|
||||
Record [in] -- The entire record (for record-oriented functions) or a newly-created handle (for
|
||||
"get handle" functions). Normally set by a calling MFS.
|
||||
Status [in/out] -- Indicator of the success or failure of an action. Normally set by the calling MFS but
|
||||
for some actions can be set by the action handler to indicate failure.
|
||||
OrigRecord [in] -- Original content of the record being processed by the current action. This is
|
||||
automatically being assigned by the WRITE_RECORD and DELETE_RECORD actions within
|
||||
BASE_MFS.
|
||||
Param1-10 [in/out] -- Additional request parameter holders
|
||||
ActionFlow [out] -- Used to control the action chain (see the ACTION_SETUP insert for more information.)
|
||||
Can also be used to return a special value, such as the results of the CalcField
|
||||
method.
|
||||
|
||||
History : (Date, Initials, Notes)
|
||||
05/12/25 djs Updated WRITE_PRE action to update the CURR_STATUS_STATIC field if the retire date changes.
|
||||
|
||||
***********************************************************************************************************************/
|
||||
|
||||
#pragma precomp SRP_PreCompiler
|
||||
|
||||
$Insert ACTION_SETUP
|
||||
$Insert APP_INSERTS
|
||||
$Insert FILE.SYSTEM.EQUATES
|
||||
$Insert REACT_ITEM_EQUATES
|
||||
|
||||
Declare function obj_React_Item
|
||||
Declare subroutine Error_Services
|
||||
|
||||
If KeyID then GoSub Initialize_System_Variables
|
||||
|
||||
Begin Case
|
||||
|
||||
Case Action _EQC 'CalculateColumn' ; GoSub CalculateColumn
|
||||
Case Action _EQC 'READ_RECORD_PRE' ; GoSub READ_RECORD_PRE
|
||||
Case Action _EQC 'READ_RECORD' ; GoSub READ_RECORD
|
||||
Case Action _EQC 'READONLY_RECORD_PRE' ; GoSub READONLY_RECORD_PRE
|
||||
Case Action _EQC 'READONLY_RECORD' ; GoSub READONLY_RECORD
|
||||
Case Action _EQC 'WRITE_RECORD_PRE' ; GoSub WRITE_RECORD_PRE
|
||||
Case Action _EQC 'WRITE_RECORD' ; GoSub WRITE_RECORD
|
||||
Case Action _EQC 'DELETE_RECORD_PRE' ; GoSub DELETE_RECORD_PRE
|
||||
Case Action _EQC 'DELETE_RECORD' ; GoSub DELETE_RECORD
|
||||
Case Otherwise$ ; Status = 'Invalid Action'
|
||||
|
||||
End Case
|
||||
|
||||
If KeyID then GoSub Restore_System_Variables
|
||||
|
||||
If Assigned(ActionFlow) else ActionFlow = ACTION_CONTINUE$
|
||||
|
||||
Return ActionFlow
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Calculated Columns
|
||||
//
|
||||
// The typical structure of a calculated column will look like this:
|
||||
//
|
||||
// Declare function Database_Services
|
||||
//
|
||||
// @ANS = Database_Services('CalculateColumn')
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
CalculateColumn:
|
||||
|
||||
// Make sure the ActionFlow return variable is cleared in case nothing is calculated.
|
||||
ActionFlow = ''
|
||||
|
||||
return
|
||||
|
||||
// ----- MFS calls -----------------------------------------------------------------------------------------------------
|
||||
|
||||
READ_RECORD_PRE:
|
||||
// In order to stop a record from being read in this action these lines of code must be used:
|
||||
//
|
||||
// OrigFileError = 100 : @FM : KeyID
|
||||
// Status = 0
|
||||
// Record = ''
|
||||
// ActionFlow = ACTION_STOP$
|
||||
return
|
||||
|
||||
|
||||
READ_RECORD:
|
||||
|
||||
// In order to stop a record from being read in this action these lines of code must be used:
|
||||
//
|
||||
// OrigFileError = 100 : @FM : KeyID
|
||||
// Status = 0
|
||||
// Record = ''
|
||||
|
||||
return
|
||||
|
||||
|
||||
READONLY_RECORD_PRE:
|
||||
// In order to stop a record from being read in this action these lines of code must be used:
|
||||
//
|
||||
// OrigFileError = 100 : @FM : KeyID
|
||||
// Status = 0
|
||||
// Record = ''
|
||||
// ActionFlow = ACTION_STOP$
|
||||
return
|
||||
|
||||
|
||||
READONLY_RECORD:
|
||||
// In order to stop a record from being read in this action these lines of code must be used:
|
||||
//
|
||||
// OrigFileError = 100 : @FM : KeyID
|
||||
// Status = 0
|
||||
// Record = ''
|
||||
return
|
||||
|
||||
|
||||
WRITE_RECORD_PRE:
|
||||
|
||||
ErrMsg = ''
|
||||
|
||||
// Req'd parameter checks
|
||||
ItemType = {RI_TYPE}
|
||||
|
||||
* If ItemType EQ '' then ErrMsg := 'Item Type was not specified. '
|
||||
|
||||
If ErrMsg NE '' then
|
||||
Error_Services('Add', 'Error Saving Reactor Item: ' : ErrMsg)
|
||||
OrigFileError = 104:': Error Saving Reactor Item: ' : ErrMsg
|
||||
Status = 0
|
||||
Record = ''
|
||||
ActionFlow = ACTION_STOP$
|
||||
end else
|
||||
OrigRetireDt = OrigRecord<REACT_ITEM_RETIRE_DT$>
|
||||
NewRetireDt = Record<REACT_ITEM_RETIRE_DT$>
|
||||
OrigNotes = OrigRecord<REACT_ITEM_NOTES$>
|
||||
NewNotes = Record<REACT_ITEM_NOTES$>
|
||||
If ( (OrigRetireDt NE NewRetireDt) or (OrigNotes NE NewNotes) ) then
|
||||
CurrStatus = obj_React_Item('CurrStatus', Name:@RM:Record)
|
||||
Record<REACT_ITEM_CURR_STATUS_STATIC$> = CurrStatus
|
||||
SaveRecord = Record
|
||||
end
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
WRITE_RECORD:
|
||||
return
|
||||
|
||||
DELETE_RECORD_PRE:
|
||||
return
|
||||
|
||||
DELETE_RECORD:
|
||||
return
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Internal GoSubs
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
ClearCursors:
|
||||
|
||||
For counter = 0 to 8
|
||||
ClearSelect counter
|
||||
Next counter
|
||||
|
||||
return
|
||||
|
||||
|
||||
Initialize_System_Variables:
|
||||
|
||||
// Save these for restoration later
|
||||
SaveDict = @DICT
|
||||
SaveID = @ID
|
||||
SaveRecord = @RECORD
|
||||
OrigFileError = @FILE.ERROR
|
||||
|
||||
// Now make sure @DICT, ID, and @RECORD are populated
|
||||
CurrentDictName = ''
|
||||
If @DICT then
|
||||
DictHandle = @DICT<1, 2>
|
||||
Locate DictHandle in @TABLES(5) Using @FM Setting fPos then
|
||||
CurrentDictName = Field(@TABLES(0), @FM, fPos, 1)
|
||||
end
|
||||
end
|
||||
|
||||
If CurrentDictName NE DictName then
|
||||
Open DictName to @DICT else Status = 'Unable to initialize @DICT'
|
||||
end
|
||||
|
||||
@ID = KeyID
|
||||
If Record else
|
||||
// Record might not have been passed in. Read the record from the database table just to make sure.
|
||||
@FILE.ERROR = ''
|
||||
Open TableName to hTable then
|
||||
FullFSList = hTable[1, 'F' : @VM]
|
||||
BFS = FullFSList[-1, 'B' : @SVM]
|
||||
LastHandle = hTable[-1, 'B' : \0D\]
|
||||
FileHandle = \0D\ : LastHandle[1, @VM]
|
||||
|
||||
Call @BFS(READO.RECORD, BFS, FileHandle, KeyID, FMC, Record, ReadOStatus)
|
||||
end
|
||||
end
|
||||
@RECORD = Record
|
||||
|
||||
return
|
||||
|
||||
|
||||
Restore_System_Variables:
|
||||
|
||||
Transfer SaveDict to @DICT
|
||||
Transfer SaveID to @ID
|
||||
Transfer SaveRecord to @RECORD
|
||||
@FILE.ERROR = OrigFileError
|
||||
|
||||
return
|
||||
|
||||
|
@ -20,62 +20,110 @@ Compile function React_Item_Services(@Service, @Params)
|
||||
08/02/22 djs Original programmer.
|
||||
|
||||
***********************************************************************************************************************/
|
||||
|
||||
#pragma precomp SRP_PreCompiler
|
||||
|
||||
$Insert LOGICAL
|
||||
$Insert APP_INSERTS
|
||||
$Insert SERVICE_SETUP
|
||||
$Insert RLIST_EQUATES
|
||||
$Insert REACT_ITEM_EQUATES
|
||||
|
||||
Declare function Database_Services, Error_Services, SRP_JSON, NextKey
|
||||
Declare subroutine SRP_JSON, Error_Services, Btree.Extract, Database_Services
|
||||
GoToService
|
||||
Declare function Database_Services, Error_Services, SRP_JSON, NextKey, SRP_Date, obj_React_Item, SRP_Array
|
||||
Declare subroutine SRP_JSON, Error_Services, Btree.Extract, Database_Services, Update_Index
|
||||
|
||||
Return Response or ""
|
||||
GoToService else
|
||||
Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
|
||||
end
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// SERVICES
|
||||
//-----------------------------------------------------------------------------
|
||||
Return Response else ''
|
||||
|
||||
Service GetAllReactItemKeys()
|
||||
AllKeys = ''
|
||||
RList('SELECT REACT_ITEM', TARGET_ACTIVELIST$, '', '', '')
|
||||
Done = False$
|
||||
Reactors = ''
|
||||
Loop
|
||||
Readnext keyId else Done = True$
|
||||
Until Done
|
||||
AllKeys<1,-1> = keyId
|
||||
Repeat
|
||||
Response = AllKeys
|
||||
end service
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Service Parameter Options
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
Options BOOLEAN = True$, False$
|
||||
|
||||
Service GetReactItems(RIType, CurrStatus)
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Services
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
Service GetReactItems(RIType, CurrStatus, EntryDtStart, EntryDtEnd, RetireDtStart, RetireDtEnd, IncludeNullRetireDt=BOOLEAN)
|
||||
|
||||
ErrorMsg = ''
|
||||
Response = ''
|
||||
Swap ',' with @VM in RIType
|
||||
Swap ',' with @VM in CurrStatus
|
||||
|
||||
Open 'DICT.REACT_ITEM' to DictReactItem then
|
||||
|
||||
SearchString = ''
|
||||
If RIType NE '' then SearchString := 'RI_TYPE':@VM:RIType:@FM
|
||||
If CurrStatus NE '' then SearchString := 'CURR_STATUS':@VM:CurrStatus:@FM
|
||||
RIKeys = ''
|
||||
Btree.Extract(SearchString, 'REACT_ITEM', DictReactItem, RIKeys, '', '')
|
||||
ErrCode = ''
|
||||
IF Get_Status(ErrCode) then
|
||||
ErrorMsg = 'Error in ':Service:' service. Error calling Btree.Extract. Error code ':ErrCode:'.'
|
||||
If ( (RIType NE '') or (CurrStatus NE '') or (EntryDtStart NE '') or (EntryDtEnd NE '') or (RetireDtStart NE '') or (RetireDtEnd NE '') or (IncludeNullRetireDt NE '') ) then
|
||||
If EntryDtStart NE '' and Not(Num(EntryDtStart)) then EntryDtStart = IConv(EntryDtStart, 'D')
|
||||
If EntryDtEnd NE '' and Not(Num(EntryDtEnd)) then EntryDtEnd = IConv(EntryDtEnd, 'D')
|
||||
If RetireDtStart NE '' and Not(Num(RetireDtStart)) then RetireDtStart = IConv(RetireDtStart, 'D')
|
||||
If RetireDtEnd NE '' and Not(Num(RetireDtEnd)) then RetireDtEnd = IConv(RetireDtEnd, 'D')
|
||||
Open 'DICT.REACT_ITEM' to DictReactItem then
|
||||
SearchString = ''
|
||||
If RIType NE '' then
|
||||
Swap ',' with @VM in RIType
|
||||
SearchString := 'RI_TYPE':@VM:RIType:@FM
|
||||
end
|
||||
Begin Case
|
||||
Case ( (EntryDtStart NE '') and (EntryDtEnd NE '') )
|
||||
EntryDtStart = OConv(EntryDtStart - 1, 'D4/')
|
||||
EntryDtEnd = OConv(EntryDtEnd + 1, 'D4/')
|
||||
SearchString := 'ENTER_DT':@VM:EntryDtStart:'~':EntryDtEnd:@FM
|
||||
Case (EntryDtStart NE '')
|
||||
EntryDtStart = OConv(EntryDtStart, 'D4/')
|
||||
SearchString := 'ENTER_DT':@VM:'>=':EntryDtStart:@FM
|
||||
Case (EntryDtEnd NE '')
|
||||
SearchString := 'ENTER_DT':@VM:'<=':EntryDtEnd:@FM
|
||||
Case Otherwise$
|
||||
Null
|
||||
End Case
|
||||
Begin Case
|
||||
Case ( (RetireDtStart NE '') and (RetireDtEnd NE '') )
|
||||
RetireDtStart = OConv(RetireDtStart - 1, 'D4/')
|
||||
RetireDtEnd = OConv(RetireDtEnd + 1, 'D4/')
|
||||
SearchString := 'RETIRE_DT':@VM:RetireDtStart:'~':RetireDtEnd
|
||||
If IncludeNullRetireDt then SearchString := @VM:''
|
||||
SearchString := @FM
|
||||
Case (RetireDtStart NE '')
|
||||
RetireDtStart = OConv(RetireDtStart, 'D4/')
|
||||
SearchString := 'RETIRE_DT':@VM:'>=':RetireDtStart
|
||||
If IncludeNullRetireDt then SearchString := @VM:''
|
||||
SearchString := @FM
|
||||
Case (RetireDtEnd NE '')
|
||||
SearchString := 'RETIRE_DT':@VM:'<=':RetireDtEnd
|
||||
If IncludeNullRetireDt then SearchString := @VM:''
|
||||
SearchString := @FM
|
||||
Case IncludeNullRetireDt
|
||||
SearchString := 'RETIRE_DT':@VM:'':@FM
|
||||
Case Otherwise$
|
||||
Null
|
||||
End Case
|
||||
If CurrStatus NE '' then
|
||||
Swap ',' with @VM in CurrStatus
|
||||
SearchString := 'CURR_STATUS_STATIC':@VM:CurrStatus:@FM
|
||||
end
|
||||
Flag = ''
|
||||
RIKeys = ''
|
||||
Btree.Extract(SearchString, 'REACT_ITEM', DictReactItem, RIKeys, 'E', Flag)
|
||||
If Flag EQ 0 then
|
||||
EnterDtms = Xlate('REACT_ITEM', RIKeys, 'ENTER_DTM', 'X')
|
||||
Array = RIKeys:@FM:EnterDtms
|
||||
Array = SRP_Array('SortRows', Array, 'DN2', 'ARRAY', @FM, @VM)
|
||||
Response = Array<1>
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Error calling Btree.Extract.'
|
||||
end
|
||||
end else
|
||||
Response = RIKeys
|
||||
ErrorMsg = 'Error in ':Service:' service. Error opening REACT_ITEM dictionary.'
|
||||
end
|
||||
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Error opening REACT_ITEM dictionary.'
|
||||
AllKeys = ''
|
||||
RList('SELECT REACT_ITEM', TARGET_ACTIVELIST$, '', '', '')
|
||||
Done = False$
|
||||
Loop
|
||||
Readnext KeyId else Done = True$
|
||||
Until Done
|
||||
AllKeys<1, -1> = KeyId
|
||||
Repeat
|
||||
Response = AllKeys
|
||||
end
|
||||
|
||||
If ErrorMsg NE '' then
|
||||
Error_Services('Add', ErrorMsg)
|
||||
end
|
||||
@ -155,7 +203,6 @@ Service ConvertRecordToJSON(KeyID, Record, ItemURL)
|
||||
|
||||
Response = jsonRecord
|
||||
|
||||
|
||||
end service
|
||||
|
||||
|
||||
@ -326,11 +373,11 @@ Service GetReactItemTemplateJSON()
|
||||
|
||||
Response = jsonRecord
|
||||
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service CreateReactItem(Record)
|
||||
|
||||
ErrMsg = ''
|
||||
KeyID = ''
|
||||
If Record NE '' then
|
||||
@ -355,6 +402,7 @@ Service CreateReactItem(Record)
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service ConvertRecordToJSONQuick(KeyID, Record, ItemURL)
|
||||
|
||||
jsonRecord = ''
|
||||
@ -407,6 +455,32 @@ Service ConvertRecordToJSONQuick(KeyID, Record, ItemURL)
|
||||
Response = jsonRecord
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service UpdateReactItemStatus(RINo)
|
||||
|
||||
If RINo NE '' then
|
||||
If RowExists('REACT_ITEM', RINo) then
|
||||
RIRec = Database_Services('ReadDataRow', 'REACT_ITEM', RINo)
|
||||
If Error_Services('NoError') then
|
||||
Update_Index('REACT_ITEM_HIST', 'RI_NO', False$, True$)
|
||||
ReactItemCurrStatus = obj_React_Item('CurrStatus', RINo:@RM:RIRec)
|
||||
ReactItemCurrStatusStatic = RIRec<REACT_ITEM_CURR_STATUS_STATIC$>
|
||||
If ReactItemCurrStatus NE ReactItemCurrStatusStatic then
|
||||
Open 'REACT_ITEM' to hTable then
|
||||
WriteV ReactItemCurrStatus on hTable, RINo, REACT_ITEM_CURR_STATUS_STATIC$ else
|
||||
Error_Services('Add', 'Error in ':Service:' service. Error writing CURR_STATUS_STATIC, ':ReactItemCurrStatus:', for REACT_ITEM ':RINo:'.')
|
||||
end
|
||||
end else
|
||||
Error_Services('Add', 'Error in ':Service:' service. Error opening REACT_ITEM table for status update.')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Internal GoSubs
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -419,6 +493,3 @@ ClearCursors:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -335,6 +335,18 @@ Service ProcessScanData(ScanID, ScanJSON)
|
||||
Error_Services('Add', 'Inactive employee.')
|
||||
Case Otherwise$
|
||||
ScansRow<SCANS.EMPLOYEE_ID$> = {EMPLOYEE_ID}
|
||||
|
||||
Username = {EMPLOYEE_ID}
|
||||
|
||||
Member = False$
|
||||
Groups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEER':@VM:'ENG_TECH':@VM:'ROTR_OVERRIDE'
|
||||
|
||||
For each Group in Groups using @VM
|
||||
Member = MemberOf(Username, Group)
|
||||
Until Member EQ True$
|
||||
Next Group
|
||||
|
||||
ScansRow<SCANS.IS_AUTHORIZED_TO_OVERRIDE_ROTR$> = Member
|
||||
End Case
|
||||
|
||||
Case ScanData[1, 3] EQ '10S'
|
||||
@ -520,6 +532,9 @@ Service ProcessScanData(ScanID, ScanJSON)
|
||||
Database_Services('WriteDataRow', 'REACTOR', Reactor, ReactorRec, True$, False$, True$)
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
||||
|
||||
ScansRow<SCANS.OVERRIDE_REQD$> = 0
|
||||
ScansRow<SCANS.OVERRIDE_TYPE$> = ''
|
||||
ScansRow<SCANS.OVERRIDE_REASON$> = ''
|
||||
ScansRow<SCANS.EMPLOYEE_ID$>= ''
|
||||
Result = 'Override Performed successfully'
|
||||
end
|
||||
@ -652,6 +667,7 @@ Service ProcessScanData(ScanID, ScanJSON)
|
||||
If (CassetteIDs NE '') then
|
||||
TestWaferLotData = ScansRow<SCANS.TW_LOT_ID$>
|
||||
Abort = False$
|
||||
TestWaferLotIsValid = False$
|
||||
If TestWaferLotData NE '' then
|
||||
ThisTestRunType = ScansRow<SCANS.TEST_RUN_TYPE_ID$>
|
||||
If ThisTestRunType NE '' then
|
||||
@ -667,6 +683,8 @@ Service ProcessScanData(ScanID, ScanJSON)
|
||||
If Not(TWLotCurrOpen) then
|
||||
Abort = True$
|
||||
Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' is closed and cannot be used at this time.')
|
||||
end else
|
||||
TestWaferLotIsValid = True$
|
||||
end
|
||||
end else
|
||||
Abort = True$
|
||||
@ -1090,6 +1108,60 @@ Service ProcessScanData(ScanID, ScanJSON)
|
||||
Case Otherwise$
|
||||
// Keep error on Error_Services stack and return 400 level error.
|
||||
End Case
|
||||
end else
|
||||
ReactorNo = Xlate('RDS', RDSNo, RDS_REACTOR$, 'X')
|
||||
ReactorType = Xlate('REACTOR', ReactorNo, REACTOR_REACT_TYPE$, 'X')
|
||||
If Len(ReactorType) GE 3 and ReactorType[1, 3] _EQC 'HTR' then
|
||||
WO = Xlate('RDS', RDSNo, RDS_WO$, 'X')
|
||||
CassNo = Xlate('RDS', RDSNo, 'RUN_ORDER_NUM', 'X')
|
||||
WoMatKey = WO:'*':CassNo
|
||||
WoMatRec = Database_Services('ReadDataRow', 'WO_MAT', WoMatKey)
|
||||
LastCassInWoTestWaferAckReq = WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACK_REQ$>
|
||||
LastCassInWoTestWaferAcked = WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACKED$>
|
||||
LastCassInWoTestWaferReqMsg = ''
|
||||
If LastCassInWoTestWaferAcked EQ False$ or LastCassInWoTestWaferAcked EQ '' then
|
||||
LastCassInWo = WO_MAT_Services('CassetteIsLastInWo', WoMatKey)
|
||||
|
||||
If LastCassInWo then
|
||||
NextEventScheduled = False$
|
||||
NextEventHasSamePsn = True$
|
||||
NextEventIsBlock = False$
|
||||
|
||||
NextScheduledEvent = Schedule_Services('GetNextEvent', ReactorNo)
|
||||
If Error_Services('NoError') then
|
||||
NextEventScheduled = True$
|
||||
|
||||
NextEventHasSamePsn = Schedule_Services('NextEventIsSamePsn', ReactorNo)
|
||||
NextEventIsBlock = Schedule_Services('NextEventIsBlock', ReactorNo)
|
||||
end
|
||||
|
||||
If NextEventScheduled EQ False$ or NextEventHasSamePsn EQ False$ or NextEventIsBlock EQ True$ then
|
||||
LastCassInWoTestWaferAckReq = True$
|
||||
WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACK_REQ$> = LastCassInWoTestWaferAckReq
|
||||
TestWaferRanSinceLoad = WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_RAN$> or TestWaferLotIsValid EQ True$
|
||||
|
||||
If TestWaferLotIsValid NE True$ and TestWaferRanSinceLoad NE True$ then
|
||||
TestWaferRanSinceLoad = Rds_Services('TestWaferRanAfterLoad', RDSNo)
|
||||
|
||||
If TestWaferRanSinceLoad NE True$ then
|
||||
LastCassInWoTestWaferReqMsg = ''
|
||||
If NextEventScheduled EQ False$ or NextEventIsBlock EQ True$ then
|
||||
LastCassInWoTestWaferReqMsg = 'No material scheduled. Test wafer required.'
|
||||
end else If NextEventHasSamePsn EQ False$ then
|
||||
LastCassInWoTestWaferReqMsg = 'Next work order is a NEW PSN number. Test wafer required.'
|
||||
end
|
||||
|
||||
Scan_Services('AddNotAcceptableReason', LastCassInWoTestWaferReqMsg)
|
||||
end
|
||||
end
|
||||
|
||||
WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_RAN$> = TestWaferRanSinceLoad
|
||||
|
||||
Database_Services('WriteDataRow', 'WO_MAT', WoMatKey, WoMatRec, True$, False$, False$)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end else
|
||||
ScanMsg = 'The POST stage engineering instructions must be acknowledged before the load operation can be signed.'
|
||||
@ -1403,6 +1475,7 @@ Service AcceptScan(ScanID, ScanJSON)
|
||||
LogData<3> = Username
|
||||
LogData<4> = CurrStage
|
||||
LogData<5> = ScanID
|
||||
|
||||
Begin Case
|
||||
Case CurrStage _EQC 'VER'
|
||||
Action = 'LOAD'
|
||||
@ -1493,14 +1566,32 @@ Service AcceptScan(ScanID, ScanJSON)
|
||||
|
||||
Case CurrStage _EQC 'UNLOAD'
|
||||
Action = 'UNLOAD'
|
||||
// Check if UNLOAD stage is ready to sign
|
||||
UnloadStageSigned = QA_Services('SignUnloadStage', RDSNo, Username, 1)
|
||||
If UnloadStageSigned EQ True$ then
|
||||
Result = '(':CassetteID:') Unload stage signed.'
|
||||
Continue = True$
|
||||
If TestWaferLots NE '' then
|
||||
ToolID = ScansRow<SCANS.TOOL_ID$>
|
||||
Reactor = ToolID[-1, 'BR']
|
||||
Username = ScansRow<SCANS.EMPLOYEE_ID$>
|
||||
TestWaferLotQtys = ScansRow<SCANS.TW_LOT_QTY$>
|
||||
TestRunType = ScansRow<SCANS.TEST_RUN_TYPE_ID$>
|
||||
PSNo = Xlate('RDS', RDSNo, RDS_PROD_SPEC_ID$, True$, 'X')
|
||||
NewTestRunId = Test_Run_Services('CreateTestRunRecord', TestRunType, 'R', Reactor, PSNo, RDSNo,Username , TestWaferLots, TestWaferLotQtys)
|
||||
If Error_Services('HasError') then
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
Error_Services('Set', ErrorMessage)
|
||||
Continue = False$
|
||||
end
|
||||
end
|
||||
|
||||
If Continue EQ True$ then
|
||||
// Check if UNLOAD stage is ready to sign
|
||||
UnloadStageSigned = QA_Services('SignUnloadStage', RDSNo, Username, 1)
|
||||
If UnloadStageSigned EQ True$ then
|
||||
Result = '(':CassetteID:') Unload stage signed.'
|
||||
end
|
||||
LogData<6> = Action
|
||||
LogData<7> = Result
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
|
||||
end
|
||||
LogData<6> = Action
|
||||
LogData<7> = Result
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
|
||||
Case CurrStage _EQC 'COMP'
|
||||
Action = 'COMP'
|
||||
Error_Services('Set', '(':CassetteID:") Cassette has already been FQA'd.")
|
||||
@ -1674,6 +1765,7 @@ Service ConvertMVScanToJSON(ScanID, mvScan, itemURL)
|
||||
SRP_JSON(objEmployee, 'SetValue', 'authorized', {EMPLOYEE_AUTHORIZED}, 'Boolean')
|
||||
SRP_JSON(objEmployee, 'SetValue', 'notAuthorizedReason', {EMPLOYEE_NOT_AUTHORIZED_REASON}, 'String')
|
||||
SRP_JSON(objEmployee, 'SetValue', 'authenticated' , @Record<SCANS.AUTHENTICATED$> , 'Boolean');//JRO Change
|
||||
SRP_JSON(objEmployee, 'SetValue', 'isAuthorizedToOverrideROTR', @Record<SCANS.IS_AUTHORIZED_TO_OVERRIDE_ROTR$>, 'Boolean')
|
||||
SRP_JSON(objJSONScan, 'Set', 'employee', objEmployee)
|
||||
SRP_JSON(objEmployee, 'Release')
|
||||
|
||||
@ -1787,52 +1879,6 @@ Service ConvertMVScanToJSON(ScanID, mvScan, itemURL)
|
||||
end else
|
||||
SupplUnloadInstAckReq = False$
|
||||
end
|
||||
|
||||
ReactorNo = Xlate('RDS', RDSNo, RDS_REACTOR$, 'X')
|
||||
ReactorType = Xlate('REACTOR', ReactorNo, REACTOR_REACT_TYPE$, 'X')
|
||||
If Len(ReactorType) GE 3 and ReactorType[1, 3] _EQC 'HTR' then
|
||||
WO = Xlate('RDS', RDSNo, RDS_WO$, 'X')
|
||||
CassNo = Xlate('RDS', RDSNo, 'RUN_ORDER_NUM', 'X')
|
||||
WoMatKey = WO:'*':CassNo
|
||||
WoMatRec = Database_Services('ReadDataRow', 'WO_MAT', WoMatKey)
|
||||
LastCassInWoTestWaferAckReq = WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACK_REQ$>
|
||||
LastCassInWoTestWaferAcked = WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACKED$>
|
||||
LastCassInWoTestWaferReqMsg = ''
|
||||
If LastCassInWoTestWaferAcked EQ False$ or LastCassInWoTestWaferAcked EQ '' then
|
||||
LastCassInWo = WO_MAT_Services('CassetteIsLastInWo', WoMatKey)
|
||||
|
||||
If LastCassInWo then
|
||||
NextEventScheduled = False$
|
||||
NextEventHasSamePsn = True$
|
||||
NextEventIsBlock = False$
|
||||
|
||||
NextScheduledEvent = Schedule_Services('GetNextEvent', ReactorNo)
|
||||
If Error_Services('NoError') then
|
||||
NextEventScheduled = True$
|
||||
|
||||
NextEventHasSamePsn = Schedule_Services('NextEventIsSamePsn', ReactorNo)
|
||||
NextEventIsBlock = Schedule_Services('NextEventIsBlock', ReactorNo)
|
||||
end
|
||||
|
||||
If NextEventScheduled EQ False$ or NextEventHasSamePsn EQ False$ or NextEventIsBlock EQ True$ then
|
||||
LastCassInWoTestWaferAckReq = True$
|
||||
WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACK_REQ$> = LastCassInWoTestWaferAckReq
|
||||
WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACKED$> = LastCassInWoTestWaferAcked
|
||||
Database_Services('WriteDataRow', 'WO_MAT', WoMatKey, WoMatRec, True$, False$, False$)
|
||||
|
||||
LastCassInWoTestWaferReqMsg = ''
|
||||
If NextEventScheduled EQ False$ or NextEventIsBlock EQ True$ then
|
||||
LastCassInWoTestWaferReqMsg = 'No material scheduled. Test wafer required.'
|
||||
end else If NextEventHasSamePsn EQ False$ then
|
||||
LastCassInWoTestWaferReqMsg = 'Next work order is a NEW PSN number. Test wafer required.'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
SRP_JSON(objRDS, 'SetValue', 'lastCassInWoTestWaferAckReq', LastCassInWoTestWaferAckReq, 'Boolean')
|
||||
SRP_JSON(objRDS, 'SetValue', 'lastCassInWoTestWaferAcked', LastCassInWoTestWaferAcked, 'Boolean')
|
||||
SRP_JSON(objRDS, 'SetValue', 'lastCassInWoTestWaferAckReqMsg', LastCassInWoTestWaferReqMsg, 'String')
|
||||
end
|
||||
end else
|
||||
SupplUnloadInstAckReq = False$
|
||||
end
|
||||
@ -2355,3 +2401,4 @@ return
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -181,14 +181,7 @@ DoRead:
|
||||
|
||||
Reactor = get_property( @window, '@Reactor' )
|
||||
LoadedRDS = Xlate('REACT_STATUS', Reactor, 'LOAD_RDS', 'X')
|
||||
LoadedRuns = ''
|
||||
If LoadedRDS NE '' then
|
||||
For each RDS in LoadedRDS using @VM setting vPos
|
||||
Locate RDS in AllRDS using @VM setting rPos then
|
||||
LoadedRuns<0, -1> = rPos
|
||||
end
|
||||
Next RDS
|
||||
end
|
||||
LoadedRuns = Xlate('RDS', LoadedRDS, 'RUN_ORDER_NUM', 'X')
|
||||
|
||||
LoadedData = ''
|
||||
For each RDSNo in LoadedRDS using @VM setting vPos
|
||||
@ -507,5 +500,3 @@ REACT_MODE:
|
||||
END
|
||||
RETURN
|
||||
|
||||
|
||||
|
||||
|
@ -179,3 +179,4 @@ Equ PROD_SPEC_ANKO_MET_POCKETS$ To 166
|
||||
Equ PROD_SPEC_ANKO_FULL_CHAR_POCKET$ To 167
|
||||
Equ PROD_SPEC_ANKO_WAFER_SELECTION$ To 168
|
||||
Equ PROD_SPEC_LOCKED_BY$ To 169
|
||||
Equ PROD_SPEC_SHOW_SPEC_INST_ON_MU_ADD$ To 170
|
||||
|
@ -6,25 +6,27 @@ compile insert REACT_ITEM_EQUATES
|
||||
----------------------------------------*/
|
||||
|
||||
|
||||
Equ REACT_ITEM_RI_NO$ To 0
|
||||
Equ REACT_ITEM_DESC$ To 1
|
||||
Equ REACT_ITEM_ENTER_BY$ To 2
|
||||
Equ REACT_ITEM_ENTER_DTM$ To 3
|
||||
Equ REACT_ITEM_RETIRE_BY$ To 4
|
||||
Equ REACT_ITEM_RETIRE_DT$ To 5
|
||||
Equ REACT_ITEM_PART_TYPE$ To 6
|
||||
Equ REACT_ITEM_MFR_CD$ To 7
|
||||
Equ REACT_ITEM_MFR_PART_NO$ To 8
|
||||
Equ REACT_ITEM_MFR_PART_NO_REV$ To 9
|
||||
Equ REACT_ITEM_SERIAL_NO$ To 10
|
||||
Equ REACT_ITEM_RI_TYPE$ To 11
|
||||
Equ REACT_ITEM_SUSC_SIZE$ To 12
|
||||
Equ REACT_ITEM_PKT_QTY$ To 13
|
||||
Equ REACT_ITEM_PKT_SIZE$ To 14
|
||||
Equ REACT_ITEM_NOTES$ To 15
|
||||
Equ REACT_ITEM_PPLUS_RDS_NO$ To 16
|
||||
Equ REACT_ITEM_SERIAL$ To 17
|
||||
Equ REACT_ITEM_TUBE_GRADE$ To 18
|
||||
Equ REACT_ITEM_TUBE_PRESS$ To 19
|
||||
Equ REACT_ITEM_TUBE_STYLE$ To 20
|
||||
Equ REACT_ITEM_NEW_OR_REFURB$ To 21
|
||||
Equ REACT_ITEM_RI_NO$ To 0
|
||||
Equ REACT_ITEM_DESC$ To 1
|
||||
Equ REACT_ITEM_ENTER_BY$ To 2
|
||||
Equ REACT_ITEM_ENTER_DTM$ To 3
|
||||
Equ REACT_ITEM_RETIRE_BY$ To 4
|
||||
Equ REACT_ITEM_RETIRE_DT$ To 5
|
||||
Equ REACT_ITEM_PART_TYPE$ To 6
|
||||
Equ REACT_ITEM_MFR_CD$ To 7
|
||||
Equ REACT_ITEM_MFR_PART_NO$ To 8
|
||||
Equ REACT_ITEM_MFR_PART_NO_REV$ To 9
|
||||
Equ REACT_ITEM_SERIAL_NO$ To 10
|
||||
Equ REACT_ITEM_RI_TYPE$ To 11
|
||||
Equ REACT_ITEM_SUSC_SIZE$ To 12
|
||||
Equ REACT_ITEM_PKT_QTY$ To 13
|
||||
Equ REACT_ITEM_PKT_SIZE$ To 14
|
||||
Equ REACT_ITEM_NOTES$ To 15
|
||||
Equ REACT_ITEM_PPLUS_RDS_NO$ To 16
|
||||
Equ REACT_ITEM_SERIAL$ To 17
|
||||
Equ REACT_ITEM_TUBE_GRADE$ To 18
|
||||
Equ REACT_ITEM_TUBE_PRESS$ To 19
|
||||
Equ REACT_ITEM_TUBE_STYLE$ To 20
|
||||
Equ REACT_ITEM_NEW_OR_REFURB$ To 21
|
||||
Equ REACT_ITEM_CURR_STATUS_STATIC$ To 22
|
||||
|
||||
|
@ -40,6 +40,9 @@ compile insert SCANS_EQUATES
|
||||
equ SCANS.TW_LOT_QTY$ to 31
|
||||
equ SCANS.TEST_RUN_TYPE_ID$ to 32
|
||||
equ SCANS.TEST_RUN_TYPE_NAME$ to 33
|
||||
equ SCANS.IS_AUTHORIZED_TO_OVERRIDE_ROTR$ to 34
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
@ -156,4 +156,5 @@ Equ WO_MAT_LAST_CASSETTE_TEST_WAFER_ACK_REQ$ To 147
|
||||
Equ WO_MAT_LAST_CASSETTE_TEST_WAFER_ACKED$ To 148
|
||||
Equ WO_MAT_HOLD_STAGE$ To 149
|
||||
Equ WO_MAT_HOLD_INTERRUPTED$ To 150
|
||||
Equ WO_MAT_LAST_CASSETTE_TEST_WAFER_RAN$ To 151
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user