250 lines
8.3 KiB
Plaintext
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
|