Alarm trigger with NICA_ORDERS table
solution tested and ready for deployment updated SRP_Git_Services to handle creating local copies of inherited entities updated HgCV OCAP order trigger to also look for active prove-in orders moved error services common into sysprog to avoid compilation issues
This commit is contained in:
parent
3cd56295dc
commit
ab8f9d3c24
@ -72,10 +72,11 @@ Function Error_Services(@Service, @Params)
|
|||||||
|
|
||||||
#pragma precomp SRP_PreCompiler
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
$insert LOGICAL
|
$Insert LOGICAL
|
||||||
$Insert MSG_EQUATES
|
$Insert MSG_EQUATES
|
||||||
$insert RTI_DEBUG_COMMON
|
$Insert RTI_DEBUG_COMMON
|
||||||
$insert SRPMail_Inserts
|
$Insert SRPMail_Inserts
|
||||||
|
$Insert ERROR_SERVICES_COMMON
|
||||||
|
|
||||||
Equ Segoe_UI$ to 'Segoe UI' : @SVM : -12 : @SVM : 400 : @SVM : 0 : @SVM : 0 : @SVM : 0 : @SVM : 0 : @SVM : 34 : @SVM : 0 : @SVM : 3 : @SVM : 2 : @SVM : 1 : @SVM : 0 : @SVM : 0 : @SVM : 0 : @SVM : 0
|
Equ Segoe_UI$ to 'Segoe UI' : @SVM : -12 : @SVM : 400 : @SVM : 0 : @SVM : 0 : @SVM : 0 : @SVM : 0 : @SVM : 34 : @SVM : 0 : @SVM : 3 : @SVM : 2 : @SVM : 1 : @SVM : 0 : @SVM : 0 : @SVM : 0 : @SVM : 0
|
||||||
|
|
||||||
@ -98,8 +99,6 @@ If Assigned(Response) else Response = ''
|
|||||||
|
|
||||||
AutoDisplayErrors = False$ ; // Set this to True$ when debugging so all errors will automatically display.
|
AutoDisplayErrors = False$ ; // Set this to True$ when debugging so all errors will automatically display.
|
||||||
|
|
||||||
Common /ErrorServices/ ErrorMessages@, ErrorSources@, ErrorCodes@, RetStacks@, Unused5@, Unused6@, Unused7@, Unused8@
|
|
||||||
|
|
||||||
Declare function RetStack, Error_Services, SRPSendMail
|
Declare function RetStack, Error_Services, SRPSendMail
|
||||||
Declare subroutine Error_Services
|
Declare subroutine Error_Services
|
||||||
|
|
||||||
|
@ -14,12 +14,13 @@ Declare Subroutine obj_Tables, Print_RootCause_Analysis, Database_Services, obj_
|
|||||||
Declare Subroutine ErrMsg, Send_Message, Set_Property, Send_Event, Btree.Extract, obj_AppWindow, Dialog_Box, Yield
|
Declare Subroutine ErrMsg, Send_Message, Set_Property, Send_Event, Btree.Extract, obj_AppWindow, Dialog_Box, Yield
|
||||||
Declare Subroutine obj_Notes, Security_Err_Msg, End_Window, Forward_Event, Start_Window, obj_Reactor_Log, obj_Post_Log
|
Declare Subroutine obj_Notes, Security_Err_Msg, End_Window, Forward_Event, Start_Window, obj_Reactor_Log, obj_Post_Log
|
||||||
Declare Subroutine Reactor_Log_Events, Reactor_Log_Services, Error_Services, React_Servs_Services, Reactor_Services
|
Declare Subroutine Reactor_Log_Events, Reactor_Log_Services, Error_Services, React_Servs_Services, Reactor_Services
|
||||||
Declare Subroutine Override_Log_Services, SRP_List
|
Declare Subroutine Override_Log_Services, SRP_List, Nica_Orders_Services
|
||||||
|
|
||||||
Declare Function Get_Property, Get_Status, Dialog_Box, Utility, Popup, Collect.Ixvals, EntID, Repository, NextKey
|
Declare Function Get_Property, Get_Status, Dialog_Box, Utility, Popup, Collect.Ixvals, EntID, Repository, NextKey
|
||||||
Declare Function Send_Message, Msg, Security_Check, obj_React_Item, Select_Into, MemberOf, Create_Dialog, obj_Calendar
|
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 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 Reactor_Services, Error_Services, React_Servs_Services, Reactor_Log_Services, Send_Event, SRP_List
|
||||||
|
Declare Function Nica_Orders_Services
|
||||||
|
|
||||||
$Insert MSG_EQUATES
|
$Insert MSG_EQUATES
|
||||||
$Insert APPCOLORS
|
$Insert APPCOLORS
|
||||||
@ -677,7 +678,8 @@ TechSign:
|
|||||||
SuccessfulSign = Reactor_Log_Services('SignReactorLog', ReactorLogNo, @USER4)
|
SuccessfulSign = Reactor_Log_Services('SignReactorLog', ReactorLogNo, @USER4)
|
||||||
If SuccessfulSign EQ 0 then
|
If SuccessfulSign EQ 0 then
|
||||||
Error_Services('DisplayError')
|
Error_Services('DisplayError')
|
||||||
ActiveChecklist = Xlate('REACTOR_LOG', ReactorLogNo, REACTOR_LOG_CHECKLIST_ACTIVE$, 'X')
|
ActiveRlNicaOrderIds = Nica_Orders_Services('GetActiveOrders', 'REACTOR_LOG', ReactorLogNo)
|
||||||
|
ActiveChecklist = (ActiveRlNicaOrderIds NE '')
|
||||||
If ActiveChecklist then
|
If ActiveChecklist then
|
||||||
OverrideGroups = 'MAINTENANCE':@VM:'SUPERVISOR'
|
OverrideGroups = 'MAINTENANCE':@VM:'SUPERVISOR'
|
||||||
UserMsg = "Reactor Log PM must be processed in NICA. Override required from a member of "
|
UserMsg = "Reactor Log PM must be processed in NICA. Override required from a member of "
|
||||||
@ -685,22 +687,14 @@ TechSign:
|
|||||||
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
|
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
|
||||||
Override = UserVerification<1>
|
Override = UserVerification<1>
|
||||||
If Override EQ True$ then
|
If Override EQ True$ then
|
||||||
PmOrderIds = Xlate('REACTOR_LOG', ReactorLogNo, REACTOR_LOG_CHECKLIST_ORDER_ID$, 'X')
|
|
||||||
PmOrderList = SRP_List('Create', PmOrderIds, @VM)
|
|
||||||
PmTypes = Xlate('REACTOR_LOG', ReactorLogNo, REACTOR_LOG_CHECKLIST_TYPE$, 'X')
|
|
||||||
PmTypeList = SRP_List('Create', PmTypes, @VM)
|
|
||||||
|
|
||||||
ResponseComment = Dialog_Box('NDW_ADD_COMMENT', @WINDOW)<2>
|
ResponseComment = Dialog_Box('NDW_ADD_COMMENT', @WINDOW)<2>
|
||||||
|
ResponseComment = ''
|
||||||
ResponseComment = ''
|
ActiveRlNicaOrderTypes = Xlate('NICA_ORDERS', ActiveRlNicaOrderIds, 'ORDER_TYPE', 'X')
|
||||||
For each PmType in PmTypes using @VM setting Idx
|
For each ActiveRlNicaOrderId in ActiveRlNicaOrderIds using @VM setting Idx
|
||||||
PmOrderId = SRP_List('GetAt', PmOrderList, Idx)
|
Nica_Orders_Services('CancelOrder', ActiveRlNicaOrderId)
|
||||||
Reactor_Log_Services('CancelReactorLogPMOrder', ReactorLogNo, PmOrderId)
|
If ResponseComment NE '' then ResponseComment := ', '
|
||||||
If ResponseComment NE '' then
|
ResponseComment := ActiveRlNicaOrderTypes<0, Idx>
|
||||||
ResponseComment := ', '
|
Next ActiveRlNicaOrderId
|
||||||
end
|
|
||||||
ResponseComment := PmType
|
|
||||||
Next ProveInType
|
|
||||||
|
|
||||||
Override_Log_Services('Create', 'REACTOR_LOG', ReactorLogNo, UserVerification<2>, ResponseComment, 'REACTOR_LOG_PM')
|
Override_Log_Services('Create', 'REACTOR_LOG', ReactorLogNo, UserVerification<2>, ResponseComment, 'REACTOR_LOG_PM')
|
||||||
|
|
||||||
@ -732,7 +726,6 @@ TechSign:
|
|||||||
Error_Services('DisplayError')
|
Error_Services('DisplayError')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
@ -1666,3 +1659,4 @@ ColorRemRiTable:
|
|||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
55
LSL2/STPROC/DEBUGGER_LOGGER.txt
Normal file
55
LSL2/STPROC/DEBUGGER_LOGGER.txt
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
Subroutine Debugger_Logger(Void)
|
||||||
|
/***********************************************************************************************************************
|
||||||
|
|
||||||
|
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 Technologies.
|
||||||
|
|
||||||
|
Name : Debugger_Logger
|
||||||
|
|
||||||
|
Description : Handler program for the logging debug data.
|
||||||
|
|
||||||
|
Notes : This is intended to be invoked by Error_Services("LogStack") (LSL2) so the current program,
|
||||||
|
Error_Services, is removed from the stack log.
|
||||||
|
|
||||||
|
History : (Date, Initials, Notes)
|
||||||
|
01/09/25 djs Original programmer.
|
||||||
|
|
||||||
|
***********************************************************************************************************************/
|
||||||
|
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
$insert LOGICAL
|
||||||
|
$insert RTI_DEBUG_COMMON
|
||||||
|
$insert ENVIRON_CONSTANTS
|
||||||
|
$insert ERROR_SERVICES_COMMON
|
||||||
|
|
||||||
|
Equ CRLF$ to \0D0A\
|
||||||
|
|
||||||
|
Declare function Environment_Services, Logging_Services, GetSessionCallStack, Error_Services, RetStack
|
||||||
|
Declare subroutine Logging_Services, Get_Status, Set_Env
|
||||||
|
|
||||||
|
Main:
|
||||||
|
|
||||||
|
ErrorMessages = Error_Services('GetMessages')
|
||||||
|
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\StackTrace'
|
||||||
|
LogDate = Oconv(Date(), 'D4/')
|
||||||
|
LogTime = Oconv(Time(), 'MTS')
|
||||||
|
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Error Log.csv'
|
||||||
|
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', '', '', False$, False$)
|
||||||
|
LogData = ''
|
||||||
|
LogData<1> = CRLF$:'Timestamp: ':LogDate:' ':LogTime
|
||||||
|
LogData<2> = 'Machine: ':Environment_Services('GetServer')
|
||||||
|
LogData<3> = 'Set_Status Code:':EsSpStatCode@
|
||||||
|
LogData<4> = 'Set_Status Message:':EsSpStatMessage@
|
||||||
|
Swap @FM with @VM in ErrorMessages
|
||||||
|
LogData<5> = 'Error_Services Messages:':ErrorMessages
|
||||||
|
LogData<6> = 'Call Depth: ':CallDepth@
|
||||||
|
LogData<7> = 'Curr Program and line no: ':CallStack@<2,1>:@VM:CallStack@<2,2>
|
||||||
|
LogData<8> = 'Call Stack / Line Nos: '
|
||||||
|
Stack = CallStack@
|
||||||
|
Stack = Delete(Stack, 1, 0, 0)
|
||||||
|
LogData<9> = Stack:CRLF$
|
||||||
|
Logging_Services('AppendLog', objLog, LogData, @FM, @VM, '', '', '')
|
||||||
|
|
||||||
|
Return
|
||||||
|
|
403
LSL2/STPROC/ERROR_SERVICES.txt
Normal file
403
LSL2/STPROC/ERROR_SERVICES.txt
Normal file
@ -0,0 +1,403 @@
|
|||||||
|
Function Error_Services(@Service, @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 SRP Computer Solutions, Inc.
|
||||||
|
|
||||||
|
Name : Error_Services
|
||||||
|
|
||||||
|
Description : Handler program for all error services.
|
||||||
|
|
||||||
|
Notes : Application errors should be logged using the Error Services module. There are a few methodological
|
||||||
|
assumptions built into way errors are managed which are important to understand in order to properly
|
||||||
|
work with Error Services:
|
||||||
|
|
||||||
|
- The term 'top' refers to the originating procedure of a call stack and the term 'bottom' refers to
|
||||||
|
the last routine (or the current routine) within a call stack. Within the OpenInsight Debugger
|
||||||
|
this will appear backwards since the originating procedure always appears at the bottom of the
|
||||||
|
list and the current routine appears at the top of the list. We are using this orientation because
|
||||||
|
it is common to refer to the process of calling other procedures as 'drilling down'.
|
||||||
|
|
||||||
|
- The reason for defining the orientation of the call stack is because Error_Services allows for
|
||||||
|
multiple error conditions to be appended to an original error. In most cases this will happen when
|
||||||
|
a procedure at the bottom of the stack generates an error condition and then returns to its
|
||||||
|
calling procedure. This higher level procedure can optionally add more information relevant to
|
||||||
|
itself. This continues as the call stack 'bubbles' its way back to the top to where the
|
||||||
|
originating procedure is waiting.
|
||||||
|
|
||||||
|
- Native OpenInsight commands that handle errors (e.g., Set_Status, Set_FSError, Set_EventStatus)
|
||||||
|
preserve their error state until explicitly cleared. This can hinder the normal execution of code
|
||||||
|
since subsequent procedures (usually SSPs) will fail if a pre-existing error condition exists.
|
||||||
|
Our philosophy is that error conditions should automatically be cleared before a new procedure
|
||||||
|
is executed to avoid this problem. However, the nature of Basic+ does not make this easy to
|
||||||
|
automate for any given stored procedure. Therefore, if a stored procedure wants to conform to our
|
||||||
|
philosophy then it should include a call into the 'Clear' service request at the top of the
|
||||||
|
program. Alternatively this can be done through a common insert (see SERVICE_SETUP for example.)
|
||||||
|
|
||||||
|
- Service modules will use the SERVICE_SETUP insert and therefore automatically clear out any
|
||||||
|
error conditions that were set before.
|
||||||
|
|
||||||
|
- The 'Set' service request is the equivelent to the various forms of setting an error within Basic+
|
||||||
|
(e.g., Set_Status, Set_FSError, Set_EventStatus). This will clear out any pre-existing error(s)
|
||||||
|
first (see 'Clear' service request description below). In most cases the 'Add' service request
|
||||||
|
(see below) should be used since error conditions are intended to be automatically cleared by
|
||||||
|
service modules or properly managed stored procedures.
|
||||||
|
|
||||||
|
- The 'Add' service request is similar to the 'Set' service request but it will not clear out any
|
||||||
|
pre-existing errors. Using 'Add', the error conditions can be stacked allowing the higher level
|
||||||
|
calling procedures the ability to contribute to the existing error or add additional errors.
|
||||||
|
|
||||||
|
- The 'Clear' service request will reset all of the error condition flags.
|
||||||
|
|
||||||
|
Parameters :
|
||||||
|
Service [in] -- Name of the service being requested
|
||||||
|
Param1-10 [in/out] -- Additional request parameter holders
|
||||||
|
Response [out] -- Response to be sent back to the Controller (MCP) or requesting procedure
|
||||||
|
|
||||||
|
History : (Date, Initials, Notes)
|
||||||
|
12/28/12 dmb Original programmer.
|
||||||
|
12/31/12 dmb Add hooks for various service requests. Add comments in the Notes section to explain the
|
||||||
|
theory of operation of Error Services.
|
||||||
|
01/01/13 dmb Add functionality to the Set, Add, GetMessage, and GetMessages service requests.
|
||||||
|
01/02/13 dmb Remove reference to SERVICES_SETUP and put the Assigned command lines directly into this
|
||||||
|
code to avoid infinite loop problem.
|
||||||
|
01/05/13 dmb Added HasError service request.
|
||||||
|
03/13/13 dmb [SRPFW-9] Added NoError service request.
|
||||||
|
10/01/13 dmb [SRPFW-18] Replace APP_INSERTS with LOGICAL and declare Error_Services.
|
||||||
|
10/06/13 dmb [SRPFW-17] Retrofit to use the default FrameWorks system font.
|
||||||
|
03/20/17 fjt [SRPFW-160] Conversion to EB+; addition of justification parameter to display.
|
||||||
|
10/09/17 dmb Add SendRuntimeAlert service to act as a debugger intercept process.
|
||||||
|
|
||||||
|
***********************************************************************************************************************/
|
||||||
|
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
$Insert LOGICAL
|
||||||
|
$Insert MSG_EQUATES
|
||||||
|
$Insert RTI_DEBUG_COMMON
|
||||||
|
$Insert SRPMail_Inserts
|
||||||
|
$Insert ERROR_SERVICES_COMMON
|
||||||
|
$Insert ENVIRON_CONSTANTS
|
||||||
|
|
||||||
|
Equ Segoe_UI$ to 'Segoe UI' : @SVM : -12 : @SVM : 400 : @SVM : 0 : @SVM : 0 : @SVM : 0 : @SVM : 0 : @SVM : 34 : @SVM : 0 : @SVM : 3 : @SVM : 2 : @SVM : 1 : @SVM : 0 : @SVM : 0 : @SVM : 0 : @SVM : 0
|
||||||
|
|
||||||
|
// Make sure any request parameters which have not been assigned are nulled.
|
||||||
|
// Normally these would be referenced in the SERVICES_SETUP insert but there is a call to ERROR_SERVICES in that
|
||||||
|
// insert which causes an infinite loop to occur.
|
||||||
|
If Assigned(Service) else Service = ''
|
||||||
|
If Assigned(Error) else Error = ''
|
||||||
|
If Assigned(Param1) else Param1 = ''
|
||||||
|
If Assigned(Param2) else Param2 = ''
|
||||||
|
If Assigned(Param3) else Param3 = ''
|
||||||
|
If Assigned(Param4) else Param4 = ''
|
||||||
|
If Assigned(Param5) else Param5 = ''
|
||||||
|
If Assigned(Param6) else Param6 = ''
|
||||||
|
If Assigned(Param7) else Param7 = ''
|
||||||
|
If Assigned(Param8) else Param8 = ''
|
||||||
|
If Assigned(Param9) else Param9 = ''
|
||||||
|
If Assigned(Param10) else Param10 = ''
|
||||||
|
If Assigned(Response) else Response = ''
|
||||||
|
|
||||||
|
AutoDisplayErrors = False$ ; // Set this to True$ when debugging so all errors will automatically display.
|
||||||
|
|
||||||
|
Declare function RetStack, Error_Services, SRPSendMail, Get_Env
|
||||||
|
Declare subroutine Error_Services, Set_Env, Set_Status
|
||||||
|
|
||||||
|
GoToService else
|
||||||
|
Error_Services('Set', Service : ' is not a valid service request within the Error services module.')
|
||||||
|
end
|
||||||
|
|
||||||
|
Return Response else ''
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Service Parameter Options
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Options BOOLEAN = True$, False$
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Services
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Set
|
||||||
|
//
|
||||||
|
// Param1 - Error message. Messages should be fairly descriptive.
|
||||||
|
//
|
||||||
|
// Sets an error to the stack. This will automatically clear any existing error conditions first so this error will
|
||||||
|
// be the only one on the stack.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service Set(ErrorMessage)
|
||||||
|
|
||||||
|
Error_Services('Clear')
|
||||||
|
Error_Services('Add', ErrorMessage)
|
||||||
|
|
||||||
|
If AutoDisplayErrors then Error_Services('DisplayError')
|
||||||
|
|
||||||
|
End Service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Add
|
||||||
|
//
|
||||||
|
// Param1 - Error message. Messages should be fairly descriptive.
|
||||||
|
//
|
||||||
|
// Adds an error to the stack. This will not clear existing error conditions first. It is intended to allow higher level
|
||||||
|
// routines to add more information to an existing error condition or simply to maintain an ongoing error log for some
|
||||||
|
// troubleshooting or debugging purposes.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service Add(ErrorMessage)
|
||||||
|
|
||||||
|
CurStack = RetStack()
|
||||||
|
AtSelf = CurStack[1, @FM] ; // AtSelf should be the name of this routine (e.g., ERROR_SERVICES)
|
||||||
|
Loop
|
||||||
|
CurRoutine = CurStack[1, @FM] ; // Get the next routine from the program call stack.
|
||||||
|
Until CurRoutine _NEC AtSelf
|
||||||
|
CurStack = Delete(CurStack, 1, 0, 0) ; // Remove any self-references from the program call stack.
|
||||||
|
Repeat
|
||||||
|
Convert @FM to @VM in CurStack ; // Convert the delimiter so it can be added to the global common.
|
||||||
|
|
||||||
|
If Len(ErrorMessages@) then
|
||||||
|
ErrorMessages@ := @FM : ErrorMessage
|
||||||
|
RetStacks@ := @FM : CurStack
|
||||||
|
end else
|
||||||
|
ErrorMessages@ = ErrorMessage
|
||||||
|
RetStacks@ = CurStack
|
||||||
|
end
|
||||||
|
|
||||||
|
If AutoDisplayErrors then Error_Services('DisplayError')
|
||||||
|
|
||||||
|
End Service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Clear
|
||||||
|
//
|
||||||
|
// Clears all error conditions and related information.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service Clear()
|
||||||
|
|
||||||
|
ErrorMessages@ = ''
|
||||||
|
ErrorSources@ = ''
|
||||||
|
ErrorCodes@ = ''
|
||||||
|
RetStacks@ = ''
|
||||||
|
|
||||||
|
End Service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// GetMessage
|
||||||
|
//
|
||||||
|
// Returns the most current error message.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service GetMessage()
|
||||||
|
|
||||||
|
Response = ErrorMessages@[-1, 'B' : @FM]
|
||||||
|
|
||||||
|
End Service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// GetMessages
|
||||||
|
//
|
||||||
|
// Returns the stack of error messages. This will be @FM delimited.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service GetMessages()
|
||||||
|
|
||||||
|
// Business logic goes here. Data that needs to be returned should be assigned to the Response parameter.
|
||||||
|
Response = ErrorMessages@
|
||||||
|
|
||||||
|
End Service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// HasError
|
||||||
|
//
|
||||||
|
// Returns True if there is an error condition, False if there is no error condition. Caller will still need to use
|
||||||
|
// the GetMessage or GetMessages service to determine what the error is. The HasError service allows the caller to
|
||||||
|
// embed the Error_Services service call inside of a conditional statement like this:
|
||||||
|
//
|
||||||
|
// If Error_Services('HasError') then
|
||||||
|
// * An error has occured. Proceed accordingly.
|
||||||
|
// ErrorMessage = Error_Services('GetMessage')
|
||||||
|
// end else
|
||||||
|
// * No error has occured.
|
||||||
|
// end
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service HasError()
|
||||||
|
|
||||||
|
If Len(ErrorMessages@) then
|
||||||
|
Response = True$
|
||||||
|
end else
|
||||||
|
Response = False$
|
||||||
|
end
|
||||||
|
|
||||||
|
End Service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// NoError
|
||||||
|
//
|
||||||
|
// Returns True if there are no error conditions, False if there is an error condition. This is the opposite of the
|
||||||
|
// HasError service and exists for improved readability.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service NoError()
|
||||||
|
|
||||||
|
If Len(ErrorMessages@) then
|
||||||
|
Response = False$
|
||||||
|
end else
|
||||||
|
Response = True$
|
||||||
|
end
|
||||||
|
|
||||||
|
End Service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// DisplayError
|
||||||
|
//
|
||||||
|
// Displays the current error message to the end user.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service DisplayError(Justification)
|
||||||
|
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
If Len(ErrorMessage) then
|
||||||
|
MsgStruct = ''
|
||||||
|
MsgStruct<MTEXT$> = ErrorMessage
|
||||||
|
MsgStruct<MTYPE$> = 'BO'
|
||||||
|
MsgStruct<MMODAL$> = 'W'
|
||||||
|
MsgStruct<MICON$> = '!'
|
||||||
|
MsgStruct<MCOL$> = -1
|
||||||
|
MsgStruct<MROW$> = -1
|
||||||
|
MsgStruct<MJUST$> = Justification
|
||||||
|
MsgStruct<MCAPTION$> = 'Error Services'
|
||||||
|
MsgStruct<MFONT$> = Segoe_UI$
|
||||||
|
Msg(@Window, MsgStruct)
|
||||||
|
end
|
||||||
|
|
||||||
|
End Service
|
||||||
|
|
||||||
|
|
||||||
|
Service GetSource()
|
||||||
|
|
||||||
|
// Business logic goes here. Data that needs to be returned should be assigned to the Response parameter.
|
||||||
|
Response = '<Service Response>'
|
||||||
|
|
||||||
|
End Service
|
||||||
|
|
||||||
|
|
||||||
|
Service GetSources()
|
||||||
|
|
||||||
|
// Business logic goes here. Data that needs to be returned should be assigned to the Response parameter.
|
||||||
|
Response = '<Service Response>'
|
||||||
|
|
||||||
|
End Service
|
||||||
|
|
||||||
|
|
||||||
|
Service GetCode()
|
||||||
|
|
||||||
|
// Business logic goes here. Data that needs to be returned should be assigned to the Response parameter.
|
||||||
|
Response = '<Service Response>'
|
||||||
|
|
||||||
|
End Service
|
||||||
|
|
||||||
|
|
||||||
|
Service GetCodes()
|
||||||
|
|
||||||
|
// Business logic goes here. Data that needs to be returned should be assigned to the Response parameter.
|
||||||
|
Response = '<Service Response>'
|
||||||
|
|
||||||
|
End Service
|
||||||
|
|
||||||
|
|
||||||
|
Service GetStackTrace()
|
||||||
|
// Business logic goes here. Data that needs to be returned should be assigned to the Response parameter.
|
||||||
|
Response = '<Service Response>'
|
||||||
|
End Service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// LogStack
|
||||||
|
//
|
||||||
|
// Uses a custom debugger intercept to log the stack including line numbers to .../LogFiles/StackTrace.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service LogStack()
|
||||||
|
|
||||||
|
DebuggerEnabled = Get_Env(ENV_DEBUGGER_ENABLED$)
|
||||||
|
DebuggerIntercept = Get_Env(ENV_DEBUGGER_INTERCEPT_PROC$)
|
||||||
|
Set_Env(ENV_DEBUGGER_ENABLED$, 2, 1)
|
||||||
|
Set_Env(ENV_DEBUGGER_INTERCEPT_PROC$, 'DEBUGGER_LOGGER', 1)
|
||||||
|
// Save the current status code and message before forcing runtime error
|
||||||
|
// to get OI to update stack variables in RTI_DEBUG_COMMON.
|
||||||
|
EsSpStatCode@ = Get_Status(EsSpStatMessage@)
|
||||||
|
ForceRuntimeError = 1/0
|
||||||
|
Set_Env(ENV_DEBUGGER_ENABLED$, DebuggerEnabled, 1)
|
||||||
|
Set_Env(ENV_DEBUGGER_INTERCEPT_PROC$, DebuggerIntercept, 1)
|
||||||
|
// Restore OI status variables so we don't break any logic relying on it.
|
||||||
|
Set_Status(EsSpStatCode@, EsSpStatMessage@)
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Internal GoSubs
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////?
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// SendRuntimeAlert
|
||||||
|
//
|
||||||
|
// Sends out an email alert when this service is called as a debugger intercept.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
SendRuntimeAlert:
|
||||||
|
|
||||||
|
Done = False$
|
||||||
|
Error = False$
|
||||||
|
Program = Curr_Program@
|
||||||
|
MsgSent = ''
|
||||||
|
|
||||||
|
If Program EQ '' then Program = 'Error Services'
|
||||||
|
|
||||||
|
ConfigFile = ''
|
||||||
|
ConfigFile<1> = SendUsing_Port$
|
||||||
|
ConfigFile<2> = ''
|
||||||
|
ConfigFile<3> = '' ; // Server port
|
||||||
|
ConfigFile<4> = '' ; // Mail server
|
||||||
|
ConfigFile<5> = True$ ; // Authenticate
|
||||||
|
ConfigFile<6> = '' ; // Username
|
||||||
|
ConfigFile<7> = '' ; // Password
|
||||||
|
ConfigFile<8> = False$ ; // Use SSL
|
||||||
|
|
||||||
|
Text = ''
|
||||||
|
Text<-1> = 'App: ' : @APPID<1>
|
||||||
|
Text<-1> = 'Window: ' : @WINDOW
|
||||||
|
Text<-1> = 'User: ' : @USERNAME
|
||||||
|
Text<-1> = 'Station: ' : @STATION
|
||||||
|
Text<-1> = ' '
|
||||||
|
Text<-1> = 'SP Status: ' : SPStatus@
|
||||||
|
Text<-1> = 'SP Stat Code: ' : SPStatCode@
|
||||||
|
Text<-1> = 'Program: ' : Program
|
||||||
|
Text<-1> = 'Call Depth: ' : CallDepth@
|
||||||
|
Text<-1> = 'Line No: ' : LineNo@
|
||||||
|
Text<-1> = ' '
|
||||||
|
Text<-1> = 'Stack: '
|
||||||
|
Text<-1> = CallStack@
|
||||||
|
Convert \00\ TO ',' in Text
|
||||||
|
Swap @VM with ':@VM:' IN Text
|
||||||
|
Swap @FM with Char(13) : Char(10) IN Text
|
||||||
|
Swap @TM with Char(13) : Char(10) IN Text
|
||||||
|
|
||||||
|
SentFrom = ''
|
||||||
|
SentTo = ''
|
||||||
|
Message = ''
|
||||||
|
Message<1> = '' : Program ; // Subject
|
||||||
|
Message<2> = SentFrom ; // From (email address)
|
||||||
|
Message<3> = SentTo ; // Send to (email address)
|
||||||
|
Message<5> = '' ; // Blind Carbon Copy (email address)
|
||||||
|
Message<6> = '' ; // Reply To (email address)
|
||||||
|
Message<7> = 'TEXT' ; // Content Type (TEXT or HTML)
|
||||||
|
Message<8> = Text ; // Content / Body
|
||||||
|
Message<9> = '' ; // Attachment(s) (path to file name(s))
|
||||||
|
|
||||||
|
MsgSent = SRPSendMail(Message, ConfigFile)
|
||||||
|
|
||||||
|
return
|
875
LSL2/STPROC/HTTPCLIENT_SERVICES.txt
Normal file
875
LSL2/STPROC/HTTPCLIENT_SERVICES.txt
Normal file
@ -0,0 +1,875 @@
|
|||||||
|
Function HTTPClient_Services(@Service, @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 SRP Computer Solutions, Inc.
|
||||||
|
|
||||||
|
Name : HTTPClient_Services
|
||||||
|
|
||||||
|
Description : Handler program for all module related services.
|
||||||
|
|
||||||
|
Notes : The generic parameters should contain all the necessary information to process the services. Often
|
||||||
|
this will be information like the data Record and Key ID.
|
||||||
|
|
||||||
|
Parameters :
|
||||||
|
Service [in] -- Name of the service being requested
|
||||||
|
Param1-10 [in/out] -- Additional request parameter holders
|
||||||
|
Response [out] -- Response to be sent back to the Controller (MCP) or requesting procedure
|
||||||
|
|
||||||
|
Metadata :
|
||||||
|
|
||||||
|
History : (Date, Initials, Notes)
|
||||||
|
03/28/16 dmb [SRPFW-120] Original programmer.
|
||||||
|
07/01/17 dmb [SRPFW-184] Refactor using Enhanced BASIC+ syntax.
|
||||||
|
05/19/18 dmb [SRPFW-235] Check for content in the HeaderList variable before calling the For Each loop.
|
||||||
|
11/15/18 dmb [SRPFW-238] Add ClientCertPath argument to the SendHTTPRequest service to support
|
||||||
|
client-side certificates.
|
||||||
|
02/28/19 dmb Change UseXMLHTTP argument to UseClientXMLHTTP in the SendHTTPRequest service to make it
|
||||||
|
easier to interpret.
|
||||||
|
02/09/20 dmb [SRPFW-309] Fix a bug in the SendHTTPRequest service so that request headers are properly
|
||||||
|
parsed. All colons were erroneously being converted to @VM instead of the first colon (which
|
||||||
|
separated the header name from the header value).
|
||||||
|
02/09/20 dmb [SRPFW-309] Update the SetResponseHeaderField service to better support Set-Cookie headers.
|
||||||
|
Allow multiple cookie names to be stored but only store the value of the last cookie name
|
||||||
|
if it is duplicated.
|
||||||
|
02/09/20 dmb [SRPFW-309] Update the GetResponseHeaderField by adding a Delimiter argument so the caller
|
||||||
|
can specify an alternative delimiter for the values being returned.
|
||||||
|
02/09/20 dmb [SRPFW-309] Add GetCookies service to make it easier to view all cookies returned in the
|
||||||
|
response.
|
||||||
|
02/09/20 dmb [SRPFW-309] Add GetCookie service to make it easier to see the entire cookie string of a
|
||||||
|
specified cookie.
|
||||||
|
02/10/20 dmb [SRPFW-309] Update the GetCookie service to include an IgnoreAttributes argument. If this
|
||||||
|
is True$, then only the cookie name and value will be returned.
|
||||||
|
12/19/24 djs Created LSL version of service module. Added IgnoreCertErrors parameter to SendHttpRequest service.
|
||||||
|
|
||||||
|
***********************************************************************************************************************/
|
||||||
|
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
$insert LOGICAL
|
||||||
|
$insert SERVICE_SETUP
|
||||||
|
|
||||||
|
Equ CRLF$ to \0D0A\
|
||||||
|
// The readyState property will have this value when the request has returned from the server.
|
||||||
|
// http://msdn.microsoft.com/en-us/library/ms753800(v=vs.85).aspx
|
||||||
|
Equ HTTP_COMPLETED$ to 4
|
||||||
|
|
||||||
|
Equ SXH_SERVER_CERT_IGNORE_UNKNOWN_CA$ to 256 ; // Unknown certificate authority
|
||||||
|
Equ SXH_SERVER_CERT_IGNORE_WRONG_USAGE$ to 512 ; // Malformed certificate such as a certificate with no subject name.
|
||||||
|
Equ SXH_SERVER_CERT_IGNORE_CERT_CN_INVALID$ to 4096 ; // Mismatch between the visited hostname and the certificate name being used on the server.
|
||||||
|
Equ SXH_SERVER_CERT_IGNORE_CERT_DATE_INVALID$ to 8192 ; // The date in the certificate is invalid or has expired.
|
||||||
|
Equ SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS$ to 13056 ; // All certificate errors.
|
||||||
|
|
||||||
|
Common /HTTPClientServices/ RequestHeaderFields@, RequestHeaderValues@, ResponseHeaderFields@, ResponseHeaderValues@, ResponseStatusCode@, ResponseStatusPhrase@, ResponseBody@, TimeoutDuration@
|
||||||
|
|
||||||
|
Declare function SRP_COM, HTTPClient_Services, GetTickCount, OLECreateInstance, OLEGetProperty, OLECallMethod, OLEStatus
|
||||||
|
Declare subroutine SRP_COM, HTTPClient_Services, OLEPutProperty
|
||||||
|
|
||||||
|
GoToService else
|
||||||
|
Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' module.')
|
||||||
|
end
|
||||||
|
|
||||||
|
Return Response OR ''
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Service Parameter Options
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Options BOOLEAN = True$, False$
|
||||||
|
Options RESPONSEHEADERNAMES = 'Access-Control-Allow-Headers', 'Access-Control-Allow-Methods', 'Access-Control-Allow-Origin', 'Allow', 'Content-Encoding', 'Content-Language', 'Content-Length', 'Content-Location', 'Content-Disposition', 'Content-Type', 'Date', 'Expires', 'Last-Modified', 'Link', 'Location', 'Retry-After', 'Server', 'Set-Cookie', 'Transfer-Encoding', 'Vary', 'WWW-Authenticate',
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Services
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// SendHTTPRequest
|
||||||
|
//
|
||||||
|
// Method - The HTTP method to submit to the server. - [Required]
|
||||||
|
// URL - The URL receiving the HTTP request. - [Required]
|
||||||
|
// HeaderList - An @FM/@VM list of request header names and values. - [Optional]
|
||||||
|
// Body - The request body to be sent to the server. - [Optional]
|
||||||
|
// ProxyUser - Username needed to authenticate against a proxy server. - [Optional]
|
||||||
|
// ProxyPassword - Password needed to authenticate against a proxy server. - [Optional]
|
||||||
|
// UseAsynchronous - Flag to determine if the HTTP request should be processed asynchronously. Default is True.
|
||||||
|
// - [Optional]
|
||||||
|
// UseClientXMLHTTP - Flag to determine if client XMLHTTP or server XMLHTTP should be used. Default is server XMLHTTP.
|
||||||
|
// - [Optional]
|
||||||
|
// ClientCertPath - Path to a client-side certificate. This is usually in Location\Certificate Store\Subject format.
|
||||||
|
// - [Optional]
|
||||||
|
//
|
||||||
|
// Calls the indicated HTTP web service routine.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service SendHTTPRequestOLE(Method, URL, HeaderList, Body, ProxyUser, ProxyPassword, UseAsynchronous, UseClientXMLHTTP, ClientCertPath)
|
||||||
|
|
||||||
|
// Defaults.
|
||||||
|
If UseAsynchronous NE False$ then UseAsynchronous = True$
|
||||||
|
If UseClientXMLHTTP NE True$ then UseClientXMLHTTP = False$
|
||||||
|
|
||||||
|
If (Method NE '') AND (URL NE '') then
|
||||||
|
// Make sure all prior response settings are cleared before performing the next HTTP request.
|
||||||
|
HTTPClient_Services('ClearResponseSettings')
|
||||||
|
|
||||||
|
// Attempt to get a handle for the best XMLHTTP object.
|
||||||
|
objXMLHTTP = ''
|
||||||
|
If UseClientXMLHTTP then
|
||||||
|
ServerPrefix = ''
|
||||||
|
end else
|
||||||
|
ServerPrefix = 'Server'
|
||||||
|
end
|
||||||
|
XMLHTTPProgID = 'Msxml2.' : ServerPrefix : 'XMLHTTP.6.0'
|
||||||
|
objXMLHTTP = OLECreateInstance(XMLHTTPProgID)
|
||||||
|
Status = OLEStatus()
|
||||||
|
If Status then
|
||||||
|
XMLHTTPProgID = 'Msxml2.' : ServerPrefix : 'XMLHTTP.3.0'
|
||||||
|
objXMLHTTP = OLECreateInstance(XMLHTTPProgID)
|
||||||
|
Status = OLEStatus()
|
||||||
|
If Status then
|
||||||
|
XMLHTTPProgID = 'Msxml2.' : ServerPrefix : 'XMLHTTP'
|
||||||
|
objXMLHTTP = OLECreateInstance(XMLHTTPProgID)
|
||||||
|
Status = OLEStatus()
|
||||||
|
If Status then
|
||||||
|
Error = 'Unable to create a handle to the XMLHTTP object in the ' : Service : ' service.'
|
||||||
|
Error := ' OLE Error: ' : Status
|
||||||
|
Error_Services('Add', Error)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
// Invoke the XMLHTTP object's open method to initialize a request.
|
||||||
|
rv = OLECallMethod(objXMLHTTP, 'open', Method, URL, UseAsynchronous, ProxyUser, ProxyPassword)
|
||||||
|
Status = OLEStatus()
|
||||||
|
If Status then
|
||||||
|
Error = 'Error calling the open method for the XMLHTTP object in the ' : Service : ' service.'
|
||||||
|
Error := ' OLE Error: ' : Status
|
||||||
|
Error_Services('Add', Error)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
* If Error_Services('NoError') then
|
||||||
|
* // Set the request header names and values. This will add or update any header fields passed in through this
|
||||||
|
* // service with those have may have been previously set using the SetRequestHeaderFields or
|
||||||
|
* // SetRequestHeaderField already.
|
||||||
|
* If Len(HeaderList) then HTTPClient_Services('SetRequestHeaderFields', HeaderList)
|
||||||
|
* // Now get all of the request header fields.
|
||||||
|
* HeaderList = HTTPClient_Services('GetRequestHeaderFields')
|
||||||
|
* If Error_Services('NoError') then
|
||||||
|
* If HeaderList NE '' then
|
||||||
|
* For Each HeaderPair in HeaderList using @FM
|
||||||
|
* HeaderName = HeaderPair<0, 1>
|
||||||
|
* HeaderValue = HeaderPair<0, 2>
|
||||||
|
* SRP_COM(objXMLHTTP, 'CALL', 'setRequestHeader', HeaderName, HeaderValue)
|
||||||
|
* If SRP_COM('', 'HASERROR') then
|
||||||
|
* Error = 'Error setting the setRequestHeader property for the ' : HeaderName : ' field in the XMLHTTP object in the ' : Service : ' service.'
|
||||||
|
* Error := ' SRP_COM Error: ' : SRP_COM('', 'ERROR')
|
||||||
|
* Error_Services('Add', Error)
|
||||||
|
* end
|
||||||
|
* Next HeaderPair
|
||||||
|
* end
|
||||||
|
* end
|
||||||
|
* end
|
||||||
|
|
||||||
|
* If ClientCertPath NE '' then
|
||||||
|
* If Error_Services('NoError') then
|
||||||
|
* // Invoke the XMLHTTP object's setOption method to invoke a certificate.
|
||||||
|
* rv = SRP_COM(objXMLHTTP, 'CALL', 'setOption', 3, ClientCertPath)
|
||||||
|
* If SRP_COM('', 'HASERROR') then
|
||||||
|
* Error = 'Error calling the setOption method for the XMLHTTP object in the ' : Service : ' service.'
|
||||||
|
* Error := ' SRP_COM Error: ' : SRP_COM('', 'ERROR')
|
||||||
|
* Error_Services('Add', Error)
|
||||||
|
* end
|
||||||
|
* end
|
||||||
|
* end
|
||||||
|
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
// Invoke the XMLHTTP object's send method to submit the request to the server.
|
||||||
|
rv = OLECallMethod(objXMLHTTP, 'send', Body)
|
||||||
|
Status = OLEStatus()
|
||||||
|
If Status then
|
||||||
|
Error = 'Error calling the send method for the XMLHTTP object in the ' : Service : ' service.'
|
||||||
|
Error := ' OLE Error: ' : Status
|
||||||
|
Error_Services('Add', Error)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
If UseAsynchronous then
|
||||||
|
StartTime = GetTickCount()
|
||||||
|
TimeoutDuration = HTTPClient_Services('GetTimeoutDuration')
|
||||||
|
TimedOut = False$
|
||||||
|
Loop
|
||||||
|
ReadyState = OLEGetProperty(objXMLHTTP, 'readyState')
|
||||||
|
CurrentTime = GetTickCount()
|
||||||
|
ElapsedTime = Int((CurrentTime - StartTime) / 1000)
|
||||||
|
TimedOut = ElapsedTime GE TimeoutDuration
|
||||||
|
While (ReadyState NE HTTP_COMPLETED$) AND Not(TimedOut)
|
||||||
|
Repeat
|
||||||
|
end
|
||||||
|
|
||||||
|
// Check the XMLHTTP object's responseBody property to get the server's response.
|
||||||
|
Response = OLEGetProperty(objXMLHTTP, 'responseBody')
|
||||||
|
Response1 = OLEGetProperty(objXMLHTTP, 'responseText')
|
||||||
|
Response2 = objXMLHTTP->responseBody
|
||||||
|
Response3 = objXMLHTTP->responseText
|
||||||
|
|
||||||
|
Status = OLEStatus()
|
||||||
|
If Status then
|
||||||
|
Error = 'Error getting the responseBody property for the XMLHTTP object in the ' : Service : ' service.'
|
||||||
|
Error := ' OLE Error: ' : Status
|
||||||
|
Error_Services('Add', Error)
|
||||||
|
Response = ''
|
||||||
|
end else
|
||||||
|
HTTPClient_Services('SetResponseBody', Response)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
// If the request was successful, get the response status code, phrase, and response headers and set them
|
||||||
|
// using HTTPClient_Services so the caller can retrieve is desired.
|
||||||
|
Code = OLEGetProperty(objXMLHTTP, 'status')
|
||||||
|
Phrase = Trim(OLEGetProperty(objXMLHTTP, 'statusText'))
|
||||||
|
HTTPClient_Services('SetResponseStatusCode', Code)
|
||||||
|
HTTPClient_Services('SetResponseStatusPhrase', Phrase)
|
||||||
|
|
||||||
|
ResponseHeaders = OLECallMethod(objXMLHTTP, 'getAllResponseHeaders')
|
||||||
|
Swap CRLF$ with @FM in ResponseHeaders
|
||||||
|
For Each ResponseHeader in ResponseHeaders using @FM
|
||||||
|
Name = ResponseHeader[1, 'F:']
|
||||||
|
Value = Trim(ResponseHeader[Col2() + 1, 9999])
|
||||||
|
If (Name NE '') AND (Value NE '') then
|
||||||
|
HTTPClient_Services('SetResponseHeaderField', Name, Value)
|
||||||
|
end
|
||||||
|
Next ResponseHeader
|
||||||
|
end
|
||||||
|
|
||||||
|
// Make sure all prior request settings are cleared so future HTTP request won't be affected.
|
||||||
|
Error = Error_Services('GetMessage') ; // Get any pre-existing errors so they can be preserved.
|
||||||
|
HTTPClient_Services('ClearRequestSettings') ; // This will automatically clear the error stack.
|
||||||
|
Error_Services('Set', Error) ; // Restore any errors so the caller can check for them.
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'Method or URL argument was missing from the ' : Service : ' service.')
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// SendHTTPRequest
|
||||||
|
//
|
||||||
|
// Method - The HTTP method to submit to the server. - [Required]
|
||||||
|
// URL - The URL receiving the HTTP request. - [Required]
|
||||||
|
// HeaderList - An @FM/@VM list of request header names and values. - [Optional]
|
||||||
|
// Body - The request body to be sent to the server. - [Optional]
|
||||||
|
// ProxyUser - Username needed to authenticate against a proxy server. - [Optional]
|
||||||
|
// ProxyPassword - Password needed to authenticate against a proxy server. - [Optional]
|
||||||
|
// UseAsynchronous - Flag to determine if the HTTP request should be processed asynchronously. Default is True.
|
||||||
|
// - [Optional]
|
||||||
|
// UseClientXMLHTTP - Flag to determine if client XMLHTTP or server XMLHTTP should be used. Default is server XMLHTTP.
|
||||||
|
// - [Optional]
|
||||||
|
// ClientCertPath - Path to a client-side certificate. This is usually in Location\Certificate Store\Subject format.
|
||||||
|
// - [Optional]
|
||||||
|
//
|
||||||
|
// Calls the indicated HTTP web service routine.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service SendHTTPRequest(Method, URL, HeaderList, Body, ProxyUser, ProxyPassword, UseAsynchronous, UseClientXMLHTTP, ClientCertPath, IgnoreCertErrors)
|
||||||
|
|
||||||
|
// Defaults.
|
||||||
|
If UseAsynchronous NE False$ then UseAsynchronous = True$
|
||||||
|
If UseClientXMLHTTP NE True$ then UseClientXMLHTTP = False$
|
||||||
|
If IgnoreCertErrors NE True$ then IngoreCertErrors = False$
|
||||||
|
|
||||||
|
If (Method NE '') AND (URL NE '') then
|
||||||
|
// Make sure all prior response settings are cleared before performing the next HTTP request.
|
||||||
|
HTTPClient_Services('ClearResponseSettings')
|
||||||
|
|
||||||
|
// Attempt to get a handle for the best XMLHTTP object.
|
||||||
|
objXMLHTTP = ''
|
||||||
|
If UseClientXMLHTTP then
|
||||||
|
ServerPrefix = ''
|
||||||
|
end else
|
||||||
|
ServerPrefix = 'Server'
|
||||||
|
end
|
||||||
|
XMLHTTPProgID = 'Msxml2.' : ServerPrefix : 'XMLHTTP.6.0'
|
||||||
|
If SRP_COM(objXMLHTTP, 'CREATE', XMLHTTPProgID) else
|
||||||
|
XMLHTTPProgID = 'Msxml2.' : ServerPrefix : 'XMLHTTP.3.0'
|
||||||
|
If SRP_COM(objXMLHTTP, 'CREATE', XMLHTTPProgID) else
|
||||||
|
XMLHTTPProgID = 'Msxml2.' : ServerPrefix : 'XMLHTTP'
|
||||||
|
If SRP_COM(objXMLHTTP, 'CREATE', XMLHTTPProgID) else
|
||||||
|
Error = 'Unable to create a handle to the XMLHTTP object in the ' : Service : ' service.'
|
||||||
|
If SRP_COM('', 'HASERROR') then
|
||||||
|
Error := ' SRP_COM Error: ' : SRP_COM('', 'ERROR')
|
||||||
|
end
|
||||||
|
Error_Services('Add', Error)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
// Invoke the XMLHTTP object's open method to initialize a request.
|
||||||
|
SRP_COM(objXMLHTTP, 'CALL', 'open', Method, URL, UseAsynchronous, ProxyUser, ProxyPassword)
|
||||||
|
If SRP_COM('', 'HASERROR') then
|
||||||
|
Error = 'Error calling the open method for the XMLHTTP object in the ' : Service : ' service.'
|
||||||
|
Error := ' SRP_COM Error: ' : SRP_COM('', 'ERROR')
|
||||||
|
Error_Services('Add', Error)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
// Set the request header names and values. This will add or update any header fields passed in through this
|
||||||
|
// service with those have may have been previously set using the SetRequestHeaderFields or
|
||||||
|
// SetRequestHeaderField already.
|
||||||
|
If Len(HeaderList) then HTTPClient_Services('SetRequestHeaderFields', HeaderList)
|
||||||
|
// Now get all of the request header fields.
|
||||||
|
HeaderList = HTTPClient_Services('GetRequestHeaderFields')
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
If HeaderList NE '' then
|
||||||
|
For Each HeaderPair in HeaderList using @FM
|
||||||
|
HeaderName = HeaderPair<0, 1>
|
||||||
|
HeaderValue = HeaderPair<0, 2>
|
||||||
|
SRP_COM(objXMLHTTP, 'CALL', 'setRequestHeader', HeaderName, HeaderValue)
|
||||||
|
If SRP_COM('', 'HASERROR') then
|
||||||
|
Error = 'Error setting the setRequestHeader property for the ' : HeaderName : ' field in the XMLHTTP object in the ' : Service : ' service.'
|
||||||
|
Error := ' SRP_COM Error: ' : SRP_COM('', 'ERROR')
|
||||||
|
Error_Services('Add', Error)
|
||||||
|
end
|
||||||
|
Next HeaderPair
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If IgnoreCertErrors then
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
rv = SRP_COM(objXMLHTTP, 'CALL', 'setOption', 2, SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS$)
|
||||||
|
If SRP_COM('', 'HASERROR') then
|
||||||
|
Error = 'Error calling the setOption method for the XMLHTTP object in the ' : Service : ' service.'
|
||||||
|
Error := ' SRP_COM Error: ' : SRP_COM('', 'ERROR')
|
||||||
|
Error_Services('Add', Error)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If ClientCertPath NE '' then
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
// Invoke the XMLHTTP object's setOption method to invoke a certificate.
|
||||||
|
rv = SRP_COM(objXMLHTTP, 'CALL', 'setOption', 3, ClientCertPath)
|
||||||
|
If SRP_COM('', 'HASERROR') then
|
||||||
|
Error = 'Error calling the setOption method for the XMLHTTP object in the ' : Service : ' service.'
|
||||||
|
Error := ' SRP_COM Error: ' : SRP_COM('', 'ERROR')
|
||||||
|
Error_Services('Add', Error)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
// Invoke the XMLHTTP object's send method to submit the request to the server.
|
||||||
|
rv = SRP_COM(objXMLHTTP, 'CALL', 'send', Body)
|
||||||
|
If SRP_COM('', 'HASERROR') then
|
||||||
|
Error = 'Error calling the send method for the XMLHTTP object in the ' : Service : ' service.'
|
||||||
|
Error := ' SRP_COM Error: ' : SRP_COM('', 'ERROR')
|
||||||
|
Error_Services('Add', Error)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
If UseAsynchronous then
|
||||||
|
StartTime = GetTickCount()
|
||||||
|
TimeoutDuration = HTTPClient_Services('GetTimeoutDuration')
|
||||||
|
TimedOut = False$
|
||||||
|
Loop
|
||||||
|
ReadyState = SRP_COM(objXMLHTTP, 'GET', 'readyState')
|
||||||
|
CurrentTime = GetTickCount()
|
||||||
|
ElapsedTime = Int((CurrentTime - StartTime) / 1000)
|
||||||
|
TimedOut = ElapsedTime GE TimeoutDuration
|
||||||
|
While (ReadyState NE HTTP_COMPLETED$) AND Not(TimedOut)
|
||||||
|
Repeat
|
||||||
|
end
|
||||||
|
|
||||||
|
// Check the XMLHTTP object's responseBody property to get the server's response.
|
||||||
|
* Response = SRP_COM(objXMLHTTP, 'GET', 'responseBody')
|
||||||
|
Response = SRP_COM(objXMLHTTP, 'GET', 'responseText')
|
||||||
|
|
||||||
|
If SRP_COM('', 'HASERROR') then
|
||||||
|
Error = 'Error getting the responseBody property for the XMLHTTP object in the ' : Service : ' service.'
|
||||||
|
Error := ' SRP_COM Error: ' : SRP_COM('', 'ERROR')
|
||||||
|
Error_Services('Add', Error)
|
||||||
|
Response = ''
|
||||||
|
end else
|
||||||
|
HTTPClient_Services('SetResponseBody', Response)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
// If the request was successful, get the response status code, phrase, and response headers and set them
|
||||||
|
// using HTTPClient_Services so the caller can retrieve is desired.
|
||||||
|
Code = SRP_COM(objXMLHTTP, 'GET', 'status')
|
||||||
|
Phrase = Trim(SRP_COM(objXMLHTTP, 'GET', 'statusText'))
|
||||||
|
HTTPClient_Services('SetResponseStatusCode', Code)
|
||||||
|
HTTPClient_Services('SetResponseStatusPhrase', Phrase)
|
||||||
|
|
||||||
|
ResponseHeaders = SRP_COM(objXMLHTTP, 'CALL', 'getAllResponseHeaders')
|
||||||
|
Swap CRLF$ with @FM in ResponseHeaders
|
||||||
|
For Each ResponseHeader in ResponseHeaders using @FM
|
||||||
|
Name = ResponseHeader[1, 'F:']
|
||||||
|
Value = Trim(ResponseHeader[Col2() + 1, 9999])
|
||||||
|
If (Name NE '') AND (Value NE '') then
|
||||||
|
HTTPClient_Services('SetResponseHeaderField', Name, Value)
|
||||||
|
end
|
||||||
|
Next ResponseHeader
|
||||||
|
end
|
||||||
|
|
||||||
|
// Release the handle to the XMLHTTP object in case it was created.
|
||||||
|
SRP_COM(objXMLHTTP, 'RELEASE')
|
||||||
|
|
||||||
|
// Make sure all prior request settings are cleared so future HTTP request won't be affected.
|
||||||
|
Error = Error_Services('GetMessage') ; // Get any pre-existing errors so they can be preserved.
|
||||||
|
HTTPClient_Services('ClearRequestSettings') ; // This will automatically clear the error stack.
|
||||||
|
Error_Services('Set', Error) ; // Restore any errors so the caller can check for them.
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'Method or URL argument was missing from the ' : Service : ' service.')
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// SetRequestHeaderFields
|
||||||
|
//
|
||||||
|
// HeaderList - An @FM/@VM list of request header fields and their values. - [Required]
|
||||||
|
//
|
||||||
|
// Sets the Request Header Fields as indicated by the HeaderList argument. The HeaderList should not be formatted as a
|
||||||
|
// list rather than an associated multivalue array. This is easier for the developer to manage in the code that calls
|
||||||
|
// this service.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service SetRequestHeaderFields(HeaderList)
|
||||||
|
|
||||||
|
If HeaderList NE '' then
|
||||||
|
For Each HeaderPair in HeaderList using @FM
|
||||||
|
HeaderName = HeaderPair<0, 1>
|
||||||
|
HeaderValue = HeaderPair<0, 2>
|
||||||
|
HTTPClient_Services('SetRequestHeaderField', HeaderName, HeaderValue)
|
||||||
|
Next HeaderPair
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'HeaderList argument was missing from the ' : Service : ' service.')
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// SetRequestHeaderField
|
||||||
|
//
|
||||||
|
// Name - Header Field Name to set. - [Required]
|
||||||
|
// Value - Value for the header field. This will be Trimmed to enforce proper formatting. - [Required]
|
||||||
|
//
|
||||||
|
// Sets the indicated Request Header Field with the indicated value.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service SetRequestHeaderField(Name, Value)
|
||||||
|
|
||||||
|
If (Name NE '') AND (Value NE '') then
|
||||||
|
SearchName = Name
|
||||||
|
Convert @Lower_Case to @Upper_Case in SearchName
|
||||||
|
SearchFields = RequestHeaderFields@
|
||||||
|
Convert @Lower_Case to @Upper_Case in SearchFields
|
||||||
|
Locate SearchName in SearchFields using @FM setting fPos else
|
||||||
|
fPos = Count(RequestHeaderFields@, @FM) + (RequestHeaderFields@ NE '') + 1
|
||||||
|
end
|
||||||
|
RequestHeaderFields@<fPos> = Name
|
||||||
|
RequestHeaderValues@<fPos> = Trim(Value)
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'The Name or Value argument is missing in the ' : Service : ' service.')
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// GetRequestHeaderFields
|
||||||
|
//
|
||||||
|
// Returns all of the Request Header Field names and values. This returns an @FM/@VM list of names and values.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service GetRequestHeaderFields()
|
||||||
|
|
||||||
|
HeaderFieldBlock = ''
|
||||||
|
|
||||||
|
If RequestHeaderFields@ NE '' then
|
||||||
|
NumFields = Count(RequestHeaderFields@, @FM) + (RequestHeaderFields@ NE '')
|
||||||
|
For FieldCnt = 1 to NumFields
|
||||||
|
HeaderFieldBlock := RequestHeaderFields@<FieldCnt> : @VM : RequestHeaderValues@<FieldCnt> : @FM
|
||||||
|
Next FieldCnt
|
||||||
|
HeaderFieldBlock[-1, 1] = ''
|
||||||
|
end
|
||||||
|
|
||||||
|
Response = HeaderFieldBlock
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// GetRequestHeaderField
|
||||||
|
//
|
||||||
|
// Name - Header Field Name to get. - [Required]
|
||||||
|
//
|
||||||
|
// Returns the value previously set for the indicated Request Header Field.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service GetRequestHeaderField(Name)
|
||||||
|
|
||||||
|
Value = ''
|
||||||
|
|
||||||
|
If Name NE '' then
|
||||||
|
SearchName = Name
|
||||||
|
Convert @Lower_Case to @Upper_Case in SearchName
|
||||||
|
SearchFields = RequestHeaderFields@
|
||||||
|
Convert @Lower_Case to @Upper_Case in SearchFields
|
||||||
|
Locate SearchName in SearchFields using @FM setting fPos then
|
||||||
|
Value = RequestHeaderValues@<fPos>
|
||||||
|
end else
|
||||||
|
Error_Services('Add', Name : ' is not a header field in the request.')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'The Name argument is missing in the ' : Service : ' service.')
|
||||||
|
end
|
||||||
|
|
||||||
|
Response = Value
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// SetResponseHeaderField
|
||||||
|
//
|
||||||
|
// Name - Header Field Name to set. - [Required]
|
||||||
|
// Value - Value for the header field. This will be Trimmed to enforce proper formatting. - [Required]
|
||||||
|
//
|
||||||
|
// Sets the indicated Response Header Field with the indicated value.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service SetResponseHeaderField(Name, Value)
|
||||||
|
|
||||||
|
If (Name NE '') AND (Value NE '') then
|
||||||
|
SearchName = Name
|
||||||
|
Convert @Lower_Case to @Upper_Case in SearchName
|
||||||
|
SearchFields = ResponseHeaderFields@
|
||||||
|
Convert @Lower_Case to @Upper_Case in SearchFields
|
||||||
|
Locate SearchName in SearchFields using @FM setting fPos else
|
||||||
|
fPos = Count(ResponseHeaderFields@, @FM) + (ResponseHeaderFields@ NE '') + 1
|
||||||
|
end
|
||||||
|
ResponseHeaderFields@<fPos> = Name
|
||||||
|
PreviousValue = ResponseHeaderValues@<fPos>
|
||||||
|
If PreviousValue EQ '' then
|
||||||
|
ResponseHeaderValues@<fPos> = Trim(Value)
|
||||||
|
end else
|
||||||
|
If Name EQ 'Set-Cookie' then
|
||||||
|
// Unlike other response headers, Set-Cookie can have multiple entries. However, if more than one
|
||||||
|
// cookie of a particular name exists then only store the last entry.
|
||||||
|
SetCookieFound = False$
|
||||||
|
CookieName = Value[1, 'F='][1, 'F '][1, 'F;']
|
||||||
|
For Each HeaderField in ResponseHeaderFields@ using @FM setting fPos
|
||||||
|
If HeaderField EQ 'Set-Cookie' then
|
||||||
|
SetCookieFound = True$
|
||||||
|
end
|
||||||
|
Until SetCookieFound EQ True$
|
||||||
|
Next HeaderField
|
||||||
|
If SetCookieFound EQ True$ then
|
||||||
|
// Set-Cookie was found. Check to see if the cookie name has already been added.
|
||||||
|
CookieNameFound = False$
|
||||||
|
CookieValues = ResponseHeaderValues@<fPos>
|
||||||
|
For Each CookieValue in CookieValues using @VM setting vPos
|
||||||
|
MatchCookieName = CookieValue[1, 'F='][1, 'F '][1, 'F;']
|
||||||
|
If CookieName EQ MatchCookieName then
|
||||||
|
CookieNameFound = True$
|
||||||
|
end
|
||||||
|
Until CookieNameFound EQ True$
|
||||||
|
Next CookieValue
|
||||||
|
If CookieNameFound EQ True$ then
|
||||||
|
// Cookie name already exists. Replace the old value with the new one.
|
||||||
|
ResponseHeaderValues@<fPos, vPos> = Trim(Value)
|
||||||
|
end else
|
||||||
|
// This is a new cookie name. Append the Set-Cookie value to the list.
|
||||||
|
ResponseHeaderValues@<fPos, -1> = Trim(Value)
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
// No cookies have been set yet.
|
||||||
|
ResponseHeaderValues@<fPos> = Trim(Value)
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ResponseHeaderValues@<fPos> = PreviousValue : ' ;' : Trim(Value)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'The Name or Value argument is missing in the ' : Service : ' service.')
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// GetResponseHeaderFields
|
||||||
|
//
|
||||||
|
// Returns all of the Response Header Field names and values. This returns an @FM/@VM list of names and values.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service GetResponseHeaderFields()
|
||||||
|
|
||||||
|
HeaderFieldBlock = ''
|
||||||
|
|
||||||
|
If ResponseHeaderFields@ NE '' then
|
||||||
|
NumFields = Count(ResponseHeaderFields@, @FM) + (ResponseHeaderFields@ NE '')
|
||||||
|
For FieldCnt = 1 to NumFields
|
||||||
|
HeaderFieldBlock := ResponseHeaderFields@<FieldCnt> : @VM : ResponseHeaderValues@<FieldCnt> : @FM
|
||||||
|
Next FieldCnt
|
||||||
|
HeaderFieldBlock[-1, 1] = ''
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'There are no response header fields get.')
|
||||||
|
end
|
||||||
|
|
||||||
|
Response = HeaderFieldBlock
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// GetResponseHeaderField
|
||||||
|
//
|
||||||
|
// Name - Header Field Name to get. - [Required]
|
||||||
|
// Delimiter - Delimiter to use for multiple values. Default is '; ' for all header fields except for Set-Cookie.
|
||||||
|
// Set-Cookie defaults to @VM. - [Optional]
|
||||||
|
//
|
||||||
|
// Returns the value previously set for the indicated Response Header Field. The Name argument is case-insensitive but
|
||||||
|
// if the indicated Response Header Field has not been set then an error condition will be set.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service GetResponseHeaderField(Name=RESPONSEHEADERNAMES, Delimiter)
|
||||||
|
|
||||||
|
Value = ''
|
||||||
|
|
||||||
|
If Name NE '' then
|
||||||
|
SearchName = Name
|
||||||
|
Convert @Lower_Case to @Upper_Case in SearchName
|
||||||
|
SearchFields = ResponseHeaderFields@
|
||||||
|
Convert @Lower_Case to @Upper_Case in SearchFields
|
||||||
|
Locate SearchName in SearchFields using @FM setting fPos then
|
||||||
|
Value = ResponseHeaderValues@<fPos>
|
||||||
|
If Delimiter NE '' then
|
||||||
|
If Name EQ 'Set-Cookie' then
|
||||||
|
Convert @VM to Delimiter in Value
|
||||||
|
end else
|
||||||
|
Swap '; ' with Delimiter in Value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Error_Services('Add', Name : ' is not a header field in the response.')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'The Name argument is missing in the ' : Service : ' service.')
|
||||||
|
end
|
||||||
|
|
||||||
|
Response = Value
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// GetCookies
|
||||||
|
//
|
||||||
|
// Delimiter - Delimiter to use for multiple cookies. Default is @FM - [Optional]
|
||||||
|
//
|
||||||
|
// Returns all cookie strings from the response headers.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service GetCookies(Delimiter)
|
||||||
|
|
||||||
|
If Delimiter EQ '' then Delimiter = @FM
|
||||||
|
|
||||||
|
Cookies = HTTPClient_Services('GetResponseHeaderField', 'Set-Cookie', Delimiter)
|
||||||
|
|
||||||
|
Response = Cookies
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// GetCookie
|
||||||
|
//
|
||||||
|
// Name - Name of the cookie to get. - [Required]
|
||||||
|
// IgnoreAttributes - Boolean flag to indicate if the cookie's attributes should be removed when returning the cookie.
|
||||||
|
// Default value is False$. - [Optional]
|
||||||
|
//
|
||||||
|
// Returns the value for the indicated cookie name.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service GetCookie(Name, IgnoreAttributes=BOOLEAN)
|
||||||
|
|
||||||
|
If IgnoreAttributes NE True$ then IgnoreAttributes = False$
|
||||||
|
|
||||||
|
Cookie = ''
|
||||||
|
|
||||||
|
If Name NE '' then
|
||||||
|
CookieNameFound = False$
|
||||||
|
Cookies = HTTPClient_Services('GetCookies')
|
||||||
|
For Each CookieString in Cookies using @FM
|
||||||
|
MatchCookieName = CookieString[1, 'F='][1, 'F '][1, 'F;']
|
||||||
|
If Name EQ MatchCookieName then
|
||||||
|
CookieNameFound = True$
|
||||||
|
end
|
||||||
|
Until CookieNameFound EQ True$
|
||||||
|
Next CookieValue
|
||||||
|
If CookieNameFound EQ True$ then
|
||||||
|
If IgnoreAttributes EQ True$ then
|
||||||
|
CookieString = Trim(CookieString[1, ';'])
|
||||||
|
end
|
||||||
|
Transfer CookieString to Cookie
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'The Name argument is missing in the ' : Service : ' service.')
|
||||||
|
end
|
||||||
|
|
||||||
|
Response = Cookie
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// SetResponseStatusCode
|
||||||
|
//
|
||||||
|
// Code - HTTP status code to set. - [Required]
|
||||||
|
//
|
||||||
|
// Sets the response status code generated by the most recent HTTP request.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service SetResponseStatusCode(Code)
|
||||||
|
|
||||||
|
If Code NE '' then
|
||||||
|
ResponseStatusCode@ = Code
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'The Code argument is missing in the ' : Service : ' service.')
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// GetResponseStatusCode
|
||||||
|
//
|
||||||
|
// Gets the response status code generated by the most recent HTTP request.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service GetResponseStatusCode()
|
||||||
|
|
||||||
|
Response = ResponseStatusCode@
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// SetResponseStatusPhrase
|
||||||
|
//
|
||||||
|
// Phrase - HTTP status phrase to set. - [Required]
|
||||||
|
//
|
||||||
|
// Sets the response status phrase generated by the most recent HTTP request.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service SetResponseStatusPhrase(Phrase)
|
||||||
|
|
||||||
|
If Phrase NE '' then
|
||||||
|
ResponseStatusPhrase@ = Phrase
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'The Phrase argument is missing in the ' : Service : ' service.')
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// GetResponseStatusPhrase
|
||||||
|
//
|
||||||
|
// Gets the response status phrase generated by the most recent HTTP request.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service GetResponseStatusPhrase()
|
||||||
|
|
||||||
|
Response = ResponseStatusPhrase@
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// SetResponseBody
|
||||||
|
//
|
||||||
|
// Body - The response body which would have been generated by an XMLHTTP call.
|
||||||
|
//
|
||||||
|
// Sets the response body generated by the most recent HTTP request.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service SetResponseBody(Body)
|
||||||
|
|
||||||
|
ResponseBody@ = Body
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// GetResponseBody
|
||||||
|
//
|
||||||
|
// Gets the response body generated by the most recent HTTP request.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service GetResponseBody()
|
||||||
|
|
||||||
|
Response = ResponseBody@
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// SetTimeoutDuration
|
||||||
|
//
|
||||||
|
// TimeoutDuration - The length of time (in seconds) before an HTTP request will abort.
|
||||||
|
//
|
||||||
|
// Sets the timeout duration that will be used before an HTTP request will abort. This is only applicable if the
|
||||||
|
// request is asynchronous. If the timeout duration is empty, a default setting of 30 minutes (1800 seconds) will be
|
||||||
|
// set.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service SetTimeoutDuration(TimeoutDuration)
|
||||||
|
|
||||||
|
If TimeoutDuration EQ '' then TimeoutDuration = 1800
|
||||||
|
|
||||||
|
TimeoutDuration@ = TimeoutDuration
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// GetTimeoutDuration
|
||||||
|
//
|
||||||
|
// Returns the timeout duration that will be used before an HTTP request will abort. This is only applicable if the
|
||||||
|
// request is asynchronous. If the timeout duration is empty, a default setting of 30 minutes (1800) seconds) will be
|
||||||
|
// returned.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service GetTimeoutDuration()
|
||||||
|
|
||||||
|
If TimeoutDuration@ EQ '' then TimeoutDuration@ = 1800
|
||||||
|
|
||||||
|
Response = TimeoutDuration@
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// ClearResponseSettings
|
||||||
|
//
|
||||||
|
// Clears all of the global common variables used for responses.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service ClearResponseSettings()
|
||||||
|
|
||||||
|
ResponseHeaderFields@ = ''
|
||||||
|
ResponseHeaderValues@ = ''
|
||||||
|
ResponseStatusCode@ = ''
|
||||||
|
ResponseStatusPhrase@ = ''
|
||||||
|
ResponseBody@ = ''
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// ClearRequestSettings
|
||||||
|
//
|
||||||
|
// Clears all of the global common variables used for requests.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service ClearRequestSettings()
|
||||||
|
|
||||||
|
RequestHeaderFields@ = ''
|
||||||
|
RequestHeaderValues@ = ''
|
||||||
|
TimeoutDuration@ = 1800
|
||||||
|
|
||||||
|
end service
|
@ -43,6 +43,7 @@ Function Metrology_Services(@Service, @Params)
|
|||||||
09/18/18 djs Added code within the ImportTencorData service to post wafer image pdfs to a staging table
|
09/18/18 djs Added code within the ImportTencorData service to post wafer image pdfs to a staging table
|
||||||
where they will be stored locally on the App server.
|
where they will be stored locally on the App server.
|
||||||
09/11/19 fdr Add new service "ImportStratusData"
|
09/11/19 fdr Add new service "ImportStratusData"
|
||||||
|
12/05/24 djs Updated GetIQSViolations service to store reactor violations in the respective reactor record.
|
||||||
|
|
||||||
***********************************************************************************************************************/
|
***********************************************************************************************************************/
|
||||||
|
|
||||||
@ -67,6 +68,7 @@ $insert WO_MAT_EQUATES
|
|||||||
$Insert NOTIFICATION_EQUATES
|
$Insert NOTIFICATION_EQUATES
|
||||||
$Insert RLIST_EQUATES
|
$Insert RLIST_EQUATES
|
||||||
$Insert WM_OUT_EQUATES
|
$Insert WM_OUT_EQUATES
|
||||||
|
$Insert IQS_VIOL_DATA_EQUATES
|
||||||
|
|
||||||
Common /MetrologyServices/ MachineType@, RDSNo@
|
Common /MetrologyServices/ MachineType@, RDSNo@
|
||||||
|
|
||||||
@ -91,7 +93,7 @@ Equ Comma$ to ','
|
|||||||
Declare subroutine SRP_Stopwatch, Error_Services, obj_Tables, Metrology_Services, obj_RDS_Test, SRP_JSON
|
Declare subroutine SRP_Stopwatch, Error_Services, obj_Tables, Metrology_Services, obj_RDS_Test, SRP_JSON
|
||||||
Declare subroutine RTI_Set_Debugger, Database_Services, Btree.Extract, Set_Status, QA_Services, obj_Notes
|
Declare subroutine RTI_Set_Debugger, Database_Services, Btree.Extract, Set_Status, QA_Services, obj_Notes
|
||||||
Declare subroutine Logging_Services, SRP_Send_Mail, SRP_Run_Command, PM_Services, Httpclient_Services
|
Declare subroutine Logging_Services, SRP_Send_Mail, SRP_Run_Command, PM_Services, Httpclient_Services
|
||||||
Declare subroutine Tool_Services, Mona_Services
|
Declare subroutine Tool_Services, Mona_Services, Reactor_Services
|
||||||
Declare function SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_Services, UCase
|
Declare function SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_Services, UCase
|
||||||
Declare function Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Min, Max
|
Declare function Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Min, Max
|
||||||
Declare function QA_Services, SRP_Join_Arrays, Get_Status, Obj_Clean_Insp, Datetime, SRP_Datetime
|
Declare function QA_Services, SRP_Join_Arrays, Get_Status, Obj_Clean_Insp, Datetime, SRP_Datetime
|
||||||
@ -2039,6 +2041,7 @@ end service
|
|||||||
|
|
||||||
|
|
||||||
Service GetCalculatedLayer(RDSKeyID, Machine, RunDataZone, WoIsEpiPro, ScannedLayer)
|
Service GetCalculatedLayer(RDSKeyID, Machine, RunDataZone, WoIsEpiPro, ScannedLayer)
|
||||||
|
|
||||||
CalculatedLayer = ''
|
CalculatedLayer = ''
|
||||||
|
|
||||||
If (RDSKeyID NE '') AND (Machine NE '') then
|
If (RDSKeyID NE '') AND (Machine NE '') then
|
||||||
@ -2223,7 +2226,9 @@ Service RemoveOldMetrology()
|
|||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service ImportBioRadEPPFQAData(RunData, FileName)
|
Service ImportBioRadEPPFQAData(RunData, FileName)
|
||||||
|
|
||||||
Timestamp = RunData<2>
|
Timestamp = RunData<2>
|
||||||
WMOKeyID = RunData<6>
|
WMOKeyID = RunData<6>
|
||||||
Swap '.' with '*' in WMOKeyID
|
Swap '.' with '*' in WMOKeyID
|
||||||
@ -2303,8 +2308,10 @@ Service ImportBioRadEPPFQAData(RunData, FileName)
|
|||||||
end else
|
end else
|
||||||
Metrology_Services('LogResults', RDSNo@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
Metrology_Services('LogResults', RDSNo@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
// CleanRepository
|
// CleanRepository
|
||||||
//
|
//
|
||||||
@ -2350,60 +2357,22 @@ Service MonitorQueue(NumFiles)
|
|||||||
CurrLockStatus = Database_Services('ReadDataRow', 'APP_INFO', 'ROTR_DATA_ENTRY_LOCK')
|
CurrLockStatus = Database_Services('ReadDataRow', 'APP_INFO', 'ROTR_DATA_ENTRY_LOCK')
|
||||||
If CurrLockStatus EQ False$ then
|
If CurrLockStatus EQ False$ then
|
||||||
Database_Services('WriteDataRow', 'APP_INFO', 'ROTR_DATA_ENTRY_LOCK', True$)
|
Database_Services('WriteDataRow', 'APP_INFO', 'ROTR_DATA_ENTRY_LOCK', True$)
|
||||||
// Add message to OI Admins' Inbox
|
|
||||||
* OIAdmins = Xlate('SEC_GROUPS', 'OI_ADMIN', 'USER', 'X')
|
|
||||||
* Recipients = OIAdmins
|
|
||||||
* SentFrom = 'ADMIN_OI'
|
|
||||||
* Subject = 'ROTR Manual Entry Restriction Re-enabled'
|
|
||||||
* Message = 'Metrology run data queue currently has ':CurrFileCount:' files. ' |
|
|
||||||
* : 'ROTR manual entry lock has been re-enabled.'
|
|
||||||
* AttachWindow = ''
|
|
||||||
* AttachKey = ''
|
|
||||||
* SendToGroup = ''
|
|
||||||
* Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
|
|
||||||
* Set_Status(0)
|
|
||||||
* obj_Notes('Create',Parms)
|
|
||||||
*
|
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
// Lift manual entry restriction - check current status to avoid unnecessary writes.
|
// Lift manual entry restriction - check current status to avoid unnecessary writes.
|
||||||
CurrLockStatus = Database_Services('ReadDataRow', 'APP_INFO', 'ROTR_DATA_ENTRY_LOCK')
|
CurrLockStatus = Database_Services('ReadDataRow', 'APP_INFO', 'ROTR_DATA_ENTRY_LOCK')
|
||||||
If CurrLockStatus EQ True$ then
|
If CurrLockStatus EQ True$ then
|
||||||
Database_Services('WriteDataRow', 'APP_INFO', 'ROTR_DATA_ENTRY_LOCK', False$)
|
Database_Services('WriteDataRow', 'APP_INFO', 'ROTR_DATA_ENTRY_LOCK', False$)
|
||||||
// Add message to OI Admins' Inbox
|
|
||||||
* OIAdmins = Xlate('SEC_GROUPS', 'OI_ADMIN', 'USER', 'X')
|
|
||||||
* Recipients = OIAdmins
|
|
||||||
* SentFrom = 'ADMIN_OI'
|
|
||||||
* Subject = 'ROTR Manual Entry Restriction Disabled'
|
|
||||||
* Message = 'Metrology run data queue currently has ':CurrFileCount:' files. ' |
|
|
||||||
* : 'ROTR manual entry lock has been temporarily disabled.'
|
|
||||||
* AttachWindow = ''
|
|
||||||
* AttachKey = ''
|
|
||||||
* SendToGroup = ''
|
|
||||||
* Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
|
|
||||||
* Set_Status(0)
|
|
||||||
* obj_Notes('Create',Parms)
|
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service GetIQSViolations()
|
Service GetIQSViolations()
|
||||||
|
|
||||||
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
||||||
Lock hSysLists, ServiceKeyID then
|
Lock hSysLists, ServiceKeyID then
|
||||||
Equ ViolReactorCol$ To 1
|
|
||||||
Equ ViolTestCol$ To 2
|
|
||||||
Equ ViolUSLCol$ To 3
|
|
||||||
Equ ViolTARCol$ To 4
|
|
||||||
Equ ViolLSLCol$ To 5
|
|
||||||
Equ ViolLastEntryCol$ To 6
|
|
||||||
Equ ViolLastAlarmCol$ To 7
|
|
||||||
Equ ViolAlarmCol$ To 8
|
|
||||||
Equ ViolSubGroupCol$ To 9
|
|
||||||
Equ ViolMeanCol$ To 10
|
|
||||||
Equ LastWriteTimeCol$ To 11
|
|
||||||
|
|
||||||
Response = 0
|
Response = 0
|
||||||
ParsedIQSData = ''
|
ParsedIQSData = ''
|
||||||
Pass = 1
|
Pass = 1
|
||||||
@ -2445,21 +2414,21 @@ Service GetIQSViolations()
|
|||||||
//Delete useuless Entire Database column
|
//Delete useuless Entire Database column
|
||||||
FilteredData = Delete(FilteredData, i,1,0)
|
FilteredData = Delete(FilteredData, i,1,0)
|
||||||
|
|
||||||
ParsedIQSData<ViolReactorCol$, i> = FilteredData<i, ViolReactorCol$>
|
ParsedIQSData<IQS_VIOL_DATA.REACTOR$, i> = FilteredData<i, IQS_VIOL_DATA.REACTOR$>
|
||||||
ParsedIQSData<ViolTestCol$, i> = FilteredData<i, ViolTestCol$>
|
ParsedIQSData<IQS_VIOL_DATA.TEST$, i> = FilteredData<i, IQS_VIOL_DATA.TEST$>
|
||||||
ParsedIQSData<ViolUSLCol$, i> = FilteredData<i, ViolUSLCol$>
|
ParsedIQSData<IQS_VIOL_DATA.USL$, i> = FilteredData<i, IQS_VIOL_DATA.USL$>
|
||||||
ParsedIQSData<ViolTARCol$, i> = FilteredData<i, ViolTARCol$>
|
ParsedIQSData<IQS_VIOL_DATA.TAR$, i> = FilteredData<i, IQS_VIOL_DATA.TAR$>
|
||||||
ParsedIQSData<ViolLSLCol$, i> = FilteredData<i, ViolLSLCol$>
|
ParsedIQSData<IQS_VIOL_DATA.LSL$, i> = FilteredData<i, IQS_VIOL_DATA.LSL$>
|
||||||
ParsedIQSData<ViolLastEntryCol$, i> = FilteredData<i, ViolLastEntryCol$>
|
ParsedIQSData<IQS_VIOL_DATA.LAST_ENTRY$, i> = FilteredData<i, IQS_VIOL_DATA.LAST_ENTRY$>
|
||||||
ParsedIQSData<ViolLastAlarmCol$, i> = FilteredData<i, ViolLastAlarmCol$>
|
ParsedIQSData<IQS_VIOL_DATA.LAST_ALARM$, i> = FilteredData<i, IQS_VIOL_DATA.LAST_ALARM$>
|
||||||
swap '>' with '>' in FilteredData
|
swap '>' with '>' in FilteredData
|
||||||
swap '<' with '<' in FilteredData
|
swap '<' with '<' in FilteredData
|
||||||
ParsedIQSData<ViolAlarmCol$, i> = FilteredData<i, ViolAlarmCol$>
|
ParsedIQSData<IQS_VIOL_DATA.ALARM$, i> = FilteredData<i, IQS_VIOL_DATA.ALARM$>
|
||||||
ParsedIQSData<ViolSubGroupCol$, i> = FilteredData<i, ViolSubGroupCol$>
|
ParsedIQSData<IQS_VIOL_DATA.SUBGROUPS$, i> = FilteredData<i, IQS_VIOL_DATA.SUBGROUPS$>
|
||||||
ParsedIQSData<ViolMeanCol$, i> = FilteredData<i, ViolMeanCol$>
|
ParsedIQSData<IQS_VIOL_DATA.MEAN$, i> = FilteredData<i, IQS_VIOL_DATA.MEAN$>
|
||||||
Next i
|
Next i
|
||||||
LastWriteTime = IConv(PublishDate, 'DT')
|
LastWriteTime = IConv(PublishDate, 'DT')
|
||||||
ParsedIQSData<LastWriteTimeCol$> = LastWriteTime
|
ParsedIQSData<IQS_VIOL_DATA.LAST_WRITE_TIME$> = LastWriteTime
|
||||||
|
|
||||||
Database_Services('WriteDataRow', 'CONFIG', 'IQS_VIOL_DATA', ParsedIQSData, True$, False$, True$)
|
Database_Services('WriteDataRow', 'CONFIG', 'IQS_VIOL_DATA', ParsedIQSData, True$, False$, True$)
|
||||||
//Send status of last write time
|
//Send status of last write time
|
||||||
@ -2469,8 +2438,11 @@ Service GetIQSViolations()
|
|||||||
Mona_Services('SendBufferedStatus', 'IQS_VIOLATION_DATA', 'LastDataTimestamp', 'OK')
|
Mona_Services('SendBufferedStatus', 'IQS_VIOLATION_DATA', 'LastDataTimestamp', 'OK')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Reactor_Services('UpdateReactorIQSViolations')
|
||||||
|
|
||||||
Unlock hSysLists, ServiceKeyID else Null
|
Unlock hSysLists, ServiceKeyID else Null
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
Service ScanRecipeMatchesRdsTestSpecThickMrecipe(RdsNo, RecipeLayer, RecipeInScan, RdsTestKeysFromRdsLayer, Zone='')
|
Service ScanRecipeMatchesRdsTestSpecThickMrecipe(RdsNo, RecipeLayer, RecipeInScan, RdsTestKeysFromRdsLayer, Zone='')
|
||||||
@ -2555,6 +2527,7 @@ Service ScanNumDataPointsMatchesRdsTestSpecThickMPattern(RdsNo, RecipeLayer, Sca
|
|||||||
Response = MatchFound
|
Response = MatchFound
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Internal GoSubs
|
// Internal GoSubs
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -3015,5 +2988,3 @@ LoadRunDataToDatabase:
|
|||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
565
LSL2/STPROC/NICA_ORDERS_SERVICES.txt
Normal file
565
LSL2/STPROC/NICA_ORDERS_SERVICES.txt
Normal file
@ -0,0 +1,565 @@
|
|||||||
|
Compile function Nica_Orders_Services(@Service, @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 Technologies.
|
||||||
|
|
||||||
|
Name : Nica_Orders_Services
|
||||||
|
|
||||||
|
Description : Handler program for all module related services.
|
||||||
|
|
||||||
|
Notes : The generic parameters should contain all the necessary information to process the services. Often
|
||||||
|
this will be information like the data Record and Key ID.
|
||||||
|
|
||||||
|
Parameters :
|
||||||
|
Service [in] -- Name of the service being requested
|
||||||
|
Param1-10 [in/out] -- Additional request parameter holders
|
||||||
|
Response [out] -- Response to be sent back to the Controller (MCP) or requesting procedure
|
||||||
|
|
||||||
|
History : (Date, Initials, Notes)
|
||||||
|
12/05/24 djs Original programmer.
|
||||||
|
|
||||||
|
***********************************************************************************************************************/
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
$Insert APP_INSERTS
|
||||||
|
$Insert SERVICE_SETUP
|
||||||
|
$Insert REACTOR_EQUATES
|
||||||
|
$Insert REACTOR_LOG_EQUATES
|
||||||
|
$Insert NICA_ORDERS_EQUATES
|
||||||
|
|
||||||
|
Declare function Environment_Services, Database_Services, Error_Services, Logging_Services, Nica_Orders_Services
|
||||||
|
Declare function Httpclient_Services, SRP_JSON
|
||||||
|
Declare subroutine Error_Services, Btree.Extract, Database_Services, Logging_Services, Nica_Orders_Services, Delay
|
||||||
|
Declare subroutine Httpclient_Services, SRP_JSON, Mona_Services, Service_Services
|
||||||
|
|
||||||
|
Machine = Environment_Services('GetServer')
|
||||||
|
LogDate = Oconv(Date(), 'D4/')
|
||||||
|
LogTime = Oconv(Time(), 'MTS')
|
||||||
|
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
|
||||||
|
|
||||||
|
GoToService
|
||||||
|
|
||||||
|
Return Response or ""
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Service Parameter Options
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Options BOOLEAN = True$, False$
|
||||||
|
Options ENTITY_TYPES = 'REACTOR','REACTOR_LOG'
|
||||||
|
Options ORDER_TYPES = 'INTRUSIVE_MAINT','CHANGEOVER','INITIATE_IDLE','IDLE','ASM_HTR_TUBE_CHANGE','ASM_HTR_ANNUAL_PM','ASM_HTR_SEMIANNUAL_PM','ASM_HTR_FIVE_AND_TEN_YEAR_PM','IQS_HGCV_ALARM'
|
||||||
|
Options ORDER_STATUSES = 'new','creating','not-started','in-progress','cancelled','done'
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// SERVICES
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Service GetOrderIds(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES, OrderStatus=ORDER_STATUSES, IsComplete=BOOLEAN)
|
||||||
|
|
||||||
|
OrderKeys = ''
|
||||||
|
ErrorMsg = ''
|
||||||
|
If ( (EntityType NE '') or (EntityID NE '') or (OrderType NE '') or (OrderStatus NE '') or (IsComplete NE '') ) then
|
||||||
|
Open 'DICT.NICA_ORDERS' to hDict then
|
||||||
|
Query = ''
|
||||||
|
Table = 'NICA_ORDERS'
|
||||||
|
Option = 'E'
|
||||||
|
Flag = ''
|
||||||
|
If EntityType NE '' then Query := 'ENTITY_TYPE' : @VM : EntityType : @FM
|
||||||
|
If EntityID NE '' then Query := 'ENTITY_ID' : @VM : EntityID : @FM
|
||||||
|
If OrderType NE '' then Query := 'ORDER_TYPE' : @VM : OrderType : @FM
|
||||||
|
If OrderStatus NE '' then Query := 'ORDER_STATUS' : @VM : OrderStatus : @FM
|
||||||
|
If IsComplete NE '' then Query := 'IS_COMPLETE' : @VM : IsComplete : @FM
|
||||||
|
Btree.Extract(Query, Table, hDict, OrderKeys, Option, Flag)
|
||||||
|
If Flag NE 0 then
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Btree.Extract call failed.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Failed to open DICT.NICA_ORDERS.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. At least one search parameter must be provided.'
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg EQ '' then
|
||||||
|
Response = OrderKeys
|
||||||
|
end else
|
||||||
|
Error_Services('Add', ErrorMsg)
|
||||||
|
end
|
||||||
|
|
||||||
|
End Service
|
||||||
|
|
||||||
|
|
||||||
|
Service GetOrderUpdates()
|
||||||
|
|
||||||
|
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
||||||
|
Lock hSysLists, ServiceKeyID then
|
||||||
|
ActiveOrderIds = Nica_Orders_Services('GetActiveOrders')
|
||||||
|
For each OrderId in ActiveOrderIds using @VM
|
||||||
|
Nica_Orders_Services('GetOrderStatusUpdate', OrderId)
|
||||||
|
Next OrderId
|
||||||
|
Unlock hSysLists, ServiceKeyID else Null
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
Service GetActiveOrders(EntityType=ENTITY_TYPES, EntityId, OrderType=ORDER_TYPES)
|
||||||
|
|
||||||
|
Response = Nica_Orders_Services('GetOrderIds', EntityType, EntityID, OrderType, '#cancelled', False$)
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES)
|
||||||
|
|
||||||
|
ErrorMsg = ''
|
||||||
|
EntityTypes = 'REACTOR,REACTOR_LOG'
|
||||||
|
OrderTypes = 'INTRUSIVE_MAINT,CHANGEOVER,INITIATE_IDLE,IDLE,ASM_HTR_TUBE_CHANGE,ASM_HTR_ANNUAL_PM,'
|
||||||
|
OrderTypes := 'ASM_HTR_SEMIANNUAL_PM,ASM_HTR_FIVE_AND_TEN_YEAR_PM,IQS_HGCV_ALARM'
|
||||||
|
|
||||||
|
Machine = Environment_Services('GetServer')
|
||||||
|
Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log'
|
||||||
|
ColumnWidths = 20 : @FM : 15 : @FM : 300
|
||||||
|
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\NicaOrders'
|
||||||
|
makeDirSuccess = Utility("MAKEDIR", LogPath)
|
||||||
|
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : LogTime : '_CreateNicaOrder.csv'
|
||||||
|
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, ColumnWidths, False$, False$)
|
||||||
|
|
||||||
|
Prod = Environment_Services('IsProd')
|
||||||
|
IgnoreCertErrors = Not(Prod)
|
||||||
|
|
||||||
|
If ( (EntityType NE '') and (EntityID NE '') and (OrderType NE '') ) then
|
||||||
|
|
||||||
|
Begin Case
|
||||||
|
Case Not(InList(EntityTypes, EntityType, ','))
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Unsupported entity type'
|
||||||
|
Case Not(InList(OrderTypes, OrderType, ','))
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Unsupported order type'
|
||||||
|
End Case
|
||||||
|
|
||||||
|
If ErrorMsg EQ '' then
|
||||||
|
|
||||||
|
LogData = ''
|
||||||
|
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||||
|
LogData<2> = Machine
|
||||||
|
LogData<3> = 'Attempting to create NICA order for entity ':EntityType:' ' :EntityID:' of type ':OrderType
|
||||||
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||||
|
|
||||||
|
CurrActiveOrders = Nica_Orders_Services('GetActiveOrders', EntityType, EntityID, OrderType)
|
||||||
|
OrderTypeAlreadyActive = (CurrActiveOrders NE '')
|
||||||
|
|
||||||
|
If OrderTypeAlreadyActive EQ False$ then
|
||||||
|
|
||||||
|
Begin Case
|
||||||
|
Case EntityType EQ 'REACTOR'
|
||||||
|
ReactNo = EntityID
|
||||||
|
|
||||||
|
Case EntityType EQ 'REACTOR_LOG'
|
||||||
|
ReactNo = Xlate(EntityType, EntityID, REACTOR_LOG_REACTOR$, 'X')
|
||||||
|
End Case
|
||||||
|
|
||||||
|
// Call the API
|
||||||
|
NicaURL = Environment_Services("GetProveInApiUrl"):'/checklists?'
|
||||||
|
NicaURL := 'checklistType=':OrderType
|
||||||
|
NicaURL := '&reactorNumber=':ReactNo
|
||||||
|
|
||||||
|
Retries = 3
|
||||||
|
BackoffSeconds = 1
|
||||||
|
IsSuccessful = False$
|
||||||
|
|
||||||
|
OrderId = ''
|
||||||
|
|
||||||
|
Loop
|
||||||
|
while (IsSuccessful EQ False$ and Retries GT 0)
|
||||||
|
WaitSeconds = (3 - retries) * BackoffSeconds
|
||||||
|
Delay(WaitSeconds)
|
||||||
|
|
||||||
|
Retries = Retries - 1
|
||||||
|
|
||||||
|
HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'POST', NicaURL, 'Accept':@VM:'*/*', '', '', '', False$, False$, '', IgnoreCertErrors)
|
||||||
|
If HttpResponseJson NE '' then
|
||||||
|
ObjResponseJson = ''
|
||||||
|
If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then
|
||||||
|
OrderId = SRP_JSON(ObjResponseJson, 'GetValue', 'id')
|
||||||
|
If OrderId NE '' then
|
||||||
|
Convert @Lower.Case to @Upper.Case in OrderId
|
||||||
|
NicaOrderRec = ''
|
||||||
|
NicaOrderRec<NICA_ORDERS.ORDER_TYPE$> = OrderType
|
||||||
|
NicaOrderRec<NICA_ORDERS.ORDER_STATUS$> = SRP_JSON(ObjResponseJson, 'GetValue', 'state')
|
||||||
|
NicaOrderRec<NICA_ORDERS.ENTITY_TYPE$> = EntityType
|
||||||
|
NicaOrderRec<NICA_ORDERS.ENTITY_ID$> = EntityID
|
||||||
|
NicaOrderRec<NICA_ORDERS.IS_COMPLETE$> = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete')
|
||||||
|
Database_Services('WriteDataRow', 'NICA_ORDERS', OrderId, NicaOrderRec, True$, False$, False$)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
If ( (OrderType _EQC 'INITIATE_IDLE') and (EntityType _EQC 'REACTOR') ) then
|
||||||
|
Open 'REACTOR' to hReactor then
|
||||||
|
WriteV True$ to hReactor, ReactNo, REACTOR_IDLE_STARTUP_REQUIRED$ else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Error setting IDLE_STARTUP_REQUIRED flag in REACTOR record.'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
If ErrorMsg EQ '' then
|
||||||
|
IsSuccessful = True$
|
||||||
|
Response = OrderId
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Null OrderId returned from MesaProveInAPI.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Error parsing JSON response from MesaProveInAPI.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Null JSON response returned from MesaProveInAPI.'
|
||||||
|
end
|
||||||
|
SRP_JSON(ObjResponseJson, 'Release')
|
||||||
|
Repeat
|
||||||
|
|
||||||
|
If Environment_Services('IsProd') then
|
||||||
|
MonAResource = 'GRP_OPENINSIGHT_MES_OP_FE_MESAPROVEINAPI'
|
||||||
|
end else
|
||||||
|
MonAResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_MESAPROVEINAPI_DEV'
|
||||||
|
end
|
||||||
|
StatusName = 'CreateNicaOrder'
|
||||||
|
If IsSuccessful then
|
||||||
|
LogData = ''
|
||||||
|
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||||
|
LogData<2> = Machine
|
||||||
|
LogData<3> = 'Successfully created Nica order for entity ':EntityType:' ':EntityID:' of type ':OrderType
|
||||||
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||||
|
Mona_Services('SendBufferedStatus', MonAResource, StatusName, 'Ok')
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error encountered when attempting to create Nica in order for reactor ':ReactNo:' of type ':OrderType
|
||||||
|
Mona_Services('SendBufferedStatus', MonAResource, StatusName, 'Critical')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error encountered when attempting to create Nica order for entity ':EntityType:' ' :EntityID:' of type ':OrderType:'. Active order already exists.'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Null EntityType, EntityID, or OrderType passed in.'
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg NE '' then
|
||||||
|
LogData = ''
|
||||||
|
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||||
|
LogData<2> = Machine
|
||||||
|
LogData<3> = ErrorMsg
|
||||||
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||||
|
Error_Services('Add', ErrorMsg)
|
||||||
|
Response = 'error'
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
Service CancelOrder(OrderId)
|
||||||
|
|
||||||
|
ErrorMsg = ''
|
||||||
|
Machine = Environment_Services('GetServer')
|
||||||
|
Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log'
|
||||||
|
ColumnWidths = 20 : @FM : 15 : @FM : 300
|
||||||
|
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\NicaOrders'
|
||||||
|
makeDirSuccess = Utility("MAKEDIR", LogPath)
|
||||||
|
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : '_CancelNicaOrder.csv'
|
||||||
|
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, ColumnWidths, False$, False$)
|
||||||
|
|
||||||
|
LogData = ''
|
||||||
|
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||||
|
LogData<2> = Machine
|
||||||
|
LogData<3> = 'Attempting to cancel Nica order ' : OrderId :'.'
|
||||||
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||||
|
|
||||||
|
Prod = Environment_Services('IsProd')
|
||||||
|
IgnoreCertErrors = Not(Prod)
|
||||||
|
|
||||||
|
If OrderId NE '' then
|
||||||
|
LockRetries = 3
|
||||||
|
LockBackoffSeconds = 1
|
||||||
|
HaveLock = False$
|
||||||
|
Loop
|
||||||
|
While (HaveLock EQ False$ and LockRetries GT 0)
|
||||||
|
WaitSeconds = (3 - LockRetries) * LockBackoffSeconds
|
||||||
|
Delay(WaitSeconds)
|
||||||
|
LockRetries = LockRetries - 1
|
||||||
|
HaveLock = Database_Services('GetKeyIDLock', 'NICA_ORDERS', OrderId, True$)
|
||||||
|
Repeat
|
||||||
|
|
||||||
|
If HaveLock then
|
||||||
|
NicaOrderRec = Database_Services('ReadDataRow', 'NICA_ORDERS', OrderId)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
EntityType = NicaOrderRec<NICA_ORDERS.ENTITY_TYPE$>
|
||||||
|
EntityId = NicaOrderRec<NICA_ORDERS.ENTITY_ID$>
|
||||||
|
Begin Case
|
||||||
|
Case EntityType EQ 'REACTOR'
|
||||||
|
ReactNo = EntityId
|
||||||
|
|
||||||
|
Case EntityType EQ 'REACTOR_LOG'
|
||||||
|
ReactNo = Xlate(EntityType, EntityId, REACTOR_LOG_REACTOR$, 'X')
|
||||||
|
|
||||||
|
Case Otherwise$
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Unsupported entity type.'
|
||||||
|
End Case
|
||||||
|
|
||||||
|
If ErrorMsg EQ '' then
|
||||||
|
|
||||||
|
LogData = ''
|
||||||
|
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||||
|
LogData<2> = Machine
|
||||||
|
LogData<3> = 'Sending cancel request for Nica order ' : OrderId : ' for reactor ' : ReactNo
|
||||||
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||||
|
|
||||||
|
Response = False$
|
||||||
|
BaseProveInUrl = Environment_Services("GetProveInApiUrl"):'/checklists?'
|
||||||
|
UrlOrderId = OrderId
|
||||||
|
Convert @Upper.Case to @Lower.Case in UrlOrderId
|
||||||
|
ProveInUrl = BaseProveInUrl:'checklistOrderId=':UrlOrderId
|
||||||
|
ProveInUrl = ProveInUrl:'&checklistState=cancelled'
|
||||||
|
|
||||||
|
Retries = 3
|
||||||
|
BackoffSeconds = 1
|
||||||
|
IsSuccessful = False$
|
||||||
|
|
||||||
|
Loop
|
||||||
|
while (IsSuccessful EQ False$ and Retries GT 0)
|
||||||
|
WaitSeconds = (3 - Retries) * BackoffSeconds
|
||||||
|
Delay(WaitSeconds)
|
||||||
|
Retries = Retries - 1
|
||||||
|
HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'PUT', ProveInUrl, 'Accept':@VM:'*/*', '', '', '', False$, False$, '', IgnoreCertErrors)
|
||||||
|
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')
|
||||||
|
Database_Services('WriteDataRow', 'NICA_ORDERS', OrderId, NicaOrderRec, True$, False$, False$)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
OrderType = NicaOrderRec<NICA_ORDERS.ORDER_TYPE$>
|
||||||
|
If ( (OrderType _EQC 'IDLE') and (EntityType EQ 'REACTOR') ) then
|
||||||
|
Open 'REACTOR' to hReactor then
|
||||||
|
WriteV False$ on hReactor, ReactNo, REACTOR_IDLE_STARTUP_REQUIRED$ else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Error setting IDLE_STARTUP_REQUIRED flag in REACTOR record.'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
If ( (Response EQ True$) or (Response EQ False$) ) then IsSuccessful = True$
|
||||||
|
end else
|
||||||
|
ErrorMsg = Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
If IsComplete EQ True$ then
|
||||||
|
Response = True$
|
||||||
|
end else
|
||||||
|
Response = False$
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
SRP_JSON(ObjResponseJson, 'Release')
|
||||||
|
Repeat
|
||||||
|
|
||||||
|
If Environment_Services('IsProd') then
|
||||||
|
MonAResource = 'GRP_OPENINSIGHT_MES_OP_FE_MESAPROVEINAPI'
|
||||||
|
end else
|
||||||
|
MonAResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_MESAPROVEINAPI_DEV'
|
||||||
|
end
|
||||||
|
StatusName = 'CancelNicaOrder'
|
||||||
|
If ( (IsSuccessful EQ True$) and (Response NE 'error') and (ErrorMsg EQ '') ) then
|
||||||
|
LogData = ''
|
||||||
|
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||||
|
LogData<2> = Machine
|
||||||
|
LogData<3> = 'Successfully cancelled Nica order ' : OrderId : ' for reactor ' : ReactNo
|
||||||
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||||
|
Mona_Services('SendBufferedStatus', MonAResource, StatusName, 'Ok')
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error encountered cancelling Nica order ' : OrderId : ' for reactor ' : ReactNo
|
||||||
|
Mona_Services('SendBufferedStatus', MonAResource, StatusName, 'Critical')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = Error_Services('GetMessage')
|
||||||
|
Database_Services('ReleaseKeyIDLock', 'NICA_ORDERS', OrderId)
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Failed to lock NICA_ORDERS ':OrderId:' for cancellation.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Null OrderID passed in.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg NE '' then
|
||||||
|
LogData = ''
|
||||||
|
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||||
|
LogData<2> = Machine
|
||||||
|
LogData<3> = ErrorMsg
|
||||||
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||||
|
Error_Services('Add', ErrorMsg)
|
||||||
|
Response = 'error'
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
Service GetOrderStatus(OrderId)
|
||||||
|
|
||||||
|
If OrderId NE '' then
|
||||||
|
If RowExists('NICA_ORDERS', OrderId) then
|
||||||
|
Response = Xlate('NICA_ORDERS', OrderId, 'ORDER_STATUS', 'X')
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'Error in ':Service:' service. Nica order ':OrderId:' does not exist.')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'Error in ':Service:' service. Null OrderId passed in.')
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
Service GetOrderStatusUpdate(OrderId)
|
||||||
|
|
||||||
|
ErrorMsg = ''
|
||||||
|
Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log'
|
||||||
|
ColumnWidths = 20 : @FM : 15 : @FM : 300
|
||||||
|
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\NicaOrders'
|
||||||
|
makeDirSuccess = Utility("MAKEDIR", LogPath)
|
||||||
|
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : '_GetOrderStatusUpdate.csv'
|
||||||
|
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, ColumnWidths, False$, False$)
|
||||||
|
|
||||||
|
LogData = ''
|
||||||
|
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||||
|
LogData<2> = Machine
|
||||||
|
LogData<3> = 'Attempting to update Nica order ' : OrderId :'.'
|
||||||
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||||
|
|
||||||
|
Prod = Environment_Services('IsProd')
|
||||||
|
IgnoreCertErrors = Not(Prod)
|
||||||
|
|
||||||
|
If OrderId NE '' then
|
||||||
|
HaveLock = Database_Services('GetKeyIDLock', 'NICA_ORDERS', OrderId, True$)
|
||||||
|
If HaveLock then
|
||||||
|
NicaOrderRec = Database_Services('ReadDataRow', 'NICA_ORDERS', OrderId)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
EntityType = NicaOrderRec<NICA_ORDERS.ENTITY_TYPE$>
|
||||||
|
EntityId = NicaOrderRec<NICA_ORDERS.ENTITY_ID$>
|
||||||
|
Begin Case
|
||||||
|
Case EntityType EQ 'REACTOR'
|
||||||
|
ReactNo = EntityId
|
||||||
|
|
||||||
|
Case EntityType EQ 'REACTOR_LOG'
|
||||||
|
ReactNo = Xlate(EntityType, EntityId, REACTOR_LOG_REACTOR$, 'X')
|
||||||
|
|
||||||
|
Case Otherwise$
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Unsupported entity type.'
|
||||||
|
End Case
|
||||||
|
|
||||||
|
If ErrorMsg EQ '' then
|
||||||
|
|
||||||
|
LogData = ''
|
||||||
|
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||||
|
LogData<2> = Machine
|
||||||
|
LogData<3> = 'Attempting to fetch Nica order ':OrderId:' for reactor ':ReactNo
|
||||||
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||||
|
|
||||||
|
Response = True$
|
||||||
|
IsSuccessful = True$
|
||||||
|
BaseProveInUrl = Environment_Services("GetProveInApiUrl"):'/checklists?'
|
||||||
|
UrlOrderId = OrderId
|
||||||
|
Convert @Upper.Case to @Lower.Case in UrlOrderId
|
||||||
|
ProveInUrl = BaseProveInUrl:'checklistOrderId=':UrlOrderId
|
||||||
|
|
||||||
|
Retries = 3
|
||||||
|
BackoffSeconds = 1
|
||||||
|
IsSuccessful = False$
|
||||||
|
|
||||||
|
Loop
|
||||||
|
while (IsSuccessful EQ False$ and Retries GT 0)
|
||||||
|
WaitSeconds = (3 - Retries) * BackoffSeconds
|
||||||
|
|
||||||
|
Delay(WaitSeconds)
|
||||||
|
|
||||||
|
Retries = Retries - 1
|
||||||
|
|
||||||
|
HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'GET', ProveInUrl, 'Accept':@VM:'*/*', '', '', '', False$, False$, '', IgnoreCertErrors)
|
||||||
|
|
||||||
|
If HttpResponseJson NE '' then
|
||||||
|
ObjResponseJson = ''
|
||||||
|
If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then
|
||||||
|
IsComplete = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete')
|
||||||
|
NicaOrderRec<NICA_ORDERS.ORDER_TYPE$> = SRP_JSON(ObjResponseJson, 'GetValue', 'type')
|
||||||
|
NicaOrderRec<NICA_ORDERS.ORDER_STATUS$> = SRP_JSON(ObjResponseJson, 'GetValue', 'state')
|
||||||
|
NicaOrderRec<NICA_ORDERS.IS_COMPLETE$> = IsComplete
|
||||||
|
Database_Services('WriteDataRow', 'NICA_ORDERS', OrderId, NicaOrderRec, True$, False$, False$)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
If IsComplete EQ True$ then
|
||||||
|
OrderType = NicaOrderRec<NICA_ORDERS.ORDER_TYPE$>
|
||||||
|
If ( (OrderType _EQC 'IDLE') and (EntityType _EQC 'REACTOR') ) then
|
||||||
|
Open 'REACTOR' to hReactor then
|
||||||
|
WriteV False$ on hReactor, ReactNo, REACTOR_IDLE_STARTUP_REQUIRED$ else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Error setting IDLE_STARTUP_REQUIRED flag in REACTOR record.'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
If ErrorMsg EQ '' then Response = True$
|
||||||
|
end else
|
||||||
|
Response = False$
|
||||||
|
end
|
||||||
|
If ( (Response EQ True$) or (Response EQ False$) ) then IsSuccessful = True$
|
||||||
|
end else
|
||||||
|
ErrorMsg = Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
SRP_JSON(ObjResponseJson, 'Release')
|
||||||
|
Repeat
|
||||||
|
|
||||||
|
If Environment_Services('IsProd') then
|
||||||
|
MonAResource = 'GRP_OPENINSIGHT_MES_OP_FE_MESAPROVEINAPI'
|
||||||
|
end else
|
||||||
|
MonAResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_MESAPROVEINAPI_DEV'
|
||||||
|
end
|
||||||
|
|
||||||
|
StatusName = 'GetNicaOrderUpdate'
|
||||||
|
If IsSuccessful and Response NE 'error' then
|
||||||
|
LogData = ''
|
||||||
|
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||||
|
LogData<2> = Machine
|
||||||
|
LogData<3> = 'Successfully updated Nica order ':OrderId:' for reactor ':ReactNo:'.'
|
||||||
|
Mona_Services('SendBufferedStatus', MonAResource, StatusName, 'Ok')
|
||||||
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||||
|
end else
|
||||||
|
Database_Services('ReleaseKeyIDLock', 'NICA_ORDERS', OrderId)
|
||||||
|
ErrorMsg = 'Error encountered updating Nica order ':OrderId:' for reactor ':ReactNo:'.'
|
||||||
|
Mona_Services('SendBufferedStatus', MonAResource, StatusName, 'Critical')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Failed to lock NICA_ORDERS ':OrderId:'.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Null OrderId passed in.'
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg NE '' then
|
||||||
|
LogData = ''
|
||||||
|
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||||
|
LogData<2> = Machine
|
||||||
|
LogData<3> = ErrorMsg
|
||||||
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||||
|
Error_Services('Add', ErrorMsg)
|
||||||
|
Response = 'error'
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Internal GoSubs
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -3,10 +3,10 @@ Compile function PROVE_IN_OVERRIDE_EVENTS(CtrlEntId, Event, @PARAMS)
|
|||||||
#window PROVE_IN_OVERRIDE
|
#window PROVE_IN_OVERRIDE
|
||||||
|
|
||||||
$Insert APP_INSERTS
|
$Insert APP_INSERTS
|
||||||
$Insert REACTOR_EQUATES
|
|
||||||
$insert Message_Box_Equates
|
$insert Message_Box_Equates
|
||||||
|
|
||||||
Declare subroutine Placedialog, Message_Box
|
Declare subroutine Placedialog, Message_Box
|
||||||
|
Declare function Nica_Orders_Services
|
||||||
|
|
||||||
GoToEvent Event for CtrlEntId else
|
GoToEvent Event for CtrlEntId else
|
||||||
// Event not implemented
|
// Event not implemented
|
||||||
@ -19,28 +19,32 @@ Return EventFlow or 1
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
Event WINDOW.CREATE(CreateParam)
|
Event WINDOW.CREATE(CreateParam)
|
||||||
|
|
||||||
ReactNo = CreateParam
|
ReactNo = CreateParam
|
||||||
|
|
||||||
Placedialog(-2, -2)
|
Placedialog(-2, -2)
|
||||||
|
|
||||||
ProveInTypes = Xlate('REACTOR', ReactNo, REACTOR_PROVE_IN_TYPE$, 'X')
|
ActiveOrders = Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactNo)
|
||||||
for each ProveInType in ProveInTypes using @VM setting dummy
|
For each OrderType in ActiveOrders using @VM setting dummy
|
||||||
Begin Case
|
Begin Case
|
||||||
Case ProveInType _EQC 'changeover'
|
Case OrderType _EQC 'changeover'
|
||||||
Set_Property(@Window:'.CHB_CHANGEOVER', 'ENABLED', True$)
|
Set_Property(@Window:'.CHB_CHANGEOVER', 'ENABLED', True$)
|
||||||
Case ProveInType _EQC 'initiate_idle'
|
Case OrderType _EQC 'initiate_idle'
|
||||||
Set_Property(@Window:'.CHB_IDLE_SHUTDOWN', 'ENABLED', True$)
|
Set_Property(@Window:'.CHB_IDLE_SHUTDOWN', 'ENABLED', True$)
|
||||||
Case ProveInType _EQC 'idle'
|
Case OrderType _EQC 'idle'
|
||||||
Set_Property(@Window:'.CHB_IDLE_STARTUP', 'ENABLED', True$)
|
Set_Property(@Window:'.CHB_IDLE_STARTUP', 'ENABLED', True$)
|
||||||
Case ProveInType _EQC 'intrusive_maint'
|
Case OrderType _EQC 'intrusive_maint'
|
||||||
Set_Property(@Window:'.CHB_INTRUSIVE_MAINT', 'ENABLED', True$)
|
Set_Property(@Window:'.CHB_INTRUSIVE_MAINT', 'ENABLED', True$)
|
||||||
Case Otherwise$
|
Case Otherwise$
|
||||||
Null
|
Null
|
||||||
End Case
|
End Case
|
||||||
Next ProveInType
|
Next OrderType
|
||||||
|
|
||||||
End Event
|
End Event
|
||||||
|
|
||||||
|
|
||||||
Event PUB_SUBMIT.CLICK()
|
Event PUB_SUBMIT.CLICK()
|
||||||
|
|
||||||
OverrideData = ''
|
OverrideData = ''
|
||||||
|
|
||||||
SelectedTypes = ''
|
SelectedTypes = ''
|
||||||
@ -81,10 +85,13 @@ Event PUB_SUBMIT.CLICK()
|
|||||||
end
|
end
|
||||||
|
|
||||||
End_Dialog(@Window, OverrideData)
|
End_Dialog(@Window, OverrideData)
|
||||||
|
|
||||||
end event
|
end event
|
||||||
|
|
||||||
|
|
||||||
Event PUB_CANCEL.CLICK()
|
Event PUB_CANCEL.CLICK()
|
||||||
|
|
||||||
End_Dialog(@Window, '')
|
End_Dialog(@Window, '')
|
||||||
|
|
||||||
end event
|
end event
|
||||||
|
|
||||||
|
|
||||||
|
@ -44,8 +44,8 @@ $insert HTTP_INSERTS
|
|||||||
$insert REACTOR_LOG_EQUATES
|
$insert REACTOR_LOG_EQUATES
|
||||||
$insert OI_WIZARD_EQUATES
|
$insert OI_WIZARD_EQUATES
|
||||||
|
|
||||||
Declare function Reactor_Log_Services, OI_Wizard_Services, MemberOf
|
Declare function Reactor_Log_Services, OI_Wizard_Services, MemberOf, Nica_Orders_Services
|
||||||
Declare subroutine Database_Services, Reactor_Log_Services, Override_Log_Services
|
Declare subroutine Database_Services, Reactor_Log_Services, Override_Log_Services, Nica_Orders_Services
|
||||||
|
|
||||||
GoToAPI else
|
GoToAPI else
|
||||||
// The specific resource endpoint doesn't have a API handler yet.
|
// The specific resource endpoint doesn't have a API handler yet.
|
||||||
@ -185,13 +185,13 @@ API ReactorLogs.ID.nicaOverride.POST
|
|||||||
If OverrideComment NE '' then
|
If OverrideComment NE '' then
|
||||||
Override_Log_Services('Create', 'REACTOR_LOG', RLKey, OverrideUser, OverrideComment, 'REACTOR_LOG_PM', '')
|
Override_Log_Services('Create', 'REACTOR_LOG', RLKey, OverrideUser, OverrideComment, 'REACTOR_LOG_PM', '')
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
// Cancel all ReactorLog PMs
|
// Cancel all ReactorLog NICA Orders
|
||||||
ActivePMKeys = Xlate('REACTOR_LOG', RLKey, REACTOR_LOG_CHECKLIST_ORDER_ID$, 'X')
|
ActiveRlNicaOrderIds = Nica_Orders_Services('GetActiveOrders', 'REACTOR_LOG', RLKey)
|
||||||
If ActivePMKeys NE '' then
|
If ActiveRlNicaOrderIds NE '' then
|
||||||
For each ActivePMKey in ActivePMKeys using @VM setting vPos
|
For each ActiveRlNicaOrderId in ActiveRlNicaOrderIds using @VM setting vPos
|
||||||
Reactor_Log_Services('CancelReactorLogPMOrder', RLKey, ActivePMKey)
|
Nica_Orders_Services('CancelOrder', ActiveRlNicaOrderId)
|
||||||
Until Error_Services('HasError')
|
Until Error_Services('HasError')
|
||||||
Next ActivePMKey
|
Next ActiveRlNicaOrderId
|
||||||
end
|
end
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
HTTP_Services('SetResponseStatus', 200, 'Nica orders canceled for REACTOR_LOG "':RLKey:'".')
|
HTTP_Services('SetResponseStatus', 200, 'Nica orders canceled for REACTOR_LOG "':RLKey:'".')
|
||||||
@ -261,3 +261,4 @@ API reactorlogs.ID.nicaoverride.PUT
|
|||||||
|
|
||||||
end api
|
end api
|
||||||
|
|
||||||
|
|
||||||
|
232
LSL2/STPROC/REACTOR_ACTIONS.txt
Normal file
232
LSL2/STPROC/REACTOR_ACTIONS.txt
Normal file
@ -0,0 +1,232 @@
|
|||||||
|
Function Reactor_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 : Reactor_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)
|
||||||
|
12/05/24 djs Original programmer.
|
||||||
|
|
||||||
|
***********************************************************************************************************************/
|
||||||
|
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
$Insert LOGICAL
|
||||||
|
$Insert FILE.SYSTEM.EQUATES
|
||||||
|
$Insert ACTION_SETUP
|
||||||
|
$Insert REACTOR_EQUATES
|
||||||
|
$Insert IQS_VIOL_DATA_EQUATES
|
||||||
|
|
||||||
|
Declare function Error_Services, Database_Services, Logging_Services, Environment_Services, Nica_Orders_Services
|
||||||
|
Declare subroutine Error_Services, Database_Services, Logging_Services, Set_Status, Reactor_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:
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
WRITE_RECORD:
|
||||||
|
|
||||||
|
OrigIqsAlarmDtm = OrigRecord<REACTOR_IQS_ALARM_DTM$>
|
||||||
|
NewIqsAlarmDtm = Record<REACTOR_IQS_ALARM_DTM$>
|
||||||
|
Begin Case
|
||||||
|
Case ( ( (OrigIqsAlarmDtm EQ '') and (NewIqsAlarmDtm NE '') ) or (OrigIqsAlarmDtm LT NewIqsAlarmDtm) )
|
||||||
|
// New alarm
|
||||||
|
NewIqsAlarmTest = Record<REACTOR_IQS_ALARM_TEST$>
|
||||||
|
If IndexC(NewIqsAlarmTest, 'HgCV', 1) then
|
||||||
|
// New HgCV alarm -> Create NICA order
|
||||||
|
If @User4 EQ '' then
|
||||||
|
ModeUser = 'OI_ADMIN'
|
||||||
|
end else
|
||||||
|
ModeUser = @User4
|
||||||
|
end
|
||||||
|
CurrActiveHgCVOrders = Nica_Orders_Services('GetActiveOrders', 'REACTOR', Name, 'IQS_HGCV_ALARM')
|
||||||
|
CurrActiveProveInOrders = Nica_Orders_Services('GetActiveOrders', 'REACTOR', Name, 'CHANGEOVER')
|
||||||
|
OrderTypeAlreadyActive = ( (CurrActiveHgCVOrders NE '') or (CurrActiveProveInOrders NE '') )
|
||||||
|
If Not(OrderTypeAlreadyActive) then
|
||||||
|
// Only create an order and change the mode if there is not already an active IQS_HGCV_ALARM order
|
||||||
|
OrderResponse = Nica_Orders_Services('CreateNewOrder', 'REACTOR', Name, 'IQS_HGCV_ALARM')
|
||||||
|
Reactor_Services('CreateReactModeChange', ModeUser, Name, 'TROUBLESHOOT_OPERATOR', 'WF-Product HgCV', 'IQS SPC HgCV Alarm Detected', False$)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Case NewIqsAlarmDtm EQ '' and OrigIqsAlarmDtm NE ''
|
||||||
|
// Alarm cleared
|
||||||
|
Null
|
||||||
|
Case Otherwise$
|
||||||
|
// No change to alarm state
|
||||||
|
Null
|
||||||
|
|
||||||
|
End Case
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
DELETE_RECORD_PRE:
|
||||||
|
return
|
||||||
|
|
||||||
|
DELETE_RECORD:
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Internal GoSubs
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -59,8 +59,9 @@ $Insert WO_MAT_QA_EQUATES
|
|||||||
Equ WOCust$ to 2
|
Equ WOCust$ to 2
|
||||||
Equ Comma$ to ','
|
Equ Comma$ to ','
|
||||||
|
|
||||||
Declare function Error_Services, Database_Services, Logging_Services, Environment_Services
|
Declare function Error_Services, Database_Services, Logging_Services, Environment_Services, Nica_Orders_Services
|
||||||
Declare subroutine Error_Services, Database_Services, Logging_Services, Set_Status, Reactor_Log_Services, Rds_Services
|
Declare subroutine Error_Services, Database_Services, Logging_Services, Set_Status, Reactor_Log_Services, Rds_Services
|
||||||
|
Declare subroutine Nica_Orders_Services
|
||||||
|
|
||||||
If KeyID then GoSub Initialize_System_Variables
|
If KeyID then GoSub Initialize_System_Variables
|
||||||
|
|
||||||
@ -101,10 +102,6 @@ CalculateColumn:
|
|||||||
// Make sure the ActionFlow return variable is cleared in case nothing is calculated.
|
// Make sure the ActionFlow return variable is cleared in case nothing is calculated.
|
||||||
ActionFlow = ''
|
ActionFlow = ''
|
||||||
|
|
||||||
* Begin Case
|
|
||||||
* Case CalcColName EQ 'ROTR_ACTION' ; GoSub ROTR_ACTION
|
|
||||||
* End Case
|
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
@ -234,18 +231,18 @@ WRITE_RECORD:
|
|||||||
If (FiveYearAdded or TenYearAdded) then
|
If (FiveYearAdded or TenYearAdded) then
|
||||||
// Create NICA order
|
// Create NICA order
|
||||||
If ( (ReactType EQ 'ASM') or (ReactType EQ 'ASM+') or (ReactType EQ 'HTR') ) then
|
If ( (ReactType EQ 'ASM') or (ReactType EQ 'ASM+') or (ReactType EQ 'HTR') ) then
|
||||||
Reactor_Log_Services('CreateReactorLogPMOrder', Name, 'ASM_HTR_FIVE_AND_TEN_YEAR_PM')
|
Nica_Orders_Services('CreateNewOrder', 'REACTOR_LOG', Name, 'ASM_HTR_FIVE_AND_TEN_YEAR_PM')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
If (FiveYearRemoved or TenYearRemoved) then
|
If (FiveYearRemoved or TenYearRemoved) then
|
||||||
// Cancel NICA order
|
// Cancel NICA order
|
||||||
If ( (ReactType EQ 'ASM') or (ReactType EQ 'ASM+') or (ReactType EQ 'HTR') ) then
|
If ( (ReactType EQ 'ASM') or (ReactType EQ 'ASM+') or (ReactType EQ 'HTR') ) then
|
||||||
ChecklistTypes = Record<REACTOR_LOG_CHECKLIST_TYPE$>
|
OrderIds = Nica_Orders_Services('GetActiveOrders', 'REACTOR_LOG', Name, 'ASM_HTR_FIVE_AND_TEN_YEAR_PM')
|
||||||
ChecklistOrderIds = Record<REACTOR_LOG_CHECKLIST_ORDER_ID$>
|
If OrderIds NE '' then
|
||||||
Locate 'ASM_HTR_FIVE_AND_TEN_YEAR_PM' in ChecklistTypes using @VM setting vPos then
|
For each OrderId in OrderIds
|
||||||
OrderId = ChecklistOrderIds<0, vPos>
|
Nica_Orders_Services('CancelOrder', OrderId)
|
||||||
Reactor_Log_Services('CancelReactorLogPMOrder', Name, OrderId)
|
Next OrderId
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -253,18 +250,18 @@ WRITE_RECORD:
|
|||||||
If (AsmTubeChangeAdded or HtrTubeChangeAdded) then
|
If (AsmTubeChangeAdded or HtrTubeChangeAdded) then
|
||||||
// Create NICA order
|
// Create NICA order
|
||||||
If ( (ReactType EQ 'ASM') or (ReactType EQ 'ASM+') or (ReactType EQ 'HTR') ) then
|
If ( (ReactType EQ 'ASM') or (ReactType EQ 'ASM+') or (ReactType EQ 'HTR') ) then
|
||||||
Reactor_Log_Services('CreateReactorLogPMOrder', Name, 'ASM_HTR_TUBE_CHANGE')
|
Nica_Orders_Services('CreateNewOrder', 'REACTOR_LOG', Name, 'ASM_HTR_TUBE_CHANGE')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
If (AsmTubeChangeRemoved or HtrTubeChangeRemoved) then
|
If (AsmTubeChangeRemoved or HtrTubeChangeRemoved) then
|
||||||
// Cancel NICA order
|
// Cancel NICA order
|
||||||
If ( (ReactType EQ 'ASM') or (ReactType EQ 'ASM+') or (ReactType EQ 'HTR') ) then
|
If ( (ReactType EQ 'ASM') or (ReactType EQ 'ASM+') or (ReactType EQ 'HTR') ) then
|
||||||
ChecklistTypes = Record<REACTOR_LOG_CHECKLIST_TYPE$>
|
OrderIds = Nica_Orders_Services('GetActiveOrders', 'REACTOR_LOG', Name, 'ASM_HTR_TUBE_CHANGE')
|
||||||
ChecklistOrderIds = Record<REACTOR_LOG_CHECKLIST_ORDER_ID$>
|
If OrderIds NE '' then
|
||||||
Locate 'ASM_HTR_TUBE_CHANGE' in ChecklistTypes using @VM setting vPos then
|
For each OrderId in OrderIds
|
||||||
OrderId = ChecklistOrderIds<0, vPos>
|
Nica_Orders_Services('CancelOrder', OrderId)
|
||||||
Reactor_Log_Services('CancelReactorLogPMOrder', Name, OrderId)
|
Next OrderId
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -272,18 +269,18 @@ WRITE_RECORD:
|
|||||||
If SemiannualAdded then
|
If SemiannualAdded then
|
||||||
// Create NICA order
|
// Create NICA order
|
||||||
If ( (ReactType EQ 'ASM') or (ReactType EQ 'ASM+') or (ReactType EQ 'HTR') ) then
|
If ( (ReactType EQ 'ASM') or (ReactType EQ 'ASM+') or (ReactType EQ 'HTR') ) then
|
||||||
Reactor_Log_Services('CreateReactorLogPMOrder', Name, 'ASM_HTR_SEMIANNUAL_PM')
|
Nica_Orders_Services('CreateNewOrder', 'REACTOR_LOG', Name, 'ASM_HTR_SEMIANNUAL_PM')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
If SemiannualRemoved then
|
If SemiannualRemoved then
|
||||||
// Cancel NICA order
|
// Cancel NICA order
|
||||||
If ( (ReactType EQ 'ASM') or (ReactType EQ 'ASM+') or (ReactType EQ 'HTR') ) then
|
If ( (ReactType EQ 'ASM') or (ReactType EQ 'ASM+') or (ReactType EQ 'HTR') ) then
|
||||||
ChecklistTypes = Record<REACTOR_LOG_CHECKLIST_TYPE$>
|
OrderIds = Nica_Orders_Services('GetActiveOrders', 'REACTOR_LOG', Name, 'ASM_HTR_SEMIANNUAL_PM')
|
||||||
ChecklistOrderIds = Record<REACTOR_LOG_CHECKLIST_ORDER_ID$>
|
If OrderIds NE '' then
|
||||||
Locate 'ASM_HTR_SEMIANNUAL_PM' in ChecklistTypes using @VM setting vPos then
|
For each OrderId in OrderIds
|
||||||
OrderId = ChecklistOrderIds<0, vPos>
|
Nica_Orders_Services('CancelOrder', OrderId)
|
||||||
Reactor_Log_Services('CancelReactorLogPMOrder', Name, OrderId)
|
Next OrderId
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -291,18 +288,18 @@ WRITE_RECORD:
|
|||||||
If AnnualAdded then
|
If AnnualAdded then
|
||||||
// Create NICA order
|
// Create NICA order
|
||||||
If ( (ReactType EQ 'ASM') or (ReactType EQ 'ASM+') or (ReactType EQ 'HTR') ) then
|
If ( (ReactType EQ 'ASM') or (ReactType EQ 'ASM+') or (ReactType EQ 'HTR') ) then
|
||||||
Reactor_Log_Services('CreateReactorLogPMOrder', Name, 'ASM_HTR_ANNUAL_PM')
|
Nica_Orders_Services('CreateNewOrder', 'REACTOR_LOG', Name, 'ASM_HTR_ANNUAL_PM')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
If AnnualRemoved then
|
If AnnualRemoved then
|
||||||
// Cancel NICA order
|
// Cancel NICA order
|
||||||
If ( (ReactType EQ 'ASM') or (ReactType EQ 'ASM+') or (ReactType EQ 'HTR') ) then
|
If ( (ReactType EQ 'ASM') or (ReactType EQ 'ASM+') or (ReactType EQ 'HTR') ) then
|
||||||
ChecklistTypes = Record<REACTOR_LOG_CHECKLIST_TYPE$>
|
OrderIds = Nica_Orders_Services('GetActiveOrders', 'REACTOR_LOG', Name, 'ASM_HTR_ANNUAL_PM')
|
||||||
ChecklistOrderIds = Record<REACTOR_LOG_CHECKLIST_ORDER_ID$>
|
If OrderIds NE '' then
|
||||||
Locate 'ASM_HTR_ANNUAL_PM' in ChecklistTypes using @VM setting vPos then
|
For each OrderId in OrderIds
|
||||||
OrderId = ChecklistOrderIds<0, vPos>
|
Nica_Orders_Services('CancelOrder', OrderId)
|
||||||
Reactor_Log_Services('CancelReactorLogPMOrder', Name, OrderId)
|
Next OrderId
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -379,3 +376,4 @@ Restore_System_Variables:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,8 +20,6 @@ Compile function Reactor_Log_Services(@Service, @Params)
|
|||||||
??/??/?? jro Original programmer.
|
??/??/?? jro Original programmer.
|
||||||
|
|
||||||
***********************************************************************************************************************/
|
***********************************************************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#pragma precomp SRP_PreCompiler
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
$Insert APP_INSERTS
|
$Insert APP_INSERTS
|
||||||
@ -37,10 +35,10 @@ $Insert REACTOR_EQUATES
|
|||||||
|
|
||||||
Declare function Database_Services, Reactor_Log_Services, Obj_React_Item, Set_Status, Errmsg, Error_Services, Utility
|
Declare function Database_Services, Reactor_Log_Services, Obj_React_Item, Set_Status, Errmsg, Error_Services, Utility
|
||||||
Declare function obj_Calendar, NextKey, SRP_JSON, Datetime, Reactor_Services, React_Servs_Services, Logging_Services
|
Declare function obj_Calendar, NextKey, SRP_JSON, Datetime, Reactor_Services, React_Servs_Services, Logging_Services
|
||||||
Declare function Environment_Services, HttpClient_Services, SRP_List
|
Declare function Environment_Services, HttpClient_Services, SRP_List, Nica_Orders_Services
|
||||||
Declare subroutine Set_Status, RList, Errmsg, Database_Services, Error_Services, obj_React_Reads, obj_Post_Log, Delay
|
Declare subroutine Set_Status, RList, Errmsg, Database_Services, Error_Services, obj_React_Reads, obj_Post_Log, Delay
|
||||||
Declare subroutine obj_Reactor_Log, Btree.Extract, SRP_JSON, Reactor_Services, Logging_Services, Mona_Services, SRP_List
|
Declare subroutine obj_Reactor_Log, Btree.Extract, SRP_JSON, Reactor_Services, Logging_Services, Mona_Services, SRP_List
|
||||||
Declare subroutine Reactor_Log_Services
|
Declare subroutine Reactor_Log_Services, Nica_Orders_Services
|
||||||
|
|
||||||
GoToService
|
GoToService
|
||||||
|
|
||||||
@ -89,13 +87,14 @@ Service SignReactorLog(ReactorLogID, UserID)
|
|||||||
ErrorMsg = ''
|
ErrorMsg = ''
|
||||||
If RowExists('REACTOR_LOG', ReactorLogID) then
|
If RowExists('REACTOR_LOG', ReactorLogID) then
|
||||||
// Update any NICA checklist order statuses
|
// Update any NICA checklist order statuses
|
||||||
Reactor_Log_Services('GetReactorLogPMStatus', ReactorLogID)
|
Nica_Orders_Services('GetOrderUpdates')
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
If RowExists('LSL_USERS', UserID) then
|
If RowExists('LSL_USERS', UserID) then
|
||||||
ReactorLogRec = Database_Services('ReadDataRow', 'REACTOR_LOG', ReactorLogID)
|
ReactorLogRec = Database_Services('ReadDataRow', 'REACTOR_LOG', ReactorLogID)
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
// Verify NICA checklists are complete
|
// Verify NICA checklists are complete
|
||||||
If Sum(ReactorLogRec<REACTOR_LOG_CHECKLIST_ACTIVE$>) EQ 0 then
|
ActiveRlNicaOrders = Nica_Orders_Services('GetActiveOrders', 'REACTOR_LOG', ReactorLogID)
|
||||||
|
If ActiveRLNicaOrders EQ '' then
|
||||||
// Verify reactor number is populated
|
// Verify reactor number is populated
|
||||||
ReactorNo = ReactorLogRec<REACTOR_LOG_REACTOR$>
|
ReactorNo = ReactorLogRec<REACTOR_LOG_REACTOR$>
|
||||||
If ReactorNo NE '' then
|
If ReactorNo NE '' then
|
||||||
@ -135,6 +134,7 @@ Service SignReactorLog(ReactorLogID, UserID)
|
|||||||
Until ErrorMsg NE ''
|
Until ErrorMsg NE ''
|
||||||
Next ServiceID
|
Next ServiceID
|
||||||
end
|
end
|
||||||
|
|
||||||
// Check if any react items are missing disposition codes
|
// Check if any react items are missing disposition codes
|
||||||
If ErrorMsg EQ '' then
|
If ErrorMsg EQ '' then
|
||||||
RemRINos = Xlate('REACTOR_LOG', ReactorLogID, 'REM_RI_NO', 'X')
|
RemRINos = Xlate('REACTOR_LOG', ReactorLogID, 'REM_RI_NO', 'X')
|
||||||
@ -159,7 +159,6 @@ Service SignReactorLog(ReactorLogID, UserID)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
If ErrorMsg EQ '' then
|
If ErrorMsg EQ '' then
|
||||||
// Check if we need to "post" any items that are being installed
|
// Check if we need to "post" any items that are being installed
|
||||||
InstRINo = ReactorLogRec<REACTOR_LOG_INST_RI_NO$>
|
InstRINo = ReactorLogRec<REACTOR_LOG_INST_RI_NO$>
|
||||||
@ -301,16 +300,10 @@ Service SignReactorLog(ReactorLogID, UserID)
|
|||||||
ErrorMsg = 'Error in ':Service:' service. Reactor number is missing.'
|
ErrorMsg = 'Error in ':Service:' service. Reactor number is missing.'
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
ActiveCheckLists = ''
|
ActiveChecklistTypes = Xlate('NICA_ORDERS', ActiveRlNicaOrders, 'ORDER_TYPE', 'X')
|
||||||
CheckListTypes = ReactorLogRec<REACTOR_LOG_CHECKLIST_TYPE$>
|
Swap @VM with ',' in ActiveChecklistTypes
|
||||||
CheckListActives = ReactorLogRec<REACTOR_LOG_CHECKLIST_ACTIVE$>
|
ErrorMsg = 'Error in ':Service:' service. NICA order(s) ':ActiveChecklistTypes
|
||||||
For each CheckListType in CheckListTypes using @VM setting vPos
|
ErrorMsg := ' must be completed prior to signing reactor log.'
|
||||||
If CheckListActives<0, vPos> EQ True$ then
|
|
||||||
ActiveCheckLists := CheckListType:','
|
|
||||||
end
|
|
||||||
Next CheckListType
|
|
||||||
If ActiveCheckLists NE '' then ActiveCheckLists[-1, 1] = ''
|
|
||||||
ErrorMsg = 'Error in ':Service:' service. NICA order(s) ':ActiveCheckLists:' must be completed prior to signing reactor log.'
|
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
ErrorMsg = Error_Services('GetMessage')
|
ErrorMsg = Error_Services('GetMessage')
|
||||||
@ -907,6 +900,21 @@ Service ConvertJSONToRecord(JSON)
|
|||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
Service GetRlChecklistActive(RLKey)
|
||||||
|
|
||||||
|
If RLKey NE '' then
|
||||||
|
ActiveTubeChangeIds = Nica_Orders_Services('GetActiveOrders', 'REACTOR_LOG', RLKey, 'ASM_HTR_TUBE_CHANGE')
|
||||||
|
ActiveAnnualPmIds = Nica_Orders_Services('GetActiveOrders', 'REACTOR_LOG', RLKey, 'ASM_HTR_ANNUAL_PM')
|
||||||
|
ActiveSemiannualPmIds = Nica_Orders_Services('GetActiveOrders', 'REACTOR_LOG', RLKey, 'ASM_HTR_SEMIANNUAL_PM')
|
||||||
|
ActiveFiveAndTenPmIds = Nica_Orders_Services('GetActiveOrders', 'REACTOR_LOG', RLKey, 'ASM_HTR_FIVE_AND_TEN_YEAR_PM')
|
||||||
|
Response = ( (ActiveTubeChangeIds NE '') or (ActiveAnnualPmIds NE '') or (ActiveSemiannualPmIds NE '') or (ActiveFiveAndTenPmIds NE '') )
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'Error in ':Service:' service. Null ReactNo passed into service.')
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service AddComment(Reactor, NewNote, User)
|
Service AddComment(Reactor, NewNote, User)
|
||||||
|
|
||||||
ReactModeNGKey = Xlate('REACTOR_CHILD_KEY_IDS_NG', Reactor, 'REACT_MODE_KEY_IDS', 'X')
|
ReactModeNGKey = Xlate('REACTOR_CHILD_KEY_IDS_NG', Reactor, 'REACT_MODE_KEY_IDS', 'X')
|
||||||
@ -928,348 +936,6 @@ Service AddComment(Reactor, NewNote, User)
|
|||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service CreateReactorLogPMOrder(RLNo, PmType=PM_TYPES)
|
|
||||||
|
|
||||||
Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log'
|
|
||||||
ColumnWidths = 20 : @FM : 15 : @FM : 300
|
|
||||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ReactorLogPM'
|
|
||||||
makeDirSuccess = Utility("MAKEDIR", LogPath)
|
|
||||||
LogDate = Oconv(Date(), 'D4/')
|
|
||||||
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : '_ReactorLogPM.csv'
|
|
||||||
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, ColumnWidths, False$, False$)
|
|
||||||
|
|
||||||
RlRec = Database_Services('ReadDataRow', 'REACTOR_LOG', RLNo)
|
|
||||||
ReactNo = RlRec<REACTOR_LOG_REACTOR$>
|
|
||||||
Machine = Environment_Services('GetServer')
|
|
||||||
LogData = ''
|
|
||||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
|
||||||
LogData<2> = Machine
|
|
||||||
LogData<3> = 'Attempting to create PM order for reactor ':ReactNo:' of type ':PMType
|
|
||||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
|
||||||
|
|
||||||
CurrentPmTypes = RlRec<REACTOR_LOG_CHECKLIST_TYPE$>
|
|
||||||
PmTypeAlreadyActive = False$
|
|
||||||
|
|
||||||
For each ActivePmType in CurrentPmTypes using @VM setting dummy
|
|
||||||
If ActivePmType EQ PmType then PmTypeAlreadyActive = True$
|
|
||||||
Next ActivePmType
|
|
||||||
|
|
||||||
If PmTypeAlreadyActive EQ False$ then
|
|
||||||
|
|
||||||
RlRec<REACTOR_LOG_CHECKLIST_ACTIVE$> = True$
|
|
||||||
RlRec<REACTOR_LOG_CHECKLIST_TYPE$, -1> = PmType
|
|
||||||
|
|
||||||
// Call the API
|
|
||||||
NicaURL = Environment_Services("GetProveInApiUrl"):'/checklists?'
|
|
||||||
NicaURL := 'checklistType=':PmType
|
|
||||||
NicaURL := '&reactorNumber=':ReactNo
|
|
||||||
|
|
||||||
Retries = 3
|
|
||||||
BackoffSeconds = 1
|
|
||||||
IsSuccessful = False$
|
|
||||||
|
|
||||||
OrderId = ''
|
|
||||||
|
|
||||||
Loop
|
|
||||||
while (IsSuccessful EQ False$ and Retries GT 0)
|
|
||||||
WaitSeconds = (3 - retries) * BackoffSeconds
|
|
||||||
Delay(WaitSeconds)
|
|
||||||
|
|
||||||
Retries = Retries - 1
|
|
||||||
|
|
||||||
HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'POST', NicaURL, 'Accept':@VM:'*/*', '', '', '', False$, False$, '')
|
|
||||||
If HttpResponseJson NE '' then
|
|
||||||
ObjResponseJson = ''
|
|
||||||
If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then
|
|
||||||
OrderId = SRP_JSON(ObjResponseJson, 'GetValue', 'id')
|
|
||||||
If orderId NE '' then
|
|
||||||
IsSuccessful = True$
|
|
||||||
Response = OrderId
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
SRP_JSON(ObjResponseJson, 'Release')
|
|
||||||
Repeat
|
|
||||||
|
|
||||||
RlRec<REACTOR_LOG_CHECKLIST_ORDER_ID$, -1> = OrderId
|
|
||||||
|
|
||||||
Database_Services('WriteDataRow', 'REACTOR_LOG', RlNo, RlRec, True$, False$, True$)
|
|
||||||
|
|
||||||
If Environment_Services('IsProd') then
|
|
||||||
MonAResource = 'GRP_OPENINSIGHT_MES_OP_FE_MESAPROVEINAPI'
|
|
||||||
end else
|
|
||||||
MonAResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_MESAPROVEINAPI_DEV'
|
|
||||||
end
|
|
||||||
StatusName = 'CreateReactorLogPmOrder'
|
|
||||||
If IsSuccessful then
|
|
||||||
LogData = ''
|
|
||||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
|
||||||
LogData<2> = Machine
|
|
||||||
LogData<3> = 'Successfully created PM order for reactor ':ReactNo:' and reactor log ':RlNo:' of type ':PmType
|
|
||||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
|
||||||
|
|
||||||
Mona_Services('SendBufferedStatus', MonAResource, StatusName, 'ok')
|
|
||||||
end else
|
|
||||||
Response = 'error'
|
|
||||||
|
|
||||||
LogData = ''
|
|
||||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
|
||||||
LogData<2> = Machine
|
|
||||||
LogData<3> = 'Error encountered when attempting to create PM order for reactor ':ReactNo:' and reactor log ':RlNo:' of type ':PmType
|
|
||||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
|
||||||
|
|
||||||
Mona_Services('SendBufferedStatus', MonAResource, StatusName, 'critical')
|
|
||||||
|
|
||||||
Error_Services('Add', 'Error in ' : Service : ' service. Could not create NICA order.')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end service
|
|
||||||
|
|
||||||
|
|
||||||
Service CancelReactorLogPMOrder(RlNo, OrderId)
|
|
||||||
|
|
||||||
Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log'
|
|
||||||
ColumnWidths = 20 : @FM : 15 : @FM : 300
|
|
||||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ReactorLogPM'
|
|
||||||
makeDirSuccess = Utility("MAKEDIR", LogPath)
|
|
||||||
LogDate = Oconv(Date(), 'D4/')
|
|
||||||
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : '_ReactorLogPM.csv'
|
|
||||||
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, ColumnWidths, False$, False$)
|
|
||||||
|
|
||||||
RlRec = Database_Services('ReadDataRow', 'REACTOR_LOG', RlNo)
|
|
||||||
ReactNo = RlRec<REACTOR_LOG_REACTOR$>
|
|
||||||
LogData = ''
|
|
||||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
|
||||||
Machine = Environment_Services('GetServer')
|
|
||||||
LogData<2> = Machine
|
|
||||||
LogData<3> = 'Attempting to cancel PM order ' : OrderId : ' for reactor ' : ReactNo : ' and reactor log ' : RlNo
|
|
||||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
|
||||||
|
|
||||||
Response = False$
|
|
||||||
|
|
||||||
BaseNicaUrl = Environment_Services("GetProveInApiUrl"):'/checklists?'
|
|
||||||
NicaUrl = BaseNicaUrl:'checklistOrderId=':OrderId
|
|
||||||
NicaUrl := '&checklistState=cancelled'
|
|
||||||
|
|
||||||
Retries = 3
|
|
||||||
BackoffSeconds = 1
|
|
||||||
IsSuccessful = False$
|
|
||||||
|
|
||||||
Loop
|
|
||||||
while (IsSuccessful EQ False$ and Retries GT 0)
|
|
||||||
WaitSeconds = (3 - Retries) * BackoffSeconds
|
|
||||||
Delay(WaitSeconds)
|
|
||||||
|
|
||||||
Retries = Retries - 1
|
|
||||||
|
|
||||||
HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'PUT', NicaUrl, 'Accept':@VM:'*/*', '', '', '', False$, False$, '')
|
|
||||||
If HttpResponseJson NE '' then
|
|
||||||
ObjResponseJson = ''
|
|
||||||
If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then
|
|
||||||
IsComplete = SRP_JSON(ObjResponseJson, 'GetValue', 'pendingUpdate')
|
|
||||||
Response = (IsComplete EQ True$)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
SRP_JSON(ObjResponseJson, 'Release')
|
|
||||||
IsSuccessful = ( (Response EQ True$) or (Response EQ False$) )
|
|
||||||
Repeat
|
|
||||||
|
|
||||||
If Environment_Services('IsProd') then
|
|
||||||
MonAResource = 'GRP_OPENINSIGHT_MES_OP_FE_MESAPROVEINAPI'
|
|
||||||
end else
|
|
||||||
MonAResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_MESAPROVEINAPI_DEV'
|
|
||||||
end
|
|
||||||
StatusName = 'UpdateReactorLogPmOrderState'
|
|
||||||
If IsSuccessful and Response NE 'error' then
|
|
||||||
PmOrderIds = RlRec<REACTOR_LOG_CHECKLIST_ORDER_ID$>
|
|
||||||
PmOrderIdList = SRP_List('Create', PmOrderIds, @VM)
|
|
||||||
PmTypes = RlRec<REACTOR_LOG_CHECKLIST_TYPE$>
|
|
||||||
PmTypeList = SRP_List('Create', PmTypes, @VM)
|
|
||||||
|
|
||||||
For each PmOrderId in PmOrderIds using @VM setting Idx
|
|
||||||
If OrderId EQ PmOrderId then
|
|
||||||
SRP_List('RemoveAt', PmOrderIdList, Idx)
|
|
||||||
SRP_List('RemoveAt', PmTypeList, Idx)
|
|
||||||
end
|
|
||||||
Next ProveInOrderId
|
|
||||||
|
|
||||||
RlRec<REACTOR_LOG_CHECKLIST_ORDER_ID$> = SRP_List("GetVariable", PmOrderIdList, @VM)
|
|
||||||
RlRec<REACTOR_LOG_CHECKLIST_TYPE$> = SRP_List("GetVariable", PmTypeList, @VM)
|
|
||||||
SRP_List('Release', PmTypeList)
|
|
||||||
|
|
||||||
OrderIdCount = SRP_List("Count", PmOrderIdList)
|
|
||||||
SRP_List("Release", PmOrderIdList)
|
|
||||||
// remove flag if pm passed
|
|
||||||
If OrderIdCount EQ 0 then RlRec<REACTOR_LOG_CHECKLIST_ACTIVE$> = False$
|
|
||||||
|
|
||||||
Database_Services('WriteDataRow', 'REACTOR_LOG', RlNo, RlRec, True$, False$, True$)
|
|
||||||
|
|
||||||
LogData = ''
|
|
||||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
|
||||||
LogData<2> = Machine
|
|
||||||
LogData<3> = 'Successfully cancelled PM order ' : PmOrderId : ' for reactor ' : ReactNo : ' and reactor log ' : RlNo
|
|
||||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
|
||||||
|
|
||||||
Mona_Services('SendBufferedStatus', MonAResource, StatusName, 'ok')
|
|
||||||
end else
|
|
||||||
Response = 'error'
|
|
||||||
|
|
||||||
LogData = ''
|
|
||||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
|
||||||
LogData<2> = Machine
|
|
||||||
LogData<3> = 'Error encountered cancelling PM order ' : PmOrderId : ' for reactor ' : ReactNo : ' and reactor log ' : RlNo
|
|
||||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
|
||||||
|
|
||||||
Mona_Services('SendBufferedStatus', MonAResource, StatusName, 'critical')
|
|
||||||
|
|
||||||
Error_Services('Add', 'Error in ' : Service : ' service. Could not cancel NICA order')
|
|
||||||
end
|
|
||||||
|
|
||||||
end service
|
|
||||||
|
|
||||||
|
|
||||||
Service GetReactorLogPMStatus(RlNo)
|
|
||||||
|
|
||||||
Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log'
|
|
||||||
ColumnWidths = 20 : @FM : 15 : @FM : 300
|
|
||||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ReactorLogPm'
|
|
||||||
makeDirSuccess = Utility("MAKEDIR", LogPath)
|
|
||||||
LogDate = Oconv(Date(), 'D4/')
|
|
||||||
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : '_ReactorLogPm.csv'
|
|
||||||
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, ColumnWidths, False$, False$)
|
|
||||||
|
|
||||||
RlRec = Database_Services('ReadDataRow', 'REACTOR_LOG', RlNo)
|
|
||||||
ReactNo = RlRec<REACTOR_LOG_REACTOR$>
|
|
||||||
LogData = ''
|
|
||||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
|
||||||
Machine = Environment_Services('GetServer')
|
|
||||||
LogData<2> = Machine
|
|
||||||
LogData<3> = 'Attempting to fetch pm order for reactor ':ReactNo:' and reactor log ':RlNo
|
|
||||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
|
||||||
|
|
||||||
Response = True$
|
|
||||||
IsSuccessful = True$
|
|
||||||
|
|
||||||
// Check flag on reactor first, then call api if necessary
|
|
||||||
|
|
||||||
PmActive = RlRec<REACTOR_LOG_CHECKLIST_ACTIVE$>
|
|
||||||
If PmActive then
|
|
||||||
|
|
||||||
PmOrderIds = RlRec<REACTOR_LOG_CHECKLIST_ORDER_ID$>
|
|
||||||
PmOrderIdList = SRP_List("Create", PmOrderIds, @VM)
|
|
||||||
PmTypes = RlRec<REACTOR_LOG_CHECKLIST_TYPE$>
|
|
||||||
PmTypeList = SRP_List("Create", PmTypes, @VM)
|
|
||||||
|
|
||||||
For each PmOrderId in PmOrderIds using @VM setting Idx
|
|
||||||
|
|
||||||
LogData = ''
|
|
||||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
|
||||||
LogData<2> = Machine
|
|
||||||
LogData<3> = 'Fetching pm order ':PmOrderId
|
|
||||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
|
||||||
|
|
||||||
BaseNicaUrl = Environment_Services("GetProveInApiUrl"):'/checklists?'
|
|
||||||
NicaUrl = BaseNicaUrl:'checklistOrderId=':PmOrderId
|
|
||||||
|
|
||||||
Retries = 3
|
|
||||||
BackoffSeconds = 1
|
|
||||||
IsSuccessful = False$
|
|
||||||
|
|
||||||
Loop
|
|
||||||
while (IsSuccessful EQ False$ and Retries GT 0)
|
|
||||||
WaitSeconds = (3 - Retries) * BackoffSeconds
|
|
||||||
Delay(WaitSeconds)
|
|
||||||
|
|
||||||
Retries = Retries - 1
|
|
||||||
|
|
||||||
HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'GET', NicaUrl, 'Accept':@VM:'*/*', '', '', '', False$, False$, '')
|
|
||||||
If HttpResponseJson NE '' then
|
|
||||||
ObjResponseJson = ''
|
|
||||||
If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then
|
|
||||||
IsComplete = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete')
|
|
||||||
If IsComplete EQ True$ then
|
|
||||||
SRP_List('RemoveAt', PmOrderIdList, Idx)
|
|
||||||
SRP_List('RemoveAt', PmTypeList, Idx)
|
|
||||||
Response = True$
|
|
||||||
end else
|
|
||||||
Response = False$
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
SRP_JSON(ObjResponseJson, 'Release')
|
|
||||||
IsSuccessful = ( (Response EQ True$) or (Response EQ False$) )
|
|
||||||
Repeat
|
|
||||||
Next PmOrderId
|
|
||||||
|
|
||||||
If Environment_Services('IsProd') then
|
|
||||||
MonAResource = 'GRP_OPENINSIGHT_MES_OP_FE_MESAPROVEINAPI'
|
|
||||||
end else
|
|
||||||
MonAResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_MESAPROVEINAPI_DEV'
|
|
||||||
end
|
|
||||||
StatusName = 'GetReactorLogPmOrderStatus'
|
|
||||||
If IsSuccessful and Response NE 'error' then
|
|
||||||
LogData = ''
|
|
||||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
|
||||||
LogData<2> = Machine
|
|
||||||
LogData<3> = 'Successfully fetched pm order for reactor ':ReactNo:' and reactor log ':RlNo
|
|
||||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
|
||||||
|
|
||||||
Mona_Services('SendBufferedStatus', MonAResource, StatusName, 'ok')
|
|
||||||
end else
|
|
||||||
Response = 'error'
|
|
||||||
|
|
||||||
LogData = ''
|
|
||||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
|
||||||
LogData<2> = Machine
|
|
||||||
LogData<3> = 'Error encountered when fetching pm order for reactor ':RlNo
|
|
||||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
|
||||||
|
|
||||||
Mona_Services('SendBufferedStatus', MonAResource, StatusName, 'critical')
|
|
||||||
|
|
||||||
Error_Services('Add', 'Error in ' : Service : ' service. Could not retrieve NICA order status.')
|
|
||||||
end
|
|
||||||
|
|
||||||
RlRec<REACTOR_LOG_CHECKLIST_ORDER_ID$> = SRP_List("GetVariable", PmOrderIdList, @VM)
|
|
||||||
RlRec<REACTOR_LOG_CHECKLIST_TYPE$> = SRP_List("GetVariable", PmTypeList, @VM)
|
|
||||||
SRP_List('Release', PmTypeList)
|
|
||||||
|
|
||||||
OrderIdCount = SRP_List("Count", PmOrderIdList)
|
|
||||||
SRP_List("Release", PmOrderIdList)
|
|
||||||
// remove flag if prove in passed
|
|
||||||
If OrderIdCount EQ 0 then RlRec<REACTOR_LOG_CHECKLIST_ACTIVE$> = False$
|
|
||||||
|
|
||||||
Database_Services('WriteDataRow', 'REACTOR_LOG', RlNo, RlRec, True$, False$, True$)
|
|
||||||
end
|
|
||||||
|
|
||||||
end service
|
|
||||||
|
|
||||||
|
|
||||||
Service UpdateReactorLogPMStatuses()
|
|
||||||
|
|
||||||
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
|
||||||
Lock hSysLists, ServiceKeyID then
|
|
||||||
Open 'DICT.REACTOR_LOG' to hDict then
|
|
||||||
RLKeys = ''
|
|
||||||
Query = 'CHECKLIST_ACTIVE':@VM:True$:@FM
|
|
||||||
Flag = ''
|
|
||||||
Btree.Extract(Query, 'REACTOR_LOG', hDict, RLKeys, '', Flag)
|
|
||||||
If Flag EQ 0 then
|
|
||||||
// Btree.Extract successful
|
|
||||||
If RLKeys NE '' then
|
|
||||||
For each RLKey in RLKeys using @VM
|
|
||||||
Reactor_Log_Services("GetReactorLogPMStatus", RLKey)
|
|
||||||
Next RLKey
|
|
||||||
end
|
|
||||||
end else
|
|
||||||
Error_Services('Add', 'Error in ':Service:' service. Btree.Extract call failed.')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
Unlock hSysLists, ServiceKeyID else Null
|
|
||||||
end
|
|
||||||
|
|
||||||
end service
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Internal GoSubs
|
// Internal GoSubs
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -1282,6 +948,3 @@ ClearCursors:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,7 +31,8 @@ $Insert REACT_PROB_CAT_EQUATES
|
|||||||
$Insert REACTOR_EQUATES
|
$Insert REACTOR_EQUATES
|
||||||
$Insert RLIST_EQUATES
|
$Insert RLIST_EQUATES
|
||||||
|
|
||||||
Declare function Database_Services, React_Prob_Cat_Services, Reactor_Modes_Services, Memberof, Error_Services
|
Declare function Database_Services, React_Prob_Cat_Services, Reactor_Modes_Services, Memberof, Error_Services
|
||||||
|
Declare function Nica_Orders_Services, Reactor_Services
|
||||||
Declare subroutine Error_Services, Database_Services, delete, RList, Reactor_Services
|
Declare subroutine Error_Services, Database_Services, delete, RList, Reactor_Services
|
||||||
|
|
||||||
GoToService
|
GoToService
|
||||||
@ -223,17 +224,9 @@ Service AvailableModes(ReactorModesKey, CurrUser, ReactNo)
|
|||||||
CurModeReleaseGroups = XLATE('REACTOR_MODES', ReactorModesKey, REACTOR_MODES_GROUPS_RELEASE$, 'X')
|
CurModeReleaseGroups = XLATE('REACTOR_MODES', ReactorModesKey, REACTOR_MODES_GROUPS_RELEASE$, 'X')
|
||||||
CanRelease = 0
|
CanRelease = 0
|
||||||
|
|
||||||
IdleStartupRequired = False$
|
IdleStartupRequired = Reactor_Services('GetIdleStartupRequired', ReactNo)
|
||||||
If ReactNo NE '' then
|
|
||||||
IdleStartupRequired = Xlate('REACTOR', ReactNo, REACTOR_IDLE_STARTUP_REQUIRED$, 'X')
|
|
||||||
If IdleStartupRequired EQ True$ then
|
|
||||||
Reactor_Services('GetReactorProveInStatus', ReactNo)
|
|
||||||
end
|
|
||||||
IdleStartupRequired = Xlate('REACTOR', ReactNo, REACTOR_IDLE_STARTUP_REQUIRED$, 'X')
|
|
||||||
If IdleStartupRequired EQ '' then IdleStartupRequired = False$
|
|
||||||
end
|
|
||||||
|
|
||||||
//Check can release from current mode
|
// Check can release from current mode
|
||||||
for each ReleaseGroup in CurModeReleaseGroups using @VM
|
for each ReleaseGroup in CurModeReleaseGroups using @VM
|
||||||
if Memberof(CurrUser, ReleaseGroup) then
|
if Memberof(CurrUser, ReleaseGroup) then
|
||||||
CanRelease = 1
|
CanRelease = 1
|
||||||
@ -267,8 +260,10 @@ Service AvailableModes(ReactorModesKey, CurrUser, ReactNo)
|
|||||||
|
|
||||||
Next mode
|
Next mode
|
||||||
end
|
end
|
||||||
for each PossibleMode in PossibleModes using @FM
|
|
||||||
|
For each PossibleMode in PossibleModes using @FM
|
||||||
AllowMode = True$
|
AllowMode = True$
|
||||||
|
|
||||||
If PossibleMode EQ 'IDLE_STARTUP' and IdleStartupRequired EQ False$ then
|
If PossibleMode EQ 'IDLE_STARTUP' and IdleStartupRequired EQ False$ then
|
||||||
AllowMode = False$
|
AllowMode = False$
|
||||||
end
|
end
|
||||||
@ -299,5 +294,3 @@ Service AvailableModes(ReactorModesKey, CurrUser, ReactNo)
|
|||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -54,10 +54,11 @@ $insert Message_Box_Equates
|
|||||||
Declare function center_window, msg, Memberof, Get_Property, NextKey, next_key, rowexists, Get_Status
|
Declare function center_window, msg, Memberof, Get_Property, NextKey, next_key, rowexists, Get_Status
|
||||||
Declare function SRP_Array, start_window, Dialog_Box, Reactor_Log_Services, Reactor_Modes_Services, GetTickCount
|
Declare function SRP_Array, start_window, Dialog_Box, Reactor_Log_Services, Reactor_Modes_Services, GetTickCount
|
||||||
Declare function Reactor_Services, Error_Services, Logging_Services, Environment_Services, Database_Services
|
Declare function Reactor_Services, Error_Services, Logging_Services, Environment_Services, Database_Services
|
||||||
Declare function SRP_List
|
Declare function SRP_List, Nica_Orders_Services
|
||||||
Declare subroutine RList, Set_Property, Set_List_Box_Data, end_dialog, record_lock, obj_React_Mode, ErrMsg
|
Declare subroutine RList, Set_Property, Set_List_Box_Data, end_dialog, record_lock, obj_React_Mode, ErrMsg
|
||||||
Declare subroutine Mona_Services, Reactor_Services, Error_Services, obj_React_Status, Logging_Services
|
Declare subroutine Mona_Services, Reactor_Services, Error_Services, obj_React_Status, Logging_Services
|
||||||
Declare subroutine Database_Services, Override_Log_Services, SRP_List, Message_Box, Reactor_Log_Services
|
Declare subroutine Database_Services, Override_Log_Services, SRP_List, Message_Box, Reactor_Log_Services
|
||||||
|
Declare subroutine Nica_Orders_Services
|
||||||
|
|
||||||
GoToEvent Event for CtrlEntId else
|
GoToEvent Event for CtrlEntId else
|
||||||
// Event not implemented
|
// Event not implemented
|
||||||
@ -281,52 +282,73 @@ Event APPLY.CLICK()
|
|||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
Reactor_Services('CreateReactModeChange', @User4, ReactNo, NewMode, NewReactModeSvc, NewNoteText)
|
Reactor_Services('CreateReactModeChange', @User4, ReactNo, NewMode, NewReactModeSvc, NewNoteText)
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
|
|
||||||
End_Dialog(@Window, NewMode)
|
End_Dialog(@Window, NewMode)
|
||||||
|
|
||||||
end else
|
end else
|
||||||
|
|
||||||
Error_Services('DisplayError')
|
Error_Services('DisplayError')
|
||||||
ActiveProveIn = Xlate('REACTOR', ReactNo, REACTOR_PROVE_IN_ACTIVE$, 'X')
|
ActiveProveIn = Reactor_Services('GetProveInActive', ReactNo)
|
||||||
If ActiveProveIn then
|
ActiveHgCVChecklists = Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactNo, 'IQS_HGCV_ALARM')
|
||||||
OverrideGroups = 'LEAD':@VM:'SUPERVISOR'
|
HgCVChecklistActive = (ActiveHgCVChecklists NE '')
|
||||||
UserMsg = "Reactor prove in must be processed in NICA. Override required from a lead or supervisor to bypass NICA."
|
|
||||||
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
|
|
||||||
Override = UserVerification<1>
|
|
||||||
If Override EQ True$ then
|
|
||||||
ProveInOrderIds = Xlate('REACTOR', ReactNo, REACTOR_PROVE_IN_ORDER_ID$, 'X')
|
|
||||||
ProveInOrderList = SRP_List('Create', ProveInOrderIds, @VM)
|
|
||||||
ProveInTypes = Xlate('REACTOR', ReactNo, REACTOR_PROVE_IN_TYPE$, 'X')
|
|
||||||
ProveInTypeList = SRP_List('Create', ProveInTypes, @VM)
|
|
||||||
If SRP_List('Count', ProveInOrderList) GT 1 then
|
|
||||||
OverrideData = Dialog_Box('PROVE_IN_OVERRIDE', @Window, ReactNo)
|
|
||||||
|
|
||||||
ProveInTypesToCancel = OverrideData<1, 1>
|
Begin Case
|
||||||
ProveInTypesToCancelList = SRP_List('Create', ProveInTypesToCancel, @VM)
|
|
||||||
|
|
||||||
ResponseComment = ''
|
Case ActiveProveIn
|
||||||
for each ProveInType in ProveInTypes using @VM setting Idx
|
|
||||||
If SRP_List('Locate', ProveInTypesToCancelList, ProveInType) GT 0 then
|
OverrideGroups = 'LEAD':@VM:'SUPERVISOR'
|
||||||
ProveInOrderId = SRP_List('GetAt', ProveInOrderList, Idx)
|
UserMsg = "Reactor prove in must be processed in NICA. Override required from a lead or supervisor to bypass NICA."
|
||||||
Reactor_Services('CancelReactorProveIn', ReactNo, ProveInOrderId)
|
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
|
||||||
If ResponseComment NE '' then
|
Override = UserVerification<1>
|
||||||
ResponseComment := ', '
|
If Override EQ True$ then
|
||||||
|
ProveInOrderIds = Reactor_Services('GetActiveProveInOrderIds', ReactNo)
|
||||||
|
If (DCount(ProveInOrderIds, @VM) GT 1) then
|
||||||
|
ProveInTypes = Xlate('NICA_ORDERS', ProveInOrderIds, 'ORDER_TYPE', 'X')
|
||||||
|
OverrideData = Dialog_Box('PROVE_IN_OVERRIDE', @Window, ReactNo)
|
||||||
|
ProveInTypesToCancel = OverrideData<1, 1>
|
||||||
|
ResponseComment = ''
|
||||||
|
For each ProveInType in ProveInTypes using @VM setting Idx
|
||||||
|
Locate ProveInType in ProveInTypesToCancel using @VM setting Unused then
|
||||||
|
ProveInOrderId = ProveInOrderIds<0, Idx>
|
||||||
|
Nica_Orders_Services('CancelOrder', ProveInOrderId)
|
||||||
|
If ResponseComment NE '' then ResponseComment := ', '
|
||||||
|
ResponseComment := ProveInType
|
||||||
end
|
end
|
||||||
ResponseComment := ProveInType
|
Next ProveInType
|
||||||
end
|
ResponseComment := ': '
|
||||||
Next ProveInType
|
ResponseComment := OverrideData<2, 1>
|
||||||
|
|
||||||
ResponseComment := ': '
|
|
||||||
ResponseComment := OverrideData<2, 1>
|
|
||||||
|
|
||||||
Override_Log_Services('Create', 'REACTOR', ReactNo, UserVerification<2>, ResponseComment, 'REACTOR_PROVE_IN')
|
|
||||||
|
|
||||||
SRP_List('Release', ProveInTypesToCancelList)
|
|
||||||
end else
|
|
||||||
ResponseComment = Dialog_Box('NDW_ADD_COMMENT', @WINDOW)<2>
|
|
||||||
|
|
||||||
If Assigned(ResponseComment) and Len(ResponseComment) GT 4 then
|
|
||||||
ProveInOrderId = SRP_List('GetAt', ProveInOrderList, 1)
|
|
||||||
Reactor_Services('CancelReactorProveIn', ReactNo, ProveInOrderId)
|
|
||||||
|
|
||||||
Override_Log_Services('Create', 'REACTOR', ReactNo, UserVerification<2>, ResponseComment, 'REACTOR_PROVE_IN')
|
Override_Log_Services('Create', 'REACTOR', ReactNo, UserVerification<2>, ResponseComment, 'REACTOR_PROVE_IN')
|
||||||
|
Reactor_Services('CreateReactModeChange', @User4, ReactNo, NewMode, NewReactModeSvc, NewNoteText)
|
||||||
|
If Error_Services('NoError') then End_Dialog(@Window, NewMode)
|
||||||
|
end else
|
||||||
|
ResponseComment = Dialog_Box('NDW_ADD_COMMENT', @WINDOW)<2>
|
||||||
|
If Assigned(ResponseComment) and Len(ResponseComment) GT 4 then
|
||||||
|
Nica_Orders_Services('CancelOrder', ProveInOrderIds<0, 1>)
|
||||||
|
Override_Log_Services('Create', 'REACTOR', ReactNo, UserVerification<2>, ResponseComment, 'REACTOR_PROVE_IN')
|
||||||
|
Reactor_Services('CreateReactModeChange', @User4, ReactNo, NewMode, NewReactModeSvc, NewNoteText)
|
||||||
|
If Error_Services('NoError') then End_Dialog(@Window, NewMode)
|
||||||
|
end else
|
||||||
|
Message_Box(@Window, 'You must enter a comment greater than 4 letters!', 'Error', MSG_ICON_EXCLAM$)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Case HgCVChecklistActive
|
||||||
|
|
||||||
|
OverrideGroups = 'LEAD':@VM:'SUPERVISOR'
|
||||||
|
UserMsg = "HgCV OCAP Checklist must be completed in NICA. Override required from a lead or supervisor to bypass NICA."
|
||||||
|
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
|
||||||
|
Override = UserVerification<1>
|
||||||
|
If Override then
|
||||||
|
|
||||||
|
ResponseComment = Dialog_Box('NDW_ADD_COMMENT', @WINDOW)<2>
|
||||||
|
If Assigned(ResponseComment) and Len(ResponseComment) GT 4 then
|
||||||
|
|
||||||
|
For each ActiveHgCVOrderId in ActiveHgCVChecklists using @VM
|
||||||
|
Nica_Orders_Services('CancelOrder', ActiveHgCVOrderId)
|
||||||
|
Next ActiveHgCVChecklistId
|
||||||
|
|
||||||
|
Override_Log_Services('Create', 'REACTOR', ReactNo, UserVerification<2>, ResponseComment, 'HGCV_OCAP_CHECKLIST')
|
||||||
|
|
||||||
Reactor_Services('CreateReactModeChange', @User4, ReactNo, NewMode, NewReactModeSvc, NewNoteText)
|
Reactor_Services('CreateReactModeChange', @User4, ReactNo, NewMode, NewReactModeSvc, NewNoteText)
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
@ -336,10 +358,8 @@ Event APPLY.CLICK()
|
|||||||
Message_Box(@Window, 'You must enter a comment greater than 4 letters!', 'Error', MSG_ICON_EXCLAM$)
|
Message_Box(@Window, 'You must enter a comment greater than 4 letters!', 'Error', MSG_ICON_EXCLAM$)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
SRP_List('Release', ProveInOrderList)
|
End Case
|
||||||
SRP_List('Release', ProveInTypeList)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -504,3 +524,4 @@ return
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,6 +32,7 @@ $insert SERVICE_SETUP
|
|||||||
$insert SERVICES_EQUATES
|
$insert SERVICES_EQUATES
|
||||||
$insert RLIST_EQUATES
|
$insert RLIST_EQUATES
|
||||||
$insert SQL_REQUESTS_EQUATES
|
$insert SQL_REQUESTS_EQUATES
|
||||||
|
$Insert PROC_QUEUE_EQUATES
|
||||||
|
|
||||||
Common /ServiceServices/ Unused1@, Unused2@, Unused3@, Unused4@, Unused5@, Unused6@, Unused7@, Unused8@, Unused9@, Unused10@
|
Common /ServiceServices/ Unused1@, Unused2@, Unused3@, Unused4@, Unused5@, Unused6@, Unused7@, Unused8@, Unused9@, Unused10@
|
||||||
|
|
||||||
@ -154,20 +155,17 @@ end service
|
|||||||
|
|
||||||
Service ProcessProcedureQueue()
|
Service ProcessProcedureQueue()
|
||||||
|
|
||||||
hValidationRequests = Database_Services('GetTableHandle', 'PROC_QUEUE')
|
Open 'PROC_QUEUE' to hProcQueue then
|
||||||
If Error_Services('NoError') then
|
Select hProcQueue
|
||||||
Sentence = "SELECT PROC_QUEUE WITH COMP_DTM NE ''"
|
|
||||||
Set_Status(0)
|
|
||||||
RList(Sentence, TARGET_ACTIVELIST$, '', '', '')
|
|
||||||
EOF = False$
|
EOF = False$
|
||||||
Loop
|
Loop
|
||||||
ReadNext RequestKeyID else EOF = True$
|
ReadNext RequestKeyID else EOF = True$
|
||||||
Until EOF
|
Until EOF
|
||||||
Lock hValidationRequests, RequestKeyID then
|
Lock hProcQueue, RequestKeyID then
|
||||||
RequestRow = Database_Services('ReadDataRow', 'PROC_QUEUE', RequestKeyID)
|
RequestRow = Database_Services('ReadDataRow', 'PROC_QUEUE', RequestKeyID)
|
||||||
If RequestRow NE '' then
|
If RequestRow NE '' then
|
||||||
Procedure = RequestRow<1>
|
Procedure = RequestRow<PROC_QUEUE.PROC_NAME$>
|
||||||
Params = RequestRow<2>
|
Params = RequestRow<PROC_QUEUE.PARAMS$>
|
||||||
If Procedure NE '' then
|
If Procedure NE '' then
|
||||||
Dim ProcParams(10)
|
Dim ProcParams(10)
|
||||||
For each Param in Params using @VM setting pPos
|
For each Param in Params using @VM setting pPos
|
||||||
@ -190,13 +188,13 @@ Service ProcessProcedureQueue()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
RequestRow<3> = DateTime()
|
Database_Services('DeleteDataRow', 'PROC_QUEUE', RequestKeyId, True$, False$)
|
||||||
end else
|
end else
|
||||||
RequestRow<3> = DateTime()
|
RequestRow<PROC_QUEUE.LAST_ATTEMPT_DTM$> = DateTime()
|
||||||
RequestRow<4> = Error_Services('GetMessage')
|
RequestRow<PROC_QUEUE.ERROR$> = Error_Services('GetMessage')
|
||||||
|
Database_Services('WriteDataRow', 'PROC_QUEUE', RequestKeyID, RequestRow, True$, False$, True$)
|
||||||
end
|
end
|
||||||
Database_Services('WriteDataRow', 'PROC_QUEUE', RequestKeyID, RequestRow, True$, False$, True$)
|
Unlock hProcQueue, RequestKeyID else Null
|
||||||
Unlock hValidationRequests, RequestKeyID else Null
|
|
||||||
end
|
end
|
||||||
Repeat
|
Repeat
|
||||||
end
|
end
|
||||||
@ -208,35 +206,13 @@ Service PostProcecure(ProcedureName, Params)
|
|||||||
|
|
||||||
Response = ''
|
Response = ''
|
||||||
If (ProcedureName NE '') then
|
If (ProcedureName NE '') then
|
||||||
RequestKeyID = RTI_CreateGUID()
|
RequestKeyID = RTI_CreateGUID()
|
||||||
RequestRow = ''
|
RequestRow = ''
|
||||||
RequestRow<SQL_REQUESTS.DB_PATH$> = ''
|
RequestRow<PROC_QUEUE.PROC_NAME$> = ProcedureName
|
||||||
RequestRow<SQL_REQUESTS.QUERY$> = ''
|
RequestRow<PROC_QUEUE.PARAMS$> = Params
|
||||||
Database_Services('WriteDataRow', 'SQL_REQUESTS', RequestKeyID, RequestRow, False$, False$, False$)
|
Database_Services('WriteDataRow', 'PROC_QUEUE', RequestKeyID, RequestRow, True$, False$, False$)
|
||||||
If Error_Services('NoError') then
|
|
||||||
TimeExpired = False$
|
|
||||||
Start = GetTickCount()
|
|
||||||
Loop
|
|
||||||
RequestRow = Database_Services('ReadDataRow', 'SQL_REQUESTS', RequestKeyID)
|
|
||||||
ResponseDate = RequestRow<SQL_REQUESTS.RESPONSE_DATE$>
|
|
||||||
If ResponseDate NE '' then
|
|
||||||
Response = RequestRow<SQL_REQUESTS.RESPONSE$>
|
|
||||||
Response = SRP_Decode(Response)
|
|
||||||
end
|
|
||||||
// Time will expire after 30 seconds.
|
|
||||||
If GetTickCount() - Start GE 30000 then TimeExpired = True$
|
|
||||||
Until (ResponseDate NE '') OR TimeExpired
|
|
||||||
Sleepery(10)
|
|
||||||
WinYield()
|
|
||||||
Yield();Yield();Yield();Yield();Yield();Yield();Yield();Yield()
|
|
||||||
Repeat
|
|
||||||
If TimeExpired then
|
|
||||||
Error_Services('Add', 'Timed out attempting to retrieve wafer image.')
|
|
||||||
end
|
|
||||||
Database_Services('DeleteDataRow', 'SQL_REQUESTS', RequestKeyID, True$)
|
|
||||||
end
|
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', 'Null parameter passed into service call. All parameters are required.')
|
Error_Services('Add', 'Error in ':Service:' service. Null ProcedureName passed in.')
|
||||||
end
|
end
|
||||||
|
|
||||||
return
|
return
|
||||||
@ -247,3 +223,4 @@ return
|
|||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,8 +10,8 @@ function wo_daily_sched_all_comm(Branch,CurrParm)
|
|||||||
***********************************************************************************************************************/
|
***********************************************************************************************************************/
|
||||||
#pragma precomp SRP_PreCompiler
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
declare function set_property, fieldcount, get_property, msg, dialog_box, security_check
|
declare function set_property, fieldcount, get_property, msg, dialog_box, security_check, Reactor_Log_Services
|
||||||
declare function send_message, utility, key_sort, start_window, entid, repository
|
declare function send_message, utility, key_sort, start_window, entid, repository, Nica_Orders_Services
|
||||||
declare function relational_call, memberof, get_mode_icon, Database_Services, Reactor_Services
|
declare function relational_call, memberof, get_mode_icon, Database_Services, Reactor_Services
|
||||||
declare subroutine extract_si_keys, end_dialog, make.list, security_err_msg, Set_Property, SRP_Stopwatch, Dialog_Box
|
declare subroutine extract_si_keys, end_dialog, make.list, security_err_msg, Set_Property, SRP_Stopwatch, Dialog_Box
|
||||||
Declare subroutine Send_Message
|
Declare subroutine Send_Message
|
||||||
@ -67,24 +67,21 @@ ChecklistButton:
|
|||||||
Message = ''
|
Message = ''
|
||||||
ReactorNo = CurrParm[-1, 'B_']
|
ReactorNo = CurrParm[-1, 'B_']
|
||||||
|
|
||||||
Status_ProveIn = XLATE('REACTOR', ReactorNo, REACTOR_PROVE_IN_ACTIVE$, 'X')
|
Status_ProveIn = Reactor_Services('GetProveInActive', ReactorNo)
|
||||||
|
|
||||||
If Status_ProveIn EQ '' Then Status_ProveIn = False$
|
|
||||||
|
|
||||||
Status_0311 = XLATE('REACTOR', ReactorNo, REACTOR_0311_ACTIVE$, 'X')
|
Status_0311 = XLATE('REACTOR', ReactorNo, REACTOR_0311_ACTIVE$, 'X')
|
||||||
|
|
||||||
If Status_0311 EQ '' then Status_0311 = False$
|
If Status_0311 EQ '' then Status_0311 = False$
|
||||||
|
|
||||||
CurrModeKey = Xlate('REACTOR_CHILD_KEY_IDS_NG', ReactorNo, REACTOR_CHILD_KEY_IDS_REACT_MODE_KEY_IDS$, 'X')
|
CurrModeKey = Xlate('REACTOR_CHILD_KEY_IDS_NG', ReactorNo, REACTOR_CHILD_KEY_IDS_REACT_MODE_KEY_IDS$, 'X')
|
||||||
CurrRLKey = Xlate('REACT_MODE_NG', CurrModeKey, REACT_MODE_NG_START_RL_ID$, 'X')
|
CurrRLKey = Xlate('REACT_MODE_NG', CurrModeKey, REACT_MODE_NG_START_RL_ID$, 'X')
|
||||||
Status_ReactorPM = Xlate('REACTOR_LOG', CurrRLKey, REACTOR_LOG_CHECKLIST_ACTIVE$, 'X')
|
ReactorPmOrderIds = Nica_Orders_Services('GetActiveOrders', 'REACTOR_LOG', CurrRlKey)
|
||||||
|
HgCVAlarmOrderIds = Nica_Orders_Services('GetActiveOrders', 'REACTOR', I, 'IQS_HGCV_ALARM')
|
||||||
If Status_ReactorPM EQ '' then Status_ReactorPM = False$
|
|
||||||
|
|
||||||
ChecklistInfo = 'The following checklist(s) are active: '
|
ChecklistInfo = 'The following checklist(s) are active: '
|
||||||
If Status_ProveIn then
|
If Status_ProveIn then
|
||||||
// Add each active prove in order
|
// Add each active prove in order
|
||||||
ProveInOrderTypes = Xlate('REACTOR', ReactorNo, REACTOR_PROVE_IN_TYPE$, 'X')
|
ProveInOrderTypes = Reactor_Services('GetActiveProveInTypes', ReactorNo)
|
||||||
For each ProveInOrderType in ProveInOrderTypes using @VM setting vPos
|
For each ProveInOrderType in ProveInOrderTypes using @VM setting vPos
|
||||||
ChecklistInfo<-1> = ProveInOrderType
|
ChecklistInfo<-1> = ProveInOrderType
|
||||||
Next ProveInOrderType
|
Next ProveInOrderType
|
||||||
@ -92,14 +89,19 @@ ChecklistButton:
|
|||||||
|
|
||||||
If Status_0311 then ChecklistInfo<-1> = '0311 OCAP'
|
If Status_0311 then ChecklistInfo<-1> = '0311 OCAP'
|
||||||
|
|
||||||
If Status_ReactorPM then
|
If ReactorPmOrderIds NE '' then
|
||||||
// Add each active reactor PM order
|
// Add each active reactor PM checklist order
|
||||||
RlPmTypes = Xlate('REACTOR_LOG', CurrRLKey, REACTOR_LOG_CHECKLIST_TYPE$, 'X')
|
For each ReactorPmOrderId in ReactorPmOrderIds using @VM setting vPos
|
||||||
For each RlPmType in RlPmTypes using @VM setting vPos
|
ChecklistInfo<-1> = Xlate('NICA_ORDERS', ReactorPmOrderId, 'ORDER_TYPE', 'X')
|
||||||
ChecklistInfo<-1> = RlPmType
|
|
||||||
Next RlPmType
|
Next RlPmType
|
||||||
end
|
end
|
||||||
|
|
||||||
|
If HgCVAlarmOrderIds NE '' then
|
||||||
|
For each HgCVAlarmOrderId in HgCVAlarmOrderIds using @VM
|
||||||
|
ChecklistInfo<-1> = Xlate('NICA_ORDERS', HgCVAlarmOrderId, 'ORDER_TYPE', 'X')
|
||||||
|
Next HgCVAlarmOrder
|
||||||
|
end
|
||||||
|
|
||||||
Swap @FM with CRLF$ in ChecklistInfo
|
Swap @FM with CRLF$ in ChecklistInfo
|
||||||
|
|
||||||
MsgOverride = ''
|
MsgOverride = ''
|
||||||
@ -246,17 +248,11 @@ FORM_CREATE:
|
|||||||
RPanelTitle := ' - PP'
|
RPanelTitle := ' - PP'
|
||||||
END
|
END
|
||||||
|
|
||||||
Status_ProveIn = XLATE('REACTOR', I, REACTOR_PROVE_IN_ACTIVE$, 'X')
|
Status_ProveIn = Reactor_Services('GetProveInActive', I)
|
||||||
|
|
||||||
IF Status_ProveIn EQ '' THEN
|
|
||||||
Status_ProveIn = FALSE$
|
|
||||||
END
|
|
||||||
|
|
||||||
Status_0311 = XLATE('REACTOR', I, REACTOR_0311_ACTIVE$, 'X')
|
Status_0311 = XLATE('REACTOR', I, REACTOR_0311_ACTIVE$, 'X')
|
||||||
|
|
||||||
IF Status_0311 EQ '' THEN
|
IF Status_0311 EQ '' THEN Status_0311 = FALSE$
|
||||||
Status_0311 = FALSE$
|
|
||||||
END
|
|
||||||
|
|
||||||
Set_Property(Window:'.RPANEL':I, 'TEXT', RpanelTitle ) ;* Display Wafer Size in inches
|
Set_Property(Window:'.RPANEL':I, 'TEXT', RpanelTitle ) ;* Display Wafer Size in inches
|
||||||
Set_Property(Window:'.RWO':I, 'TEXT', WO ) ;* Display WO #
|
Set_Property(Window:'.RWO':I, 'TEXT', WO ) ;* Display WO #
|
||||||
@ -272,7 +268,7 @@ FORM_CREATE:
|
|||||||
|
|
||||||
CurrModeKey = Xlate('REACTOR_CHILD_KEY_IDS_NG', I, 'REACT_MODE_KEY_IDS', 'X')
|
CurrModeKey = Xlate('REACTOR_CHILD_KEY_IDS_NG', I, 'REACT_MODE_KEY_IDS', 'X')
|
||||||
CurrRLKey = Xlate('REACT_MODE_NG', CurrModeKey, 'START_RL_ID', 'X')
|
CurrRLKey = Xlate('REACT_MODE_NG', CurrModeKey, 'START_RL_ID', 'X')
|
||||||
Status_ReactorPM = Xlate('REACTOR_LOG', CurrRLKey, 'CHECKLIST_ACTIVE', 'X')
|
Status_ReactorPM = Reactor_Log_Services('GetRlChecklistActive', CurrRLKey)
|
||||||
|
|
||||||
If Status_ReactorPM EQ '' then Status_ReactorPM = False$
|
If Status_ReactorPM EQ '' then Status_ReactorPM = False$
|
||||||
|
|
||||||
@ -280,7 +276,13 @@ FORM_CREATE:
|
|||||||
Set_Property(Window:'.OLE_PIC_':I, 'OLE.Image', '.\BMPS\ActiveReactorPM.png')
|
Set_Property(Window:'.OLE_PIC_':I, 'OLE.Image', '.\BMPS\ActiveReactorPM.png')
|
||||||
end
|
end
|
||||||
|
|
||||||
OlePicVisible = ( (Status_ProveIn EQ True$) or (Status_0311 EQ True$) or (Status_ReactorPM EQ True$) )
|
Status_HgCV_Alarm = (Nica_Orders_Services('GetActiveOrders', 'REACTOR', I, 'IQS_HGCV_ALARM') NE '')
|
||||||
|
|
||||||
|
If Status_HgCV_Alarm EQ True$ then
|
||||||
|
Set_Property(Window:'.OLE_PIC_':I, 'OLE.Image', '.\BMPS\ActiveProveIn.png')
|
||||||
|
end
|
||||||
|
|
||||||
|
OlePicVisible = ( Status_ProveIn or Status_0311 or Status_ReactorPM or Status_HgCV_Alarm)
|
||||||
Set_Property(Window:'.OLE_PIC_':I,'VISIBLE', OlePicVisible)
|
Set_Property(Window:'.OLE_PIC_':I,'VISIBLE', OlePicVisible)
|
||||||
|
|
||||||
IQSPicControl = @Window : '.OLE_PIC_IQS_': i
|
IQSPicControl = @Window : '.OLE_PIC_IQS_': i
|
||||||
@ -329,3 +331,4 @@ return
|
|||||||
*===============================================================================================*
|
*===============================================================================================*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
13
LSL2/STPROCINS/IQS_VIOL_DATA_EQUATES.txt
Normal file
13
LSL2/STPROCINS/IQS_VIOL_DATA_EQUATES.txt
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
Compile Insert IQS_VIOL_DATA_EQUATES
|
||||||
|
|
||||||
|
Equ IQS_VIOL_DATA.REACTOR$ to 1
|
||||||
|
Equ IQS_VIOL_DATA.TEST$ to 2
|
||||||
|
Equ IQS_VIOL_DATA.USL$ to 3
|
||||||
|
Equ IQS_VIOL_DATA.TAR$ to 4
|
||||||
|
Equ IQS_VIOL_DATA.LSL$ to 5
|
||||||
|
Equ IQS_VIOL_DATA.LAST_ENTRY$ to 6
|
||||||
|
Equ IQS_VIOL_DATA.LAST_ALARM$ to 7
|
||||||
|
Equ IQS_VIOL_DATA.ALARM$ to 8
|
||||||
|
Equ IQS_VIOL_DATA.SUBGROUPS$ to 9
|
||||||
|
Equ IQS_VIOL_DATA.MEAN$ to 10
|
||||||
|
Equ IQS_VIOL_DATA.LAST_WRITE_TIME$ to 11
|
16
LSL2/STPROCINS/NICA_ORDERS_EQUATES.txt
Normal file
16
LSL2/STPROCINS/NICA_ORDERS_EQUATES.txt
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
compile insert NICA_ORDERS_EQUATES
|
||||||
|
/*----------------------------------------
|
||||||
|
Author : Table Create Insert Routine
|
||||||
|
Written : 05/12/2024
|
||||||
|
Description : Insert for Table NICA_ORDERS
|
||||||
|
----------------------------------------*/
|
||||||
|
#ifndef __NICA_ORDERS_EQUATES__
|
||||||
|
#define __NICA_ORDERS_EQUATES__
|
||||||
|
|
||||||
|
equ NICA_ORDERS.ORDER_TYPE$ to 1
|
||||||
|
equ NICA_ORDERS.ORDER_STATUS$ to 2
|
||||||
|
equ NICA_ORDERS.ENTITY_TYPE$ to 3
|
||||||
|
equ NICA_ORDERS.ENTITY_ID$ to 4
|
||||||
|
equ NICA_ORDERS.IS_COMPLETE$ to 5
|
||||||
|
|
||||||
|
#endif
|
@ -1,13 +1,15 @@
|
|||||||
compile insert PROC_QUEUE_EQUATES
|
compile insert PROC_QUEUE_EQUATES
|
||||||
/*----------------------------------------
|
/*----------------------------------------
|
||||||
Author : Table Create Insert Routine
|
Author : Table Create Insert Routine
|
||||||
Written : 15/01/2020
|
Written : 09/12/2024
|
||||||
Description : Insert for Table PROC_QUEUE
|
Description : Insert for Table PROC_QUEUE
|
||||||
----------------------------------------*/
|
----------------------------------------*/
|
||||||
|
#ifndef __PROC_QUEUE_EQUATES__
|
||||||
|
#define __PROC_QUEUE_EQUATES__
|
||||||
|
|
||||||
|
equ PROC_QUEUE.PROC_NAME$ to 1
|
||||||
|
equ PROC_QUEUE.PARAMS$ to 2
|
||||||
|
equ PROC_QUEUE.LAST_ATTEMPT_DTM$ to 3
|
||||||
|
equ PROC_QUEUE.ERROR$ to 4
|
||||||
|
|
||||||
Equ PROC_QUEUE.REQ_ID$ To 0
|
#endif
|
||||||
Equ PROC_QUEUE.PROC_NAME$ To 1
|
|
||||||
Equ PROC_QUEUE.PARAMS$ To 2
|
|
||||||
Equ PROC_QUEUE.COMP_DTM$ To 3
|
|
||||||
Equ PROC_QUEUE.ERROR$ To 4
|
|
||||||
|
@ -77,7 +77,5 @@ Equ REACTOR_PROVE_IN_ACTIVE$ To 65
|
|||||||
Equ REACTOR_PROVE_IN_TYPE$ To 66
|
Equ REACTOR_PROVE_IN_TYPE$ To 66
|
||||||
Equ REACTOR_PROVE_IN_ORDER_ID$ To 67
|
Equ REACTOR_PROVE_IN_ORDER_ID$ To 67
|
||||||
Equ REACTOR_IDLE_STARTUP_REQUIRED$ To 68
|
Equ REACTOR_IDLE_STARTUP_REQUIRED$ To 68
|
||||||
|
Equ REACTOR_IQS_ALARM_DTM$ To 69
|
||||||
|
Equ REACTOR_IQS_ALARM_TEST$ To 70
|
||||||
|
|
||||||
|
|
||||||
|
@ -72,10 +72,11 @@ Function Error_Services(@Service, @Params)
|
|||||||
|
|
||||||
#pragma precomp SRP_PreCompiler
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
$insert LOGICAL
|
$Insert LOGICAL
|
||||||
$Insert MSG_EQUATES
|
$Insert MSG_EQUATES
|
||||||
$insert RTI_DEBUG_COMMON
|
$Insert RTI_DEBUG_COMMON
|
||||||
$insert SRPMail_Inserts
|
$Insert SRPMail_Inserts
|
||||||
|
$Insert ERROR_SERVICES_COMMON
|
||||||
|
|
||||||
Equ Segoe_UI$ to 'Segoe UI' : @SVM : -12 : @SVM : 400 : @SVM : 0 : @SVM : 0 : @SVM : 0 : @SVM : 0 : @SVM : 34 : @SVM : 0 : @SVM : 3 : @SVM : 2 : @SVM : 1 : @SVM : 0 : @SVM : 0 : @SVM : 0 : @SVM : 0
|
Equ Segoe_UI$ to 'Segoe UI' : @SVM : -12 : @SVM : 400 : @SVM : 0 : @SVM : 0 : @SVM : 0 : @SVM : 0 : @SVM : 34 : @SVM : 0 : @SVM : 3 : @SVM : 2 : @SVM : 1 : @SVM : 0 : @SVM : 0 : @SVM : 0 : @SVM : 0
|
||||||
|
|
||||||
@ -98,8 +99,6 @@ If Assigned(Response) else Response = ''
|
|||||||
|
|
||||||
AutoDisplayErrors = False$ ; // Set this to True$ when debugging so all errors will automatically display.
|
AutoDisplayErrors = False$ ; // Set this to True$ when debugging so all errors will automatically display.
|
||||||
|
|
||||||
Common /ErrorServices/ ErrorMessages@, ErrorSources@, ErrorCodes@, RetStacks@, Unused5@, Unused6@, Unused7@, Unused8@
|
|
||||||
|
|
||||||
Declare function RetStack, Error_Services, SRPSendMail
|
Declare function RetStack, Error_Services, SRPSendMail
|
||||||
Declare subroutine Error_Services
|
Declare subroutine Error_Services
|
||||||
|
|
||||||
|
@ -468,15 +468,23 @@ Service PullEntities(EntityList, StatusList, StatusCtrl, CommitId)
|
|||||||
If Get_Status(ErrCode) then
|
If Get_Status(ErrCode) then
|
||||||
SRP_Git_Services("SendStatus", StatusCtrl, " -- Save Failed\n Locked!\n", "", LogPos)
|
SRP_Git_Services("SendStatus", StatusCtrl, " -- Save Failed\n Locked!\n", "", LogPos)
|
||||||
end else
|
end else
|
||||||
Set_Status(0)
|
Set_Status(0)
|
||||||
Repository("WRITE", EntityId, "", 1, 1, "", "", "", "", "", EntityId[-1, "B*"], Record)
|
Repository("WRITE", EntityId, "", 1, 1, "", "", "", "", "", EntityId[-1, "B*"], Record)
|
||||||
If Get_Status(ErrCode) then
|
If Get_Status(ErrCode) then
|
||||||
SRP_Git_Services("SendStatus", StatusCtrl, " -- Save Failed\n", ErrCode, LogPos)
|
Set_Status(0)
|
||||||
end else
|
Repository("NEW", EntityId, "", 1, 1, "", "", "", "", "", EntityId[-1, "B*"], Record)
|
||||||
SRP_Git_Services("SendStatus", StatusCtrl, " -- Saved\n", "", LogPos)
|
If Get_Status(ErrCode) then
|
||||||
Get_Status(ErrCode)
|
SRP_Git_Services("SendStatus", StatusCtrl, " -- Save Failed\n", ErrCode, LogPos)
|
||||||
If Type EQ "STPROC" OR Type EQ "OIWIN" OR Type EQ "OIEVENT" then EntitiesToCompile := EntityId:@FM
|
end else
|
||||||
end
|
SRP_Git_Services("SendStatus", StatusCtrl, " -- Saved\n", "", LogPos)
|
||||||
|
Get_Status(ErrCode)
|
||||||
|
If Type EQ "STPROC" OR Type EQ "OIWIN" OR Type EQ "OIEVENT" then EntitiesToCompile := EntityId:@FM
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
SRP_Git_Services("SendStatus", StatusCtrl, " -- Saved\n", "", LogPos)
|
||||||
|
Get_Status(ErrCode)
|
||||||
|
If Type EQ "STPROC" OR Type EQ "OIWIN" OR Type EQ "OIEVENT" then EntitiesToCompile := EntityId:@FM
|
||||||
|
end
|
||||||
Set_Status(0)
|
Set_Status(0)
|
||||||
Repository("UNLOCK", EntityId)
|
Repository("UNLOCK", EntityId)
|
||||||
end
|
end
|
||||||
|
4
SYSPROG/STPROCINS/ERROR_SERVICES_COMMON.txt
Normal file
4
SYSPROG/STPROCINS/ERROR_SERVICES_COMMON.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
Compile Insert ERROR_SERVICES_COMMON
|
||||||
|
|
||||||
|
Common /ErrorServices/ ErrorMessages@, ErrorSources@, ErrorCodes@, RetStacks@, EsSpStatCode@, EsSpStatMessage@, Unused7@, Unused8@
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user