Добрый день. Просьба помочь в ответе на следующий вопрос по очередям:
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; }
По коду видно, что меняется существующая запись: счётчик, дата и очищается ссылка на оператора.
Если у Вас поведение отличается от инструкции, проверьте, нет ли доработок в указанных местах системы. Если сайт развёрнут локально, выяснить, что происходит, может помочь отладка серверного кода.