Skip to content

Instantly share code, notes, and snippets.

@greyaperez
Last active January 7, 2016 18:13
Show Gist options
  • Save greyaperez/72a9b5bfc3b8a6fffb3c to your computer and use it in GitHub Desktop.
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.
///////////////////
// 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