(изменено: A77x7, 2 октября 2014г. 10:57:37)

Тема: Событие "Пользователь создан"

Есть ли возможность реагировать на создание пользователя?
Событие Object_Created в типе USER_DEF не срабатывает, в общесистемном тоже.
Form_BeforeClose срабатывает, но там Obj == nothing.
Или как в скрипте формы определить чьего она пользователя?

(изменено: McZag, 2 октября 2014г. 14:05:51)

Re: Событие "Пользователь создан"

A77x7 пишет:

Есть ли возможность реагировать на создание пользователя?
Событие Object_Created в типе USER_DEF не срабатывает, в общесистемном тоже.
Form_BeforeClose срабатывает, но там Obj == nothing.
Или как в скрипте формы определить чьего она пользователя?

Пора щенками брать за идеи. Если еще сами не придумали, вот что родилось:
Добавьте пользователю атрибут типа строка @За идею должен лабрадора@
По умолчанию туда напишите "Палевый"
И добавьте еще одно поле типа ссылка на пользователя, назвав ее "Самопруф"


В событии FormBeforeShow найдите пользователя у которого значение свойства @За идею должен лабрадора@ равно "Палевый". Это и есть ваш новый пользователь. Запишите линк на найденного пользователя в атрибут "Самопруф". Установите значение "Палевый" в значение "Черный".

Если пользователя со значением "Палевый" нет, значит вы уже отдали щенка (создали пользователя раньше и это повторное редактирование). Тогда вам достаточно посмотреть в свойство "Самопруф".

Re: Событие "Пользователь создан"

Могу котятами только ))
Спасибо.
Думаю обойдусь одним атрибутом "Пользователь".
Если он не задан, то это наш клиент, задаём ему значение (самого себя).

Re: Событие "Пользователь создан"

A77x7 пишет:

Могу котятами только ))
Спасибо.
Думаю обойдусь одним атрибутом "Пользователь".
Если он не задан, то это наш клиент, задаём ему значение (самого себя).

Кот уже есть в наличии. С одним атрибутом, конечно, сильно проще, но очень хотелось про лабрадора помечтать )))

Re: Событие "Пользователь создан"

Ещё проблемка, в таком коде, например:

Sub Form_BeforeClose(Form, Obj, Cancel)
  if Form.Attributes.Has("ATTR_USER") then
    if not Form.Attributes("ATTR_USER").User is nothing then
      refresh_user_delegates Form.Attributes("ATTR_USER").User
    end if
  end if
End Sub

внутри функции refresh_user_delegates значения атрибутов ещё старые.
Update у User-а нет.

Re: Событие "Пользователь создан"

A77x7 пишет:

Ещё проблемка, в таком коде, например:

Sub Form_BeforeClose(Form, Obj, Cancel)
  if Form.Attributes.Has("ATTR_USER") then
    if not Form.Attributes("ATTR_USER").User is nothing then
      refresh_user_delegates Form.Attributes("ATTR_USER").User
    end if
  end if
End Sub

внутри функции refresh_user_delegates значения атрибутов ещё старые.
Update у User-а нет.

Словарь? Атрибуты приложения? Изменять значение не на форме в а свойствах пользователя через ThisApplication?

(изменено: A77x7, 3 октября 2014г. 10:36:56)

Re: Событие "Пользователь создан"

McZag пишет:

Словарь? Атрибуты приложения? Изменять значение не на форме в а свойствах пользователя через ThisApplication?

Не понял.
Может я не ясно выразился:
Там (у Пользователя) кроме ATTR_USER есть ещё пара атрибутов, например, ATTR_USER_ABSENT (Нет на месте) и когда их пользователь на форме меняет в refresh_user_delegates (которая определена в команде) значения ещё старые.
Сейчас пробую через User.Object что-то сделать...
...
А мы же в BeforeClose т.е. изменения ещё не применились и могут быть и отменены. Получается мне надо что-то типа AfterClose...
...
В общем пока изменил объявление функции на такое:
function refresh_user_delegates(user_attr, absent_attr, delegates_attr)
(атрибуты передаются из формы - Form.Attributes...)
и перенёс её в скрипт формы, пока не вижу случаев, чтобы она пригодилась где-то ещё

(изменено: A77x7, 6 октября 2014г. 07:29:10)

Re: Событие "Пользователь создан"

Ещё проблема.
Нужно реагировать на изменение информации о пользователе (Описание, SysName и т.п.).
В своей форме значения ещё старые.
Единственное, что пришло на ум - это ThisApplication.Dictionary + Timer.
Т.е. по закрытию формы пользователя пишем в Dictionary скрипт, а по таймеру выполняем его.
Но как-то это... некрасиво.
Какие ещё варианты есть?

Re: Событие "Пользователь создан"

A77x7 пишет:

Ещё проблема.
Нужно реагировать на изменение информации о пользователе (Описание, SysName и т.п.).
В своей форме значения ещё старые.
Единственное, что пришло на ум - это ThisApplication.Dictionary + Timer.
Т.е. по закрытию формы пользователя пишем в Dictionary скрипт, а по таймеру выполняем его.
Но как-то это... некрасиво.
Какие ещё варианты есть?

Вы что, обратную синхронизацию с AD пишите?

Я не знаю красивых вариантов отловить изменения такого плана, без опускания на уровень обработки событий в СУБД. Можно написать либо триггеры для TUser, либо сервис, либо и то и другое.

Еще один вариант (иногда используется разработчиками на TDMS) - редактировать карточку пользователя TDMS только в двух случаях. При создании пользователя и при отключении пользователя от TDMS. Во всех остальных случаях пользоваться отдельным объектом "Сотрудник" со всеми возможностями, которые дает TDMS.

Отделение Сотрудника от пользователя TDMS создает некоторые проблемы синхронизации, но имеет ряд бонусов, в первую очередь связанных с управленческими функциями: создании иерархии предприятия, внесения изменений в пользовательские данные с сохранением версий, замены пользователей, маршрутизации и т.п.

В общем случае события модификации свойств пользователя следовало бы обрабатывать. Предложу разработчикам, посмотрим, что какие у них "за" и "против".

Re: Событие "Пользователь создан"

McZag пишет:

Вы что, обратную синхронизацию с AD пишите?

Нет, к счастью. Пришлось завести на каждого пользователя одноимённую группу для реализации схемы замещения отсутствующих сотрудников...

McZag пишет:

Я не знаю красивых вариантов отловить изменения такого плана, без опускания на уровень обработки событий в СУБД. Можно написать либо триггеры для TUser, либо сервис, либо и то и другое.

Лучше два раза диалог открывать закрывать. MsgBox повесить, чтоб не забывать. Эти вещи всё-равно только админ будет делать или автомат.

McZag пишет:

Еще один вариант (иногда используется разработчиками на TDMS) - редактировать карточку пользователя TDMS только в двух случаях. При создании пользователя и при отключении пользователя от TDMS. Во всех остальных случаях пользоваться отдельным объектом "Сотрудник" со всеми возможностями, которые дает TDMS.

Тоже не красиво. Дублировать функциональность ТДМС... Так можно свой ТДМС написать. %]

McZag пишет:

Отделение Сотрудника от пользователя TDMS создает некоторые проблемы синхронизации, но имеет ряд бонусов, в первую очередь связанных с управленческими функциями: создании иерархии предприятия, внесения изменений в пользовательские данные с сохранением версий, замены пользователей, маршрутизации и т.п.

Да, у нас тоже не без этого, но стараюсь... знать меру.

McZag пишет:

В общем случае события модификации свойств пользователя следовало бы обрабатывать. Предложу разработчикам, посмотрим, что какие у них "за" и "против".

Было бы неплохо увидеть это в 5ке.