open-insight/LSL2/STPROC/COMM_DIALOG_SAP_COMM.txt
Infineon\StieberD 7762b129af pre cutover push
2024-09-04 20:33:41 -07:00

250 lines
8.3 KiB
Plaintext

COMPILE FUNCTION Comm_Dialog_SAP_Comm( Instruction, Parm1 )
/*
Commuter Module for SAP Communications Window
J.C. Henry, Inc. - John C. Henry
*/
DECLARE SUBROUTINE Center_Window,StatusLine,Set_Property,End_Dialog, Send_Event, Set_Status, Adios, obj_SAP, obj_Notes, obj_Post_Log, RList, SAP_Services
DECLARE SUBROUTINE ErrMsg, Send_Message, obj_Tables, Post_Event, Send_INfo, ShowWindow, obj_Appwindow, Send_Dyn,ErrLog, obj_WO_Mat_Log, Sleepery, Yield, SRP_Stopwatch, SRP_TCPClient
DECLARE FUNCTION Get_Property, Get_Status,Dialog_Box, FindWindow, Utility, SAP_Services, Database_Services, SRP_TCPClient
$INSERT QUOTE_SIGS_EQU
$INSERT NOTIFICATION_EQU
$INSERT APPCOLORS
$INSERT LOGICAL
EQU CRLF$ TO \0D0A\
EQU InBoundLimit$ TO 20
EQU OutBoundLimit$ TO 10
EQU DEFAULT_INTERVAL$ TO 10 /* Seconds */
$INSERT ENVIRON_CONSTANTS
ErrTitle = 'Error in Comm_Dialog_SAP_Comm routine'
ErrorMsg = ''
Instructions = 'Create'
Instructions := @FM:'Timer'
Instructions := @FM:'StartStop'
Instructions := @FM:'CommStartStop'
Instructions := @FM:'Close'
RetVal = ''
BEGIN CASE
CASE Instruction = 'Create' ; GOSUB Create
CASE Instruction = 'Timer' ; GOSUB Timer
CASE Instruction EQ @Window : '.LOG_ON' AND Parm1 EQ 'CLICK' ; GoSub LOG_ON.CLICK
CASE Instruction EQ @Window : '.TRANS_QTY' AND Parm1 EQ 'LOSTFOCUS' ; GoSub TRANS_QTY.LOSTFOCUS
CASE Instruction EQ @Window : '.SAP_HOLD_START_DTM' AND Parm1 EQ 'LOSTFOCUS' ; GoSub SAP_HOLD_START_DTM.LOSTFOCUS
CASE Instruction EQ @Window : '.SAP_HOLD_STOP_DTM' AND Parm1 EQ 'LOSTFOCUS' ; GoSub SAP_HOLD_STOP_DTM.LOSTFOCUS
CASE Instruction = 'Close' ; GOSUB Close
CASE 1
ErrorMsg = 'Unknown Instruction ':QUOTE(Instruction):' passed to routine'
END CASE
IF ErrorMsg NE '' THEN
ErrMsg(ErrTitle:@SVM:ErrorMsg)
END
RETURN RetVal
* * * * * * *
Create:
* * * * * * *
obj_Appwindow('Create',@WINDOW)
otParms = 'SYSOBJ':@RM:'SAP_COMM'
obj_Tables('LockRec',otParms) ;* Places lock on fictional record
IF Get_Status(errCode) THEN
ErrorMsg = ErrTitle:@SVM:'Another SAP Communications Server is already running.'
ErrMsg(ErrorMsg)
Post_Event(@WINDOW,'CLOSE')
RETURN
END
Set_Property(@WINDOW,'@LOCKED',1) ;* Set ad-hoc property '@LOCKED' to true
Set_Property(@WINDOW,'TIMER','0':@FM:'1000') ;* Set timer event to start in 1000 msecs (1 second). Do not set for auto-repeat. Let the TIMER event handle this.
Set_Property(@WINDOW:'.TRANS_QTY', 'INVALUE', SAP_Services('GetSAPTransactionLimit'))
Set_Property(@WINDOW:'.SAP_HOLD_START_DTM', 'INVALUE', SAP_Services('GetSAPHoldStartDateTime'))
Set_Property(@WINDOW:'.SAP_HOLD_STOP_DTM', 'INVALUE', SAP_Services('GetSAPHoldStopDateTime'))
RETURN
LOG_ON.CLICK:
LoggingFlag = Get_Property(@Window : '.LOG_ON', 'CHECK')
SAP_Services('SetTransactionLoggingFlag', LoggingFlag)
return
TRANS_QTY.LOSTFOCUS:
TransactionLimit = Get_Property(@Window : '.TRANS_QTY', 'TEXT')
SAP_Services('SetSAPTransactionLimit', TransactionLimit)
return
SAP_HOLD_START_DTM.LOSTFOCUS:
HoldStartDTM = Get_Property(@Window : '.SAP_HOLD_START_DTM', 'INVALUE')
SAP_Services('SetSAPHoldStartDateTime', HoldStartDTM)
return
SAP_HOLD_STOP_DTM.LOSTFOCUS:
HoldStopDTM = Get_Property(@Window : '.SAP_HOLD_STOP_DTM', 'INVALUE')
SAP_Services('SetSAPHoldStopDateTime', HoldStopDTM)
return
* * * * * * *
Close:
* * * * * * *
UNLOCK ALL
NumWindows = Utility('WINCOUNT')
If NumWindows EQ 1 then Set_Property('SYSTEM','IDLEPROC','ADIOS')
RETURN
* * * * * * *
Timer:
* * * * * * *
Set_Status(0)
Set_Property(@WINDOW:'.CURR_TIME','TEXT',OCONV( Time(), 'MTHS' )) ;* Clock on window
LastTime = Get_Property(@WINDOW,'@LAST_TIME')
* * * Added 1/29/2015 JCH/DKK * * *
*** Used to temporarily stop the SAP interface during specified time periods, like SAP-PI outage, EOM procesing, VM backups.
SAPOutage = SAP_Services('GetSAPOutageFlag')
IF SAPOutage THEN
Set_Property(@WINDOW:'.BACKUP_HOLD','VISIBLE',1)
END ELSE
Set_Property(@WINDOW:'.BACKUP_HOLD','VISIBLE',0)
END
IF LastTime > Time() THEN
Set_Property(@WINDOW,'@LAST_TIME', Time()) ;* Midnight -> clock resets to 0
LastTime = Time()
// Call the SRPEngineService and pass it the command
Command = 'RUN SAP_SERVICES "SendReconcile"'
TCPServerSettings@ = Database_Services('ReadDataRow', 'APP_INFO', 'SQL_TCPIP_SETTINGS')
TcpClientHandle = 0
If SRP_TcpClient(TcpClientHandle, 'CONNECT', TCPServerSettings@<1>, TCPServerSettings@<2>) then
SRP_TcpClient(TcpClientHandle, 'SEND_SES', Command)
SRP_TcpClient(TcpClientHandle, 'CLOSE_SES')
end
* obj_SAP('SendReconcile') ;* WIP Recom data sent to SAP once each day at midnight
END
CommOn = Get_Property(@WINDOW,'@COMM_ACTIVE')
CommOnTime = Get_Property(@WINDOW,'@COMM_ACTIVE_TIME')
IF CommOn THEN
Send_Info('Comm Active...')
IF Time() - CommOnTime > 22 THEN
Set_Property(@WINDOW,'@COMM_ACTIVE',0) ;* FTP window timeout takes about 21 seconds
Set_Property(@WINDOW,'@COMM_ACTIVE_TIME','') ;* Hold off retrying until
END
END ELSE
Interval = DEFAULT_INTERVAL$
IF Time() >= (LastTime + Interval) Then ;* SAP_Comm cycle time setting = 10 sec - changed to 8 sec -dkk 1/14/15
Set_Property(@WINDOW,'@LAST_TIME', Time())
END ;* End of comm interval time check
END ;* End of check for @COMM_ON flag
*********************************************
* Refresh the SAP Buffer Outbound Qty Count *
*********************************************
OutboundQty = SAP_Services('GetOutboundPending')
Set_Property(@WINDOW:'.OUTBOUND_QTY','TEXT', OutboundQty)
If (OutboundQty >= OutBoundLimit$) Then
OutBoundMsgSent = Get_Property(@Window,'@OutBoundMsgSent')
If (OutBoundMsgSent NE True$) Then
Recipients = XLATE('NOTIFICATION', 'FI_SUPPORT', 'USER_ID', 'X')
SentFrom = 'OI Admin'
Subject = 'SAP Comm OUTBOUND Pending Buffer'
Message = 'SAP Comm OUTBOUND Pending Buffer is filling up with ':OutboundQty:' records not sent. Check SAP interface.'
AttachWindow = ''
AttachKey = ''
SendToGroup = ''
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
obj_Notes('Create',Parms)
Set_Property(@WINDOW,'@OutBoundMsgSent', True$)
end
end else
Set_Property(@WINDOW,'@OutBoundMsgSent', False$)
end
************************************************
* Refresh the SAP Buffer Inbound Pending Count *
************************************************
Set_Status(0)
InboundPending = SAP_Services('GetInboundPending')
If InboundPending < 0 then InboundPending = 0
Set_Property(@WINDOW:'.INBOUND_PENDING','TEXT', InboundPending)
If (InboundPending >= InBoundLimit$) Then
InBoundMsgSent = Get_Property(@Window,'@InBoundMsgSent')
If (InBoundMsgSent NE True$) Then
Recipients = XLATE('NOTIFICATION', 'FI_SUPPORT', 'USER_ID', 'X')
SentFrom = 'OI Admin'
Subject = 'SAP Comm INBOUND Pending Buffer'
Message = 'SAP Comm INBOUND Pending Buffer is filling up with ':InBoundPending:' records not received. Check SAP interface.'
AttachWindow = ''
AttachKey = ''
SendToGroup = ''
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
obj_Notes('Create',Parms)
Set_Property(@WINDOW,'@InBoundMsgSent', True$)
end
end else
Set_Property(@WINDOW,'@InBoundMsgSent', False$)
end
Yield(); Yield(); Yield(); Yield(); Yield(); Yield(); Yield(); Yield(); Yield(); Yield()
Sleepery(500)
Set_Property(@WINDOW,'TIMER','0':@FM:'1000') ;* Set the next timer event to start in 1000 msecs (1 second).
RETURN