From 1b94adb0d1d150f5d897def31bc9e2e26f5dd6bd Mon Sep 17 00:00:00 2001 From: "Ouellette Jonathan (CSC FI SPS MESLEO)" Date: Fri, 17 Oct 2025 16:20:55 +0000 Subject: [PATCH] Merged PR 28628: Modified create archive routine to get the archive seq number after creation... Modified create archive routine to get the archive seq number after creation based on the archive id. Increase retry count in delete function. Added retry in de-archive. Retries are needed to account for race conditions possibly with the indexer. --- LSL2/STPROC/ARCHIVE_SERVICES.txt | 2651 +++++++++++++++--------------- 1 file changed, 1329 insertions(+), 1322 deletions(-) diff --git a/LSL2/STPROC/ARCHIVE_SERVICES.txt b/LSL2/STPROC/ARCHIVE_SERVICES.txt index e41cd67..59b2078 100644 --- a/LSL2/STPROC/ARCHIVE_SERVICES.txt +++ b/LSL2/STPROC/ARCHIVE_SERVICES.txt @@ -54,64 +54,64 @@ Parameters- ArchiveType - Determines what method will be run to generate the ARCHIVE record. */ Service RunArchive(ArchiveType=ARCHIVE_TYPES) - - hSysLists = Database_Services('GetTableHandle', 'SYSLISTS') - Lock hSysLists, ServiceKeyID then - ErrorMsg = '' - If ArchiveType NE '' then - ArchiveSettings = Database_Services('ReadDataRow', 'APP_INFO', 'ARCHIVE_CONFIG') - Locate ArchiveType in ArchiveSettings<1> using @VM setting ArchConfPos then - YearsBackSetting = ArchiveSettings<2, ArchConfPos> - CreatedArchiveRecId = '' - KeysToArchive = '' - Begin Case - - Case ArchiveType EQ 'WO_LOG' - //Get WO_LOG Keys - KeysToArchive = Work_Order_Services('GetClosedWOsToArchive', YearsBackSetting) - if Error_Services('HasError') then - ErrorMsg = Error_Services('GetMessage') - end - - Case Otherwise$ - ErrorMsg = 'Invalid archive type.' - - End Case - end else - ErrorMsg = 'Archive settings not found in APP_INFO -> ARCHIVE_CONFIG.' - end - - If ErrorMsg EQ '' then - ArchiveRecordsIds = '' - If KeysToArchive NE '' then - ArchiveCountLimit = 30000 - ArchiveCount = 0 - for each Key in KeysToArchive using @VM - Until ArchiveCount EQ ArchiveCountLimit - CreatedArchiveRecId = Archive_Services('CreateArchiveRecord', Key, ArchiveType, False$, True$) - If Error_Services('NoError') then - If CreatedArchiveRecId NE '' then - ArchiveRecordsIds<1, -1> = CreatedArchiveRecId - ArchiveCount += 1 - end - end else - ErrorMsg = Error_Services('GetMessage') - end - Next Key - end - Archive_Services('GenerateArchiveCreationReport', ArchiveRecordsIds) - end - end else - ErrorMsg = 'Archive type was null.' - end - - If ErrorMsg NE '' then - Error_Services('Add', ErrorMsg) - end - Unlock hSysLists, ServiceKeyID else Null - end - - + + hSysLists = Database_Services('GetTableHandle', 'SYSLISTS') + Lock hSysLists, ServiceKeyID then + ErrorMsg = '' + If ArchiveType NE '' then + ArchiveSettings = Database_Services('ReadDataRow', 'APP_INFO', 'ARCHIVE_CONFIG') + Locate ArchiveType in ArchiveSettings<1> using @VM setting ArchConfPos then + YearsBackSetting = ArchiveSettings<2, ArchConfPos> + CreatedArchiveRecId = '' + KeysToArchive = '' + Begin Case + + Case ArchiveType EQ 'WO_LOG' + //Get WO_LOG Keys + KeysToArchive = Work_Order_Services('GetClosedWOsToArchive', YearsBackSetting) + if Error_Services('HasError') then + ErrorMsg = Error_Services('GetMessage') + end + + Case Otherwise$ + ErrorMsg = 'Invalid archive type.' + + End Case + end else + ErrorMsg = 'Archive settings not found in APP_INFO -> ARCHIVE_CONFIG.' + end + + If ErrorMsg EQ '' then + ArchiveRecordsIds = '' + If KeysToArchive NE '' then + ArchiveCountLimit = 30000 + ArchiveCount = 0 + for each Key in KeysToArchive using @VM + Until ArchiveCount EQ ArchiveCountLimit + CreatedArchiveRecId = Archive_Services('CreateArchiveRecord', Key, ArchiveType, False$, True$) + If Error_Services('NoError') then + If CreatedArchiveRecId NE '' then + ArchiveRecordsIds<1, -1> = CreatedArchiveRecId + ArchiveCount += 1 + end + end else + ErrorMsg = Error_Services('GetMessage') + end + Next Key + end + Archive_Services('GenerateArchiveCreationReport', ArchiveRecordsIds) + end + end else + ErrorMsg = 'Archive type was null.' + end + + If ErrorMsg NE '' then + Error_Services('Add', ErrorMsg) + end + Unlock hSysLists, ServiceKeyID else Null + end + + end service /* @@ -124,112 +124,115 @@ Parameters- ArchiveType - The table of the parent record. */ Service CreateArchiveRecord(ParentRecordId, ArchiveType, ReArchive, AddToQueue) - - LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Archive\ArchiveRecordCreation' - LogDate = Oconv(Date(), 'D4/') - LogTime = Oconv(Time(), 'MTS') - LoggingDTM = LogDate : ' ' : LogTime - LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ArchiveCreation.csv' - Headers = 'Logging DTM' : @FM : 'Record Table' : @FM : 'Record Id' : @FM : 'Success' : @FM : 'Message' - objRecordArchival = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$) - - ErrorMsg = '' - ArchiveId = '' - ArchiveSeq = 1 - - If ParentRecordId NE '' then - If ArchiveType NE '' then - if Not(ReArchive) then - ArchiveId = ArchiveType : '*' : ParentRecordId : '*' : ArchiveSeq - end else - ValidId = False$ - for ArchiveSeq = 1 to 99 - Until ValidId = True$ - ArchiveId = ArchiveType : '*' : ParentRecordId : '*' : ArchiveSeq - If Not(RowExists('ARCHIVE', ArchiveId)) then - ValidId = True$ - end - Next ArchiveSeq - end - If Not(RowExists('ARCHIVE', ArchiveId)) then - ArchiveRecord = '' - ChildRecords = '' - Begin Case - Case ArchiveType EQ 'WO_LOG' - ChildRecords = Work_Order_Services('GetWOLogHierachy', ParentRecordId) - MetaData = Work_Order_Services('GetWOMetaData', ParentRecordId) - If Error_Services('NoError') then - ChildRecordCount = DCount(ChildRecords, @VM) - If ChildRecordCount LE 0 then - ErrorMsg = '0 child records returned.' - end - end else - ErrorMsg = Error_Services('GetMessage') - end - Case Otherwise$ - ErrorMsg = 'Unsupported Archive Type.' - End Case - If ErrorMsg EQ '' then - ArchivePath = Environment_Services('GetTextDataBackupRootDir'):ArchiveType:'\':ParentRecordId:'\':ArchiveSeq:'\' - DirectoryCreated = RTI_OS_Directory( 'CREATE', ArchivePath) - If DirectoryCreated then - ArchiveRecord = Datetime() - ArchiveRecord = ArchivePath - ArchiveRecord = MetaData<1> - ArchiveRecord = MetaData<2> - ArchiveRecord = MetaData<3> - for RecPos = 1 to DCount(ChildRecords<1>, @VM) - ArchiveRecord = ChildRecords<1, RecPos> - ArchiveRecord = ChildRecords<2, RecPos> - ArchiveRecord = False$ - ArchiveRecord = False$ - Next i - Database_Services('WriteDataRow', 'ARCHIVE', ArchiveId, ArchiveRecord) - If Error_Services('NoError') then - CreatedArchiveId = ArchiveId - If AddToQueue then - AddedToArchiveQueue = Archive_Services('AddToArchiveQueue', CreatedArchiveId) - If Error_Services('HasError') then - ErrorMsg = Error_Services('GetMessage') - end - end - end else - ErrorMsg = Error_Services('GetMessage') - end - end else - ErrorMsg = 'Error creating text file backup directory.' - end - end - end else - ErrorMsg = 'Archive record already exists.' - end - end else - ErrorMsg = 'Archive Type was null.' - end - end else - ErrorMsg = 'Record ID was null.' - end - - If ErrorMsg EQ '' then - LogData = '' - LogData<1> = LoggingDTM; - LogData<2> = ArchiveType - LogData<3> = ParentRecordId - LogData<4> = True$ - LogData<5> = 'Successfully created ARCHIVE record - ' : ArchiveId - Logging_Services('AppendLog', objRecordArchival, LogData, @RM, @FM, False$) - Response = ArchiveId - end else - LogData = '' - LogData<1> = LoggingDTM; - LogData<2> = ArchiveType - LogData<3> = ParentRecordId - LogData<4> = False$ - LogData<5> = 'Error creating ARCHIVE record - ' : ErrorMsg - Logging_Services('AppendLog', objRecordArchival, LogData, @RM, @FM, False$) - Error_Services('Add', ErrorMsg) - end - + + LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Archive\ArchiveRecordCreation' + LogDate = Oconv(Date(), 'D4/') + LogTime = Oconv(Time(), 'MTS') + LoggingDTM = LogDate : ' ' : LogTime + LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ArchiveCreation.csv' + Headers = 'Logging DTM' : @FM : 'Record Table' : @FM : 'Record Id' : @FM : 'Success' : @FM : 'Message' + objRecordArchival = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$) + + ErrorMsg = '' + ArchiveId = '' + ArchiveSeq = 1 + + If ParentRecordId NE '' then + If ArchiveType NE '' then + if Not(ReArchive) then + ArchiveId = ArchiveType : '*' : ParentRecordId : '*' : ArchiveSeq + end else + ValidId = False$ + for ArchiveSeq = 1 to 99 + Until ValidId = True$ + ArchiveId = ArchiveType : '*' : ParentRecordId : '*' : ArchiveSeq + If Not(RowExists('ARCHIVE', ArchiveId)) then + ValidId = True$ + end + Next ArchiveSeq + end + If Not(RowExists('ARCHIVE', ArchiveId)) then + ArchiveRecord = '' + ChildRecords = '' + Begin Case + Case ArchiveType EQ 'WO_LOG' + ChildRecords = Work_Order_Services('GetWOLogHierachy', ParentRecordId) + MetaData = Work_Order_Services('GetWOMetaData', ParentRecordId) + If Error_Services('NoError') then + ChildRecordCount = DCount(ChildRecords, @VM) + If ChildRecordCount LE 0 then + ErrorMsg = '0 child records returned.' + end + end else + ErrorMsg = Error_Services('GetMessage') + end + Case Otherwise$ + ErrorMsg = 'Unsupported Archive Type.' + End Case + If ErrorMsg EQ '' then + ArchiveType = Field(ArchiveId, '*', 1) + ParentRecordId = Field(ArchiveId, '*', 2) + ArchiveSeq = Field(ArchiveId, '*', 3) + ArchivePath = Environment_Services('GetTextDataBackupRootDir'):ArchiveType:'\':ParentRecordId:'\':ArchiveSeq:'\' + DirectoryCreated = RTI_OS_Directory( 'CREATE', ArchivePath) + If DirectoryCreated then + ArchiveRecord = Datetime() + ArchiveRecord = ArchivePath + ArchiveRecord = MetaData<1> + ArchiveRecord = MetaData<2> + ArchiveRecord = MetaData<3> + for RecPos = 1 to DCount(ChildRecords<1>, @VM) + ArchiveRecord = ChildRecords<1, RecPos> + ArchiveRecord = ChildRecords<2, RecPos> + ArchiveRecord = False$ + ArchiveRecord = False$ + Next i + Database_Services('WriteDataRow', 'ARCHIVE', ArchiveId, ArchiveRecord) + If Error_Services('NoError') then + CreatedArchiveId = ArchiveId + If AddToQueue then + AddedToArchiveQueue = Archive_Services('AddToArchiveQueue', CreatedArchiveId) + If Error_Services('HasError') then + ErrorMsg = Error_Services('GetMessage') + end + end + end else + ErrorMsg = Error_Services('GetMessage') + end + end else + ErrorMsg = 'Error creating text file backup directory.' + end + end + end else + ErrorMsg = 'Archive record already exists.' + end + end else + ErrorMsg = 'Archive Type was null.' + end + end else + ErrorMsg = 'Record ID was null.' + end + + If ErrorMsg EQ '' then + LogData = '' + LogData<1> = LoggingDTM; + LogData<2> = ArchiveType + LogData<3> = ParentRecordId + LogData<4> = True$ + LogData<5> = 'Successfully created ARCHIVE record - ' : ArchiveId + Logging_Services('AppendLog', objRecordArchival, LogData, @RM, @FM, False$) + Response = ArchiveId + end else + LogData = '' + LogData<1> = LoggingDTM; + LogData<2> = ArchiveType + LogData<3> = ParentRecordId + LogData<4> = False$ + LogData<5> = 'Error creating ARCHIVE record - ' : ErrorMsg + Logging_Services('AppendLog', objRecordArchival, LogData, @RM, @FM, False$) + Error_Services('Add', ErrorMsg) + end + end service @@ -243,34 +246,34 @@ Parameters- ArchiveId - The key ID of the ARCHIVE record which is being queued for child record archival. */ Service AddToArchiveQueue(ArchiveId) - - ErrorMsg = '' - AddedToArchiveQueue = False$ - - If ArchiveId NE '' then - If RowExists('ARCHIVE', ArchiveId) then - ArchiveQueueId = RTI_CreateGUID() - ArchiveQueueRec = '' - ArchiveQueueRec = ArchiveId - Database_Services('WriteDataRow', 'ARCHIVE_QUEUE', ArchiveQueueId, ArchiveQueueRec) - If Error_Services('NoError') then - AddedToArchiveQueue = True$ - end else - ErrorMsg = Error_Services('GetMessage') - end - end else - ErrorMsg = 'Archive record ' : ArchiveId : ' was not found in ARCHIVE table.' - end - end else - ErrorMsg = 'Archive Id was null' - end - - If ErrorMsg NE '' then - Error_Services('Add', 'Error adding archive to archive queue : ' : ErrorMsg) - end - - Response = AddedToArchiveQueue - + + ErrorMsg = '' + AddedToArchiveQueue = False$ + + If ArchiveId NE '' then + If RowExists('ARCHIVE', ArchiveId) then + ArchiveQueueId = RTI_CreateGUID() + ArchiveQueueRec = '' + ArchiveQueueRec = ArchiveId + Database_Services('WriteDataRow', 'ARCHIVE_QUEUE', ArchiveQueueId, ArchiveQueueRec) + If Error_Services('NoError') then + AddedToArchiveQueue = True$ + end else + ErrorMsg = Error_Services('GetMessage') + end + end else + ErrorMsg = 'Archive record ' : ArchiveId : ' was not found in ARCHIVE table.' + end + end else + ErrorMsg = 'Archive Id was null' + end + + If ErrorMsg NE '' then + Error_Services('Add', 'Error adding archive to archive queue : ' : ErrorMsg) + end + + Response = AddedToArchiveQueue + end service /* @@ -285,63 +288,63 @@ Parameters- None. */ Service ProcessArchiveQueue() - - ErrorMsg = '' - LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Archive\RecordArchiving' - ServiceErrMsg = '' - ServiceLogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ServiceLog.csv' - ServiceHeaders = 'Logging DTM' : @FM : 'Message' - ServiceLogObj = Logging_Services('NewLog', LogPath, ServiceLogFileName, CRLF$, ',', ServiceHeaders, '', False$, False$) - - hSysLists = Database_Services('GetTableHandle', 'SYSLISTS') - Lock hSysLists, ServiceKeyID then - open 'ARCHIVE_QUEUE' to FileIn then - SelectStmt = 'SELECT ARCHIVE_QUEUE' - RList(SelectStmt,TARGET_ACTIVELIST$,'','','') - Done = False$ - loop - readnext ArchiveQueueId else Done = 1 - until Done - ArchiveId = XLATE('ARCHIVE_QUEUE', ArchiveQueueId, ARCHIVE_QUEUE_ARCHIVE_ID$, 'X') - Archive_Services('ArchiveRecords', ArchiveId, True$) - If Error_Services('HasError') then - ProcessError = Error_Services('GetMessage') - Error_Services('Clear') - ArchiveErrQueueRec = '' - ArchiveErrQueueRec = ArchiveId - ArchiveErrQueueRec = ProcessError - Database_Services('WriteDataRow', 'ARCHIVE_QUEUE_ERROR', ArchiveQueueId, ArchiveErrQueueRec) - If Error_Services('HasError') then - ErrorMsg = Error_Services('GetMessage') - end - end - Database_Services('DeleteDataRow', 'ARCHIVE_QUEUE', ArchiveQueueId, True$, False$) - If Error_Services('HasError') then - ErrorMsg = Error_Services('GetMessage') - end - Done = True$; // Limits service to run one record at a time. - REPEAT - end else - ErrorMsg = 'Error opening RECORD_ARCHIVE_QUEUE table.' - end - - // Service level Logging - if ErrorMsg EQ '' then - ServiceMessage = 'Archive queue service finished without error.' - end else - ServiceMessage = ErrorMsg - end - - LogDate = Oconv(Date(), 'D4/') - LogTime = Oconv(Time(), 'MTS') - LoggingDTM = LogDate : ' ' : LogTime - LogData = '' - LogData<1> = LoggingDTM - LogData<2> = ServiceMessage - Logging_Services('AppendLog', ServiceLogObj, LogData, @RM, @FM, False$) - end - Unlock hSysLists, ServiceKeyID else Null - + + ErrorMsg = '' + LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Archive\RecordArchiving' + ServiceErrMsg = '' + ServiceLogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ServiceLog.csv' + ServiceHeaders = 'Logging DTM' : @FM : 'Message' + ServiceLogObj = Logging_Services('NewLog', LogPath, ServiceLogFileName, CRLF$, ',', ServiceHeaders, '', False$, False$) + + hSysLists = Database_Services('GetTableHandle', 'SYSLISTS') + Lock hSysLists, ServiceKeyID then + open 'ARCHIVE_QUEUE' to FileIn then + SelectStmt = 'SELECT ARCHIVE_QUEUE' + RList(SelectStmt,TARGET_ACTIVELIST$,'','','') + Done = False$ + loop + readnext ArchiveQueueId else Done = 1 + until Done + ArchiveId = XLATE('ARCHIVE_QUEUE', ArchiveQueueId, ARCHIVE_QUEUE_ARCHIVE_ID$, 'X') + Archive_Services('ArchiveRecords', ArchiveId, True$) + If Error_Services('HasError') then + ProcessError = Error_Services('GetMessage') + Error_Services('Clear') + ArchiveErrQueueRec = '' + ArchiveErrQueueRec = ArchiveId + ArchiveErrQueueRec = ProcessError + Database_Services('WriteDataRow', 'ARCHIVE_QUEUE_ERROR', ArchiveQueueId, ArchiveErrQueueRec) + If Error_Services('HasError') then + ErrorMsg = Error_Services('GetMessage') + end + end + Database_Services('DeleteDataRow', 'ARCHIVE_QUEUE', ArchiveQueueId, True$, False$) + If Error_Services('HasError') then + ErrorMsg = Error_Services('GetMessage') + end + Done = True$; // Limits service to run one record at a time. + REPEAT + end else + ErrorMsg = 'Error opening RECORD_ARCHIVE_QUEUE table.' + end + + // Service level Logging + if ErrorMsg EQ '' then + ServiceMessage = 'Archive queue service finished without error.' + end else + ServiceMessage = ErrorMsg + end + + LogDate = Oconv(Date(), 'D4/') + LogTime = Oconv(Time(), 'MTS') + LoggingDTM = LogDate : ' ' : LogTime + LogData = '' + LogData<1> = LoggingDTM + LogData<2> = ServiceMessage + Logging_Services('AppendLog', ServiceLogObj, LogData, @RM, @FM, False$) + end + Unlock hSysLists, ServiceKeyID else Null + end service @@ -356,93 +359,93 @@ Parameters - ArchiveId - The key ID to the ARCHIVE record being processed. */ Service ArchiveRecords(ArchiveId, AddToDeleteQ) - - ErrorMsg = '' - - LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Archive\RecordArchiving' - LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ExecutionLog.csv' - Headers = 'Logging DTM' : @FM : 'Archive Queue ID' : @FM : 'Archive ID' : @FM : 'Message' - objArchiveRecordsLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$) - - AllRecordsArchived = False$ - - If ArchiveId NE '' then - ArchiveRec = Database_Services('ReadDataRow', 'ARCHIVE', ArchiveId, True$, 0, False$) - If Error_Services('NoError') then - ArchiveSavePath = ArchiveRec - NumRecordsToArchive = DCOUNT(ArchiveRec, @VM) - if NumRecordsToArchive GT 0 then - for each Record in ArchiveRec using @VM setting RecPos - Until ErrorMsg NE '' - ThisRecord = ArchiveRec - ThisTable = ArchiveRec - - ThisRecordArchived = ArchiveRec - If Not(ThisRecordArchived) then - RecordArchivedTxt = Archive_Services('ArchiveRecordToTxtFile', ThisTable, ThisRecord, ArchiveSavePath) - if Error_Services('NoError') then - RecordArchivedJson = Archive_Services('ArchiveRecordToJson', ThisRecord, ThisTable, ArchiveSavePath) - If Error_Services('NoError') then - If RecordArchivedTxt AND RecordArchivedJson then - ArchiveRec = True$ - Database_Services('WriteDataRow', 'ARCHIVE', ArchiveId, ArchiveRec, True$, 0, False$) - If Error_Services('HasError') then - ErrorMsg = Error_Services('GetMessage') - end - end else - ErrorMsg = 'One or more archive methods failed.' - end - end else - ErrorMsg = Error_Services('GetMessage') - end - end else - ErrorMsg = Error_Services('GetMessage') - end - end - Next Record - If ErrorMsg EQ '' then - if AddToDeleteQ then + + ErrorMsg = '' + + LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Archive\RecordArchiving' + LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ExecutionLog.csv' + Headers = 'Logging DTM' : @FM : 'Archive Queue ID' : @FM : 'Archive ID' : @FM : 'Message' + objArchiveRecordsLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$) + + AllRecordsArchived = False$ + + If ArchiveId NE '' then + ArchiveRec = Database_Services('ReadDataRow', 'ARCHIVE', ArchiveId, True$, 0, False$) + If Error_Services('NoError') then + ArchiveSavePath = ArchiveRec + NumRecordsToArchive = DCOUNT(ArchiveRec, @VM) + if NumRecordsToArchive GT 0 then + for each Record in ArchiveRec using @VM setting RecPos + Until ErrorMsg NE '' + ThisRecord = ArchiveRec + ThisTable = ArchiveRec + + ThisRecordArchived = ArchiveRec + If Not(ThisRecordArchived) then + RecordArchivedTxt = Archive_Services('ArchiveRecordToTxtFile', ThisTable, ThisRecord, ArchiveSavePath) + if Error_Services('NoError') then + RecordArchivedJson = Archive_Services('ArchiveRecordToJson', ThisRecord, ThisTable, ArchiveSavePath) + If Error_Services('NoError') then + If RecordArchivedTxt AND RecordArchivedJson then + ArchiveRec = True$ + Database_Services('WriteDataRow', 'ARCHIVE', ArchiveId, ArchiveRec, True$, 0, False$) + If Error_Services('HasError') then + ErrorMsg = Error_Services('GetMessage') + end + end else + ErrorMsg = 'One or more archive methods failed.' + end + end else + ErrorMsg = Error_Services('GetMessage') + end + end else + ErrorMsg = Error_Services('GetMessage') + end + end + Next Record + If ErrorMsg EQ '' then + if AddToDeleteQ then Archive_Services('AddToDeleteQueue', ArchiveId) If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage') end - end - end - end else - ErrorMsg = 'Archive record had zero child records.' - end - end else - ErrorMsg = Error_Services('GetMessage') - end - end else - ErrorMsg = 'Archive ID was null.' - end - - If ErrorMsg EQ '' then - LogDate = Oconv(Date(), 'D4/') - LogTime = Oconv(Time(), 'MTS') - LoggingDTM = LogDate : ' ' : LogTime - LogData = '' - LogData<1> = LoggingDTM; - LogData<2> = ArchiveId - LogData<3> = 'Successfully archived all records in ARCHIVE.' - Logging_Services('AppendLog', objArchiveRecordsLog, LogData, @RM, @FM, False$) - AllRecordsArchived = True$ - end else - ErrorMsg = 'Error in ArchiveRecords service - ' : ErrorMsg - LogDate = Oconv(Date(), 'D4/') - LogTime = Oconv(Time(), 'MTS') - LoggingDTM = LogDate : ' ' : LogTime - LogData = '' - LogData<1> = LoggingDTM; - LogData<2> = ArchiveId - LogData<3> = ErrorMsg - Logging_Services('AppendLog', objArchiveRecordsLog, LogData, @RM, @FM, False$) - Error_Services('Add', ErrorMsg) - end - - Response = AllRecordsArchived - + end + end + end else + ErrorMsg = 'Archive record had zero child records.' + end + end else + ErrorMsg = Error_Services('GetMessage') + end + end else + ErrorMsg = 'Archive ID was null.' + end + + If ErrorMsg EQ '' then + LogDate = Oconv(Date(), 'D4/') + LogTime = Oconv(Time(), 'MTS') + LoggingDTM = LogDate : ' ' : LogTime + LogData = '' + LogData<1> = LoggingDTM; + LogData<2> = ArchiveId + LogData<3> = 'Successfully archived all records in ARCHIVE.' + Logging_Services('AppendLog', objArchiveRecordsLog, LogData, @RM, @FM, False$) + AllRecordsArchived = True$ + end else + ErrorMsg = 'Error in ArchiveRecords service - ' : ErrorMsg + LogDate = Oconv(Date(), 'D4/') + LogTime = Oconv(Time(), 'MTS') + LoggingDTM = LogDate : ' ' : LogTime + LogData = '' + LogData<1> = LoggingDTM; + LogData<2> = ArchiveId + LogData<3> = ErrorMsg + Logging_Services('AppendLog', objArchiveRecordsLog, LogData, @RM, @FM, False$) + Error_Services('Add', ErrorMsg) + end + + Response = AllRecordsArchived + end service /* @@ -459,276 +462,276 @@ Parameters- SavePath - The location to save the txt file backup. */ Service ArchiveRecordToTxtFile(RecordTable, RecordId, SavePath) - - ErrorMsg = '' - RecordBackedUp = False$ - - If RecordTable NE '' then - If RecordId NE '' then - If RowExists(RecordTable, RecordId) then - If SavePath NE '' then - SavePathExists = DirExists(SavePath) - If SavePathExists then - Record = Database_Services('ReadDataRow', RecordTable, RecordId, True$, 0, False$) - If Error_Services('NoError') then - FileName = RecordTable:'-':RecordId:'.txt' - FullSavePath = SavePath : FileName - swap '*' with '%2A' in FullSavePath - Set_Status(0) - OSWrite Record to FullSavePath; // Todo Error checking for write and read - TextBackupVerified = Archive_Services('VerifyTextBackup', RecordTable, RecordId, FullSavePath, True$) - if Error_Services('NoError') then - if TextBackupVerified then - RecordBackedUp = True$ - end else - ErrorMsg = 'Error in text file backup verification.' - end - end else - ErrorMsg = Error_Services('GetMessage') - end - end else - ErrorMsg = Error_Services('GetMessage') - end - end else - ErrorMsg = 'Specified save path was not found.' - end - end else - ErrorMsg = 'Save path was null.' - end - end else - ErrorMsg = 'Specific record {':RecordTable:'} {':RecordId:'} was not found in the specified table.' - end - end else - ErrorMsg = 'Record Id was null.' - end - end else - ErrorMsg = 'Record Table was null.' - end - - If ErrorMsg NE '' then - Error_Services('Add', ErrorMsg) - end - - Response = RecordBackedUp - + + ErrorMsg = '' + RecordBackedUp = False$ + + If RecordTable NE '' then + If RecordId NE '' then + If RowExists(RecordTable, RecordId) then + If SavePath NE '' then + SavePathExists = DirExists(SavePath) + If SavePathExists then + Record = Database_Services('ReadDataRow', RecordTable, RecordId, True$, 0, False$) + If Error_Services('NoError') then + FileName = RecordTable:'-':RecordId:'.txt' + FullSavePath = SavePath : FileName + swap '*' with '%2A' in FullSavePath + Set_Status(0) + OSWrite Record to FullSavePath; // Todo Error checking for write and read + TextBackupVerified = Archive_Services('VerifyTextBackup', RecordTable, RecordId, FullSavePath, True$) + if Error_Services('NoError') then + if TextBackupVerified then + RecordBackedUp = True$ + end else + ErrorMsg = 'Error in text file backup verification.' + end + end else + ErrorMsg = Error_Services('GetMessage') + end + end else + ErrorMsg = Error_Services('GetMessage') + end + end else + ErrorMsg = 'Specified save path was not found.' + end + end else + ErrorMsg = 'Save path was null.' + end + end else + ErrorMsg = 'Specific record {':RecordTable:'} {':RecordId:'} was not found in the specified table.' + end + end else + ErrorMsg = 'Record Id was null.' + end + end else + ErrorMsg = 'Record Table was null.' + end + + If ErrorMsg NE '' then + Error_Services('Add', ErrorMsg) + end + + Response = RecordBackedUp + end service Service ArchiveRecordToJson(RecordId, RecordTable, SavePath) - - SavedToJson = False$ - ErrorMsg = '' - - If RecordId NE '' then - If RecordTable NE '' then - If SavePath NE '' then - SavePathExists = DirExists(SavePath) - If SavePathExists then - If RowExists(RecordTable, RecordId) then - FileName = RecordTable:'-':RecordId:'.json' - FullSavePath = SavePath : FileName - swap '*' with '%2A' in FullSavePath - RecordJSonData = Archive_Services('ConvertGenericRecordToJson', RecordId, RecordTable) - If Error_Services('NoError') then - ValidJson = SRP_JsonX_Parse('JsonCheck', RecordJSonData) - If ValidJson then - Set_Status(0) - OSWrite RecordJSonData to FullSavePath - SavedToJson = True$ - end else - ErrorMsg = 'No valid json detected.' - end - end else - ErrorMsg = Error_Services('GetMessage') - end - Set_Status(0) - OSWrite RecordJSonData to FullSavePath; - If Get_Status(errCode) then - ErrorMsg = 'Error writing archive Json file.' - end - end else - ErrorMsg = RecordId : ' in ' : RecordTable : ' does not exist.' - end - end else - ErrorMsg = 'Specified save path was not found.' - end - end else - ErrorMsg = 'SavePath parameter was null.' - end - end else - ErrorMsg = 'RecordTable parameter was null.' - end - end else - ErrorMsg = 'RecordId parameter was null.' - end - - If ErrorMsg EQ '' then - Response = SavedToJson - end else - Error_Services('Add', ErrorMsg) - end - + + SavedToJson = False$ + ErrorMsg = '' + + If RecordId NE '' then + If RecordTable NE '' then + If SavePath NE '' then + SavePathExists = DirExists(SavePath) + If SavePathExists then + If RowExists(RecordTable, RecordId) then + FileName = RecordTable:'-':RecordId:'.json' + FullSavePath = SavePath : FileName + swap '*' with '%2A' in FullSavePath + RecordJSonData = Archive_Services('ConvertGenericRecordToJson', RecordId, RecordTable) + If Error_Services('NoError') then + ValidJson = SRP_JsonX_Parse('JsonCheck', RecordJSonData) + If ValidJson then + Set_Status(0) + OSWrite RecordJSonData to FullSavePath + SavedToJson = True$ + end else + ErrorMsg = 'No valid json detected.' + end + end else + ErrorMsg = Error_Services('GetMessage') + end + Set_Status(0) + OSWrite RecordJSonData to FullSavePath; + If Get_Status(errCode) then + ErrorMsg = 'Error writing archive Json file.' + end + end else + ErrorMsg = RecordId : ' in ' : RecordTable : ' does not exist.' + end + end else + ErrorMsg = 'Specified save path was not found.' + end + end else + ErrorMsg = 'SavePath parameter was null.' + end + end else + ErrorMsg = 'RecordTable parameter was null.' + end + end else + ErrorMsg = 'RecordId parameter was null.' + end + + If ErrorMsg EQ '' then + Response = SavedToJson + end else + Error_Services('Add', ErrorMsg) + end + end service Service ConvertArchiveRecordToJson(ArchiveId) - - ErrorMsg = '' - JsonData = '' - - If ArchiveId NE '' then - ArchiveRec = Database_Services('ReadDataRow', 'ARCHIVE', ArchiveId, True$, 0, False$) - If Error_Services('NoError') then - SRP_JsonX_Begin('JSON', '{') - SRP_JsonX('ArchiveId', ArchiveId, 'String') - DtmCreated = Date_Services('ConvertDateTimeToISO8601', ArchiveRec) - SRP_JsonX('ArchiveCreationDtm', DtmCreated) - SRP_JsonX('ArchiveFilePath', ArchiveRec, 'String') - SRP_JsonX('ArchiveCompleted', ArchiveRec, 'Bool') - DtmCompleted = Date_Services('ConvertDateTimeToISO8601', ArchiveRec) - SRP_JsonX('ArchiveCompletionDtm', DtmCompleted) - SRP_JsonX('ChildRecords', '[') - for each Record in ArchiveRec using @VM setting RecPos - SRP_JsonX('{') - SRP_JsonX('RecordTable', ArchiveRec, 'String') - SRP_JsonX('RecordId', ArchiveRec, 'String') - SRP_JsonX('RecordArchived', ArchiveRec, 'Bool') - SRP_JsonX('RecordDeleted', ArchiveRec, 'Bool') - SRP_JsonX('}') - Next Record - SRP_JsonX(']') - SRP_JsonX('MetaData', '[') - for each MetaDataField in ArchiveRec using @VM setting mdPos - SRP_JsonX('{') - SRP_JsonX('FieldName', ArchiveRec, 'String') - FieldType = ArchiveRec - FieldValue = ArchiveRec - SRP_JsonX('FieldType', FieldType , 'String') - If FieldType EQ 'DateTime' then - FieldValue = OConv(FieldValue, 'DT') - end - SRP_JsonX('FieldValue', FieldValue, 'String') - - SRP_JsonX('}') - Next MetaDataField - SRP_JsonX(']') - - DtmDeArchived = Date_Services('ConvertDateTimeToISO8601', ArchiveRec) - - SRP_JsonX('DeArchiveDtm', DtmDeArchived, 'String') - - JsonData = SRP_JsonX_End('Pretty') - end else - ErrorMsg = Error_Services('GetMessage') - end - end else - ErrorMsg = 'ArchiveId parameter was null.' - end - - If ErrorMsg EQ '' then - Response = JsonData - end else - Error_Services('Add', ErrorMsg) - end - + + ErrorMsg = '' + JsonData = '' + + If ArchiveId NE '' then + ArchiveRec = Database_Services('ReadDataRow', 'ARCHIVE', ArchiveId, True$, 0, False$) + If Error_Services('NoError') then + SRP_JsonX_Begin('JSON', '{') + SRP_JsonX('ArchiveId', ArchiveId, 'String') + DtmCreated = Date_Services('ConvertDateTimeToISO8601', ArchiveRec) + SRP_JsonX('ArchiveCreationDtm', DtmCreated) + SRP_JsonX('ArchiveFilePath', ArchiveRec, 'String') + SRP_JsonX('ArchiveCompleted', ArchiveRec, 'Bool') + DtmCompleted = Date_Services('ConvertDateTimeToISO8601', ArchiveRec) + SRP_JsonX('ArchiveCompletionDtm', DtmCompleted) + SRP_JsonX('ChildRecords', '[') + for each Record in ArchiveRec using @VM setting RecPos + SRP_JsonX('{') + SRP_JsonX('RecordTable', ArchiveRec, 'String') + SRP_JsonX('RecordId', ArchiveRec, 'String') + SRP_JsonX('RecordArchived', ArchiveRec, 'Bool') + SRP_JsonX('RecordDeleted', ArchiveRec, 'Bool') + SRP_JsonX('}') + Next Record + SRP_JsonX(']') + SRP_JsonX('MetaData', '[') + for each MetaDataField in ArchiveRec using @VM setting mdPos + SRP_JsonX('{') + SRP_JsonX('FieldName', ArchiveRec, 'String') + FieldType = ArchiveRec + FieldValue = ArchiveRec + SRP_JsonX('FieldType', FieldType , 'String') + If FieldType EQ 'DateTime' then + FieldValue = OConv(FieldValue, 'DT') + end + SRP_JsonX('FieldValue', FieldValue, 'String') + + SRP_JsonX('}') + Next MetaDataField + SRP_JsonX(']') + + DtmDeArchived = Date_Services('ConvertDateTimeToISO8601', ArchiveRec) + + SRP_JsonX('DeArchiveDtm', DtmDeArchived, 'String') + + JsonData = SRP_JsonX_End('Pretty') + end else + ErrorMsg = Error_Services('GetMessage') + end + end else + ErrorMsg = 'ArchiveId parameter was null.' + end + + If ErrorMsg EQ '' then + Response = JsonData + end else + Error_Services('Add', ErrorMsg) + end + end service Service ConvertGenericRecordToJson(RecordId, RecordTable) - - ErrorMsg = '' - - RecordJson = '' - If RecordId NE '' then - If RecordTable NE '' then - If RowExists(RecordTable, RecordId) then - Record = Database_Services('ReadDataRow', RecordTable, RecordId, True$, 0, False$) - If Error_Services('NoError') then - SRP_JsonX_Begin(RecordTable : '*' : RecordId, '{') - - For each Field in Record using @FM setting FieldPos - If Indexc(Field, @VM, 1) then - //Value Marks Present - SRP_JsonX(FieldPos, '[') - For each Value in Field using @VM setting ValuePos - SRP_JsonX('{') - If Indexc(Value, @SVM, 1) then - SRP_JsonX(ValuePos, '[') - for each SubValue in Value using @SVM setting SubValuePos - SRP_JsonX('{') - SRP_JsonX(SubValuePos, Record) - SRP_JsonX('}') - Next SubValue - SRP_JsonX(']') - end else - SRP_JsonX(ValuePos, Record) - end - SRP_JsonX('}') - Next Value - SRP_JsonX(']') - end else - //No Value Marks Present - SRP_JsonX(FieldPos, Record) - end - Next Field - RecordJson = SRP_JsonX_End('Pretty') - end else - ErrorMsg = Error_Services('GetMessage') - end - end else - ErrorMsg = RecordId : ' in ' : RecordTable : ' does not exist.' - end - end else - ErrorMsg = 'RecordTable parameter was null.' - end - end else - ErrorMsg = 'RecordId parameter was null.' - end - - If ErrorMsg EQ '' then - Response = RecordJson - end else - Error_Services('Add', ErrorMsg) - end - + + ErrorMsg = '' + + RecordJson = '' + If RecordId NE '' then + If RecordTable NE '' then + If RowExists(RecordTable, RecordId) then + Record = Database_Services('ReadDataRow', RecordTable, RecordId, True$, 0, False$) + If Error_Services('NoError') then + SRP_JsonX_Begin(RecordTable : '*' : RecordId, '{') + + For each Field in Record using @FM setting FieldPos + If Indexc(Field, @VM, 1) then + //Value Marks Present + SRP_JsonX(FieldPos, '[') + For each Value in Field using @VM setting ValuePos + SRP_JsonX('{') + If Indexc(Value, @SVM, 1) then + SRP_JsonX(ValuePos, '[') + for each SubValue in Value using @SVM setting SubValuePos + SRP_JsonX('{') + SRP_JsonX(SubValuePos, Record) + SRP_JsonX('}') + Next SubValue + SRP_JsonX(']') + end else + SRP_JsonX(ValuePos, Record) + end + SRP_JsonX('}') + Next Value + SRP_JsonX(']') + end else + //No Value Marks Present + SRP_JsonX(FieldPos, Record) + end + Next Field + RecordJson = SRP_JsonX_End('Pretty') + end else + ErrorMsg = Error_Services('GetMessage') + end + end else + ErrorMsg = RecordId : ' in ' : RecordTable : ' does not exist.' + end + end else + ErrorMsg = 'RecordTable parameter was null.' + end + end else + ErrorMsg = 'RecordId parameter was null.' + end + + If ErrorMsg EQ '' then + Response = RecordJson + end else + Error_Services('Add', ErrorMsg) + end + end service Service ConvertJsonToRecord(JsonData) - ErrorMsg = '' - ConvertedData = '' - - If SRP_JsonX_Parse('JsonTest', JsonData) then - NumFields = SRP_JsonX_Count('') - for FieldPos = 1 to NumFields - NumValueMarks = SRP_JsonX_Count(FieldPos) - If NumValueMarks then - // Field has value marks - For ValueMarkPos = 1 to NumValueMarks - NumSubValueMarks = SRP_JsonX_Count(FieldPos : '[':ValueMarkPos:'].':ValueMarkPos) - If NumSubValueMarks GT 1 then - // Value Mark is further delimited with sub-value marks - For SubValueMarkPos = 1 to NumSubValueMarks - ConvertedData = SRP_JsonX_Get(FieldPos : '[':ValueMarkPos:'].':ValueMarkPos: '[':SubValueMarkPos:']':'.':SubValueMarkPos) - Next SubValueMarkPos - end else - // Value Mark is not delimited. - ConvertedData = SRP_JsonX_Get(FieldPos : '[':ValueMarkPos:'].':ValueMarkPos) - end - Next ValueMarkPos - end else - // The field does not have value marks. - FieldData = SRP_JsonX_Get(FieldPos) - ConvertedData = SRP_JsonX_Get(FieldPos) - end - Next FieldPos - end else - ErrorMsg = 'JsonData passed to routine was invalid.' - end - - - If ErrorMsg EQ '' then - Response = ConvertedData - end else - Error_Services('Add', ErrorMsg) - end - + ErrorMsg = '' + ConvertedData = '' + + If SRP_JsonX_Parse('JsonTest', JsonData) then + NumFields = SRP_JsonX_Count('') + for FieldPos = 1 to NumFields + NumValueMarks = SRP_JsonX_Count(FieldPos) + If NumValueMarks then + // Field has value marks + For ValueMarkPos = 1 to NumValueMarks + NumSubValueMarks = SRP_JsonX_Count(FieldPos : '[':ValueMarkPos:'].':ValueMarkPos) + If NumSubValueMarks GT 1 then + // Value Mark is further delimited with sub-value marks + For SubValueMarkPos = 1 to NumSubValueMarks + ConvertedData = SRP_JsonX_Get(FieldPos : '[':ValueMarkPos:'].':ValueMarkPos: '[':SubValueMarkPos:']':'.':SubValueMarkPos) + Next SubValueMarkPos + end else + // Value Mark is not delimited. + ConvertedData = SRP_JsonX_Get(FieldPos : '[':ValueMarkPos:'].':ValueMarkPos) + end + Next ValueMarkPos + end else + // The field does not have value marks. + FieldData = SRP_JsonX_Get(FieldPos) + ConvertedData = SRP_JsonX_Get(FieldPos) + end + Next FieldPos + end else + ErrorMsg = 'JsonData passed to routine was invalid.' + end + + + If ErrorMsg EQ '' then + Response = ConvertedData + end else + Error_Services('Add', ErrorMsg) + end + end service /* @@ -746,57 +749,57 @@ Parameters- If this parameter is true then the content of the text file is compared. */ Service VerifyTextBackup(RecordTable, RecordId, PathToTextFile, VerifyFileContents) - - ErrorMsg = '' - VerificationPassed = False$ - - If RecordTable NE '' then - If RecordId NE '' then - If RowExists(RecordTable, RecordId) then - If PathToTextFile NE '' then - FileExists = DirExists(PathToTextFile) - If FileExists EQ 0 OR FileExists EQ 1 then - If VerifyFileContents then - Record = Database_Services('ReadDataRow', RecordTable, RecordId, True$, 0, False$) - If Error_Services('NoError') then - Set_Status(0) - OSRead RecordVerify from PathToTextFile then - If RecordVerify EQ Record then - VerificationPassed = True$ - end else - ErrorMsg = 'Record backup verification failed.' - end - end else - ErrorMsg = 'Error verifying record.' - end - end else - ErrorMsg = Error_Services('GetMessage') - end - end else - VerificationPassed = True$ - end - end else - ErrorMsg = 'Specific path was not found' - end - end else - ErrorMsg = 'Path to text file was null.' - end - end else - ErrorMsg = 'Specific record was not found in the specified table.' - end - end else - ErrorMsg = 'Record Id was null.' - end - end else - ErrorMsg = 'Record Table was null.' - end - - If ErrorMsg NE '' then - Error_Services('Add', ErrorMsg) - end - - Response = VerificationPassed - + + ErrorMsg = '' + VerificationPassed = False$ + + If RecordTable NE '' then + If RecordId NE '' then + If RowExists(RecordTable, RecordId) then + If PathToTextFile NE '' then + FileExists = DirExists(PathToTextFile) + If FileExists EQ 0 OR FileExists EQ 1 then + If VerifyFileContents then + Record = Database_Services('ReadDataRow', RecordTable, RecordId, True$, 0, False$) + If Error_Services('NoError') then + Set_Status(0) + OSRead RecordVerify from PathToTextFile then + If RecordVerify EQ Record then + VerificationPassed = True$ + end else + ErrorMsg = 'Record backup verification failed.' + end + end else + ErrorMsg = 'Error verifying record.' + end + end else + ErrorMsg = Error_Services('GetMessage') + end + end else + VerificationPassed = True$ + end + end else + ErrorMsg = 'Specific path was not found' + end + end else + ErrorMsg = 'Path to text file was null.' + end + end else + ErrorMsg = 'Specific record was not found in the specified table.' + end + end else + ErrorMsg = 'Record Id was null.' + end + end else + ErrorMsg = 'Record Table was null.' + end + + If ErrorMsg NE '' then + Error_Services('Add', ErrorMsg) + end + + Response = VerificationPassed + end service /* @@ -809,34 +812,34 @@ Parameters- ArchiveId - The key ID of the ARCHIVE record which is being queued for child record deletion. */ Service AddToDeleteQueue(ArchiveId) - - ErrorMsg = '' - AddedToDeleteQueue = False$ - - If ArchiveId NE '' then - If RowExists('ARCHIVE', ArchiveId) then - ArchiveQueueId = RTI_CreateGUID() - ArchiveQueueRec = '' - ArchiveQueueRec = ArchiveId - Database_Services('WriteDataRow', 'DELETE_QUEUE', ArchiveQueueId, ArchiveQueueRec) - If Error_Services('NoError') then - AddedToDeleteQueue = True$ - end else - ErrorMsg = Error_Services('GetMessage') - end - end else - ErrorMsg = 'Archive record ' : ArchiveId : ' was not found in ARCHIVE table.' - end - end else - ErrorMsg = 'Archive Id was null' - end - - If ErrorMsg NE '' then - Error_Services('Add', 'Error adding archive to deletion queue : ' : ErrorMsg) - end - - Response = AddedToDeleteQueue - + + ErrorMsg = '' + AddedToDeleteQueue = False$ + + If ArchiveId NE '' then + If RowExists('ARCHIVE', ArchiveId) then + ArchiveQueueId = RTI_CreateGUID() + ArchiveQueueRec = '' + ArchiveQueueRec = ArchiveId + Database_Services('WriteDataRow', 'DELETE_QUEUE', ArchiveQueueId, ArchiveQueueRec) + If Error_Services('NoError') then + AddedToDeleteQueue = True$ + end else + ErrorMsg = Error_Services('GetMessage') + end + end else + ErrorMsg = 'Archive record ' : ArchiveId : ' was not found in ARCHIVE table.' + end + end else + ErrorMsg = 'Archive Id was null' + end + + If ErrorMsg NE '' then + Error_Services('Add', 'Error adding archive to deletion queue : ' : ErrorMsg) + end + + Response = AddedToDeleteQueue + end service /* @@ -851,112 +854,112 @@ Parameters- None. */ Service ProcessDeleteQueue() - - ErrorMsg = '' - LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Archive\RecordDeletion' - - LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ServiceLog.csv' - Headers = 'Logging DTM' : @FM : 'Message' - ServiceLogObj = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$) - - hSysLists = Database_Services('GetTableHandle', 'SYSLISTS') - Lock hSysLists, ServiceKeyID then - open 'DELETE_QUEUE' to FileIn then - SelectStmt = 'SELECT DELETE_QUEUE' - RList(SelectStmt,TARGET_ACTIVELIST$,'','','') - Done = 0 - loop - readnext DeleteQueueId else Done = 1 - until Done - ExecutionErrMsg = '' - ArchiveId = Database_Services('ReadDataColumn', 'DELETE_QUEUE', DeleteQueueIdm, DELETE_QUEUE_ARCHIVE_ID$, True$, 0, False$) - If Error_Services('NoError') then - If ArchiveId NE '' then - If RowExists('ARCHIVE', ArchiveId) then - Archive_Services('DeleteRecords', ArchiveId) - If Error_Services('HasError') then - ProcessError = Error_Services('GetMessage') - Error_Services('Clear') - DeleteErrQueueRec = '' - DeleteErrQueueRec = ArchiveId - DeleteErrQueueRec = ProcessError - Database_Services('WriteDataRow', 'DELETE_QUEUE_ERROR', DeleteQueueId, DeleteErrQueueRec) - If Error_Services('NoError') then - Database_Services('DeleteDataRow', 'DELETE_QUEUE', DeleteQueueId, True$, False$) - If Error_Services('HasError') then - ErrorMsg = Error_Services('GetMessage') - end - end - end - Database_Services('DeleteDataRow', 'DELETE_QUEUE', DeleteQueueId, True$, False$) - If Error_Services('HasError') then - ErrorMsg = Error_Services('GetMessage') - end - end - end else - ErrorMsg = 'Archive ID within the DELETE Queue record was null.' - end - end else - ErrorMsg = Error_Services('GetMessage') - end - Done = True$; //Limits each service call to 1 record to process at a time. - REPEAT - end else - ErrorMsg = 'Error opening Delete Queue table.' - end - - // Service level Logging - if ErrorMsg EQ '' then - ServiceMessage = 'Delete queue service finished without error.' - end else - ServiceMessage = ErrorMsg - end - - LogDate = Oconv(Date(), 'D4/') - LogTime = Oconv(Time(), 'MTS') - LoggingDTM = LogDate : ' ' : LogTime - LogData = '' - LogData<1> = LoggingDTM - LogData<2> = ServiceMessage - Logging_Services('AppendLog', ServiceLogObj, LogData, @RM, @FM, False$) - - - Unlock hSysLists, ServiceKeyID else Null - end - + + ErrorMsg = '' + LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Archive\RecordDeletion' + + LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ServiceLog.csv' + Headers = 'Logging DTM' : @FM : 'Message' + ServiceLogObj = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$) + + hSysLists = Database_Services('GetTableHandle', 'SYSLISTS') + Lock hSysLists, ServiceKeyID then + open 'DELETE_QUEUE' to FileIn then + SelectStmt = 'SELECT DELETE_QUEUE' + RList(SelectStmt,TARGET_ACTIVELIST$,'','','') + Done = 0 + loop + readnext DeleteQueueId else Done = 1 + until Done + ExecutionErrMsg = '' + ArchiveId = Database_Services('ReadDataColumn', 'DELETE_QUEUE', DeleteQueueIdm, DELETE_QUEUE_ARCHIVE_ID$, True$, 0, False$) + If Error_Services('NoError') then + If ArchiveId NE '' then + If RowExists('ARCHIVE', ArchiveId) then + Archive_Services('DeleteRecords', ArchiveId) + If Error_Services('HasError') then + ProcessError = Error_Services('GetMessage') + Error_Services('Clear') + DeleteErrQueueRec = '' + DeleteErrQueueRec = ArchiveId + DeleteErrQueueRec = ProcessError + Database_Services('WriteDataRow', 'DELETE_QUEUE_ERROR', DeleteQueueId, DeleteErrQueueRec) + If Error_Services('NoError') then + Database_Services('DeleteDataRow', 'DELETE_QUEUE', DeleteQueueId, True$, False$) + If Error_Services('HasError') then + ErrorMsg = Error_Services('GetMessage') + end + end + end + Database_Services('DeleteDataRow', 'DELETE_QUEUE', DeleteQueueId, True$, False$) + If Error_Services('HasError') then + ErrorMsg = Error_Services('GetMessage') + end + end + end else + ErrorMsg = 'Archive ID within the DELETE Queue record was null.' + end + end else + ErrorMsg = Error_Services('GetMessage') + end + Done = True$; //Limits each service call to 1 record to process at a time. + REPEAT + end else + ErrorMsg = 'Error opening Delete Queue table.' + end + + // Service level Logging + if ErrorMsg EQ '' then + ServiceMessage = 'Delete queue service finished without error.' + end else + ServiceMessage = ErrorMsg + end + + LogDate = Oconv(Date(), 'D4/') + LogTime = Oconv(Time(), 'MTS') + LoggingDTM = LogDate : ' ' : LogTime + LogData = '' + LogData<1> = LoggingDTM + LogData<2> = ServiceMessage + Logging_Services('AppendLog', ServiceLogObj, LogData, @RM, @FM, False$) + + + Unlock hSysLists, ServiceKeyID else Null + end + end service Service RetryDeleteErrorQueue() - - ErrorMsg = '' - - open 'DELETE_QUEUE_ERROR' to FileIn then - SelectStmt = 'SELECT DELETE_QUEUE_ERROR' - RList(SelectStmt,TARGET_ACTIVELIST$,'','','') - Done = 0 - loop - readnext DeleteQueueId else Done = 1 - until Done - ExecutionErrMsg = '' - DeleteQueueErrorRec = Database_Services('ReadDataRow', 'DELETE_QUEUE_ERROR', DeleteQueueId, True$, 0, False$) - if Error_Services('NoError') then - ArchiveId = DeleteQueueErrorRec - If ArchiveId NE '' then - If RowExists('ARCHIVE', ArchiveId) then - Archive_Services('DeleteRecords', ArchiveId) - If Error_Services('NoError') then - Database_Services('DeleteDataRow', 'DELETE_QUEUE_ERROR', DeleteQueueId, True$, False$) - end else - ProcessError = Error_Services('GetMessage') - DeleteQueueErrorRec = ProcessError - Database_Services('WriteDataRow', 'DELETE_QUEUE_ERROR', DeleteQueueId, DeleteErrQueueRec, True$, 0, False$) - end - end - end - end - REPEAT - end - + + ErrorMsg = '' + + open 'DELETE_QUEUE_ERROR' to FileIn then + SelectStmt = 'SELECT DELETE_QUEUE_ERROR' + RList(SelectStmt,TARGET_ACTIVELIST$,'','','') + Done = 0 + loop + readnext DeleteQueueId else Done = 1 + until Done + ExecutionErrMsg = '' + DeleteQueueErrorRec = Database_Services('ReadDataRow', 'DELETE_QUEUE_ERROR', DeleteQueueId, True$, 0, False$) + if Error_Services('NoError') then + ArchiveId = DeleteQueueErrorRec + If ArchiveId NE '' then + If RowExists('ARCHIVE', ArchiveId) then + Archive_Services('DeleteRecords', ArchiveId) + If Error_Services('NoError') then + Database_Services('DeleteDataRow', 'DELETE_QUEUE_ERROR', DeleteQueueId, True$, False$) + end else + ProcessError = Error_Services('GetMessage') + DeleteQueueErrorRec = ProcessError + Database_Services('WriteDataRow', 'DELETE_QUEUE_ERROR', DeleteQueueId, DeleteErrQueueRec, True$, 0, False$) + end + end + end + end + REPEAT + end + end service /* @@ -970,88 +973,88 @@ Parameters - ArchiveId - The key ID to the ARCHIVE record being processed. */ Service DeleteRecords(ArchiveId) - - ErrorMsg = '' - AllRecordsDeleted = False$ - - LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Archive\RecordDeletion' - LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ExecutionLog.csv' - Headers = 'Logging DTM' : @FM : 'Archive ID' : @FM : 'Message' - objDeleteRecordsLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$) - - If ArchiveId NE '' then - ArchiveRec = Database_Services('ReadDataRow', 'ARCHIVE', ArchiveId, True$, 0, False$) - for RecPos = DCount(ArchiveRec, @VM) to 1 step -1 - ThisRecord = ArchiveRec - ThisTable = ArchiveRec - Archive_Services('VerifyRelationalIndexes', ThisTable, ThisRecord) - Next RecPos - If Error_Services('NoError') then - for RecPos = DCount(ArchiveRec, @VM) to 1 step -1 - Until ErrorMsg NE '' - ThisRecord = ArchiveRec - ThisTable = ArchiveRec - ThisRecordArchived = ArchiveRec - ThisRecordDeleted = ArchiveRec - If ThisRecordArchived then - If Not(ThisRecordDeleted) then - Archive_Services('DeleteRecord', ThisTable, ThisRecord) - If Error_Services('NoError') then - ArchiveRec = True$ - Locate 0 in ArchiveRec using @VM setting DeletedPos else - ArchiveRec = True$ - ArchiveRec = Datetime() - end - Database_Services('WriteDataRow', 'ARCHIVE', ArchiveId, ArchiveRec, True$, 0, False$) - If Error_Services('HasError') then - ErrorMsg = Error_Services('GetMessage') - end - end else - ErrorMsg = Error_Services('GetMessage') - end - end else - ArchiveRec = True$ - Database_Services('WriteDataRow', 'ARCHIVE', ArchiveId, ArchiveRec, True$, 0, False$) - If Error_Services('HasError') then - ErrorMsg = Error_Services('GetMessage') - end - end - end else - ErrorMsg = 'Record ' : ThisRecord : ' in table ' : ThisTable : ' has not been archived.' - end - Next RecPos - end else - ErrorMsg = Error_Services('GetMessage') - end - end else - ErrorMsg = 'Archive ID was null.' - end - - If ErrorMsg EQ '' then - LogDate = Oconv(Date(), 'D4/') - LogTime = Oconv(Time(), 'MTS') - LoggingDTM = LogDate : ' ' : LogTime - LogData = '' - LogData<1> = LoggingDTM; - LogData<2> = ArchiveId - LogData<3> = 'Successfully deleted all records in ARCHIVE.' - Logging_Services('AppendLog', objDeleteRecordsLog, LogData, @RM, @FM, False$) - AllRecordsDeleted = True$ - end else - ErrorMsg = 'Error in DeleteRecords service - ' : ErrorMsg - LogDate = Oconv(Date(), 'D4/') - LogTime = Oconv(Time(), 'MTS') - LoggingDTM = LogDate : ' ' : LogTime - LogData = '' - LogData<1> = LoggingDTM; - LogData<2> = ArchiveId - LogData<3> = ErrorMsg - Logging_Services('AppendLog', objDeleteRecordsLog, LogData, @RM, @FM, False$) - Error_Services('Add', ErrorMsg) - end - - Response = AllRecordsDeleted - + + ErrorMsg = '' + AllRecordsDeleted = False$ + + LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Archive\RecordDeletion' + LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ExecutionLog.csv' + Headers = 'Logging DTM' : @FM : 'Archive ID' : @FM : 'Message' + objDeleteRecordsLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$) + + If ArchiveId NE '' then + ArchiveRec = Database_Services('ReadDataRow', 'ARCHIVE', ArchiveId, True$, 0, False$) + for RecPos = DCount(ArchiveRec, @VM) to 1 step -1 + ThisRecord = ArchiveRec + ThisTable = ArchiveRec + Archive_Services('VerifyRelationalIndexes', ThisTable, ThisRecord) + Next RecPos + If Error_Services('NoError') then + for RecPos = DCount(ArchiveRec, @VM) to 1 step -1 + Until ErrorMsg NE '' + ThisRecord = ArchiveRec + ThisTable = ArchiveRec + ThisRecordArchived = ArchiveRec + ThisRecordDeleted = ArchiveRec + If ThisRecordArchived then + If Not(ThisRecordDeleted) then + Archive_Services('DeleteRecord', ThisTable, ThisRecord) + If Error_Services('NoError') then + ArchiveRec = True$ + Locate 0 in ArchiveRec using @VM setting DeletedPos else + ArchiveRec = True$ + ArchiveRec = Datetime() + end + Database_Services('WriteDataRow', 'ARCHIVE', ArchiveId, ArchiveRec, True$, 0, False$) + If Error_Services('HasError') then + ErrorMsg = Error_Services('GetMessage') + end + end else + ErrorMsg = Error_Services('GetMessage') + end + end else + ArchiveRec = True$ + Database_Services('WriteDataRow', 'ARCHIVE', ArchiveId, ArchiveRec, True$, 0, False$) + If Error_Services('HasError') then + ErrorMsg = Error_Services('GetMessage') + end + end + end else + ErrorMsg = 'Record ' : ThisRecord : ' in table ' : ThisTable : ' has not been archived.' + end + Next RecPos + end else + ErrorMsg = Error_Services('GetMessage') + end + end else + ErrorMsg = 'Archive ID was null.' + end + + If ErrorMsg EQ '' then + LogDate = Oconv(Date(), 'D4/') + LogTime = Oconv(Time(), 'MTS') + LoggingDTM = LogDate : ' ' : LogTime + LogData = '' + LogData<1> = LoggingDTM; + LogData<2> = ArchiveId + LogData<3> = 'Successfully deleted all records in ARCHIVE.' + Logging_Services('AppendLog', objDeleteRecordsLog, LogData, @RM, @FM, False$) + AllRecordsDeleted = True$ + end else + ErrorMsg = 'Error in DeleteRecords service - ' : ErrorMsg + LogDate = Oconv(Date(), 'D4/') + LogTime = Oconv(Time(), 'MTS') + LoggingDTM = LogDate : ' ' : LogTime + LogData = '' + LogData<1> = LoggingDTM; + LogData<2> = ArchiveId + LogData<3> = ErrorMsg + Logging_Services('AppendLog', objDeleteRecordsLog, LogData, @RM, @FM, False$) + Error_Services('Add', ErrorMsg) + end + + Response = AllRecordsDeleted + end service /* @@ -1068,149 +1071,149 @@ Parameters- RecordId - The key id of the record being deleted */ Service DeleteRecord(TableName, RecordId) - ErrorMsg = '' - RecordDeleted = False$ - - If TableName NE '' then - If RecordId NE '' then - If RowExists(TableName, RecordId) then - TableHandle = Database_Services('GetTableHandle', TableName) - If Error_Services('NoError') then - RetryCount = 3 - Done = False$ - for i = 1 to RetryCount - Until Done - if i GT 1 then Delay(2) - //Temporarily remove MFS's to skip their execution - OrigMFSList = TableHandle<1, 1> - NumMFS = DCount(OrigMFSList, @SVM) - TempMFSList = OrigMFSList - ReAddMFSList = OrigMFSList - For MFSCnt = NumMFS to 1 Step -1 - MFSRoutine = TempMFSList<0, 0, MFSCnt> - // Removal of BASE_MFS allows us to delete records - // Removal of SQL_MFS skips any SQL replication which keeps us from deleting the record there as well. - // Need to remove RTP57 because it auto adds itself and causes an error if you add it manually. - If (MFSRoutine EQ 'BASE_MFS') OR (MFSRoutine EQ 'SQL_MFS*LSL2') OR (MFSRoutine EQ 'RTP57') then - TempMFSList = Delete(TempMFSList, 0, 0, MFSCnt) - if MFSRoutine EQ 'RTP57' then - ReAddMFSList = Delete(ReAddMFSList, 0, 0, MFSCnt) - end - end - Next MFSCnt - Set_MFS(TableName, TempMFSList, 4);// Remove all MFS's - If Not(Get_Status(ErrCode)) then - //Archive_Services('VerifyRelationalIndexes', TableName, RecordId, True$) - //Rewrite the record prior to deletion to resolve any index issues. - RecordPriorToDeletion = Database_Services('ReadDataRow', TableName, RecordId) - If Error_Services('NoError') then - Database_Services('WriteDataRow', TableName, RecordId, RecordPriorToDeletion) - if Error_Services('NoError') then - Database_Services('DeleteDataRow', TableName, RecordId) - If Error_Services('NoError') then - RecordDeleted = Not(RowExists(TableName, RecordId)) - If RecordDeleted then - Done = True$ - end else - ErrorMsg = TableName : ' - ' : RecordId : ' failed to delete.' - end - end else - ErrorMsg = Error_Services('GetMessage') - end - end else - ErrorMsg = Error_Services('GetMessage') - end - end else - ErrorMsg = Error_Services('GetMessage') - end - - Set_MFS(TableName, ReAddMFSList, 4);// Remove all MFS's;//Put MFS Back onto table - end else - ErrorMsg = 'Error removing MFS from ' : TableName - end - - Next i - - end else - ErrorMsg = Error_Services('GetMessage') - end - end else - // Do Nothing as this is okay. Record is deleted one way or the other. - end - end else - ErrorMsg = 'RecordID was null.' - end - end else - ErrorMsg = 'TableName was null.' - end - - If ErrorMsg EQ '' then - RecordDeleted = True$ - end else - RecordDeleted = False$ - Error_Services('Add', ErrorMsg) - end - - Response = RecordDeleted - + ErrorMsg = '' + RecordDeleted = False$ + + If TableName NE '' then + If RecordId NE '' then + If RowExists(TableName, RecordId) then + TableHandle = Database_Services('GetTableHandle', TableName) + If Error_Services('NoError') then + RetryCount = 10 + Done = False$ + for i = 1 to RetryCount + Until Done + if i GT 1 then Delay(2) + //Temporarily remove MFS's to skip their execution + OrigMFSList = TableHandle<1, 1> + NumMFS = DCount(OrigMFSList, @SVM) + TempMFSList = OrigMFSList + ReAddMFSList = OrigMFSList + For MFSCnt = NumMFS to 1 Step -1 + MFSRoutine = TempMFSList<0, 0, MFSCnt> + // Removal of BASE_MFS allows us to delete records + // Removal of SQL_MFS skips any SQL replication which keeps us from deleting the record there as well. + // Need to remove RTP57 because it auto adds itself and causes an error if you add it manually. + If (MFSRoutine EQ 'BASE_MFS') OR (MFSRoutine EQ 'SQL_MFS*LSL2') OR (MFSRoutine EQ 'RTP57') then + TempMFSList = Delete(TempMFSList, 0, 0, MFSCnt) + if MFSRoutine EQ 'RTP57' then + ReAddMFSList = Delete(ReAddMFSList, 0, 0, MFSCnt) + end + end + Next MFSCnt + Set_MFS(TableName, TempMFSList, 4);// Remove all MFS's + If Not(Get_Status(ErrCode)) then + //Archive_Services('VerifyRelationalIndexes', TableName, RecordId, True$) + //Rewrite the record prior to deletion to resolve any index issues. + RecordPriorToDeletion = Database_Services('ReadDataRow', TableName, RecordId) + If Error_Services('NoError') then + Database_Services('WriteDataRow', TableName, RecordId, RecordPriorToDeletion) + if Error_Services('NoError') then + Database_Services('DeleteDataRow', TableName, RecordId) + If Error_Services('NoError') then + RecordDeleted = Not(RowExists(TableName, RecordId)) + If RecordDeleted then + Done = True$ + end else + ErrorMsg = TableName : ' - ' : RecordId : ' failed to delete.' + end + end else + ErrorMsg = Error_Services('GetMessage') + end + end else + ErrorMsg = Error_Services('GetMessage') + end + end else + ErrorMsg = Error_Services('GetMessage') + end + + Set_MFS(TableName, ReAddMFSList, 4);// Remove all MFS's;//Put MFS Back onto table + end else + ErrorMsg = 'Error removing MFS from ' : TableName + end + + Next i + + end else + ErrorMsg = Error_Services('GetMessage') + end + end else + // Do Nothing as this is okay. Record is deleted one way or the other. + end + end else + ErrorMsg = 'RecordID was null.' + end + end else + ErrorMsg = 'TableName was null.' + end + + If ErrorMsg EQ '' then + RecordDeleted = True$ + end else + RecordDeleted = False$ + Error_Services('Add', ErrorMsg) + end + + Response = RecordDeleted + end service Service VerifyRelationalIndexes(TableName, RecordId, SkipMFSRemoval) - - ErrorMsg = '' - If ( (TableName NE '') and (RecordId NE '') ) then - TableName = UCase(TableName) - If Not(SkipMFSRemoval) then - GoSub RemoveMFS - end - ServiceModule = TableName:'_SERVICES' - ServiceName = 'VerifyRelationalIndexes' - If RowExists('SYSOBJ', '$':ServiceModule:'*LSL2') then - ServiceModuleContents = Database_Services('ReadDataRow', 'SYSPROCS', ServiceModule:'*LSL2') - If Error_Services('NoError') then - If IndexC(ServiceModuleContents, ServiceName, 1) then - FunctionResponse = Function(@ServiceModule(ServiceName, RecordId)) - If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage') - end - end - end - If Not(SkipMFSRemoval) then - GoSub ReAddMFS - end - end - If ErrorMsg NE '' then Error_Services('Add', ErrorMsg) - + + ErrorMsg = '' + If ( (TableName NE '') and (RecordId NE '') ) then + TableName = UCase(TableName) + If Not(SkipMFSRemoval) then + GoSub RemoveMFS + end + ServiceModule = TableName:'_SERVICES' + ServiceName = 'VerifyRelationalIndexes' + If RowExists('SYSOBJ', '$':ServiceModule:'*LSL2') then + ServiceModuleContents = Database_Services('ReadDataRow', 'SYSPROCS', ServiceModule:'*LSL2') + If Error_Services('NoError') then + If IndexC(ServiceModuleContents, ServiceName, 1) then + FunctionResponse = Function(@ServiceModule(ServiceName, RecordId)) + If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage') + end + end + end + If Not(SkipMFSRemoval) then + GoSub ReAddMFS + end + end + If ErrorMsg NE '' then Error_Services('Add', ErrorMsg) + end service Service GetAllArchiveIDs() - - ErrorMsg = '' - ArchiveIds = '' - - open 'ARCHIVE' to FileIn then - SelectStmt = 'SELECT ARCHIVE' - RList(SelectStmt,TARGET_ACTIVELIST$,'','','') - if Not(Get_Status(errCode)) then - Done = 0 - loop - readnext ArchiveId else Done = 1 - until Done - ArchiveIds<-1> = ArchiveId - Repeat - end else - ErrorMsg = 'Error querying ARCHIVE records.' - end - end else - ErrorMsg = 'Error opening ARCHIVE table.' - end - - If ErrorMsg EQ '' then - Response = ArchiveIds - end else - Error_Services('Add', ErrorMsg) - end - + + ErrorMsg = '' + ArchiveIds = '' + + open 'ARCHIVE' to FileIn then + SelectStmt = 'SELECT ARCHIVE' + RList(SelectStmt,TARGET_ACTIVELIST$,'','','') + if Not(Get_Status(errCode)) then + Done = 0 + loop + readnext ArchiveId else Done = 1 + until Done + ArchiveIds<-1> = ArchiveId + Repeat + end else + ErrorMsg = 'Error querying ARCHIVE records.' + end + end else + ErrorMsg = 'Error opening ARCHIVE table.' + end + + If ErrorMsg EQ '' then + Response = ArchiveIds + end else + Error_Services('Add', ErrorMsg) + end + end service @@ -1224,114 +1227,114 @@ Parameters- Table - The table the RecordId was contained in prior to being archived. */ Service GetArchiveIDsByRecord(RecordId, Table) - - ErrorMsg = '' - ArchiveIds = '' - If RecordId NE '' then - If Table NE '' then - Open 'DICT.ARCHIVE' to hArchiveDict then - ArchiveKeys = '' - SearchString = 'CHILD_RECORD':@VM:RecordId:@FM - SearchString := 'CHILD_TABLE':@VM:Table:@FM - Btree.Extract(SearchString, 'ARCHIVE', hArchiveDict, ArchiveKeys, 0, 0) - If Not(Get_Status(errCode)) then - If ArchiveKeys NE '' then - for each ArchiveKey in ArchiveKeys using @VM - ArchiveRec = Database_Services('ReadDataRow', 'ARCHIVE', ArchiveKey) - if Error_Services('NoError') then - Locate RecordId in ArchiveRec using @VM setting RecIdPos then - RecTable = ArchiveRec - If RecTable EQ Table then - ArchiveIds<-1> = ArchiveKey - end - end - end else - ErrorMsg = Error_Services('GetMessage') - end - Next ArchiveKey - end else - ErrorMsg = 'No Archive keys found for matching the parameter combination.' - end - end else - ErrorMsg = 'Error in querying the Archive table.' - end - end else - ErrorMsg = 'Error opening Archive dictionary.' - end - end else - ErrorMsg = 'Table parameter was null.' - end - end else - ErrorMsg = 'RecordId parameter was null.' - end - - If ErrorMsg NE '' then - Error_Services('Add', ErrorMsg) - end - - Response = ArchiveIds - + + ErrorMsg = '' + ArchiveIds = '' + If RecordId NE '' then + If Table NE '' then + Open 'DICT.ARCHIVE' to hArchiveDict then + ArchiveKeys = '' + SearchString = 'CHILD_RECORD':@VM:RecordId:@FM + SearchString := 'CHILD_TABLE':@VM:Table:@FM + Btree.Extract(SearchString, 'ARCHIVE', hArchiveDict, ArchiveKeys, 0, 0) + If Not(Get_Status(errCode)) then + If ArchiveKeys NE '' then + for each ArchiveKey in ArchiveKeys using @VM + ArchiveRec = Database_Services('ReadDataRow', 'ARCHIVE', ArchiveKey) + if Error_Services('NoError') then + Locate RecordId in ArchiveRec using @VM setting RecIdPos then + RecTable = ArchiveRec + If RecTable EQ Table then + ArchiveIds<-1> = ArchiveKey + end + end + end else + ErrorMsg = Error_Services('GetMessage') + end + Next ArchiveKey + end else + ErrorMsg = 'No Archive keys found for matching the parameter combination.' + end + end else + ErrorMsg = 'Error in querying the Archive table.' + end + end else + ErrorMsg = 'Error opening Archive dictionary.' + end + end else + ErrorMsg = 'Table parameter was null.' + end + end else + ErrorMsg = 'RecordId parameter was null.' + end + + If ErrorMsg NE '' then + Error_Services('Add', ErrorMsg) + end + + Response = ArchiveIds + end service Service GetArchiveIDsByMetaData(Fields, Values) - - ErrorMsg = '' - ArchiveIds = '' - - If Fields NE '' then - If Values NE '' then - SearchString = '' - PossibleRecords = '' - Table = 'ARCHIVE' - for each SearchTerm in Values using @VM setting TermPos - SearchString := 'METADATA_FIELD':@VM:Fields<1, TermPos>:@FM - SearchString := 'METADATA_VALUE':@VM:Values<1, TermPos>:@FM - Next SearchTerm - Open 'DICT.ARCHIVE' to hArchiveDict then - Flag = "" - Btree.Extract(SearchString, 'ARCHIVE', hArchiveDict, PossibleRecords, 0, Flag) - - if PossibleRecords NE '' then - for each RecordId in PossibleRecords using @VM setting RecIdPos - Until ErrorMsg NE '' - //Need to now verify that the possible found records match the combinations passed in. - FoundComboMatch = False$ - - ThisArchiveRec = Database_Services('ReadDataRow', 'ARCHIVE', RecordId, True$, 0, False$) - MetaDataFields = ThisArchiveRec - MetaDataValues = ThisArchiveRec - For each SearchTerm in Values using @VM setting FieldPos - Until FoundComboMatch = True$ - for each MdValue in MetaDataValues using @VM setting mdPos - Until FoundComboMatch EQ True$ - If Fields<1, FieldPos> EQ MetaDataFields<1, mdPos> then - FoundComboMatch = True$ - end - Next MdValue - Next Field - If FoundComboMatch True$ then - ArchiveIds<-1> = RecordId - end - Next RecordId - end else - ErrorMsg = 'No matching records found.' - end - end else - ErrorMsg = 'Error opening ARCHIVE dictionary.' - end - end else - ErrorMsg = 'SearchTerm parameter was null.' - end - end else - ErrorMsg = 'Fields parameter was null.' - end - - If ErrorMsg EQ '' then - Response = ArchiveIds - end else - Error_Services('Add', ErrorMsg) - end - + + ErrorMsg = '' + ArchiveIds = '' + + If Fields NE '' then + If Values NE '' then + SearchString = '' + PossibleRecords = '' + Table = 'ARCHIVE' + for each SearchTerm in Values using @VM setting TermPos + SearchString := 'METADATA_FIELD':@VM:Fields<1, TermPos>:@FM + SearchString := 'METADATA_VALUE':@VM:Values<1, TermPos>:@FM + Next SearchTerm + Open 'DICT.ARCHIVE' to hArchiveDict then + Flag = "" + Btree.Extract(SearchString, 'ARCHIVE', hArchiveDict, PossibleRecords, 0, Flag) + + if PossibleRecords NE '' then + for each RecordId in PossibleRecords using @VM setting RecIdPos + Until ErrorMsg NE '' + //Need to now verify that the possible found records match the combinations passed in. + FoundComboMatch = False$ + + ThisArchiveRec = Database_Services('ReadDataRow', 'ARCHIVE', RecordId, True$, 0, False$) + MetaDataFields = ThisArchiveRec + MetaDataValues = ThisArchiveRec + For each SearchTerm in Values using @VM setting FieldPos + Until FoundComboMatch = True$ + for each MdValue in MetaDataValues using @VM setting mdPos + Until FoundComboMatch EQ True$ + If Fields<1, FieldPos> EQ MetaDataFields<1, mdPos> then + FoundComboMatch = True$ + end + Next MdValue + Next Field + If FoundComboMatch True$ then + ArchiveIds<-1> = RecordId + end + Next RecordId + end else + ErrorMsg = 'No matching records found.' + end + end else + ErrorMsg = 'Error opening ARCHIVE dictionary.' + end + end else + ErrorMsg = 'SearchTerm parameter was null.' + end + end else + ErrorMsg = 'Fields parameter was null.' + end + + If ErrorMsg EQ '' then + Response = ArchiveIds + end else + Error_Services('Add', ErrorMsg) + end + end service /* @@ -1345,208 +1348,212 @@ Parameters- ArchiveId - The whole ARCHIVE record to be de-archived. */ Service DeArchiveDataFromTxt(ArchiveId) - - ErrorMsg = '' - DeArchiveSuccess = False$ - - If ArchiveId NE '' then - If RowExists('ARCHIVE', ArchiveId) then - ArchiveRec = Database_Services('ReadDataRow', 'ARCHIVE', ArchiveId) - If Error_Services('NoError') then - //Set the de-archive dtm. - ArchiveRec = Datetime() - ArchiveFilesPath = ArchiveRec - for i = DCount(ArchiveRec, @VM) to 1 step -1 - until ErrorMsg NE '' - RecordExists = False$ - RecordId = ArchiveRec - TableName = ArchiveRec - RecordDeArchived = ArchiveRec - If Not(RecordDeArchived) then - If Not(RowExists(RecordTable, TableName)) then - TxtFilePath = ArchiveFilesPath - TxtFileName = TableName : '-' : RecordId : '.txt' - swap '*' with '%2A' in TxtFileName - FullSavePath = TxtFilePath : TxtFileName - Record = '' - OSRead Record from FullSavePath then - GoSub RemoveMFS - If ErrorMsg EQ '' then - Database_Services('WriteDataRow', TableName, RecordId, Record) - if Error_Services('NoError') then - If RowExists(TableName, RecordId) then - RecordExists = True$ - end else - ErrorMsg = 'An unspecified error occured saving the record.' - end - end else - ErrorMsg = Error_Services('GetMessage') - end - GoSub ReAddMFS - end - end - end else - RecordExists = True$ - end - If RecordExists then - ArchiveRec = True$ - ArchiveRec = False$ - ArchiveRec = False$ - end else - ErrorMsg = 'An unspecified error occured saving the record.' - end - end - Next i - Database_Services('WriteDataRow', 'ARCHIVE', ArchiveId, ArchiveRec, True$, 0, False$) - If Error_Services('HasError') then - ErrorMsg = Error_Services('GetMessage') - end - end else - ErrorMsg = Error_Services('GetMessage') - end - end else - ErrorMsg = 'Archive record was not found.' - end - end else - ErrorMsg = 'ArchiveId was null.' - end - - If ErrorMsg EQ '' then - Response = True$ - end else - Response = False$ - Error_Services('Add', ErrorMsg) - end - + + ErrorMsg = '' + DeArchiveSuccess = False$ + + If ArchiveId NE '' then + If RowExists('ARCHIVE', ArchiveId) then + ArchiveRec = Database_Services('ReadDataRow', 'ARCHIVE', ArchiveId) + If Error_Services('NoError') then + //Set the de-archive dtm. + ArchiveRec = Datetime() + ArchiveFilesPath = ArchiveRec + for i = DCount(ArchiveRec, @VM) to 1 step -1 + until ErrorMsg NE '' + RetryLimit = 10 + RetryCount = 1 + RecordExists = False$ + ErrorMsg = '' + Loop + Until RecordExists OR RetryCount EQ RetryLimit + RetryCount += 1 + RecordId = ArchiveRec + TableName = ArchiveRec + RecordDeArchived = ArchiveRec + If Not(RecordDeArchived) then + TxtFilePath = ArchiveFilesPath + TxtFileName = TableName : '-' : RecordId : '.txt' + swap '*' with '%2A' in TxtFileName + FullSavePath = TxtFilePath : TxtFileName + Record = '' + OSRead Record from FullSavePath then + GoSub RemoveMFS + If ErrorMsg EQ '' then + Database_Services('WriteDataRow', TableName, RecordId, Record) + if Error_Services('NoError') then + If RowExists(TableName, RecordId) then + RecordExists = True$ + end else + ErrorMsg = 'An unspecified error occured saving the record.' + end + end else + ErrorMsg = Error_Services('GetMessage') + end + GoSub ReAddMFS + end + end + + If RecordExists then + ArchiveRec = True$ + ArchiveRec = False$ + ArchiveRec = False$ + end else + ErrorMsg = 'An unspecified error occured saving the record.' + end + end + Repeat + Next i + Database_Services('WriteDataRow', 'ARCHIVE', ArchiveId, ArchiveRec, True$, 0, False$) + If Error_Services('HasError') then + ErrorMsg = Error_Services('GetMessage') + end + end else + ErrorMsg = Error_Services('GetMessage') + end + end else + ErrorMsg = 'Archive record was not found.' + end + end else + ErrorMsg = 'ArchiveId was null.' + end + + If ErrorMsg EQ '' then + Response = True$ + end else + Response = False$ + Error_Services('Add', ErrorMsg) + end + end service Service DeArchiveDataFromJson(ArchiveId) - - ErrorMsg = '' - DeArchiveSuccess = False$ - - If ArchiveId NE '' then - If RowExists('ARCHIVE', ArchiveId) then - ArchiveRec = Database_Services('ReadDataRow', 'ARCHIVE', ArchiveId) - ArchiveRec = Datetime() - If Error_Services('NoError') then - ArchiveFilesPath = ArchiveRec - for i = DCount(ArchiveRec, @VM) to 1 step -1 - RecordId = ArchiveRec - TableName = ArchiveRec - If Not(RowExists(RecordTable, TableName)) then - JsonFilePath = ArchiveFilesPath - JsonFileName = TableName : '-' : RecordId : '.json' - swap '*' with '%2A' in JsonFileName - FullSavePath = JsonFilePath : JsonFileName - Record = '' - OSRead Json from FullSavePath then - //ParseJson - GoSub RemoveMFS - If ErrorMsg EQ '' then - Database_Services('WriteDataRow', TableName, RecordId, Record) - if Error_Services('NoError') then - DeArchiveSuccess = True$ - end else - ErrorMsg = Error_Services('GetMessage') - end - GoSub ReAddMFS - end - end - end - Next i - end else - ErrorMsg = Error_Services('GetMessage') - end - end else - ErrorMsg = 'Archive record was not found.' - end - end else - ErrorMsg = 'ArchiveId was null.' - end - - Response = DeArchiveSuccess - - + + ErrorMsg = '' + DeArchiveSuccess = False$ + + If ArchiveId NE '' then + If RowExists('ARCHIVE', ArchiveId) then + ArchiveRec = Database_Services('ReadDataRow', 'ARCHIVE', ArchiveId) + ArchiveRec = Datetime() + If Error_Services('NoError') then + ArchiveFilesPath = ArchiveRec + for i = DCount(ArchiveRec, @VM) to 1 step -1 + RecordId = ArchiveRec + TableName = ArchiveRec + If Not(RowExists(RecordTable, TableName)) then + JsonFilePath = ArchiveFilesPath + JsonFileName = TableName : '-' : RecordId : '.json' + swap '*' with '%2A' in JsonFileName + FullSavePath = JsonFilePath : JsonFileName + Record = '' + OSRead Json from FullSavePath then + //ParseJson + GoSub RemoveMFS + If ErrorMsg EQ '' then + Database_Services('WriteDataRow', TableName, RecordId, Record) + if Error_Services('NoError') then + DeArchiveSuccess = True$ + end else + ErrorMsg = Error_Services('GetMessage') + end + GoSub ReAddMFS + end + end + end + Next i + end else + ErrorMsg = Error_Services('GetMessage') + end + end else + ErrorMsg = 'Archive record was not found.' + end + end else + ErrorMsg = 'ArchiveId was null.' + end + + Response = DeArchiveSuccess + + end service Service ReArchive(ArchiveId) - - ErrorMsg = '' - NewArchiveId = '' - - If RowExists('ARCHIVE', ArchiveId) then - OrigArchiveRec = Database_Services('ReadDataRow', 'ARCHIVE', ArchiveId, True$, 0, False$) - If Error_Services('NoError') then - ArchiveType = Field(ArchiveId, '*', 1) - ArchiveParent = Field(ArchiveId, '*', 2) - If ArchiveType NE '' AND ArchiveParent NE '' then - NewArchiveId = Archive_Services('CreateArchiveRecord', ArchiveParent, ArchiveType, True$, True$) - If Error_Services('HasError') then - ErrorMsg = Error_Services('GetMessage') - end - end - end else - ErrorMsg = Error_Services('GetMessage') - end - end else - ErrorMsg = 'Archive record did not exist.' - end - - If ErrorMsg NE '' then - Error_Services('Add', ErrorMsg) - end - - Reponse = NewArchiveId - - + + ErrorMsg = '' + NewArchiveId = '' + + If RowExists('ARCHIVE', ArchiveId) then + OrigArchiveRec = Database_Services('ReadDataRow', 'ARCHIVE', ArchiveId, True$, 0, False$) + If Error_Services('NoError') then + ArchiveType = Field(ArchiveId, '*', 1) + ArchiveParent = Field(ArchiveId, '*', 2) + If ArchiveType NE '' AND ArchiveParent NE '' then + NewArchiveId = Archive_Services('CreateArchiveRecord', ArchiveParent, ArchiveType, True$, True$) + If Error_Services('HasError') then + ErrorMsg = Error_Services('GetMessage') + end + end + end else + ErrorMsg = Error_Services('GetMessage') + end + end else + ErrorMsg = 'Archive record did not exist.' + end + + If ErrorMsg NE '' then + Error_Services('Add', ErrorMsg) + end + + Reponse = NewArchiveId + + end service Service GenerateArchiveCreationReport(ArchiveIds) - - ErrorMsg = '' - ArchiveData = '' - If ArchiveIds NE '' then - For each ArchiveId in ArchiveIds using @VM setting aPos - ArchiveRec = Database_Services('ReadDataRow', 'ARCHIVE', ArchiveId, True$, 0, False$) - if Error_Services('NoError') then - ArchiveData = Field(ArchiveId, '*', 1);// Table Name - ArchiveData = Field(ArchiveId, '*', 2);// Parent Record Id - ArchiveData = DCount(ArchiveRec, @VM) - end else - ErrorMsg = Error_Services('GetMessage') - end - Next ArchiveId - end else - ArchiveData = 'No records found to Archive.' - end - - if ArchiveData NE '' then - MessageDate = OConv(DateTime(), 'DT') - eMailBody = 'Archive Initialization Report' - eMailBody<-1> = 'The following parents records have been detected as ready to archive on ' : MessageDate : '. All records have been queued to for archive.' - eMailBody<-1> = '' - eMailBody<-1> = ArchiveData - swap @VM with ', ' in eMailBody - swap @FM with CRLF$ in eMailBody - emailHeader = 'Archive Report for ' : MessageDate - SentFrom = 'oinotify@infineon.com' - SendTo = 'jonathan.ouellette@infineon.com' - Success = Email_Services('SendEmail', SentFrom, SendTo, eMailHeader, eMailBody) - end else - MessageDate = OConv(DateTime(), 'DT') - - eMailBody = 'Archive Initialization Report' - eMailBody<-1> = 'Archive service ran on ' : MessageDate : '. No records were detected.' - swap @FM with CRLF$ in eMailBody - - emailHeader = 'Archive Report for ' : MessageDate - - SentFrom = 'oinotify@infineon.com' - SendTo = 'jonathan.ouellette@infineon.com' - Success = Email_Services('SendEmail', SentFrom, SendTo, eMailHeader, eMailBody) - end - + + ErrorMsg = '' + ArchiveData = '' + If ArchiveIds NE '' then + For each ArchiveId in ArchiveIds using @VM setting aPos + ArchiveRec = Database_Services('ReadDataRow', 'ARCHIVE', ArchiveId, True$, 0, False$) + if Error_Services('NoError') then + ArchiveData = Field(ArchiveId, '*', 1);// Table Name + ArchiveData = Field(ArchiveId, '*', 2);// Parent Record Id + ArchiveData = DCount(ArchiveRec, @VM) + end else + ErrorMsg = Error_Services('GetMessage') + end + Next ArchiveId + end else + ArchiveData = 'No records found to Archive.' + end + + if ArchiveData NE '' then + MessageDate = OConv(DateTime(), 'DT') + eMailBody = 'Archive Initialization Report' + eMailBody<-1> = 'The following parents records have been detected as ready to archive on ' : MessageDate : '. All records have been queued to for archive.' + eMailBody<-1> = '' + eMailBody<-1> = ArchiveData + swap @VM with ', ' in eMailBody + swap @FM with CRLF$ in eMailBody + emailHeader = 'Archive Report for ' : MessageDate + SentFrom = 'oinotify@infineon.com' + SendTo = 'jonathan.ouellette@infineon.com' + Success = Email_Services('SendEmail', SentFrom, SendTo, eMailHeader, eMailBody) + end else + MessageDate = OConv(DateTime(), 'DT') + + eMailBody = 'Archive Initialization Report' + eMailBody<-1> = 'Archive service ran on ' : MessageDate : '. No records were detected.' + swap @FM with CRLF$ in eMailBody + + emailHeader = 'Archive Report for ' : MessageDate + + SentFrom = 'oinotify@infineon.com' + SendTo = 'jonathan.ouellette@infineon.com' + Success = Email_Services('SendEmail', SentFrom, SendTo, eMailHeader, eMailBody) + end + end service @@ -1555,46 +1562,46 @@ end service //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// RemoveMFS: - - TableHandle = Database_Services('GetTableHandle', TableName) - If Error_Services('NoError') then - //Temporarily remove MFS's to skip their execution - OrigMFSList = TableHandle<1, 1> - NumMFS = DCount(OrigMFSList, @SVM) - TempMFSList = OrigMFSList - ReAddMFSList = OrigMFSList - For MFSCnt = NumMFS to 1 Step -1 - MFSRoutine = TempMFSList<0, 0, MFSCnt> - // Removal of BASE_MFS allows us to delete records - // Removal of SQL_MFS skips any SQL replication which keeps us from deleting the record there as well. - // Need to remove RTP57 because it auto adds itself and causes an error if you add it manually. - If (MFSRoutine EQ 'BASE_MFS') OR (MFSRoutine EQ 'SQL_MFS*LSL2') OR (MFSRoutine EQ 'RTP57') then - TempMFSList = Delete(TempMFSList, 0, 0, MFSCnt) - if MFSRoutine EQ 'RTP57' then - ReAddMFSList = Delete(ReAddMFSList, 0, 0, MFSCnt) - end - end - Next MFSCnt - Set_MFS(TableName, TempMFSList, 4);// Remove all MFS's - If Get_Status(ErrCode) then - ErrorMsg = 'Error Setting MFS' - end - end else - ErrorMsg = Error_Services('GetMessage') - end - + + TableHandle = Database_Services('GetTableHandle', TableName) + If Error_Services('NoError') then + //Temporarily remove MFS's to skip their execution + OrigMFSList = TableHandle<1, 1> + NumMFS = DCount(OrigMFSList, @SVM) + TempMFSList = OrigMFSList + ReAddMFSList = OrigMFSList + For MFSCnt = NumMFS to 1 Step -1 + MFSRoutine = TempMFSList<0, 0, MFSCnt> + // Removal of BASE_MFS allows us to delete records + // Removal of SQL_MFS skips any SQL replication which keeps us from deleting the record there as well. + // Need to remove RTP57 because it auto adds itself and causes an error if you add it manually. + If (MFSRoutine EQ 'BASE_MFS') OR (MFSRoutine EQ 'SQL_MFS*LSL2') OR (MFSRoutine EQ 'RTP57') then + TempMFSList = Delete(TempMFSList, 0, 0, MFSCnt) + if MFSRoutine EQ 'RTP57' then + ReAddMFSList = Delete(ReAddMFSList, 0, 0, MFSCnt) + end + end + Next MFSCnt + Set_MFS(TableName, TempMFSList, 4);// Remove all MFS's + If Get_Status(ErrCode) then + ErrorMsg = 'Error Setting MFS' + end + end else + ErrorMsg = Error_Services('GetMessage') + end + return ReAddMFS: - - Set_MFS(TableName, ReAddMFSList, 4);// Remove all MFS's;//Put MFS Back onto table - + + Set_MFS(TableName, ReAddMFSList, 4);// Remove all MFS's;//Put MFS Back onto table + return ClearCursors: - For counter = 0 to 8 - ClearSelect counter - Next counter + For counter = 0 to 8 + ClearSelect counter + Next counter return