Добрый день.
Версия 3.0.4 реализую возврат к последнему активному разделу.
После перового выхода из террасофт активный раздел сохраняется, но в последующие разы выкидывает разрушительный сбой.
Connector.DBEngine.ExecuteCustomSQL('INSERT INTO tbl_loginhistory VALUES (NEWID(),GetDate(),\''+Connector.CurrentUser.ContactID+'\',HOST_NAME(),0,@@SPID )',System.EmptyValue);
if (Assigned(Main.UserSettingsWindow)){
var UserSettings = Main.UserSettingsWindow.Attributes('UserSettings');
var ActiveWorkspaceItem = GetActiveWorkspaceItem();
if (UserSettings.StartMenuItemAction == 'rbLastActive') {
UserSettings.StartMenuItemTag =
ActiveWorkspaceItem ? ActiveWorkspaceItem.Tag : '';
}
if (UserSettings.StartMenuItemAction != 'rbByDefault') {
UserSettings.StartMenuGroupTag =
ActiveWorkspaceItem ? ActiveWorkspaceItem.ParentItems.Tag : '';
}
Services.SerializeItemToProfile(Main.UserSettingsWindow, EmptyStr);
}
CloseMainForm();
}
Код функции. Ошибка в Services.SerializeItemToProfile(Main.UserSettingsWindow, EmptyStr); данной строке.
Прилагаю файлом весь скрипт.
Нравится
Здравствуйте Олег,
Попробуйте добавить WinCache_Clear(); перед CloseMainForm();
Добавил, на данный момент функция такая:
function wnd_MainOnClose(Window) { Connector.DBEngine.ExecuteCustomSQL('INSERT INTO tbl_loginhistory VALUES (NEWID(),GetDate(),\''+Connector.CurrentUser.ContactID+'\',HOST_NAME(),0,@@SPID )',System.EmptyValue); if (Assigned(Main.UserSettingsWindow)){ var UserSettings = Main.UserSettingsWindow.Attributes('UserSettings'); var ActiveWorkspaceItem = GetActiveWorkspaceItem(); if (UserSettings.StartMenuItemAction == 'rbLastActive') { UserSettings.StartMenuItemTag = ActiveWorkspaceItem ? ActiveWorkspaceItem.Tag : ''; } if (UserSettings.StartMenuItemAction != 'rbByDefault') { UserSettings.StartMenuGroupTag = ActiveWorkspaceItem ? ActiveWorkspaceItem.ParentItems.Tag : ''; } debugger; Services.SerializeItemToProfile(Main.UserSettingsWindow, EmptyStr); } WinCache_Clear(); CloseMainForm(); }
Но проблему очистка кеша не решила(
Когда иду дебагером прохожу через скрипт wnd_UserSettingsScript,а когда возвращаюсь в мейн выскакивает еррор на строке, что я указал в начале
TSObjectLibrary.Services: Разрушительный сбой
А на что может указывать такая ошибка?
После первого выхода из террасофт Main.Workspaces.Count устанавливается = 2, по этому и выскакивает ошибка. Подскажите, как победить?
Там может быть только одно, последнее окно, как бы чистить при загрузке террасофта.
Олег. на сколько я понимаю код который в http://www.community.terrasoft.ru/forum/topic/7019#comment-30069 был взят c 3.3.2, у меня получилось воспроизвести проблемму, с TSObjectLibrary.Services: Catastrophic failure перенеся данный код на конфигурацию на 3.0.4, но решить ее за короткое время у меня не получилось.
Да. Код был взят из 3.3.2.
Просто дело в том, что если я захожу в настройки пользователя и нажимаю на "ок", то ошибка не появляется. Но если этого не делать, выскакивает TSObjectLibrary.Services: Catastrophic failure.
Т.е. как бы сохранение работает, но каждый раз жать ок в настройках не вариант)
Когда мы выбираем способ загрузки стартового окна, срабатывает функция SaveAttributtes() из wnd_UserSettingsScript. Можно ли как-то вызывать эту функцию на событии wnd_main (onClose)?
Пробовал wnd_UserSettingsScript.SaveAttributtes() - не прокатывает
function wnd_MainOnClose(Window) { debugger; var wndSetting = Services.GetSingleItemByUSI('wnd_UserSettings'); // wndSetting.Show(); wndSetting.Prepare(); wndSetting.ComponentsByName('btnOk').Click(); Connector.DBEngine.ExecuteCustomSQL('INSERT INTO tbl_loginhistory VALUES (NEWID(),GetDate(),\''+Connector.CurrentUser.ContactID+'\',HOST_NAME(),0,@@SPID )',System.EmptyValue); if (Assigned(Main.UserSettingsWindow)){ var UserSettings = Main.UserSettingsWindow.Attributes('UserSettings'); var ActiveWorkspaceItem = GetActiveWorkspaceItem(); if (UserSettings.StartMenuItemAction == 'rbLastActive') { UserSettings.StartMenuItemTag = ActiveWorkspaceItem ? ActiveWorkspaceItem.Tag : ''; } if (UserSettings.StartMenuItemAction != 'rbByDefault') { UserSettings.StartMenuGroupTag = ActiveWorkspaceItem ? ActiveWorkspaceItem.ParentItems.Tag : ''; Services.SerializeItemToProfile(Main.UserSettingsWindow, EmptyStr); } WinCache_Clear(); CloseMainForm(); } }
Попробовал вот так, но все равно ошибка. Если руками выбирать раздел и нажимать - ошибки нету, вот так - ошибка есть
Решил так:
Main.UserSettingsWindow = Services.GetNewItemByUSI('wnd_UserSettings'); Main.UserSettingsWindow.Prepare(); Main.UserSettingsWindow.Show(); Main.UserSettingsWindow.ComponentsByName('btnOk').Click();
Спасибо. Можно закрывать
Подскажите, где описана функция GetActiveWorkspaceItem()?