3.x

Логика работы TSCRM с MSSQL сервером. Узкий канал.

При тестировании работы TSCRM в регионах (каналы предачи данных в регионы предоставлены государственным интернет провайдером Белтелеком, причем каналы начиная от 192 Кбит/сек) возникли проблемы, в частности часто, при создании контакта или котрагента, после нажатия на кнопку ОК окошко остается виесть и закрыть его невозможно. Приходится снимать задачу и запускать TS CRM заново.

Причинами подобных проблем могут быть следующие:
- потери данных при обмене с регионом, например при превышении заказанной полосы "лишние" пакеты просто отбрасываются провайдером каналов.
- из-за того что канал используется не только для TS CRM возможно превышение тайм-аутов запросов к SQL серверу.

Для уточнения проблемы и поиска решения прошу пояснить логику работы TS CRM (версия и параметры указаны в подписи) с сервером и дать рекомендации.

Вопросы:

1. Как TS CRM реагирует на потерю соединения с сервером в процессе выполнения SQL запроса? Предпринимаются ли попытки ( и если да, то сколько) восстановить соединение и выполнить потерянный запрос повторно?
2. Как TS CRM реагирует на истечение тайм-аута SQL запроса к серверу MS SQL
где этот (или возможно несколько: в клиенте, на сервере, в самом ядре TS CRM)
тайм-аут хранится, как его можно посмотреть изменить, отдебажить.
3. Возможно ситуация с незакрывающимися окошками уже Вам известна и вы знаете решение.

Заранее спасибо за ответ.

Нравится

5 комментариев

Добрый день Сергей,

1. Создайте индексы в таблицах tbl_Account, tbl_Contact по полям Name,
Communication1, Communication2, Communication3, Communication4 и
Communication5.

2. В скрипте scr_BaseDBEditUtils

Замените функцию ProcessBaseDBEditOKOnClick:
[javascript]
function ProcessBaseDBEditOKOnClick(Window, BaseDBEdit) {
if (!WindowWasPrepared(Window)) {
return;
}
var Result = SaveChangesWithCheck(Window, BaseDBEdit);
if (Result){
Window.IsVisible = false;
System.ProcessMessages();
Window.Close();
}
return Result;
}
[/javascript]
3. Таймаут при выполнении запросов - бесконечность. Изменить его извне
нельзя.

--

Осауленко Александр

Результаты тестирования прислали:

1. Менеджер 1. г.Гродно - "Субъективно стало работать лучше. Зависаний окошек нет.Обновление 3.0.4.109 Работает.Отличий не наблюдалось."

2. Менеджер 2. г. Гомель - "Новая версия работает с такой же скоростью как и описано в субботнем письме про старую версию. [Скорость работы вроде нормальная (во всяком случае намного быстрее чем в старом црме), сравнима с работай лотуса в г. Гомеле.] Но это пока я один работаю в Гомеле. Надеюсь, что после того как пользователей будет минимум 9, она не изменится."

3.Менеджер3. г. Могилев - "после обновления ошибок не возникало"

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

=======================================================================

P.S. Судя по предложенному коду, он только скрывает проблему, но не решает ее.
Будем надеятся что проблему решила настройка приоритезации трафика. Прошу меня поправить, если я ошибаюсь.

"Sergey E. Yakovlev" написал:P.S. Судя по предложенному коду, он только скрывает проблему, но не решает ее.
Будем надеятся что проблему решила настройка приоритезации трафика. Прошу меня поправить, если я ошибаюсь.

Здравствуйте!
Спасибо за результаты.
В коде появилась строка - System.ProcessMessages();
Она запускает цикл обработки оконных сообщений. Данный метод используется при выполнении длительных операций для избежания эффекта "заморозки" окна.
--

Осауленко Александр

А вернется ли управление из строки
[javascript]
var Result = SaveChangesWithCheck(Window, BaseDBEdit);
[/javascript]
если пакет ответа от MSSQL (например из-за сбоя в сети) простсо потеряется и никогда не придет?

"Sergey E. Yakovlev" написал:А вернется ли управление из строки
[javascript]
var Result = SaveChangesWithCheck(Window, BaseDBEdit);
[/javascript]
если пакет ответа от MSSQL (например из-за сбоя в сети) простсо потеряется и никогда не придет?

Функция System.ProcessMessages(); предназначена только для длительных операций.
Для решения проблем связанных с потерей соединения - в версии 3.0.4
не было автоматического восстановления соединения с сервером. Это появится в ближайшем билде 3.0.4
В Вашем случае могу посоветовать:
1. В скрипте scr_BaseDBEditUtils
Заменить функцию SaveChangesWithCheck
[javascript]
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;
}
}
[/javascript]
2. В скрипте scr_Main:
Заменить функцию ShowTimerWindow
[javascript]
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);
}
}
[/javascript]

--

Осауленко Александр

Показать все комментарии