Name

sn_analytics_api.ParamsBuilder

Description

Builds the params object

Script

/*
*   Sample usage -
*   var params = sn_analytics_api.ParamsBuilder.addParams().withPlatform('chat').withEventType('Topic').build()
*/

var ParamsBuilder = (function() {
  return {
      addParams: function() {
          var params = {};
          var builder = {
              // Expected date format of fromDate is yyyy-MM-dd
              withFromDate: function(fromDate) {
                  this._addParam(AnalyticsAPIMetadata.Params.FROM_DATE, fromDate);
                  return builder;
              },
              // Expected date format of toDate is yyyy-MM-dd
              withToDate: function(toDate) {
                  this._addParam(AnalyticsAPIMetadata.Params.TO_DATE, toDate);
                  return builder;
              },

              withPlatform: function(platform) {
                  this._addParam(AnalyticsAPIMetadata.Params.PLATFORM, platform);
                  return builder;
              },

              withAllowStatistical: function(allowStatistical) {
                  this._addParam(AnalyticsAPIMetadata.Params.ALLOW_STATISTICAL, allowStatistical);
                  return builder;
              },

              withPropertyClassifier: function(classifier) {
                  this._addParam(AnalyticsAPIMetadata.Params.PROPERTY_CLASSIFIER, classifier);
                  return builder;
              },

              withAppVersion: function(appVersion) {
                  this._addParam(AnalyticsAPIMetadata.Params.APP_VERSION, appVersion);
                  return builder;
              },

              withDateBucket: function(dateBucket) {
                  this._addParam(AnalyticsAPIMetadata.Params.DATE_BUCKET, dateBucket);
                  return builder;
              },

              withEventTypeFilter: function(eventTypeFilter) {
                  this._addParam(AnalyticsAPIMetadata.Params.EVENT_TYPE_FILTER, eventTypeFilter);
                  return builder;
              },

              withEventType: function(eventType) {
                  this._addParam(AnalyticsAPIMetadata.Params.EVENT_TYPE, eventType);
                  return builder;
              },

              withEventName: function(eventName) {
                  this._addParam(AnalyticsAPIMetadata.Params.EVENT_NAME, eventName);
                  return builder;
              },

              withEventNameFilter: function(eventNameFilter) {
                  this._addParam(AnalyticsAPIMetadata.Params.EVENT_NAME_FILTER, eventNameFilter);
                  return builder;
              },

              withEventPropertyName: function(eventPropertyName) {
                  this._addParam(AnalyticsAPIMetadata.Params.EVENT_PROPERTY_NAME, eventPropertyName);
                  return builder;
              },

              withPropertyName: function(propertyName) {
                  this._addParam(AnalyticsAPIMetadata.Params.PROPERTY_NAME, propertyName);
                  return builder;
              },

              withDynamicPropertyName: function(dynamicPropertyName) {
                  this._addParam(AnalyticsAPIMetadata.Params.DYNAMIC_PROPERTY_NAME, dynamicPropertyName);
                  return builder;
              },

              withPropertyNameFilter: function(propertyNameFilter) {
                  this._addParam(AnalyticsAPIMetadata.Params.PROPERTY_NAME_FILTER, propertyNameFilter);
                  return builder;
              },

              withPropertyValueFilter: function(propertyValueFilter) {
                  this._addParam(AnalyticsAPIMetadata.Params.PROPERTY_VALUE_FILTER, propertyValueFilter);
                  return builder;
              },

              withQuery: function(query) {
                  this._addParam(AnalyticsAPIMetadata.Params.QUERY, query);
                  return builder;
              },

              withPageSize: function(pageSize) {
                  this._addParam(AnalyticsAPIMetadata.Params.PAGE_SIZE, pageSize);
                  return builder;
              },

              withPageNum: function(pageNum) {
                  this._addParam(AnalyticsAPIMetadata.Params.PAGE_NUM, pageNum);
                  return builder;
              },

              withSortField: function(sortField) {
                  this._addParam(AnalyticsAPIMetadata.Params.SORT_FIELD, sortField);
                  return builder;
              },

              withSortDirection: function(sortDirection) {
                  this._addParam(AnalyticsAPIMetadata.Params.SORT_DIRECTION, sortDirection);
                  return builder;
              },

              withUserId: function(userId) {
                  this._addParam(AnalyticsAPIMetadata.Params.USER_ID, userId);
                  return builder;
              },

              withIncludeDeleted: function(includeDeleted) {
                  this._addParam(AnalyticsAPIMetadata.Params.INCLUDE_DELETED, includeDeleted);
                  return builder;
              },

              withSessionId: function(sessionId) {
                  this._addParam(AnalyticsAPIMetadata.Params.SESSION_ID, sessionId);
                  return builder;
              },

              withIsFavorite: function(isFavorite) {
                  this._addParam(AnalyticsAPIMetadata.Params.IS_FAVORITE, isFavorite);
                  return builder;
              },

              withCountry: function(country) {
                  this._addParam(AnalyticsAPIMetadata.Params.COUNTRY, country);
                  return builder;
              },

              withRegions: function(regions) {
                  this._addParam(AnalyticsAPIMetadata.Params.REGIONS, regions);
                  return builder;
              },

              withFunnelId: function(funnelId) {
                  this._addParam(AnalyticsAPIMetadata.Params.FUNNEL_ID, funnelId);
                  return builder;
              },

              withOptions: function(options) {
                  this._addParam(AnalyticsAPIMetadata.Params.OPTIONS, options);
                  return builder;
              },

              withNextPageToken: function(nextPageToken) {
                  this._addParam(AnalyticsAPIMetadata.Params.BATCH_ID, nextPageToken);
                  return builder;
              },

              withScreenType: function(screenType) {
                  this._addParam(AnalyticsAPIMetadata.Params.SCREEN_TYPE, screenType);
              },

              withFunnelName: function(funnelName) {
                  this._addParam(AnalyticsAPIMetadata.Params.FUNNEL_NAME, funnelName);
                  return builder;
              },

              withSteps: function(steps) {
                  this._addParam(AnalyticsAPIMetadata.Params.STEPS, steps);
                  return builder;
              },

              // Expected values [Now, Week, Month, ThreeMonths] = range(4)
              withDateInterval: function(dateInterval) {
                  this._addParam(AnalyticsAPIMetadata.Params.DATE_INTERVAL, dateInterval);
                  return builder;
              },

              build: function() {
                  return params;
              },

              _addParam: function(paramInfo, paramVal) {
                  if (params.VALIDATION_STATUS == 'FAIL')
                      return;

                  var paramValidation = this._isValid(paramInfo, paramVal);
                  if (paramValidation.status == 'FAIL') {
                      params = {};
                      params.VALIDATION_STATUS = 'FAIL';
                      params.VALIDATION_STATUS_MESSAGE = paramValidation.message;
                      return;
                  }

                  var paramType = paramInfo.type;

                  if (paramType == 'string' || paramType == 'number' || paramType == 'boolean' || paramType == 'array')
                      params[paramInfo.name] = paramVal;
                  else if (paramType == 'date') {
                      var format = paramInfo.format;
                      var gdt = new GlideDateTime(paramVal);
                      params[paramInfo.name] = gdt.getDate().getValue();
                  } else if (paramType == 'json') {
                      try {
                          params[paramInfo.name] = JSON.parse(paramVal);
                      } catch (e) {
                          params = {};
                          params.VALIDATION_STATUS = 'FAIL';
                          params.VALIDATION_STATUS_MESSAGE = 'Invalid json - ' + paramInfo.name;
                          return;
                      }
                  }
              },

              _isValid: function(paramInfo, paramVal) {
                  var paramName = paramInfo.name;
                  var paramType = paramInfo.type;

                  if (!this._isValidType(paramType, paramVal))
                      return {
                          status: 'FAIL',
                          message: paramName + ' has to be a valid ' + paramType
                      };

                  var validValues = paramInfo.valid_values;
                  if (!this._isValidValue(validValues, paramVal))
                      return {
                          status: 'FAIL',
                          message: paramName + ' has to be one of ' + validValues.toString()
                      };

                  return {
                      status: 'PASS',
                  };
              },

              _isValidType: function(paramType, paramVal) {
                  if (paramType == 'string' || paramType == 'number' || paramType == 'boolean') {
                      return typeof paramVal == paramType;
                  } else if (paramType == 'date') {
                      var gdt = new GlideDateTime(paramVal);
                      return gdt.isValid();
                  } else
                      return true;
              },

              _isValidValue: function(validValues, paramVal) {
                  if (validValues)
                      return new global.ArrayUtil().contains(validValues, paramVal);

                  return true;
              }
          };

          return builder;
      }
  };
})();

Sys ID

7b3379dc534820101dccddeeff7b12aa

Offical Documentation

Official Docs: