Добрый день. Просьба помочь в ответе на следующий вопрос по очередям:
1) С чем может быть связана проблема, что после нажатия кнопки [Вернуть в очередь], в одном случае объект очереди остается в очереди, но увеличивается счетчик [Количество переносов], а в другом объект очереди исключается из очереди и через 5 минут снова входит в ней, но счетчик не сработал (т.к. создался новый объект очередь).
Какое поведение корректно при нажатии на кнопку [Вернуть в очередь]? Остаться в очереди с увеличенным счетчиком или исключение из очереди, и создание нового объекта очереди?
В документации описано такое поведение:
В результате выполнится возврат в раздел [Домашняя страница]. Отложенное
обращение будет помещено в конец очереди, независимо от настроенных
правил сортировки записей в данной очереди.
//из описания следует, что из очереди выпадать обращение не должно, верно?
Нравится
Логика этой кнопки сделана в схеме BasePageV2 в одном из пакетов OperatorSingleWindow:
onPostponeQueueItemButtonClick: function() {
var queueItemId = this.get("QueueItemId");
if (!queueItemId) {
this.error(this.get("Resources.Strings.QueueItemIsEmptyError"));
//Страница не связана с элементом очереди единого окна. Действие отменено.
return;
}
this.postponeQueueItem(queueItemId, function(success) {
var messageString = (success)
? "QueueItemPostponeSucceedMessage"//Элемент успешно возвращен в очередь
: "QueueItemPostponeFailedMessage";//Ошибка при возвращении элемента в очередь
var message = this.get("Resources.Strings." + messageString);
this.showInformationDialog(message, function() {
if (success) {
this.onQueueItemPostponed();
}
}.bind(this));
}.bind(this));
}
},
postponeQueueItem: function(queueItemId, callback) {
var serviceCallBack = function(response, success) {
if (!success) {
var errorMessage =
this.Ext.String.format(this.get("Resources.Strings.PostponeQueueItemError"),
response.responseText);
//Ошибка возвращения элемента в очередь. Сообщение об ошибке: {0}
this.error(errorMessage);
if (callback) {
callback(false);
}
return;
}
if (callback) {
callback(response === 1);
}
};
ServiceHelper.callService({
serviceName: "QueuesService",
methodName: "PostponeQueueItem",
data: {
queueItemId: queueItemId
},
callback: serviceCallBack,
scope: this
});
},Там клиентская логика вызывает серверную функцию из QueuesService:
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "PostponeQueueItem", BodyStyle = WebMessageBodyStyle.WrappedRequest,
RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public int PostponeQueueItem(Guid queueItemId) {
var userConnection = HttpContext.Current.Session["UserConnection"] as UserConnection;
int updateCount = 0;
string message = string.Empty;
try {
if (userConnection == null) {
throw new ArgumentNullException("UserConnection");
}
var update =
new Update(userConnection, "QueueItem")
.Set("PostponesCount", new QueryColumnExpression(ArithmeticOperation.Addition,
new QueryColumnExpression("PostponesCount"), new QueryColumnExpression(Column.Const(1))))
.Set("OperatorId", Column.Parameter(null, "Guid"))
.Set("NextProcessingDate", Column.Const(null))
.Where("Id").IsEqual(new QueryParameter("QueueItemId", queueItemId));
updateCount = update.Execute();
message = string.Format(GetResourceValue(userConnection, "QueueItemPostponeUpdatedMessage"),
queueItemId);
QueuesUtilities.LogDebug(message);
} catch (Exception e) {
message = string.Format(GetResourceValue(userConnection, "InvokeMethodErrorMessage"),
"PostponeQueueItem", e.Message);
QueuesUtilities.LogError(message, e);
throw;
}
return updateCount;
}По коду видно, что меняется существующая запись: счётчик, дата и очищается ссылка на оператора.
Если у Вас поведение отличается от инструкции, проверьте, нет ли доработок в указанных местах системы. Если сайт развёрнут локально, выяснить, что происходит, может помочь отладка серверного кода.