При разработке сценариев в карточках, новых карточек, внешних приложений и утилит для платформы 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();
Однако нужно учитывать, что такой способ будет работать только для сессий, созданных в Навигаторе. Если сессия пользователя создана иным способом (например, из Личного Помощника или другого внешнего приложения) - то такого свойства сессии не будет существовать, и получать идентификатор пользователя нужно будет иным способом (например - описанным выше, с использованием поиска).
Читать дальше
0 коммент.:
Отправить комментарий