[ELMA3] Создание и настройка отображения папок-фильтров сценарием
В данной статье рассмотрено создание и настройка отображения папок-фильтров в сценарии.
Папка-фильтр создается стандартным образом. Ниже приведен пример кода создания папки-фильтра на примере системной папки-фильтра Входящие.
Пример сценария с использованием PublicAPI
Пространство имен:
using EleWise.ELMA.API; using EleWise.ELMA.Documents.Models; using EleWise.ELMA.Model.Filters; using EleWise.ELMA.Security;
Текст сценария:
var admin = PublicAPI.Portal.Security.User.Load(SecurityConstants.AdminUserUid); var folderOffice = PublicAPI.Docflow.Folder.LoadOrNull(DocflowConstants.FolderOffice); var folderIncoming = PublicAPI.Docflow.Objects.Folders.FilterDocumentFolder.Create(); folderIncoming.CreationAuthor = admin; folderIncoming.Folder = folderOffice; folderIncoming.Name = SR.T("Мои входящие"); folderIncoming.ImageUrl = "/Content/Images/x16/in.png"; folderIncoming.SortTypeId = 10; folderIncoming.SearchOnOpen = true; folderIncoming.Virtual = true; PublicAPI.Docflow.Permissions.AddViewPermission(folderIncoming, admin); PublicAPI.Docflow.Permissions.AddEditPermission(folderIncoming, admin); PublicAPI.Docflow.Permissions.AddManageAccessPermission(folderIncoming, admin); PublicAPI.Docflow.Permissions.AddFullAccessPermission(folderIncoming, admin); var documentFilter = PublicAPI.Docflow.Document.Filter().RegistrationCard(c => c.Flow(PublicAPI.Enums.Documents.DocumentFlowType.Incoming).Status(PublicAPI.Enums.Documents.RegistrationCardStatus.Register)).Filter; folderIncoming.DocumentFilter = UniversalFilterSaver.Pack(documentFilter); folderIncoming.FilterColumnState = new List<string> { "Name", "CreationAuthor" }; folderIncoming.Save();
Пример сценария без использования PublicAPI
Текст сценария:
var admin = UserManager.Instance.Load(SecurityConstants.AdminUserUid); var folderOffice = FolderManager.Instance.LoadOrNull(DocflowConstants.FolderOffice); var folderIncoming = new InstanceOf<IFilterDocumentFolder> { New = { CreationAuthor = admin, Folder = folderOffice, Name = SR.T("Мои входящие"), ImageUrl = "/Content/Images/x16/in.png", SortTypeId = 10, SearchOnOpen = true, Virtual = true } }.New; folderIncoming.Permissions.Add(new InstanceOf<IDmsObjectPermission> { New = { DmsObject = folderIncoming, PermissionId = EleWise.ELMA.Documents.PermissionProvider.DocumentViewPermission.Id, TypeRoleId = CommonRoleTypes.User.Id, User = admin } }.New); folderIncoming.Permissions.Add(new InstanceOf<IDmsObjectPermission> { New = { DmsObject = folderIncoming, PermissionId = EleWise.ELMA.Documents.PermissionProvider.DocumentEditPermission.Id, TypeRoleId = CommonRoleTypes.User.Id, User = admin } }.New); folderIncoming.Permissions.Add(new InstanceOf<IDmsObjectPermission> { New = { DmsObject = folderIncoming, PermissionId = EleWise.ELMA.Documents.PermissionProvider.DocumentManagerAccessPermission.Id, TypeRoleId = CommonRoleTypes.User.Id, User = admin } }.New); folderIncoming.Permissions.Add(new InstanceOf<IDmsObjectPermission> { New = { DmsObject = folderIncoming, PermissionId = EleWise.ELMA.Documents.PermissionProvider.DocumentFullAccessPermission.Id, TypeRoleId = CommonRoleTypes.User.Id, User = admin } }.New); var documentFilter = (IDocumentExtFilter)InterfaceActivator.Create<IDocumentFilter>(); documentFilter.RegistrationCard = InterfaceActivator.Create<IRegistrationCardFilter>(); documentFilter.RegistrationCard.Flow = DocumentFlowType.Incoming; documentFilter.RegistrationCard.Status = RegistrationCardStatus.Register; folderIncoming.DocumentFilter = UniversalFilterSaver.Pack(documentFilter); folderIncoming.Save();
Теперь скроем поле Дата создания (которое автоматически согласно метаданным добавляется для отображения) и добавим поле Дата изменения для отображения. Для этого нужно модифицировать свойство папки-фильтра GridState. Подробнее о состоянии таблицы читайте перейдя по ссылке: https://www.elma-bpm.ru/kb/article-482.html.
//Создаем состояние таблицы для документов var gridState = GridState.CreateNew("MoiVhodishie", typeof(IDocument)); //Грузим описание типа документа var documentMetadata = (EntityMetadata)InterfaceActivator.LoadMetadata<IDocument>(); //Ищем описание свойства Дата создания var creationDateMetadata = documentMetadata.Properties.First(p => p.Name == "CreationDate"); //Ищем состояние колонки Дата создания var creationDateState = gridState.ColumnStates.FirstOrDefault(c => c.UniqueName == creationDateMetadata.UidStr); //Скрываем колонку Дата создания if (creationDateState != null) creationDateState.Hidden = true; //Ищем описание свойства Дата изменения var changeDateMetadata = documentMetadata.Properties.First(p => p.Name == "ChangeDate"); //Ищем состояние колонки Дата изменения var changeDateState = gridState.ColumnStates.FirstOrDefault(c => c.UniqueName == changeDateMetadata.UidStr); //Отображаем колонку if (creationDateState != null) changeDateState.Hidden = false; //Записываем состояние таблицы в папку-фильтр (предварительно нужно серелизовать объект) folderIncoming.GridState = ClassSerializationHelper.SerializeObject(gridState);
Далее зададим список колонок для расширенного поиска. Для этого в фильтре есть свойство FilterColumnState.
folderIncoming.FilterColumnState = new List<string> { "Name", "CreationAuthor" };
После всех манипуляций сохраняем нашу папку-фильтр в БД.
folderIncoming.Save();