[ELMA3] Создание проекта сценарием
В ELMA существует возможность автоматизировать создание проекта. Прежде чем начинать какой-то новый проект, как правило, происходит его согласование. После успешного согласования проекта можно создать новый проект из контекста процесса с помощью сценария.
Задача согласования проекта с некоторыми данными будущего проекта может выглядеть следующим образом:
С помощью этих ключевых данных создадим проект сценарием:
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 | public void CreateNewProject(Context context) { //выбираем идентификатор (id) шаблона проекта long TemplateID = 1; //заружаем шаблон по указанному выше id, используя метод LoadWithElevatedPrivilegies для игнорирования прав доступа var projectTemplate = ProjectTemplateManager.Instance.LoadWithElevatedPrivilegies(TemplateID); //создаем проект по загруженному шаблону var newProject = ProjectManager.Instance.Create(projectTemplate); //указываем настройки проекта newProject.ShowTaskBeforeDays = null ; newProject.Folder = null ; newProject.InfoChannelEnabled = true ; //заполняем обязательные поля из контекста процесса newProject.Name = context.NazvanieProekta; newProject.CreationAuthor = context.Iniciator; newProject.Manager = context.Iniciator; newProject.StartDate = context.DataNachalaProekta; newProject.FinishDate = context.DataOkonchaniyaProekta; newProject.Contractor = context.Kontragent; //проверяем выбор пользователя публиковать сразу проект или оставить в черновиках if (context.Publikovatj) { //публикуем если да, по умолчанию проект останется в черновиках ProjectManager.Instance.Publish(newProject); } //сохраняем созданный проект, указывая проект, шаблон и указание, копировать папки из шаблона или нет ProjectManager.Instance.SaveNew(newProject, projectTemplate, true); //если в файл проекта было что-то вложено, создаем документ if (context.FaylyProekta != null ) { foreach (var item in context.FaylyProekta) { //создаем документ var newDocFile = InterfaceActivator.Create<EleWise.ELMA.Documents.Models.File>(); //версию var newDocFileVersion = InterfaceActivator.Create<DocumentVersion>(); //заполняет обязательные поля из контекста newDocFileVersion.File = item.File; newDocFileVersion.Name = item.File.Name; newDocFileVersion.CreationAuthor = context.Iniciator; newDocFileVersion.Document = newDocFile; //указываем статус "текущий" newDocFileVersion.Status = DocumentVersionStatus.Current; //указываем папку проекта в качестве папки для этого документа newDocFile.Folder = (Folder)newProject.Folder; //имя файла будет именем документа newDocFile.Name = item.File.Name; newDocFile.CurrentVersion = newDocFileVersion; newDocFile.Save(); } } //при необходимости можно сразу создать задачу по этому проекту var projectTask = ProjectTaskManager.Instance.Create(project, null ); projectTask.Subject = "Тема задачи" ; projectTask.Executor = context.Ispolnitelj; projectTask.StartDate = context.DataNachalaProekta; projectTask.EndDate = context.DataOkonchaniyaProekta; projectTask.Save(); } |
Для корректной работы сценария, необходимо объявить следующие пространства имен:
1 2 3 | using EleWise.ELMA.Projects.Models; using EleWise.ELMA.Projects.Managers; using EleWise.ELMA.Tasks.Models; |
Если необходимо сразу же указать участников проекта, можно дополнить сценарий. Подробней можно почитать здесь.