logo

[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;

Если необходимо сразу же указать участников проекта, можно дополнить сценарий. Подробней можно почитать здесь.