Skip to content

Commit 490a0c8

Browse files
Create code.js
1 parent 31b8a13 commit 490a0c8

File tree

1 file changed

+53
-0
lines changed
  • Server-Side Components/Script Includes/Dynamic Record Archiving

1 file changed

+53
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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

Comments
 (0)