triggering subflow from script include.
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
4 hours ago
var triggerServiceOptionFlow = Class.create();
triggerServiceOptionFlow.prototype = Object.extendsObject(AbstractAjaxProcessor, {
bulkSubscribers: function () {
try {
// --- Read parameters (support both plain and sysparm_* names)
var sysIdList = this._getParam('sys_id_list') || this._getParam('sysparm_sys_id_list');
var targetServiceSysId = this._getParam('target_service_sys_id') || this._getParam('sysparm_target_service_sys_id');
if (!sysIdList || !targetServiceSysId) {
return JSON.stringify({
success: false,
message: 'Missing required parameters.'
});
}
// --- Parse and sanitize subscriber sys_ids
var sysIds = sysIdList.split(',').map(function (id) {
return (id || '').trim();
}).filter(function (id) {
return id.length > 0;
});
if (sysIds.length === 0) {
return JSON.stringify({
success: false,
message: 'No valid subscriber sys_ids provided.'
});
}
// --- Validate target service option
var targetService = new GlideRecord('u_service_option');
if (!targetService.get(targetServiceSysId)) {
return JSON.stringify({
success: false,
message: 'Target service option not found.'
});
}
var targetServiceName = targetService.getValue('name') || targetServiceSysId;
// --- Collect ACTIVE users from the subscriber list
var userSet = {}; // de-dupe
var activeUserSysIds = [];
var subscriberGR = new GlideRecord('cmdb_subscriber');
subscriberGR.addQuery('sys_id', 'IN', sysIds.join(','));
subscriberGR.addQuery('u_active', true);
subscriberGR.query();
while (subscriberGR.next()) {
var u = subscriberGR.getValue('user');
if (u && !userSet[u]) {
userSet[u] = true;
activeUserSysIds.push(u);
}
}
if (activeUserSysIds.length === 0) {
return JSON.stringify({
success: false,
message: 'No active subscribers found to process.'
});
}
// --- Prepare Subflow inputs (NOTE: using new names)
var inputs = {
// Subflow input name: Array.String of user sys_ids
user_id: activeUserSysIds,
// Subflow input name: String (service option sys_id)
service_option: targetServiceSysId
};
// --- Execute Subflow
// To run asynchronously in the background, replace inForeground() with inBackground()
var result = sn_fd.FlowAPI
.getRunner()
.subflow('global.service_option_subflow')
.inForeground()
.withInputs(inputs)
.run();
// If the subflow ever returns outputs later:
// var outputs = result.getOutputs();
return JSON.stringify({
success: true,
message: activeUserSysIds.length + ' users successfully processed for service option: ' + targetServiceName
});
} catch (ex) {
var msg = (ex && ex.message) ? ex.message : ex.toString();
gs.error('Bulk Subscriber Flow Error: ' + msg);
return JSON.stringify({
success: false,
message: 'Error triggering subflow: ' + msg
});
}
},
// --- Helper to read both plain and sysparm_* names safely
_getParam: function (name) {
return this.getParameter(name) || this.getParameter('sysparm_' + name) || '';
},
type: 'triggerServiceOptionFlow'
}); this is the script include .
I am getting error when i try to trigger this subflow "{"success":false,"message":"Error triggering subflow: flow object does not exist"". Please help me to fix this
function okButton() {
var service = gel('service').value;
if (!service) {
alert("Please select a service option.");
return;
}
var gdw = GlideDialogWindow.get();
var selectedSubscribers = gdw.getPreference('selected_subscriber');
if (!selectedSubscribers) {
alert("No subscribers selected.");
return;
}
var userArray = selectedSubscribers.split(',');
if (userArray.length > 1000) {
alert("You cannot process more than 1000 users at once.");
return;
}
// Single GlideAjax call
var ga = new GlideAjax('triggerServiceOptionFlow'); // Script Include name
ga.addParam('sysparm_name', 'bulkSubscribers'); // Function name
ga.addParam('sys_id_list', selectedSubscribers);
ga.addParam('target_service_sys_id', service);
ga.getXMLAnswer(function(answer) {
alert(answer);
if (answer) {
alert(answer); // Now will show the server-returned message
if (typeof g_list !== 'undefined') {
g_list.refresh();
}
} else {
alert("No response from server.");
}
closeWindow();
});
} this is client script of ui page
0 REPLIES 0
