<< Click to Display Table of Contents >> Разработка > Примеры разработки > Папки и списки Как создать вычисляемую папку, которая доступна только руководителям |
Предположим, необходимо создать папку «На подписание», которая доступна только руководителям подразделений. Папка должна содержать задания на подписание документов, полученные пользователем, и находиться в папке «Входящие». Для этого:
1.В редакторе модуля перейдите в узел «Папки».
2.Нажмите на кнопку Добавить.
3.В списке выделите добавленный элемент. Заполните поля:
*Имя – OnSigning.
*Отображаемое имя – На подписание.
*Область отображения – Папка «Входящие».
*Основное содержимое – Sungero.Workflow.AssignmentBase.
Добавьте иконки и установите флажок Отображать количество непрочитанных заданий. Проверьте, что установлен флажок Отображать папку. Подробнее описание параметров см. в разделе «Папки».
4.Чтобы в папку попадали только задания на подписание, добавьте код в обработчик события Получение данных. Для этого установите флажок рядом с событием и перейдите по ссылке. В открывшемся редакторе напишите код для вычисления содержимого:
/// <summary>
/// Выбор из списка всех заданий пользователя только заданий на подписание.
/// </summary>
/// <param name="query">Список заданий для фильтрации.</param>
/// <returns>Отфильтрованный список заданий.</returns>
public virtual IQueryable<Sungero.Workflow.IAssignmentBase> OnSigningDataQuery(IQueryable<Sungero.Workflow.IAssignmentBase> query)
{
// Фильтр по типу задания.
return query.Where(x => Docflow.ApprovalSigningAssignments.Is(x) && Docflow.ApprovalSigningAssignments.As(x).IsConfirmSigning != true);
}
5.Чтобы у руководителей подразделений папка «На подписание» по умолчанию отображалась в списке папок в проводнике Directum RX, в узле «Модуль» добавьте серверную функцию:
/// <summary>
/// Проверка вхождения текущего пользователя в произвольную роль.
/// </summary>
/// <param name="roleSid">Sid роли.</param>
/// <returns> Функция возвращает значение True,
/// если пользователь входит в роль, иначе возвращает False.</returns>
public static bool IncludedInRole(Guid roleSid)
{
var role = Roles.GetAll(r => r.Sid == roleSid).SingleOrDefault();
return role != null && Users.Current.IncludedIn(role);
}
6.В узле «Модуль» укажите зависимость от модуля:
•Sungero.Workflow, так как в узле «Папки» в параметре *Основное содержимое указано значение Sungero.Workflow.AssignmentBase;
•Sungero.Docflow, так как в добавленном программном коде использована константа и типы сущностей из данного модуля.
Если зависимости не указаны, то при публикации могут возникнуть ошибки.
7.В узле «Папки» добавьте обработчик события Ограничение доступности. В коде обработчика вызовите серверную функцию:
public virtual bool IsOnSigningVisible()
{
return Functions.Module.IncludedInRole(Sungero.Docflow.PublicConstants.Module.RoleGuid.BusinessUnitHeadsRole);
}
8.При необходимости настройте внешний вид папки по умолчанию и панель фильтрации.
9.Чтобы папка появилась в проводнике системы, при инициализации модуля выдайте на нее права доступа. Для этого в узле «Модуль», в группе «События» установите флажок рядом с событием Инициализация.
10.В группе «Функции» перейдите по ссылке Добавить рядом с функциями инициализации. В редакторе программного кода измените имя Function1() на GrantRightsOnFolder() и напишите код для выдачи прав на вычисляемую папку. Добавьте также вызов созданной функции в обработчике события Initializing():
public partial class ModuleInitializer
{
/// <summary>
/// Обработчик события инициализации.
/// </summary>
public override void Initializing(Sungero.Domain.ModuleInitializingEventArgs e)
{
/// Вызов функции инициализации.
GrantRightsOnFolder();
}
/// <summary>
/// Функция инициализации для выдачи прав на вычисляемую папку.
/// </summary>
public static void GrantRightsOnFolder()
{
var allUsers = Roles.AllUsers;
Sungero.RecordManagement.SpecialFolders.OnSigning.AccessRights.Grant(allUsers, DefaultAccessRightsTypes.Read);
Sungero.RecordManagement.SpecialFolders.OnSigning.AccessRights.Save();
InitializationLogger.Debug("Выданы права на вычисляемую папку 'На подписание'");
}
}
Примечание. Для обращения к вычисляемым папкам в коде используется формат: <Код компании>.<Имя модуля>.SpecialFolders.<Имя вычисляемой папки>. Например, Sungero.RecordManagement.SpecialFolders.OnSigning. При необходимости подставьте в код примера свои значения.
В результате после публикации решения и инициализации в папке «Входящие» у руководителей подразделений будет отображаться папка потока «На подписание». В папке будут задания на подписание документов, полученные пользователем. Другие сотрудники могут добавить папку в дерево с помощью контекстного меню.
Совет. Для настройки порядка расположения подпапок в папках «Входящие» и «Исходящие» используйте узел «Папки Мой Директум» в редакторе решения.
© Компания Directum, 2024 |