@openui5/sap.ui.core
Version:
OpenUI5 Core Library sap.ui.core
138 lines (125 loc) • 5.06 kB
JavaScript
/*!
* OpenUI5
* (c) Copyright 2026 SAP SE or an SAP affiliate company.
* Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
*/
/*eslint-disable max-len */
/**
* Internal Component of the AnalyticalBinding, only used there
*
* @namespace
* @name sap.ui.model.analytics
* @private
*/
sap.ui.define(function() {
"use strict";
/**
* Constructor for a batch response collecting component.
*
* @classdesc Simple Response Collection Component, collects the responses for each sub-request inside a bigger batch request.
*
* Also handles clean-up after all responses (either success or error) have been collected.
* Instantiated in AnalyticalBinding.prototype._executeBatchRequest()
*
* @alias sap.ui.model.analytics.BatchResponseCollector
* @constructor
* @deprecated As of version 1.144.0, will be replaced by OData V4 data aggregation, see
* {@link topic:7d914317c0b64c23824bf932cc8a4ae1 Extension for Data Aggregation}
* @public
* @param {object} [mParams] optional Setup-Parameter, see {@link #setup}
*/
function BatchResponseCollector(mParams) {
if (mParams) {
this.setup(mParams);
}
}
/**
* Type "Success" for Batch Sub-Responses
*/
BatchResponseCollector.TYPE_SUCCESS = "success";
/**
* Type "Error" for Batch Sub-Responses
*/
BatchResponseCollector.TYPE_ERROR = "error";
/**
* Setup-Function to initialize/reset the BatchResponseCollector.
*
* @public
* @param {object} [mParams] optional Setup-Parameter
* @param {array} mParams.executedRequests an Array with detail information for all executed batch sub-requests
* @param {object} mParams.binding a reference to the AnalyticalBinding which started the batch request
* @param {int} mParams.lastAnalyticalInfoVersion the analyticalInfo version at the time of the creation of this
* BatchResponseCollector instance, this may change during the process of a pending request. Typically changed
* via a call to AnalyticalBinding#updateAnalyticalInfo.
* @param {function} mParams.success a success handler function, which is called after all requests in mParams.executedRequests
* have returned.
* @param {function} mParams.error an error handler function, which is called if one or more requests have returned with an error
*/
BatchResponseCollector.prototype.setup = function(mParams) {
this.iRequestCollectionCount = 0;
this.aCollectedSuccesses = [];
this.aCollectedErrors = [];
this.aExecutedRequestDetails = mParams.executedRequests;
this.oAnalyticalBinding = mParams.binding;
this.fnSuccessHandler = mParams.success;
this.fnErrorHandler = mParams.error;
};
/**
* Convenience function to collect a success response.
*
* Internally BatchResponseCollector#collect is called with second parameter BatchResponseCollector.TYPE_SUCCESS
*
* @public
* @param {object} oResponse the successful response, which should be collected
*/
BatchResponseCollector.prototype.success = function(oResponse) {
this.collect(oResponse, BatchResponseCollector.TYPE_SUCCESS);
};
/**
* Convenience function to collect an error response.
*
* Internally BatchResponseCollector#collect is called, the second parameter is set to BatchResponseCollector.TYPE_ERROR
*
* @public
* @param {object} oResponse the erroneous response object
*/
BatchResponseCollector.prototype.error = function(oResponse) {
this.collect(oResponse, BatchResponseCollector.TYPE_ERROR);
};
/**
* Collects responses of type BatchResponseCollector.TYPE_SUCCESS and BatchResponseCollector.TYPE_ERROR.
*
* Keeps track of all collected responses and fires the necessary events after all responses for the
* requests, given in the constructor, have returned.
*
* @public
* @param {object} oResponse the response which should be collected
* @param {string} [sResponseType] the type of the response, either BatchResponseCollector.TYPE_SUCCESS
* or BatchResponseCollector.TYPE_ERROR
*/
BatchResponseCollector.prototype.collect = function(oResponse, sResponseType) {
this.iRequestCollectionCount++;
//check if the response was a success
if (sResponseType === BatchResponseCollector.TYPE_SUCCESS) {
this.aCollectedSuccesses.push(oResponse);
} else {
this.aCollectedErrors.push(oResponse);
}
var iOverallCompletedRequests = (this.aCollectedSuccesses.length + this.aCollectedErrors.length);
//all responses have returned
if (iOverallCompletedRequests === this.aExecutedRequestDetails.length) {
//check if all responses were successful
if ((this.aCollectedSuccesses.length === iOverallCompletedRequests) && this.aCollectedErrors.length === 0) {
// has to be bound to window, because the model does it too
this.fnSuccessHandler.call(window, {
__batchResponses: this.aCollectedSuccesses
}, {
requestUri: this.oAnalyticalBinding.oModel.sServiceUrl + "/$batch"
});
} else {
this.fnErrorHandler.call(window, this.aCollectedErrors[0] || {});
}
}
};
return BatchResponseCollector;
}, /* bExport= */true);