Добавление условия выбора разметок
Данный раздел содержит описание примера серверного расширения. Пример демонстрирует добавление условия выбора разметок по группе, пользователю, роли.
Ссылка на пример на GitHub: CustomConditionTypes.
После сохранения изменений в конструкторе разметок, разметка отображается в соответствии с заданными условиями.
Пример рассчитан на версию Web-клиента 6.1 или выше.
-
Microsoft Visual Studio 2022.
Сборка и установка
-
Откройте
/Samples.sln
. -
Соберите проект
ServerExtensions > CustomConditionTypes > CustomConditionTypesDesignerExtension
. -
Соберите проект
ServerExtensions > CustomConditionTypes > CustomConditionTypesLayoutExtension
. -
Соберите проект
ServerExtensions > CustomConditionTypes > CustomConditionTypesInterfaces
. -
Скопируйте каталог
SamplesOutput\Plugins\CustomConditionTypesDesignerExtension
в каталогПуть к директории с исполняемым файлом конструктора Web-разметок\Plugins
. -
Скопируйте каталог
SamplesOutput\Plugins\CustomConditionTypesInterfaces
в каталогПуть к директории с исполняемым файлом конструктора Web-разметок\Plugins
. -
Скопируйте каталог
SamplesOutput\Extensions\CustomConditionTypesInterfaces
в каталогПуть к сайту Web-клиента\Extensions
. -
Скопируйте каталог
SamplesOutput\Extensions\CustomConditionTypesLayoutExtension
в каталогПуть к сайту Web-клиента\Extensions
. -
Перезапустите dvwebclient.
Проверка примера
-
Запустите Конструктор Web-разметок.
-
Выберите или создайте любую разметку в локации
. -
Откройте вкладку условия использования разметки.
-
Добавьте новое условие выбора или измените существующее.
-
Измените в условии выбора роль, группу, пользователя или все сразу.
-
Запустите Web-клиент.
-
Заданная разметка отображается только если выполняются условия выбора разметки.
Проект "CustomConditionTypesWebLayoutsDesignerExtension"
Проект-расширение для конструктора разметок. Содержит класс CustomConditionTypesProvider
,
в котором реализованы методы для отображения новых условий выбора разметки по группе, пользователю, роли.
[SupportedOSPlatform("windows")]
internal class CustomConditionTypesProvider : IConditionTypesProvider
{
public Guid Id => Constants.ExtensionId;
public List<Staff> GetStaffTree() (1)
{
var staffTree = new List<Staff>();
var sessionContext = this.SessionContextProvider.GetOrCreateCurrentSessionContext();
var staffService = sessionContext.ObjectContext.GetService<IStaffService>();
var units = staffService.GetUnits(null, true).OrderBy(u => u.Name);
foreach (var unit in units)
{
var nodeStaff = unit.Staff;
staffTree.Add(nodeStaff);
}
return staffTree;
}
public List<StaffEmployee> GetUsersTree() (2)
{
var usersTree = new List<StaffEmployee>();
var sessionContext = this.SessionContextProvider.GetOrCreateCurrentSessionContext();
var staffService = sessionContext.ObjectContext.GetService<IStaffService>();
var units = staffService.GetUnits(null, true).OrderBy(u => u.Name);
foreach (var unit in units)
{
foreach (var employee in unit.Employees)
usersTree.Add(employee);
}
return usersTree;
}
private readonly IServiceProvider serviceProvider;
private ICurrentObjectContextProvider sessionContextProvider;
public CustomConditionTypesProvider(IServiceProvider serviceProvider)
{
this.serviceProvider = serviceProvider;
}
private ICurrentObjectContextProvider SessionContextProvider
{
get
{
if (this.sessionContextProvider == null)
this.sessionContextProvider = DocsVision.Platform.Tools.LayoutEditor.ServiceUtil.GetService<ICurrentObjectContextProvider>(this.serviceProvider);
return this.sessionContextProvider;
}
}
1 | Получение списка штатов сотрудников. |
2 | Получение списка сотрудников. |
Проект "CustomConditionTypesLayoutExtension"
Проект-расширение для Web-клиента, которое позволяет определить, выполняется условие выбора разметки или нет для текущего контекста.
public class CustomConditionTypesLayoutExtension : ILayoutExtension
{
public CustomConditionTypesLayoutExtension()
{
this.LayoutExtensionDescription = new LayoutExtensionDescription
{
Id = Constants.ExtensionId,
Name = "Custom condition types layout extension",
Version = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion,
ConditionTypes = this.GetConditionTypes(),
ModeConditionTypes = this.GetLayoutTypes()
};
}
При внесении изменений необходимо увеличивать номер версии расширения в AssemblyFileVersion
.
Проект "CustomConditionTypesInterfaces"
Проект-расширение для конструктора разметок и серверного расширения, содержащий все константные значения для этих проектов.
public static class Constants
{
public static readonly Guid ExtensionId = new Guid("7BDD6F65-B6F2-414F-B97F-13E87E972F85");
public static readonly Guid LocationExtensionId = new Guid("7e794753-46ed-42f3-85b2-2e172c00d045");
public static class ConditionTypes
{
public static readonly Guid GroupsConditionType = new Guid("AC83CC41-CB31-4804-B330-A180FA02BA9D");
public static readonly Guid UnitConditionType = new Guid("103B4D34-594A-479B-BE72-D481677C5136");
public static readonly Guid RolesConditionType = new Guid("986E19CD-6101-4979-A99B-77CA50C0D781");
}
public static class MainMenu
{
public const string Id = "DV.MainMenu";
}
}