triggering subflow from script include.

YashasM
Tera Contributor
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 .
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 
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
0 REPLIES 0