Name

sn_capi.CAPIErrorHelper

Description

No description available

Script

var CAPIErrorHelper = Class.create();

/**                
* Error utility section
**/
CAPIErrorHelper.isCAPIError = function(error) {
  if (gs.nil(error))
  	return false;
  if ((typeof error) != 'object' || error.getErrorType === undefined || error.getErrorLevel === undefined)
  	return false;
  return true;
};

/**
* @Deprecated - use createJavaAPIError instead
*/
CAPIErrorHelper.createSDJavaAPIError = function(displayMsg, internalMsg, error) {
  return CAPIErrorHelper.createJavaAPIError(displayMsg, internalMsg, error);
};

/**           Following comments apply to each of the following methods in this section
* @param {String} displayMsg  : This is the message to be displayed to the user. Pass the translated message if necessary
* @param {String} internalMsg : This is a message used for debug purpose. Ex : Error in method getValue();
* @param {*} error Java exception
*/
CAPIErrorHelper.createJavaAPIError = function(displayMsg, internalMsg, error) {
  
  var newError = new CAPIJavaAPIError();
  CAPIErrorHelper._populateError(displayMsg, internalMsg, error, newError);
  return newError;
};



/**
* Creates a javascript error
* @param {string} displayMsg
* @param {string=} internalMsg
* @param {string|SDError=} error
*/
CAPIErrorHelper.createScriptAPIError = function(displayMsg, internalMsg, error) {
  var newError = new CAPIScriptAPIError();
  CAPIErrorHelper._populateError(displayMsg, internalMsg, error, newError);
  return newError;
};

CAPIErrorHelper._populateError = function(displayMsg, internalMsg, oldError, newError){
  
  var internalMsgToAppend = internalMsg || displayMsg;

  // Always use the existing display message if any, because it will be higher in the call stack and thus more specific
  var isCAPIError = CAPIErrorHelper.isCAPIError(oldError);
  displayMsg = isCAPIError && oldError.getDisplayMessage()? oldError.getDisplayMessage() : displayMsg;
  newError.setDisplayMessage(displayMsg);
  	
  if (isCAPIError) {
  	newError.appendInternalMessages(oldError.getInternalMessages());
  	if (internalMsgToAppend)
  		newError.appendInternalMessage(internalMsgToAppend);
  }
  else if (!gs.nil(oldError)) {
  	var details;
  	var stack;
  	
  	if (typeof oldError == 'string') {
  		details = oldError;
  	}
  	// Javascript error object
  	else if (oldError.stack) {
  		details = '' + oldError.rhinoException;
  		stack = oldError.stack;
  	}
  	// Java exception
  	else {
  		details = oldError.message;
  		
  		// TODO: Talk to platform about getting java stack trace in scoped app
// 			var stackTrace = oldError.stackTrace;
//			for (var i = 0; i < stackTrace.length && i < 15; i++)
//				stack.push(stackTrace[i].toString());
  	}
  	
  	var internalMsgs = [];
  	if (internalMsgToAppend)
  		internalMsgs.push(internalMsgToAppend);
  		
  	internalMsgs.push('Details: ' + details);
  	
  	if (stack) 
  		internalMsgs = internalMsgs.concat(['Stack trace: ', stack]);
  	
  	newError.appendInternalMessages(internalMsgs);
  }
  else 
  	newError.appendInternalMessage(internalMsgToAppend);
  
  newError.log();
};

/**
* Returns the display error message if the passed error is a SDError instance,
* otherwise return the passed error.
*/
CAPIErrorHelper.getErrorMessage = function(error) {	
  if(CAPIErrorHelper.isCAPIError(error))
  	return error.getDisplayMessage();
  return error;
};

// Returns a ScriptAPIError with a display message that the passed argument is missing
// TODO: Should deprecate this in favor of createMissingParameterError below
CAPIErrorHelper.createMissingArgumentError = function(methodName, argName) {
  var displayMessage = gs.getMessage('Missing argument: {0}', argName);
  return CAPIErrorHelper.createScriptAPIError(displayMessage, methodName);
};

CAPIErrorHelper.invalidArgumentError = function(methodName, argName) {
  var displayMessage = gs.getMessage('Invalid argument: {0}', argName);
  return CAPIErrorHelper.createScriptAPIError(displayMessage, methodName);
};

/**
*
* @param {String} methodName - ex. CAPIErrorHelper.createMissingParameterError
* @param {Array<String>} argNames
* @returns {CAPIError} - internal message is formatted like "MyClass.myFunction: Undefined arg1, arg2, or arg3"
*/
CAPIErrorHelper.createMissingParameterError = function(methodName, argNames) {

  var internalMsg = methodName;

  if (argNames && argNames.length > 0) {
      if (argNames.length > 1)
          argNames[argNames.length - 1] = ' or ' + argNames[argNames.length - 1];

      internalMsg += ': Undefined ' + argNames.join(', ');
  }
  var failedMessage = gs.getMessage("Missing parameter");
  return CAPIErrorHelper.createScriptAPIError(
      failedMessage,
      internalMsg
  );
};

Sys ID

dff722cf0b943200a91f6707b6673a83

Offical Documentation

Official Docs: