Files
open-insight/LSL2/STPROC/TRANSACTION_SERVICES.txt
2025-06-25 09:34:01 -07:00

252 lines
9.1 KiB
Plaintext

Compile function Transaction_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 : Transaction_Services
Description : Handler program for all module related services.
Notes : Service module to support environmental state issues. Environmental refers to the state of the
operating system, which includes version, client vs. server, and path to critical systems.
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 requesting procedure
Metadata :
History : (Date, Initials, Notes)
06/24/25 djs Original programmer.
***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler
$Insert SERVICE_SETUP
$Insert APP_INSERTS
$Insert TRANSACTION_QUEUE_EQUATES
$Insert RLIST_EQUATES
EQU COMMA$ to ','
Declare function Datetime, RTI_CreateGuid, Error_Services, SRP_Encode, SRP_Decode, Database_Services
Declare function Environment_Services, Logging_Services
Declare subroutine Database_Services, Error_Services, Logging_Services
GoToService
Return Response or ""
//-----------------------------------------------------------------------------
// SERVICES
//-----------------------------------------------------------------------------
Service PostWriteFieldTransaction(Table, Key, FieldNo, FieldVal)
ErrorMsg = ''
Begin Case
Case (Table EQ '')
ErrorMsg = 'Error in ':Service:' service. Null Table passed into service.'
Case (Key EQ '')
ErrorMsg = 'Error in ':Service:' service. Null Key passed into service.'
Case (FieldNo EQ '')
ErrorMsg = 'Error in ':Service:' service. Null Table passed into service.'
Case Not(Num(FieldNo))
ErrorMsg = 'Error in ':Service:' service. FieldNo ':FieldNo:' is not a number.'
Case Otherwise$
TransKey = RTI_CreateGuid()
TransRec = ''
TransRec<TRANSACTION_QUEUE.TRANSACTION_DTM$> = Datetime()
TransRec<TRANSACTION_QUEUE.ACTION$> = 'WRITE_FIELD'
TransRec<TRANSACTION_QUEUE.TABLE$> = Table
TransRec<TRANSACTION_QUEUE.KEY$> = Key
TransRec<TRANSACTION_QUEUE.COLUMN$> = FieldNo
TransRec<TRANSACTION_QUEUE.VALUE$> = FieldVal
Database_Services('WriteDataRow', 'TRANSACTION_QUEUE', TransKey, TransRec)
If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage')
End Case
If ErrorMsg EQ '' then
Response = True$
end else
Error_Services('Add', ErrorMsg)
Response = False$
end
end service
Service PostWriteRecordTransaction(Table, Key, Record)
ErrorMsg = ''
Begin Case
Case (Table EQ '')
ErrorMsg = 'Error in ':Service:' service. Null Table passed into service.'
Case (Key EQ '')
ErrorMsg = 'Error in ':Service:' service. Null Key passed into service.'
Case (Record EQ '')
ErrorMsg = 'Error in ':Service:' service. Null Record passed into service.'
Case Otherwise$
TransKey = RTI_CreateGuid()
TransRec = ''
TransRec<TRANSACTION_QUEUE.TRANSACTION_DTM$> = Datetime()
TransRec<TRANSACTION_QUEUE.ACTION$> = 'WRITE_RECORD'
TransRec<TRANSACTION_QUEUE.TABLE$> = Table
TransRec<TRANSACTION_QUEUE.KEY$> = Key
TransRec<TRANSACTION_QUEUE.RECORD$> = SRP_Encode(Record, 'BASE64')
Database_Services('WriteDataRow', 'TRANSACTION_QUEUE', TransKey, TransRec)
If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage')
End Case
If ErrorMsg EQ '' then
Response = True$
end else
Error_Services('Add', ErrorMsg)
Response = False$
end
end service
Service PostDeleteRecordTransaction(Table, Key)
ErrorMsg = ''
Begin Case
Case (Table EQ '')
ErrorMsg = 'Error in ':Service:' service. Null Table passed into service.'
Case (Key EQ '')
ErrorMsg = 'Error in ':Service:' service. Null Key passed into service.'
Case Otherwise$
TransKey = RTI_CreateGuid()
TransRec = ''
TransRec<TRANSACTION_QUEUE.TRANSACTION_DTM$> = Datetime()
TransRec<TRANSACTION_QUEUE.ACTION$> = 'DELETE_RECORD'
TransRec<TRANSACTION_QUEUE.TABLE$> = Table
TransRec<TRANSACTION_QUEUE.KEY$> = Key
Database_Services('WriteDataRow', 'TRANSACTION_QUEUE', TransKey, TransRec)
If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage')
End Case
If ErrorMsg EQ '' then
Response = True$
end else
Error_Services('Add', ErrorMsg)
Response = False$
end
end service
Service ProcessTransactionQueue()
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
Lock hSysLists, ServiceKeyID then
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Transaction'
LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS')
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Transaction Queue Log.csv'
Headers = 'Logging DTM':@FM:'Result':@FM:'Action':@FM:'Table':@FM:'Key':@FM:'Base64Record'
Headers := @FM:'Column':@FM:'Value'
objQueueLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, COMMA$, Headers, '', False$, False$)
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
GoSub ClearCursors
Query = 'SELECT TRANSACTION_QUEUE BY TRANSACTION_DTM'
RList(Query, TARGET_ACTIVELIST$, '', '', '')
ErrCode = ''
If Not(Get_Status(ErrCode)) then
EOF = False$
Loop
LogData = ''
DeleteTrans = False$
ErrorMsg = ''
ReadNext TransId else EOF = True$
Until EOF
TransRec = Database_Services('ReadDataRow', 'TRANSACTION_QUEUE', TransId)
If Error_Services('NoError') then
Action = TransRec<TRANSACTION_QUEUE.ACTION$>
Table = TransRec<TRANSACTION_QUEUE.TABLE$>
Key = TransRec<TRANSACTION_QUEUE.KEY$>
LogData<3> = Action
LogData<4> = Table
LogData<5> = Key
HaveLock = Database_Services('GetKeyIDLock', Table, Key)
If HaveLock then
Begin Case
Case Action EQ 'WRITE_FIELD'
FieldNo = TransRec<TRANSACTION_QUEUE.COLUMN$>
FieldVal = TransRec<TRANSACTION_QUEUE.VALUE$>
LogData<7> = FieldNo
LogData<8> = FieldVal
Open Table to hTable then
WriteV FieldVal on hTable, Key, FieldNo then
DeleteTrans = True$
end else
ErrorMsg = 'Error in ':Service:' service. Error calling WriteV. '
ErrorMsg := 'File error: ':@File_Error
end
end else
ErrorMsg = 'Error in ':Service:' service. Error opening ':Table:'.'
end
Case Action EQ 'WRITE_RECORD'
Record = SRP_Decode(TransRec<TRANSACTION_QUEUE.RECORD$>, 'BASE64')
LogData<6> = Record
Database_Services('WriteDataRow', Table, Key, Record, True$, False$, False$)
If Error_Services('NoError') then
DeleteTrans = True$
end else
ErrorMsg = Error_Services('GetMessage')
end
Case Action EQ 'DELETE_RECORD'
Database_Services('DeleteDataRow', Table, Key, True$, False$)
If Error_Services('NoError') then
DeleteTrans = True$
end else
ErrorMsg = Error_Services('GetMessage')
end
Case Otherwise$
DeleteTrans = True$
ErrorMsg = 'Error in ':Service:' service. Invalid Action ':Action:'.'
End Case
Database_Services('ReleaseKeyIDLock', Table, Key)
If DeleteTrans then Database_Services('DeleteDataRow', 'TRANSACTION_QUEUE', TransId)
end else
ErrorMsg = 'Error in ':Service:' service. Failed to get lock on ':Table:' ':Key:'.'
end
end else
ErrorMsg = Error_Services('GetMessage')
end
LogData<1> = OConv(Datetime(), 'DT2/^H')
If ErrorMsg EQ '' then
// Log success
LogData<2> = 'Successfully processed transaction ':TransId:'.'
end else
// Log failure
LogData<2> = 'Failed to process transaction ':TransId:'. Error message: ':ErrorMsg
end
Logging_Services('AppendLog', objQueueLog, LogData, @RM, @FM)
Repeat
end
Unlock hSysLists, ServiceKeyID else Null
end
end service
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ClearCursors:
For counter = 0 to 8
ClearSelect counter
Next counter
return