← Script library

Script Includes

GlideAjax Response Handler

Provide server-side functions that can be called from Client Scripts via GlideAjax.

JavaScript
var UserInfoUtils = Class.create();
UserInfoUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {

  /**
   * Get the count of open tickets for a user
   * Called from client via GlideAjax
   *
   * Parameters expected:
   *   sysparm_user_id - sys_id of the user
   *
   * Returns: Number of open incidents (string)
   */
  getUserOpenTickets: function() {
    // Get the user ID parameter from client
    var userId = this.getParameter('sysparm_user_id');

    // Validate input
    if (!userId) {
      return '0';
    }

    // Query for open incidents
    var grIncident = new GlideAggregate('incident');
    grIncident.addQuery('caller_id', userId);
    grIncident.addQuery('active', 'true');
    grIncident.addAggregate('COUNT');
    grIncident.query();

    var count = 0;
    if (grIncident.next()) {
      count = grIncident.getAggregate('COUNT');
    }

    // Return string value (required for GlideAjax)
    return count.toString();
  },

  /**
   * Get detailed user information including tickets and metrics
   *
   * Parameters expected:
   *   sysparm_user_id - sys_id of the user
   *
   * Returns: JSON string with user details
   */
  getUserDetails: function() {
    var userId = this.getParameter('sysparm_user_id');

    if (!userId) {
      return JSON.stringify({error: 'User ID required'});
    }

    // Get user record
    var grUser = new GlideRecord('sys_user');
    if (!grUser.get(userId)) {
      return JSON.stringify({error: 'User not found'});
    }

    // Build response object
    var userDetails = {
      email: grUser.email.toString(),
      phone: grUser.phone.toString(),
      location: grUser.location.toString(),
      department: grUser.department.getDisplayValue(),
      manager: grUser.manager.getDisplayValue(),
      vip: grUser.vip.toString() === 'true',
      openTickets: this._getOpenTicketCount(userId),
      avgResolutionTime: this._getAvgResolutionTime(userId)
    };

    // Return JSON string
    return JSON.stringify(userDetails);
  },

  /**
   * Private helper: Get count of open tickets for user
   * @param {string} userId - sys_id of user
   * @returns {number} count of open tickets
   */
  _getOpenTicketCount: function(userId) {
    var ga = new GlideAggregate('incident');
    ga.addQuery('caller_id', userId);
    ga.addQuery('active', 'true');
    ga.addAggregate('COUNT');
    ga.query();

    if (ga.next()) {
      return parseInt(ga.getAggregate('COUNT'));
    }
    return 0;
  },

  /**
   * Private helper: Calculate average resolution time in days
   * @param {string} userId - sys_id of user
   * @returns {string} average days formatted to 1 decimal
   */
  _getAvgResolutionTime: function(userId) {
    var ga = new GlideAggregate('incident');
    ga.addQuery('caller_id', userId);
    ga.addQuery('closed_at', '!=', '');
    ga.addQuery('sys_created_on', '>', gs.daysAgoStart(90));  // Last 90 days
    ga.addAggregate('AVG', 'calendar_duration');
    ga.query();

    if (ga.next()) {
      var avgDuration = ga.getAggregate('AVG', 'calendar_duration');
      var avgDays = avgDuration / (24 * 60 * 60);  // Convert seconds to days
      return avgDays.toFixed(1);
    }
    return '0.0';
  },

  type: 'UserInfoUtils'
});

How to use it

1. Create a new Script Include 2. Set Name to "UserInfoUtils" (or your chosen name) 3. Check "Client callable" checkbox 4. Set "Extends" to "AbstractAjaxProcessor" 5. Copy the code above 6. Use from Client Scripts as shown in the GlideAjax examples above

Adapt the table names, fields, and conditions to your instance. Test the behavior in a development environment before using it in production.