При тестировании работы TSCRM в регионах (каналы предачи данных в регионы предоставлены государственным интернет провайдером Белтелеком, причем каналы начиная от 192 Кбит/сек) возникли проблемы, в частности часто, при создании контакта или котрагента, после нажатия на кнопку ОК окошко остается виесть и закрыть его невозможно. Приходится снимать задачу и запускать TS CRM заново.
Причинами подобных проблем могут быть следующие:
- потери данных при обмене с регионом, например при превышении заказанной полосы "лишние" пакеты просто отбрасываются провайдером каналов.
- из-за того что канал используется не только для TS CRM возможно превышение тайм-аутов запросов к SQL серверу.
Для уточнения проблемы и поиска решения прошу пояснить логику работы TS CRM (версия и параметры указаны в подписи) с сервером и дать рекомендации.
Вопросы:
1. Как TS CRM реагирует на потерю соединения с сервером в процессе выполнения SQL запроса? Предпринимаются ли попытки ( и если да, то сколько) восстановить соединение и выполнить потерянный запрос повторно?
2. Как TS CRM реагирует на истечение тайм-аута SQL запроса к серверу MS SQL
где этот (или возможно несколько: в клиенте, на сервере, в самом ядре TS CRM)
тайм-аут хранится, как его можно посмотреть изменить, отдебажить.
3. Возможно ситуация с незакрывающимися окошками уже Вам известна и вы знаете решение.
Заранее спасибо за ответ.
Нравится
Добрый день Сергей,
1. Создайте индексы в таблицах tbl_Account, tbl_Contact по полям Name,
Communication1, Communication2, Communication3, Communication4 и
Communication5.
2. В скрипте scr_BaseDBEditUtils
Замените функцию ProcessBaseDBEditOKOnClick:
function ProcessBaseDBEditOKOnClick(Window, BaseDBEdit) { if (!WindowWasPrepared(Window)) { return; } var Result = SaveChangesWithCheck(Window, BaseDBEdit); if (Result){ Window.IsVisible = false; System.ProcessMessages(); Window.Close(); } return Result; }
3. Таймаут при выполнении запросов - бесконечность. Изменить его извне
нельзя.
--
Осауленко Александр
Результаты тестирования прислали:
1. Менеджер 1. г.Гродно - "Субъективно стало работать лучше. Зависаний окошек нет.Обновление 3.0.4.109 Работает.Отличий не наблюдалось."
2. Менеджер 2. г. Гомель - "Новая версия работает с такой же скоростью как и описано в субботнем письме про старую версию. [Скорость работы вроде нормальная (во всяком случае намного быстрее чем в старом црме), сравнима с работай лотуса в г. Гомеле.] Но это пока я один работаю в Гомеле. Надеюсь, что после того как пользователей будет минимум 9, она не изменится."
3.Менеджер3. г. Могилев - "после обновления ошибок не возникало"
По результатам тестирования делаем вывод, что благодаря настройке DSCP на маршрутизаторах техническим отделом, а также внесенным изменениям, согласно рекомендациям специалиста компании Terrasoft выявленные в ходе первого тестирования ошибки удалось победить.
=======================================================================
P.S. Судя по предложенному коду, он только скрывает проблему, но не решает ее.
Будем надеятся что проблему решила настройка приоритезации трафика. Прошу меня поправить, если я ошибаюсь.
"Sergey E. Yakovlev" написал:P.S. Судя по предложенному коду, он только скрывает проблему, но не решает ее.
Будем надеятся что проблему решила настройка приоритезации трафика. Прошу меня поправить, если я ошибаюсь.
Здравствуйте!
Спасибо за результаты.
В коде появилась строка - System.ProcessMessages();
Она запускает цикл обработки оконных сообщений. Данный метод используется при выполнении длительных операций для избежания эффекта "заморозки" окна.
--
Осауленко Александр
А вернется ли управление из строки
var Result = SaveChangesWithCheck(Window, BaseDBEdit);
если пакет ответа от MSSQL (например из-за сбоя в сети) простсо потеряется и никогда не придет?
"Sergey E. Yakovlev" написал:А вернется ли управление из строкиvar Result = SaveChangesWithCheck(Window, BaseDBEdit);если пакет ответа от MSSQL (например из-за сбоя в сети) простсо потеряется и никогда не придет?
Функция System.ProcessMessages(); предназначена только для длительных операций.
Для решения проблем связанных с потерей соединения - в версии 3.0.4
не было автоматического восстановления соединения с сервером. Это появится в ближайшем билде 3.0.4
В Вашем случае могу посоветовать:
1. В скрипте scr_BaseDBEditUtils
Заменить функцию SaveChangesWithCheck
function SaveChangesWithCheck(Window, BaseDBEdit){ try { var Datalink = Window.ComponentsByName('dlData'); var Dataset = Datalink.Dataset; if (!CheckData(Window, BaseDBEdit, Datalink)) { return false; } var AddNewRecordOnPage = (Dataset.State == dstInsert); if (AddNewRecordOnPage && GetIsDuplicatesExists(BaseDBEdit, Dataset, Window)){ return false; } if (AddNewRecordOnPage && !GetCanInsertTableGroup(Dataset)) { ShowWarningDialog("Текущий пользователь не имеет достаточно прав для добавления записи"); return false; } else if (!AddNewRecordOnPage && !GetIsCanEdit(Dataset, BaseDBEdit)) { ShowWarningDialog("У вас нет прав на изменение записи"); return false; } SaveChanges(BaseDBEdit, Window); SendNotify(Window, MSG_OK); return true; } catch (e) { System.EndProcessing(); System.MessageDialog(e.message, mdtError, mdbOK, 0); return false; } }
2. В скрипте scr_Main:
Заменить функцию ShowTimerWindow
function ShowTimerWindow() { try { Main.RemindingsForm = Connector.Attributes('RemindingsWindow'); if (Assigned(Connector.Attributes('RemindingsWindow'))) { var RemindingsWindow = Connector.Attributes('RemindingsWindow'); RefreshDataset(RemindingsWindow.ComponentsByName('dlData').Dataset); } else { if (GetAreRemindingsExist()) { Main.RemindingsForm = Services.GetNewItemByUSI(Main.RemindingsWindowUSI); SetAttribute(Main.RemindingsForm, 'ContactID', Connector.CurrentUser.ContactID); Main.RemindingsForm.Show(); Connector.Attributes('RemindingsWindow') = Main.RemindingsForm; } } } catch(e) { Log.Write(lmtError, e.message); } }
--
Осауленко Александр