среда, 16 сентября 2009 г.

Получение текущего пользователя

При разработке сценариев в карточках, новых карточек, внешних приложений и утилит для платформы DocsVision часто возникает задача программно получить идентификатор текущего пользователя из справочника сотрудников – например, чтобы автоматически заполнить поле “Автор” или “Регистратор” в создаваемой карточке.

Решение этой задачи не так просто, как кажется на первый взгляд, так как сессия DocsVision привязана только к доменной учетной записи пользователя; и никак не соотносится с записью этого пользователя в справочнике сотрудников (которой, кстати, может и не быть!).

Поэтому наиболее универсальным алгоритмом получения записи справочника для текущего пользователя является следующий:

1) Получить доменное имя текущего пользователя (владельца сессии). Это имя хранится среди свойств сессии (Properties) и называется “AccountName”:

string account = UserSession.Properties[“AccountName”].Value.ToString();

2) Найти по доменному имени соответствующую запись в справочнике сотрудников (если она есть) с помощью поиска:

const string RefStaffID = "6710B92A-E148-4363-8A6F-1AA0EB18936C";
const string EmployeesID = "DBC8AE9D-C1D2-4D5E-978B-339D22B32482";

SectionQuery query = ses.CreateSectionQuery();
query.ConditionGroup.Conditions.AddNew("AccountName", FieldType.String, ConditionOperation.StrEquals, account);
string querytext = query.GetXml();

CardData refstaff = ses.CardManager.GetDictionaryData(new Guid(RefStaffID));
RowDataCollection users = refstaff.Sections[new Guid(EmployeesID)].FindRows(querytext);

System.Guid userID;
if (users.Count > 0)
{
userID = users[0].Id
}
else
{
// стоит предусмотреть ситуацию, когда пользователя нет в справочнике!
};


Дополнительно стоит иметь ввиду, что начиная с версии 4.1 в справочнике сотрудников допускается наличие нескольких сотрудников с одинаковой учетной записью (например, если один и тот же сотрудник числится на разных должностях в разных подразделениях). При этом, конкретная запись для работы выбирается пользователем в специальном диалоге при запуске Навигатора:



Выбор учетной записи



В этом случае, идентификатор текущего пользователя (выбранного в диалоге)записывается в специальное свойство сессии “CurrentUserID”:



string userID= UserSession.Properties[“CurrentUserID”].Value.ToString();


Однако нужно учитывать, что такой способ будет работать только для сессий, созданных в Навигаторе. Если сессия пользователя создана иным способом (например, из Личного Помощника или другого внешнего приложения) - то такого свойства сессии не будет существовать, и получать идентификатор пользователя нужно будет иным способом (например - описанным выше, с использованием поиска).


Комментариев нет:

Отправить комментарий