Несколько профилей для одного окна

Определил метод OnGetProfileKey:

                public void OnGetProfileKey(IWindow Window, Value Key) {
                        if (ScrUtils.Assigned(dlData.Dataset)) {
                                Key.Value = __global.System.ExtractUSICode(dlData.Dataset.USI);
                        }
                }

В результате на одно окно сохраняется несколько профилей.

НО. при загрузке окна выполняется запрос без фильтрации по ключу и ВСЕГДА применяется первый профиль из выборки.

exec sp_executesql N'SELECT
        [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}'

Нравится

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

Денис, о чём вообще речь? Где задаётся этот код и на каком языке он написан?
Можете описать свою задачу и вопрос подробнее?

В окне 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

В руководстве не предусмотрена работа с C#.

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