четверг, 12 ноября 2009 г.

Получение идентификатора пользователя, который открыл карточку

Пример скрипта, который получает идентификатор пользователя из справочника сотрудников, который открыл карточку


Function DoEvent(UserSession, CardFrame, CardData, ActivateFlags, ModeID, FolderID)

        'ID Справочника сотрудников и секции "Сотрудники"
        Const DIC_STAFF = "6710B92A-E148-4363-8A6F-1AA0EB18936C"
        Const SEC_STAFF = "DBC8AE9D-C1D2-4D5E-978B-339D22B32482"
        
        Dim Groups, oRows, FindUserID

        'Получаем пользователя, который открыл карточку
        Set RefStaff = UserSession.CardManager.DictionaryData(DIC_STAFF)
        Set oRows = RefStaff.Sections.Item(SEC_STAFF).FindRows( _
         "AccountNameSTREQ'" & _
         UserSession.Properties("AccountName") & "'")

        If oRows.Count = 0 Then
            'Не найден
            MsgBox ("ОШИБКА! Невозможно найти вашу учетную запись в справочнике")
            Exit Function
        End If
    
        'Это ID пользователя, открывшего карточку
        FindUserID = oRows.Item(0).ID
End Function



Развитие темы. Определение, входит ли пользователь в определенную группу.
Function DoEvent(UserSession, CardFrame, CardData, ActivateFlags, ModeID, FolderID)
'ID Справочника сотрудников и секции "Сотрудники"
Const DIC_STAFF = "6710B92A-E148-4363-8A6F-1AA0EB18936C"
Const SEC_STAFF = "DBC8AE9D-C1D2-4D5E-978B-339D22B32482"

Dim Groups, oRows, FindUserID

'Получаем пользователя, который открыл карточку
Set RefStaff = UserSession.CardManager.DictionaryData(DIC_STAFF)
'Поиск по справочнику сотрудников
Set oRows = RefStaff.Sections.Item(SEC_STAFF).FindRows( _
"AccountNameSTREQ'" & _
UserSession.Properties("AccountName") & "'")
If oRows.Count = 0 Then
'Не найден
MsgBox ("ОШИБКА! Невозможно найти вашу учетную запись в справочнике")
Exit Function
End If

'Это ID пользователя, открывшего карточку
FindUserID = oRows.Item(0).ID

'Поиск в группах
Dim StaffObject
Set StaffObject = CreateObject("TOHelperObjects.StaffObject")
Set StaffObject.UserSession = UserSession

Const GROUPID = "ID группы"
If StaffObject.IsEmployeeInGroup(FindUserID, GROUPID) = True Then
'Пользователь, открывающий карточку - в группе.
End If
Set StaffObject = Nothing
End Function

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

  1. Я как понимаю, это просто пример работы со Справочником сотрудников, так как задача получения идентификатора пользователя решается вроде чуть по проще :-)

    Для это можно просто использовать свойства сессии:

    UserSession.Properties("CurrentUserID")

    Вообще в свойствах текущей сессии можно много что узнать :-)

    ОтветитьУдалить
  2. Хочется получить ФИО пользователя в скрипте XSLT по его ID...

    ОтветитьУдалить
  3. Свойство CurrentUserID появилось только в 4.1, когда стало возможно выбирать учетную запись при входе.

    "sergejh" - Выложу пример в одной из статей.

    ОтветитьУдалить
  4. Михаил, гарантирую, что свойство CurrentUserID было ещё в 3.6 SR1, мы сами его активно используем

    ОтветитьУдалить
  5. Действительно, проверил. Есть такое свойство. Ну можно использовать как пример поиска по справочнику :)

    ОтветитьУдалить
  6. А как узнать из скрипта, заблокирована ли карточка и кем?

    ОтветитьУдалить
  7. Посмотрите в сторону свойства UserSession.LockManager.LockedResources. Оно возвращает список заблокированных объектов

    ОтветитьУдалить