UNPKG

jsforce

Version:

Salesforce API Library for JavaScript

175 lines (160 loc) 5.11 kB
/** * @file Manages Salesforce Analytics API * @author Shinichi Tomita <shinichi.tomita@gmail.com> */ var _ = require('underscore')._, Promise = require('../promise'); /** * Report instance to retrieving asynchronously executed result * * @protected * @class Analytics~ReportInstance * @param {Analytics~Report} report - Report * @param {String} id - Report instance id */ var ReportInstance = function(report, id) { this._report = report; this._conn = report._conn; this.id = id; }; /** * Retrieve report result asynchronously executed * * @method Analytics~ReportInstance#retrieve * @param {Callback.<Analytics~ReportResult>} [callback] - Callback function * @returns {Promise.<Analytics~ReportResult>} */ ReportInstance.prototype.retrieve = function(callback) { var conn = this._conn, report = this._report; var url = [ conn._baseUrl(), "analytics", "reports", report.id, "instances", this.id ].join('/'); return conn._request(url).thenCall(callback); }; /** * Report object in Analytics API * * @protected * @class Analytics~Report * @param {Connection} conn Connection */ var Report = function(conn, id) { this._conn = conn; this.id = id; }; /** * Describe report metadata * * @method Analytics~Report#describe * @param {Callback.<Analytics~ReportMetadata>} [callback] - Callback function * @returns {Promise.<Analytics~ReportMetadata>} */ Report.prototype.describe = function(callback) { var url = [ this._conn._baseUrl(), "analytics", "reports", this.id, "describe" ].join('/'); return this._conn._request(url).thenCall(callback); }; /** * Run report synchronously * * @method Analytics~Report#execute * @param {Object} [options] - Options * @param {Boolean} options.details - Flag if include detail in result * @param {Analytics~ReportMetadata} options.metadata - Overriding report metadata * @param {Callback.<Analytics~ReportResult>} [callback] - Callback function * @returns {Promise.<Analytics~ReportResult>} */ Report.prototype.run = Report.prototype.exec = Report.prototype.execute = function(options, callback) { options = options || {}; if (_.isFunction(options)) { callback = options; options = {}; } var url = [ this._conn._baseUrl(), "analytics", "reports", this.id ].join('/'); if (options.details) { url += "?includeDetails=true"; } var params = { method : options.metadata ? 'POST' : 'GET', url : url }; if (options.metadata) { params.headers = { "Content-Type" : "application/json" }; params.body = JSON.stringify(options.metadata); } return this._conn._request(params).thenCall(callback); }; /** * Run report asynchronously * * @method Analytics~Report#executeAsync * @param {Object} [options] - Options * @param {Boolean} options.details - Flag if include detail in result * @param {Analytics~ReportMetadata} options.metadata - Overriding report metadata * @param {Callback.<Analytics~ReportInstanceAttrs>} [callback] - Callback function * @returns {Promise.<Analytics~ReportInstanceAttrs>} */ Report.prototype.executeAsync = function(options, callback) { options = options || {}; if (_.isFunction(options)) { callback = options; options = {}; } var url = [ this._conn._baseUrl(), "analytics", "reports", this.id, "instances" ].join('/'); if (options.details) { url += "?includeDetails=true"; } var params = { method : 'POST', url : url, body: "" }; if (options.metadata) { params.headers = { "Content-Type" : "application/json" }; params.body = JSON.stringify(options.metadata); } return this._conn._request(params).thenCall(callback); }; /** * Get report instance for specified instance ID * * @method Analytics~Report#instance * @param {String} id - Report instance ID * @returns {Analytics~ReportInstance} */ Report.prototype.instance = function(id) { return new ReportInstance(this, id); }; /** * List report instances which had been executed asynchronously * * @method Analytics~Report#instances * @param {Callback.<Array.<Analytics~ReportInstanceAttrs>>} [callback] - Callback function * @returns {Promise.<Array.<Analytics~ReportInstanceAttrs>>} */ Report.prototype.instances = function(callback) { var url = [ this._conn._baseUrl(), "analytics", "reports", this.id, "instances" ].join('/'); return this._conn._request(url).thenCall(callback); }; /** * API class for Analytics API * * @class * @param {Connection} conn Connection */ var Analytics = function(conn) { this._conn = conn; }; /** * Get report object of Analytics API * * @param {String} id - Report Id * @returns {Analytics~Report} */ Analytics.prototype.report = function(id) { return new Report(this._conn, id); }; /** * Get recent report list * * @param {Callback.<Array.<Analytics~ReportInfo>>} [callback] - Callback function * @returns {Promise.<Array.<Analytics~ReportInfo>>} */ Analytics.prototype.reports = function(callback) { var url = [ this._conn._baseUrl(), "analytics", "reports" ].join('/'); return this._conn._request(url).thenCall(callback); }; module.exports = Analytics;