[ELMA3] Создание проекта сценарием
В ELMA существует возможность автоматизировать создание проекта. Прежде чем начинать какой-то новый проект, как правило, происходит его согласование. После успешного согласования проекта можно создать новый проект из контекста процесса с помощью сценария.
Задача согласования проекта с некоторыми данными будущего проекта может выглядеть следующим образом:
С помощью этих ключевых данных создадим проект сценарием:
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(); }
Для корректной работы сценария, необходимо объявить следующие пространства имен:
using EleWise.ELMA.Projects.Models; using EleWise.ELMA.Projects.Managers; using EleWise.ELMA.Tasks.Models;
Если необходимо сразу же указать участников проекта, можно дополнить сценарий. Подробней можно почитать здесь.