Skip to content

Commit d5f7734

Browse files
authored
Create DynamicTableQueryUtil.js
1 parent d05ad62 commit d5f7734

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
var DynamicTableQueryUtil = Class.create();
2+
DynamicTableQueryUtil.prototype = Object.extendsObject(AbstractAjaxProcessor, {
3+
4+
getTableRow: function() {
5+
var tableName = this.getParameter('sysparm_table_name');
6+
var keyField = this.getParameter('sysparm_key_field');
7+
var keyValue = this.getParameter('sysparm_key_value');
8+
var fieldsParam = this.getParameter('sysparm_fields');
9+
var limitFields = !JSUtil.nil(fieldsParam);
10+
var desiredFields = limitFields ? fieldsParam.split(',') : [];
11+
12+
var result = {};
13+
var tableObj = {};
14+
var gr = new GlideRecord(tableName);
15+
16+
// Use addQuery for non-sys_id fields
17+
if (keyField === 'sys_id') {
18+
if (!gr.get(keyValue)) {
19+
return null;
20+
}
21+
} else {
22+
gr.addQuery(keyField, keyValue);
23+
gr.query();
24+
if (!gr.next()) {
25+
return null;
26+
}
27+
}
28+
29+
// Handle variables (if present)
30+
if (gr.variables) {
31+
for (var key in gr.variables) {
32+
if (!JSUtil.nil(gr.variables[key])) {
33+
var variableObj = gr.variables[key];
34+
tableObj['variables.' + key] = {
35+
fieldDisplayVal: variableObj.getDisplayValue() || String(variableObj),
36+
fieldVal: String(variableObj)
37+
};
38+
}
39+
}
40+
}
41+
42+
// Handle standard fields
43+
var fields = gr.getFields();
44+
for (var i = 0; i < fields.size(); i++) {
45+
var field = fields.get(i);
46+
var fieldName = field.getName();
47+
tableObj[fieldName] = {
48+
fieldDisplayVal: field.getDisplayValue() || String(field),
49+
fieldVal: String(field)
50+
};
51+
}
52+
53+
// Add sys_id explicitly
54+
tableObj['sys_id'] = {
55+
fieldDisplayVal: 'Sys ID',
56+
fieldVal: gr.getUniqueValue()
57+
};
58+
59+
// Filter fields if requested
60+
if (limitFields) {
61+
desiredFields.forEach(function(field) {
62+
field = field.trim();
63+
if (tableObj[field]) {
64+
result[field] = tableObj[field];
65+
}
66+
});
67+
} else {
68+
result = tableObj;
69+
}
70+
71+
return new JSON().encode(result);
72+
}
73+
});

0 commit comments

Comments
 (0)