Вопрос

Добрый день. Есть БП который выполняется в сумме около 8 часов, запускается по таймеру, таймер выставлен на 19:00, но БП запускается сам когда захочет, захочет в 2 ночи, захочет в 13 дня, захочет в 8 утра, из-за чего это может быть, может кто-нибудь подскажет?

У меня такой же вопрос

2 комментария
Лучший ответ

1. Проверьте, корректно ли реализован запуск процесса по расписанию.

2. Возможно, что проблема в работе Quartz, и требуется его обновление или оптимизация работы Вашего бизнес-процесса.

В любом случае, подумайте о способах оптимизации Вашего бизнес-процесса и уменьшения времени его выполнения. Например, попробуйте разбить данный процесс на несколько мелких, которые запускайте последовательно подпроцессами. Также можно обрабатывать только те записи, которые модифицировались с момента последнего успешного запуска данного бизнес-процесса.

Также Вы тегнули, что используете версию 7.13, потому рекомендую обновиться до более 'свежей', а в идеале до последней версии, которой на текущий момент является версия 7.15. Учтите, что обновление с версии на версию нужно выполнять последовательно.

добрый день,

я встречал два таких случая: 1. таймер попал на техническое окно когда систему компилировали, 2. очередь планировщика была переполнена и все процессы по таймеру и событиям задерживали выполнение.
к сожалению без техподдержки вам не обойтись. если вы работаете on-site и имеете доступ к планировщику, то можете воспользоваться приемами, описанными на академии https://academy.terrasoft.ru/documents/technic-sdk/7-14/rekomendacii-po-nastroyke-planirovshchika-zadaniy

1. Проверьте, корректно ли реализован запуск процесса по расписанию.

2. Возможно, что проблема в работе Quartz, и требуется его обновление или оптимизация работы Вашего бизнес-процесса.

В любом случае, подумайте о способах оптимизации Вашего бизнес-процесса и уменьшения времени его выполнения. Например, попробуйте разбить данный процесс на несколько мелких, которые запускайте последовательно подпроцессами. Также можно обрабатывать только те записи, которые модифицировались с момента последнего успешного запуска данного бизнес-процесса.

Также Вы тегнули, что используете версию 7.13, потому рекомендую обновиться до более 'свежей', а в идеале до последней версии, которой на текущий момент является версия 7.15. Учтите, что обновление с версии на версию нужно выполнять последовательно.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!

Установила дополнение "Excel pivot report for bpm'online" (Построение сводных таблиц данных и импорт в Excel).

https://marketplace.terrasoft.ru/app/excel-pivot-report-bpmonline

При добавлении раздела "Сводные отчеты" (через настройку рабочих мест) система видит данные раздел, но при добавлении его, раздел не появляется.

Подскажите пожалуйста, с чем может быть связана данная проблема? Может необходимо что-либо поправить?

У меня такой же вопрос

4 комментария
Лучший ответ

Екатерина, добрый день!

Для решения данной проблемы напишите, пожалуйста, в тех. поддержку: support@crm-bpm.ru

необходимо перелогиниться, после чего добавленный Раздел появится в соответствующем Рабочем месте  

Oleksii Dybkov,

Не появляется. Этот раздел не появляется даже на этапе добавления (при настройке рабочего места - в списке разделов). На этапе добавления раздела, он доступен, но при условии нажатия кнопки "Выбрать", окно выбора закрывается, а раздел не появляется.

Oleksii Dybkov,

Екатерина, добрый день!

Для решения данной проблемы напишите, пожалуйста, в тех. поддержку: support@crm-bpm.ru

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Подскажите пожалуйста, установили дополнения по автоматическому планированию активностей:  https://marketplace.terrasoft.ru/app/recurring-activities-scheduler

Начали тестировать, однако при создании таких активностей система выдает ошибку создания:

"Создание повторяющихся активностей завершено с ошибкой. Обратитесь к системному администраторуThe time zone parameter 'Russia TZ 2 Standard Time' provided to AT TIME ZONE clause is invalid. "

Что необходимо поправить?

У меня такой же вопрос

1 комментарий
Лучший ответ

Относительно данной ошибки обратитесь к разработчику этого дополнения bpmonlinelabs@bpmonline.com

Относительно данной ошибки обратитесь к разработчику этого дополнения bpmonlinelabs@bpmonline.com

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!

Коллеги, подскажите пожалуйста, попробовала поставить дополнение "Change log" .

Ссылка:     https://marketplace.terrasoft.ru/app/change-log-bpmonline

Возник следующий вопрос: как в реестре изменений вывести столбец с Логином Пользователя, который внес изменения? Попробовала вывести информацию, но выводится, к сожалению, только пользователь, который выбран в системе "ответственным" за запись, т.е. создавший запись изначально.

У нас возникают следующая ситуация: к одной записи разрешен доступ нескольким Пользователям. Ответственным называется в системе тот, кто создал запись. При этом, иной Пользователь может зайти в запись и внести изменения. Вот хотелось бы вывести Колонку в реестре, которая бы отображала, какой именно Пользователь внёс изменения. Могли бы подсказать какие взаимосвязи установить в настройке реестра, чтобы корректно отражался Пользователь изменивший данные? 

У меня такой же вопрос

2 комментария
Лучший ответ

Добрый день.

В карточке редактирования той сущности, для которой настроено логирование, на вкладке [История изменений] в детали 'Журнал изменений' настроить реестр записей аналогично, как и для других деталей. В настройке выбрать колонки 'Создал' и 'Дата создания':

Добрый день.

В карточке редактирования той сущности, для которой настроено логирование, на вкладке [История изменений] в детали 'Журнал изменений' настроить реестр записей аналогично, как и для других деталей. В настройке выбрать колонки 'Создал' и 'Дата создания':

Алла Савельева,

Алла, спасибо огромное! Разобралась.

 

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Необходимо при выгрузке отчета выводить значения поля "Остаток срока по обработке обращения", равное разнице между временем разрешения обращения и фактической датой отчета (текущее время выгрузки отчета).

Например: 

Время разрешения - 18.10.2019 17:00

Текущее время - 18.10.2019 16:00

----------------В реззультате--------------------------------------

Остаток срока по обработке обращения - 01:00 (1 час) 

В документации, посвященной расчету срока реакции и разрешения, написано, что в карточке "Обращение" отображается поле "Осталось" (см. скрин)

Его фактически и необходимо отображать при выгрузке отчета (на момент выгрузки отчета)

Просьба подсказать какие способы реализации существуют по моей проблеме?

У меня такой же вопрос

1 комментарий

Если поле в объекте уже есть и в таблице в базе там правильные значения, то способ реализации будет только один — открыть настройки и шаблон отчёта и вписать там это поле. Как именно — зависит от движка, на котором построен отчёт.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Привет,

Есть вопрос,

Версия: 7.13.4.638_SalesEnterprise_Marketing

На данный момент перехожу от алгоритма разработки:

1. В конфигураторе создать пакет, указать для него SVN

2. Добавление frontend компонентов через конфигуратор с отладкой в chrome dev tools

3. Добавление backend компонентов через конфигуратор с отладкой в дебаг проекте в VS

4. Коммит в SVN

к следующему примерному алгоритму:

1. Настроить BPM для разработки в файловой системе.

2. Выгрузить пакеты в конфигурационный проект при помощи конфигуратора либо bpmCli, либо через workspace console.

3. Реализовать код фронта/бека в конфигурационном проекте

4. При помощи workspace console залить изменения в bpm и скомпилировать ,если были изменены c# классы.

5. Закоммитить в GIT

Вопросы:

Какие лучшие практики используются для ускорения разработки с точки зрения инструментария?

Что хранить в GIT? Пакеты как в SVN, либо при помощи bpmCli выгрузить пакеты из сайта, затем каждый пакет преобразовать в проект, прикрепить к общему solution, и хранить это, а если нужно загрузить пакеты на сайт, то при помощи bpmCli собрать пакет из проекта и сделать pull?

Как отлаживать бекенд? Насколько я понял, конфигурационный проект решает эту проблему, но возможно можно сделать лучше?

Как отлаживать фронт, используя например VS Code?

 

У меня такой же вопрос

1 комментарий

Добрый день. Информация о разработке в файловой системе есть в статьях Академии.

Обратите внимание, Вы используете довольно устаревшую версию 7.13.4. Лучшей практикой будет обновить систему до актуальной 7.15.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Привет,

Столкнулся с проблемой:

Версия: 7.13.4.638_SalesEnterprise_Marketing

Программа: bpmcli, релиз 1.2 https://github.com/Advance-Technologies-Foundation/bpmcli/releases

Выполнил по мануалу из гита регистрацию bpmcli, выполнил команду bpmcli install-gate, которая, судя по логу в консоли завершилась успешно. Далее перекомпилировал конфигурацию, в списке пакетов появился bpmcligate.

Однако, при выполнении любой команды возникает ошибка Your app does not contain bpmcli API. 

В данном случае утилита мне нужна для того, чтобы выгружать пакеты из BPM "pull-pkg UsrIntegrations -e dev -d C:\Instruments\test\", находящейся в режиме разработки в файловой системе, затем создавать из пакетов проекты bpmcli convert UsrIntegrations.

У меня такой же вопрос

3 комментария

У bpmcli исходники открыты. Вот место, где выводится это сообщение:

private static string ApiVersionUrl => _url + @"/0/rest/BpmcliApiGateway/GetApiVersion";
.....
public static void CheckApiVersion() {
	var dir = AppDomain.CurrentDomain.BaseDirectory;
	string versionFilePath = Path.Combine(dir, "bpmcligate", "version.txt");
	var localApiVersion = new Version(File.ReadAllText(versionFilePath));
	var appApiVersion = GetAppApiVersion();
	if (appApiVersion == new Version("0.0.0.0")) {
		MessageToConsole($"Your app does not contain bpmcli API." +
		 $"{Environment.NewLine}You should consider install it via the \'bpmcli install-gate\' command.", ConsoleColor.DarkYellow);
	} else if (localApiVersion > appApiVersion) {
		MessageToConsole($"You are using bpmcli api version {appApiVersion}, however version {localApiVersion} is available." +
		 $"{Environment.NewLine}You should consider upgrading via the \'bpmcli update-gate\' command.", ConsoleColor.DarkYellow);
	}
}
 
 
private static Version GetAppApiVersion() {
	var apiVersion = new Version("0.0.0.0");
	try {
		string appVersionResponse = BpmonlineClient.ExecuteGetRequest(ApiVersionUrl).Trim('"');
		apiVersion = new Version(appVersionResponse);
	} catch (Exception) {
	}
	return apiVersion;
}

Попробуйте подключиться к указанному сверху адресу на Вашей системе и сравнить ответ сервиса с тем сайтом, где консоль точно работает.

Зверев Александр,

После установки пакета 

bpmcligate и перекомпиляции в системе не появился сервис, к которому обращается утилита. Возможно пакет нужно установить как то иначе?

На всякий случай ещё попробуйте перезапустить сайт и очистить Redis. Тут ведь происходит не просто установка пакета, сервис должен появиться на стороне IIS.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день

в наличии bpmonline, куплен Terrasoft Messaging Service.

Подскажите каким образом осуществляется связь  с asterisk.

Насколько я понял Terrasoft Messaging Service осуществляет связь bpmonline по ami . Каким образом осуществляется проброс звонка на ответственного ? (получается нужно при помощи  апи  и телефона звонящего узнать  из bpmonline ответственного и перенаправить звонок ему. Что будет ему карточку всплывашку показывать.???)

Пояснениям , докам , примерам на php ... буду рад. любым подсказкам в какую сторону плыть.

спасибо. 

У меня такой же вопрос

11 комментариев
Лучший ответ

sandal пишет:
Литвинко Павел,Спасибо за ответ. Ситуация - звонит клиент , астер принял звонок необходимо направить на ответственного за данный номер ? (по идее надо выдернуть номер ответственного из bpmonline и средствами астера направить на ответственного ). тут же вопросы по как сделать всплывашку для ответственного в bpmonline. Может есть коннектор платный который может перенаправлять на ответственного , показывать всплывашку..... спасибо

Вам нужно делать интеграцию по средствам веб-сервисов с Астериском, где в BPM найдете ответственного, узнаете его номер линии и передадите Астериску, а Астериск на своей стороне уже осуществит перенаправление на нужную линию. Без интеграции никак. Либо давать доступ в БД, для Астериска, чтобы они сами делали запросы в нужные таблицы и искали нужного человека и уже потом распределяли.
Со стороны BPM например сделать табличку, в которую будут записываться Номера линий и их связанные записи, для упрощения поиска Астериску и для уменьшения доступа в БД. 

Вы при настройки BPM, выбираете тип интеграции, в вашем случае Asterisk, затем в профиле, вы указываете номер линии пользователя.
На этот номер уже и распределяется звонок. Операторы используют приложение "софтфон", в котором настраивается подключение к Астериску, по этому же номеру линии, через софтфон оператор и разговаривает с клиентами.
Связка с TMS, уже позволяет дублировать звонок в саму BPM. Ответсвенным по звонку соответственно является текущий пользователя софтфона, который указан в настройках BPM

А по поводу переброса на нужного ответственного, это лучше делать на стороне телефонии, чтобы она маршрутизировала на нужный номер сотрудника. Аналогичный, но более простой случай решают тут и тут.

Если в движке телефонии есть возможность запуска скриптов, можно на стороне 7.13 сделать веб-сервис (анонимный или с авторизацией), который по номеру клиента возвращает номер сотрудника, а далее работать с ним.

Литвинко Павел,

Спасибо за ответ. Ситуация - звонит клиент , астер принял звонок необходимо направить на ответственного за данный номер ? (по идее надо выдернуть номер ответственного из bpmonline и средствами астера направить на ответственного ). тут же вопросы по как сделать всплывашку для ответственного в bpmonline. Может есть коннектор платный который может перенаправлять на ответственного , показывать всплывашку..... спасибо

sandal пишет:
Литвинко Павел,Спасибо за ответ. Ситуация - звонит клиент , астер принял звонок необходимо направить на ответственного за данный номер ? (по идее надо выдернуть номер ответственного из bpmonline и средствами астера направить на ответственного ). тут же вопросы по как сделать всплывашку для ответственного в bpmonline. Может есть коннектор платный который может перенаправлять на ответственного , показывать всплывашку..... спасибо

Вам нужно делать интеграцию по средствам веб-сервисов с Астериском, где в BPM найдете ответственного, узнаете его номер линии и передадите Астериску, а Астериск на своей стороне уже осуществит перенаправление на нужную линию. Без интеграции никак. Либо давать доступ в БД, для Астериска, чтобы они сами делали запросы в нужные таблицы и искали нужного человека и уже потом распределяли.
Со стороны BPM например сделать табличку, в которую будут записываться Номера линий и их связанные записи, для упрощения поиска Астериску и для уменьшения доступа в БД. 

Литвинко Павел,

авторизация на php проходит. попытка выдернуть номер ответственного не удается. смотрел как https://docs.webitel.com/pages/viewpage.action?pageId=73793602 . на выходе 

[3] => {"rowConfig":{"Id":{"dataValueType":0},"Name":{"dataValueType":1},"OwnerLogin":{"dataValueType":1},"Photo":{"dataValueType":16,"isLookup":true,"referenceSchemaName":"SysImage"}},"rows":[{"Name":"-","OwnerLogin":"","Id":"6dbd0b03-fb20-49a6-b3bd-0bb56d5dc8a0","Photo":""}],"notFoundColumns":[],"rowsAffected":1,"nextPrcElReady":false,"success":false}

по идее должен возвращать номер ответственного. но не дает.

в запросе не могу понять куда вставить ( наверное по этому и не возвращает то что надо.)

"exportVariables": { "Contact": "rows.0.Name",
"owner_caller_id_number": "rows.0.OwnerLogin"
            }

Может есть примеры общения с апи ?

Вот этот же или очень похожий пример здесь. Нужно смотреть, как отрабатывает этот вебителовский запрос, совместим ли с нынешней версией системы, какие SQL-запросы отправляет в базу и что получает в ответ.

Зверев Александр,

Добрый день. а как это все посмотреть?. все это я пытаюсь запихнуть в curl php.

из примера 

{
    "httpRequest": {
        "exportCookie": "my_cookie",
        "url": "https://my.bpmonline.com/ServiceModel/AuthService.svc/Login",
        "method": "POST",
        "headers": {
            "Content-Type": "application/json"
        },
        "data": {
            "UserName": "Supervisor",
            "UserPassword": "Supervisor"
        }
    }
}

преобразовывается в php curl

$url = "https://bpm.xxxx.com/ServiceModel/AuthService.svc/Login";
$requestData["UserName"] = "xxx";
$requestData["UserPassword"] = "yyy";
echo $jcres = json_encode($requestData);
echo "\n";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_COOKIEJAR,'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_HEADER,1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jcres);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jcres))
);
$result = curl_exec($ch);
echo $result;
echo "\n";

curl_close($ch);
 

авторизация проходит данные куки скидываются в файл. оттуда выдираются и используются в дальнейших запросах.

{
    "httpRequest": {
        "url": "https://my.bpmonline.com/0/dataservice/json/reply/SelectQuery",
        "method": "POST",
        "headers": {
            "Cookie": "${my_cookie}",
            "Accept": "application/json;odata=verbose"
        },
        "exportVariables": {
            "effective_caller_id_name": "rows.0.Name",
            "owner_caller_id_number": "rows.0.OwnerLogin"
        },
        "data": {
            "QueryType": 0,
            "Columns": {
                "Items": {
                    "Name": {
                        "OrderDirection": 0,
                        "OrderPosition": 0,
                        "Caption": null,
                        "Expression": {
                            "ExpressionType": 0,
                            "ColumnPath": "Name"
                        }
                    },
                    "OwnerLogin": {
                        "OrderDirection": 0,
                        "OrderPosition": 0,
                        "Caption": null,
                        "Expression": {
                            "ExpressionType": 0,
                            "ColumnPath": "[WSysAccount:Contact:Owner].Login"
                        }
                    }
                }
            },
            "AllColumns": false,
            "IsDistinct": false,
            "RowCount": 1,
            "Filters": {
                "FilterType": 6,
                "ComparisonType": 0,
                "LogicalOperation": 0,
                "IsNull": true,
                "IsEnabled": true,
                "IsNot": false,
                "Items": {
                    "FilterByPhone": {
                        "FilterType": 1,
                        "ComparisonType": 9,
                        "LogicalOperation": 0,
                        "IsNull": true,
                        "IsEnabled": true,
                        "IsNot": false,
                        "LeftExpression": {
                            "ExpressionType": 0,
                            "ColumnPath": "[ContactCommunication:Contact].SearchNumber"
                        },
                        "RightExpression": {
                            "ExpressionType": 2,
                            "ColumnPath": null,
                            "Parameter": {
                                "DataValueType": 1,
                                "Value": "${reverted_caller_id_number}"
                            }
                        }
                    }
                }
            },
            "RootSchemaName": "Contact",
            "OperationType": 0
        }
    }
}

вот с этим не понятно что делать ? в  "Value": "${reverted_caller_id_number}" мы поместим среверсированый номер телефона.

и в post data вставим  "data": и даже что то возвращает запрос.

{"rowConfig":{"Id":{"dataValueType":0},"Name":{"dataValueType":1},"OwnerLogin":{"dataValueType":1},"Photo":{"dataValueType":16,"isLookup":true,"referenceSchemaName":"SysImage"}},"rows":[{"Name":"-","OwnerLogin":"","Id":"6dbd0b03-fb20-49a6-b3bd-0bb56d5dc8a0","Photo":""}],"notFoundColumns":[],"rowsAffected":1,"nextPrcElReady":false,"success":false}
 

но я не пойму как вставить в запрос

        "exportVariables": {
            "effective_caller_id_name": "rows.0.Name",
            "owner_caller_id_number": "rows.0.OwnerLogin"
        },

как вообще дебажить эти запросы??? которые идут как "httpRequest": {

 

 

Смотреть и вручную отправлять нужные запросы к веб-сервисам можно при помощи Fiddler. А смотреть, что выбирается при выполнении и какой текст запросов в базу, можно в SQL-профайлере. Учтите, приведенный код предназначен для интеграции с другой телефонией Webitel, а не Asterisk, используемый набор полей в них может отличаться.

Парни вы трезвые тут!!!

Смотрите задача, имея API bpmonline получить скриптом внутренний номер ответственного менеджера который закреплен за номером в bpmonline. 
Проблема в том что согласно документации оно 1. Не описано, 2. То что описано на форумах или в манах не работает так как описано.

фраза для какой телефонии оно тут вообще до телефонии не доходит. это просто методы АПИ которые не описаны и которые чтобы получить ответственого - еще не поступило ни одного трезвого ответа. 

Есть запрос есть ответ, но в ответе ничего внятного нет, и нету никакого понимания что с этим ответом можно сделать дальше. 
Направте пожалуйста в нужное русло. Если вы смотрели АПИ других CRM систем там такое есть могу показать что надо. 

 

 

Нужное русло для трезвых: разработать веб-сервис в конфигурации, который получает на вход один номер и возвращает другой по нужному заказчику алгоритму, далее из телефонии работать с ним. Либо, если уже нашли подходящий пример работы со стандартным сервисом dataservice, отладить работу с ним в fiddler, убедиться, что в ответ на запрос приходит нужный ответ, затем уже работать с веб-сервисом из телефонии.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Коллеги,

Добрый день,

Хочу для определенных ролей убрать кнопку сохранить в настройке группы фильтров.

 

У меня такой же вопрос

2 комментария
Лучший ответ

Следует в ExtendedFilterEditModelV2 поправить функцию getSaveButtonVisibility

Следует в ExtendedFilterEditModelV2 поправить функцию getSaveButtonVisibility

Варфоломеев Данила,

спасибо, попробуем...

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день. Просьба помочь в ответе на следующий вопрос по очередям:

1) С чем может быть связана проблема, что после нажатия кнопки [Вернуть в очередь], в одном случае объект очереди остается в очереди, но увеличивается счетчик [Количество переносов], а в другом объект очереди исключается из очереди и через 5 минут снова входит в ней, но счетчик не сработал (т.к. создался новый объект очередь).

Какое поведение корректно при нажатии на кнопку [Вернуть в очередь]? Остаться в очереди с увеличенным счетчиком или исключение из очереди, и создание нового объекта очереди?

В документации описано такое поведение:

В результате выполнится возврат в раздел [Домашняя страница]. Отложенное
обращение будет помещено в конец очереди, независимо от настроенных
правил сортировки записей в данной очереди.

//из описания следует, что из очереди выпадать обращение не должно, верно?

У меня такой же вопрос

2 комментария

Логика этой кнопки сделана в схеме 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;
  }

По коду видно, что меняется существующая запись: счётчик, дата и очищается ссылка на оператора.

Если у Вас поведение отличается от инструкции, проверьте, нет ли доработок в указанных местах системы. Если сайт развёрнут локально, выяснить, что происходит, может помочь отладка серверного кода.

Зверев Александр,

Спасибо большое за ваш комментарий, взял на вооружение!

Войдите или зарегистрируйтесь, чтобы комментировать