Определил метод OnGetProfileKey:
if (ScrUtils.Assigned(dlData.Dataset)) {
Key.Value = __global.System.ExtractUSICode(dlData.Dataset.USI);
}
}
В результате на одно окно сохраняется несколько профилей.
НО. при загрузке окна выполняется запрос без фильтрации по ключу и ВСЕГДА применяется первый профиль из выборки.
[tbl_ProfileData].[ID] AS [ID],
[tbl_ProfileData].[XMLData] AS [XMLData]
FROM
[tbl_ProfileData] AS [tbl_ProfileData]
WHERE
([tbl_ProfileData].[UserID] = @P1 AND
[tbl_ProfileData].[ServiceID] = @P2)',N'@P1 varchar(38),@P2 varchar(38)','{42708305-508B-4975-B92D-2E7A695A82FA}','{43E4D9B2-2EC8-48EA-A1FE-0E1C1842E307}'
Нравится
Денис, о чём вообще речь? Где задаётся этот код и на каком языке он написан?
Можете описать свою задачу и вопрос подробнее?
В окне SelectData необходимо несколько профилей.
Сделал в соответствии с этим http://www.community.terrasoft.ru/developer/advice/3258, Профиль окна
Скрипт окна пишем на C#.
При открытии окна отловил запрос SqlProfiler'ом и увидел, что ключ не влияет на запрос.
И окно по факту не работает с несколькими профилями, хотя они нормально сохраняются в tbl_ProfileData.
P.S. UseProfile установлен в true
В Terrasoft 3.X не используется язык C#. Скрипты пишутся на JScript, а ядро написано на Delphi.
не суть важно как мы скрипты пишем.
факт в том, что при закрытии окна OnGetProfileKey срабатывает и профиль нормально сохраняется с ключем.
а при открытии окна нет события OnGetProfileKey и делается выборка всех профилей окна и применяется первый профиль из выборки.
Вы можете реализовать нужную Вам логику программно, не используя профили и сторонние языки программирования.
как это сделать? Я сделал в соответствии с руководством. Однако не работает.
Вот пример с руководства:
Также предусмотрена возможность хранения нескольких профилей для одного окна. Данная возможность необходима для универсальных окон, которые используются для различных целей. Примером такого окна может быть окно wnd_SelectData, которое предназначено для выбора значений из любых справочников, и должно "помнить" свои настройки для каждого справочника. Для реализации этого механизма используется событие OnGetProfileKey окна, в котором разработчик может определить код профиля, с которым в данный момент должно работать окно.
Пример – Работа с несколькими профилями:
function wnd_WindowOnGetProfileKey(Window, Key) { if (Window.Tag = '') { Key.Value = 'ProfileKey1'; } else { Key.Value = 'ProfileKey2'; } }
Я в качестве ключа использую USI Dataset'a