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 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 = Datetime() TransRec = 'WRITE_FIELD' TransRec = Table TransRec = Key TransRec = FieldNo TransRec = 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 = Datetime() TransRec = 'WRITE_RECORD' TransRec = Table TransRec = Key TransRec = 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 = Datetime() TransRec = 'DELETE_RECORD' TransRec = Table TransRec = 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 Select 'TRANSACTION_QUEUE' by 'TRANSACTION_DTM' setting Cursor then EOF = False$ Loop LogData = '' DeleteTrans = False$ ErrorMsg = '' ReadNext TransId using Cursor By At else EOF = True$ Until EOF TransRec = Database_Services('ReadDataRow', 'TRANSACTION_QUEUE', TransId) If Error_Services('NoError') then Action = TransRec Table = TransRec Key = TransRec 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 FieldVal = TransRec 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, '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