|
| 1 | +var RecordArchiver = Class.create(); |
| 2 | +RecordArchiver.prototype = { |
| 3 | + initialize: function(tableName, dateField, archiveThresholdDays, archiveMode) { |
| 4 | + this.tableName = tableName; |
| 5 | + this.dateField = dateField; |
| 6 | + this.archiveThresholdDays = archiveThresholdDays; |
| 7 | + this.archiveMode = archiveMode || 'flag'; // 'flag' or 'move' |
| 8 | + }, |
| 9 | + |
| 10 | + archiveRecords: function() { |
| 11 | + var thresholdDate = new GlideDateTime(); |
| 12 | + thresholdDate.addDaysUTC(-this.archiveThresholdDays); |
| 13 | + |
| 14 | + var gr = new GlideRecord(this.tableName); |
| 15 | + gr.addQuery(this.dateField, '<=', thresholdDate); |
| 16 | + gr.query(); |
| 17 | + |
| 18 | + var count = 0; |
| 19 | + while (gr.next()) { |
| 20 | + if (this.archiveMode === 'flag') { |
| 21 | + gr.setValue('u_archived', true); // Assumes a custom field 'u_archived' |
| 22 | + gr.update(); |
| 23 | + } else if (this.archiveMode === 'move') { |
| 24 | + this._moveToArchiveTable(gr); |
| 25 | + } |
| 26 | + count++; |
| 27 | + } |
| 28 | + |
| 29 | + gs.info('Archived ' + count + ' records from ' + this.tableName); |
| 30 | + }, |
| 31 | + |
| 32 | + _moveToArchiveTable: function(record) { |
| 33 | + var archiveGr = new GlideRecord(this.tableName + '_archive'); |
| 34 | + archiveGr.initialize(); |
| 35 | + |
| 36 | + var fields = record.getFields(); |
| 37 | + for (var i = 0; i < fields.size(); i++) { |
| 38 | + var fieldName = fields.get(i).getName(); |
| 39 | + if (archiveGr.isValidField(fieldName)) { |
| 40 | + archiveGr.setValue(fieldName, record.getValue(fieldName)); |
| 41 | + } |
| 42 | + } |
| 43 | + |
| 44 | + archiveGr.insert(); |
| 45 | + record.deleteRecord(); |
| 46 | + }, |
| 47 | + |
| 48 | + type: 'RecordArchiver' |
| 49 | +}; |
| 50 | + |
| 51 | +// Example usage: |
| 52 | +//var archiver = new RecordArchiver('incident', 'opened_at', 365, 'flag'); // Archive incidents older than 1 year |
| 53 | +//archiver.archiveRecords(); |
0 commit comments