[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;
Если необходимо сразу же указать участников проекта, можно дополнить сценарий. Подробней можно почитать здесь.