Доброго времени суток, подскажите пожалуйста, как можно задать время выполнения веб-сервиса со сторона JavaScript?
По умолчанию как я понял стоит секунд 30, после отваливается с ошибкой "Превышен лимит времени выполнения запроса к серверу приложений статус ответа..."
Вызываю обычный сервис так:
ServiceHelper.callService("ServiceName", "ServiceMethodPost", function(response) { window.console.log(response); }, serviceData, this);
Нравится
Сериков Асхат Кайратович,
Данный вариант правильный
var config = { serviceName: "ServiceName", timeout: 100000 }; var serviceData = { phoneNumber: phoneNumber ? phoneNumber : "", userName: contact.displayValue, email: email ? email : "" }; ServiceHelper.callService(config, "ServiceMethodPost", function(response) { window.console.log(response); }, serviceData, this);
Логика ServiceHelper выглядит так:
define("ServiceHelper", ["ext-base", "terrasoft"], function(Ext, Terrasoft) { /** * ######## ##### ###-#######. * @param {String|Object} config ### ####### ### ######### ###### #######. * @param {String} methodName ### ######. * @param {Function} callback (optional) ####### ######### ######. * @param {Object} data (optional) ###### # ####### #######. * @param {Object} scope (optional) ######## ######. * @return {Object} ######### #######. */ function internalCallService(config, methodName, callback, data, scope) { var serviceName; if (config && Ext.isObject(config)) { serviceName = config.serviceName; methodName = config.methodName; callback = config.callback; data = config.data; scope = config.scope; } else { serviceName = config; } var dataSend = data || {}; var workspaceBaseUrl = Terrasoft.utils.uri.getConfigurationWebServiceBaseUrl(); var requestUrl = workspaceBaseUrl + "/rest/" + serviceName + "/" + methodName; var requestConfig = { url: requestUrl, headers: { "Accept": "application/json", "Content-Type": "application/json" }, method: "POST", jsonData: Ext.encode(dataSend), callback: function(request, success, response) { if (!callback) { return; } var responseObject = response; if (success) { responseObject = Terrasoft.decode(response.responseText); } callback.call(this, responseObject, success); }, scope: scope || this }; if (config && config.timeout) { requestConfig.timeout = config.timeout; } return Terrasoft.AjaxProvider.request(requestConfig); } return { callService: internalCallService }; });
Добрый день!
Timeout указывается в конфиге вызова сервиса (параметр timeout).
В вашем случае будет так:
var config = { serviceName: "ServiceName", timeout: 100000 }; ServiceHelper.callService(config, "ServiceMethodPost", function(response) { window.console.log(response); }, serviceData, this);
Сидоров Александр В.,
Спасибо
var serviceData = { phoneNumber: phoneNumber ? phoneNumber : "", userName: contact.displayValue, email: email ? email : "" }; ServiceHelper.callService("ServiceName", "MethodName", function(response) { window.console.log(response); }, serviceData, this);
В моем случае в serviceData есть другие параметры веб сервиса, их нужно будет в отдельный объект выложить? Не совсем понимаю как БПМ определит что является обычным параметром, а что конфигурационным
Сериков Асхат Кайратович,
Данный вариант правильный
var config = { serviceName: "ServiceName", timeout: 100000 }; var serviceData = { phoneNumber: phoneNumber ? phoneNumber : "", userName: contact.displayValue, email: email ? email : "" }; ServiceHelper.callService(config, "ServiceMethodPost", function(response) { window.console.log(response); }, serviceData, this);
Логика ServiceHelper выглядит так:
define("ServiceHelper", ["ext-base", "terrasoft"], function(Ext, Terrasoft) { /** * ######## ##### ###-#######. * @param {String|Object} config ### ####### ### ######### ###### #######. * @param {String} methodName ### ######. * @param {Function} callback (optional) ####### ######### ######. * @param {Object} data (optional) ###### # ####### #######. * @param {Object} scope (optional) ######## ######. * @return {Object} ######### #######. */ function internalCallService(config, methodName, callback, data, scope) { var serviceName; if (config && Ext.isObject(config)) { serviceName = config.serviceName; methodName = config.methodName; callback = config.callback; data = config.data; scope = config.scope; } else { serviceName = config; } var dataSend = data || {}; var workspaceBaseUrl = Terrasoft.utils.uri.getConfigurationWebServiceBaseUrl(); var requestUrl = workspaceBaseUrl + "/rest/" + serviceName + "/" + methodName; var requestConfig = { url: requestUrl, headers: { "Accept": "application/json", "Content-Type": "application/json" }, method: "POST", jsonData: Ext.encode(dataSend), callback: function(request, success, response) { if (!callback) { return; } var responseObject = response; if (success) { responseObject = Terrasoft.decode(response.responseText); } callback.call(this, responseObject, success); }, scope: scope || this }; if (config && config.timeout) { requestConfig.timeout = config.timeout; } return Terrasoft.AjaxProvider.request(requestConfig); } return { callService: internalCallService }; });
Сидоров Александр В.,
Понял, пойду попробую спасибо,
Сидоров Александр В.,
В целом все так как вы и сказали, только раз присутствует конфиг, то все остальные параметры(данные, scope, callback) нужно так же перенести в него, иначе они перезатрутся при вызове. Спасибо!