Last active
January 7, 2016 18:13
-
-
Save greyaperez/72a9b5bfc3b8a6fffb3c to your computer and use it in GitHub Desktop.
Salesforce Utils Angular App. Includes query service which allows async queries to SF objects.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/////////////////// | |
// INITIAL SETUP | |
/////////////////// | |
/* | |
// On VF page, pass Session_ID to Client | |
var SESSION_ID = '{!$Api.Session_ID}'; | |
*/ | |
/////////////////// | |
// Angular Module | |
/////////////////// | |
var salesforceUtilsApp = angular.module('SalesforceUtils', []); | |
salesforceUtilsApp.constant('Salesforce.Session_ID', SESSION_ID); | |
/** | |
* Service: Salesforce Query Service | |
* @description Salesforce Async Service | |
* @author Timothy A. Perez <[email protected]> | |
*/ | |
salesforceUtilsApp.factory('SalesforceUtils.QueryService', ['$log', '$http', 'Salesforce.Session_ID', function ($log, $http, SESSION_ID) { | |
// PROPS | |
/** @access public **/ | |
/** @access private **/ | |
var sessionId = SESSION_ID; | |
var requestDefaults = { | |
method: 'GET', | |
url: '/services/data/v28.0/query', | |
params: '', | |
data: '', | |
headers: '', | |
cache: false | |
}; | |
// METHODS | |
/** @access public **/ | |
var query = query; | |
/** @access private **/ | |
var init = _.once(init); | |
// SERVICE API | |
var Service = { | |
'query': query | |
}; | |
return Service; | |
init(); | |
//////////////////////// | |
//////////////// | |
// Construct / Init | |
//////////////// | |
function init () { | |
// Set Session Token | |
$http.defaults.headers.common.Authorization = "Bearer ".concat(sessionId); | |
} | |
//////////////// | |
// Public | |
//////////////// | |
/** | |
* Query Salesforce Objects | |
* @param queryStr - @example "SELECT Id, Name FROM Account LIMIT 10" | |
* @param requestConfigOverrides - Angular $http config overrides | |
* @returns {promise} | |
*/ | |
function query (queryStr, requestConfigOverrides, successHandler, errorHandler) { | |
var requestConfig = _.cfg(requestDefaults, requestConfigOverrides); | |
successHandler = successHandler || getQueryResults; | |
errorHandler = errorHandler || getQueryFailed; | |
requestConfig.data = {"q": queryStr}; | |
return $http(requestConfig).then(successHandler).catch(errorHandler); | |
function getQueryResults (res) { | |
return res.data; | |
} | |
function getQueryFailed (err) { | |
$log.error(err); | |
} | |
} | |
}]); | |
/** | |
* Service: Salesforce Remote Action Service | |
* @description Call Controller @RemoteAction methods | |
* @requires : Setup/Prerequisites | |
* - Controller Attribute on VF Page <apex:page controller="{YOUR_APEX_CONTROLLER}"> | |
* - Remote Action Methods within Apex Controller must use @RemoteAction Annotation | |
* @author Timothy A. Perez <[email protected]> | |
*/ | |
salesforceUtilsApp.factory('SalesforceUtils.RemoteActionService', ['$log', '$http', 'Salesforce.Session_ID', function ($log, $http, SESSION_ID) { | |
// SERVICE API | |
var Service = { | |
'remoteAction': remoteAction | |
}; | |
return Service; | |
//////////////// | |
// Public | |
//////////////// | |
/** | |
* Perform Remote Action | |
* @param {string} action - Apex method reference (ex: "SomeController.someMethod" ) | |
* @param data | |
* @param callback | |
* @returns {*} | |
*/ | |
function remoteAction (action, data, callback) { | |
if (typeof Visualforce === 'undefined') { | |
$log.error('Cannot perform remote action. Visualforce object not available.'); | |
return; | |
} | |
callback = callback || handleResult; | |
return Visualforce.remoting.Manager.invokeAction(action, data, callback, { escape: true }); | |
function handleResult (result, event) { | |
return result; | |
} | |
} | |
]); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment