[ELMA3] Создание и настройка отображения папок-фильтров сценарием
В данной статье рассмотрено создание и настройка отображения папок-фильтров в сценарии.
Папка-фильтр создается стандартным образом. Ниже приведен пример кода создания папки-фильтра на примере системной папки-фильтра Входящие.
Пример сценария с использованием PublicAPI
Пространство имен:
1 2 3 4 | using EleWise.ELMA.API; using EleWise.ELMA.Documents.Models; using EleWise.ELMA.Model.Filters; using EleWise.ELMA.Security; |
Текст сценария:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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
Текст сценария:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | //Создаем состояние таблицы для документов 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.
1 | folderIncoming.FilterColumnState = new List< string > { "Name" , "CreationAuthor" }; |
После всех манипуляций сохраняем нашу папку-фильтр в БД.
1 | folderIncoming.Save(); |