Доброго времени суток, подскажите пожалуйста, как можно задать время выполнения веб-сервиса со сторона 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) нужно так же перенести в него, иначе они перезатрутся при вызове. Спасибо!