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