[ELMA3] Создание проекта в сценарии
В данном примере рассматривается создание проекта и задач по проекту при помощи сценария.
Пример сценария с использованием PublicAPI
Контекстные переменные:
Для работы сценария требуется подключить следующие сборки:
using EleWise.ELMA.Security.Models;
using EleWise.ELMA.Projects.Models;
Текст сценария:
// Получаем данные из контекста
String projectName = context.ProjectName; // Название проекта
User projectManager = context.ProjectManager; // Менеджер проекта
User projectTaskExecutor = context.ProjectTaskExecutor; // Исполнитель задач
DateTime projectStartDate = context.ProjectStartDate; // Дата старта проекта
DateTime projectEndDate = context.ProjectEndDate; // Дата завершения проекта
// Создаем проект с использованием соответствующего PublicApi.
// В данном случае "UserSimpleProject" - api для работы с типом проекта "SimpleProject".
// Название класса необходимого проекта можно посмотреть на карточке типа проекта в блоке "Структура данных"
var newProject = PublicAPI.Projects.Types.UserSimpleProject
.Create(projectName, projectManager, projectStartDate, projectEndDate);
// Проект создан, теперь необходимо найти последнюю версию плана проекта
long latestDraftProjectPlanVersion = PublicAPI.Projects.Project
.GetDraftProjectPlans(newProject)
.Max(i1 => i1.Number);
// По найденной версии черновика получаем сам черновик плана
ProjectPlan latestDraftProjectPlan = PublicAPI.Projects.Project
.GetDraftProjectPlans(newProject)
.SingleOrDefault(i1 => i1.Number == latestDraftProjectPlanVersion);
// Если черновик плана был найден и мы сделали все правильно, можно перейти к редактированию задач в проекте
if (latestDraftProjectPlan != null)
{
// В качестве примера будет создана задача "Задача из сценария" и контрольная точка "Контрольная точка из сценария"
// Добавление задачи в план проекта
PublicAPI.Projects.Tasks.GetProjectTaskBuilder(newProject) // Конструктор проектной задачи
.Executor(projectTaskExecutor) // Указываем исполнителя
.StartDate(projectStartDate) // Дата начала задачи (В данном случае равна началу проекта)
.EndDate(projectEndDate) // Дата окончания задачи (В данном случае равна окончанию проекта)
.Subject("Задача из сценария") // Указываем название задачи
.AddToPlan(latestDraftProjectPlan); // Добавляем задачу в план
// Добавление контрольной точки в план проекта
PublicAPI.Projects.Tasks.GetMilestoneBuilder(newProject) // Конструктор контрольной точки
.Executor(projectTaskExecutor) // Указываем исполнителя
// Дата начала контрольной точки (В данном случае равна середине проекта)
.StartDate(projectStartDate.AddDays((projectEndDate - projectStartDate).Days/2))
.Subject("Контрольная точка из сценария") // Указываем название контрольной точки
.AddToPlan(latestDraftProjectPlan); // Добавляем контрольную точку в план
// Публикуем план проекта, исполнители задач будут автоматически добавлены в участники проекта
PublicAPI.Projects.ProjectPlan.PublishPlan(latestDraftProjectPlan);
}
Рассмотрим пример использования данного сценария. Для этого смоделируем следующий процесс (рис. 1):
Рис. 1. Пример графической модели процесса
В задаче "Заполнить данные по проекту" требуется указать значения контекстных переменных, необходимых для работы сценария (рис. 2):
Рис. 2. Страница задачи "Заполнить данные по проекту"
В результате работы сценария будет создан следующий проект (рис. 3-5):
Рис. 3. Пример созданного в сценарии проекта. Страница проекта
Рис. 4. Пример созданного в сценарии проекта. План проекта
Рис. 5. Пример созданного в сценарии проекта. План проекта. Вкладка "Версии"
Примеры сценариев без использования PublicAPI
Ниже приведено два сценария:
- Для версий системы ELMA 3.5.х и ниже.
- Для версий системы ELMA 3.6.х и выше.
Сценарий для версий системы ELMA 3.5.х и ниже
В сценарии должны быть объявлены следующие пространства имен:
using EleWise.ELMA.Projects.Models;
using EleWise.ELMA.Projects.Managers;
using EleWise.ELMA.Tasks.Models;
using EleWise.ELMA.Projects;
Текст сценария: var projectTemplateId=1; //идентификатор шаблона проекта
var projectTemplate = ProjectTemplateManager.Instance.LoadWithElevatedPrivilegies(projectTemplateId);
var project = ProjectManager.Instance.Create(projectTemplate);
project.ShowTaskBeforeDays = null;
// Если нужно автоформирование папки проекта, то нужно обнулить поле Folder проекта, иначе задать нужную папку
project.Folder = null;
project.Name = context.NazvanieProekta;
project.CreationAuthor=context.Author;
project.Manager=context.Meneger;
project.StartDate=DateTime.Now;
project.FinishDate=context.DataOkonchaniya;
ProjectManager.Instance.SaveNew(project, projectTemplate);
// Если нужно автоформирование папки проекта!
ProjectManager.Instance.CopyTemplateFolders(projectTemplate, project);
// Если нужно опубликовать
ProjectManager.Instance.Publish(project);
context.Proekt = (Project)project; //записываем в контекстную переменную типа Объект Проект
//Создание задачи проекта
var projectTask= ProjectTaskManager.Instance.Create(project, null);
projectTask.Subject="Тема задачи";
projectTask.Executor=context.Ispolnitelj; //устанавливаем исполнителя
projectTask.StartDate=context.DataSozdaniya;
projectTask.EndDate=context.DataOkonchaniya;
projectTask.Save();
Сценарий для версий системы ELMA 3.13.х и выше
using EleWise.ELMA.Model.Services;
using EleWise.ELMA.Projects.Managers;
using EleWise.ELMA.Projects.Models;
using EleWise.ELMA.Security.Models;
using EleWise.ELMA.Security.Managers;
using EleWise.ELMA.Projects.Enums;
Текст сценария://Создание проекта типа "Проект"
var project = InterfaceActivator.Create<ProjectWork>();
project.StartDate = DateTime.Today; //Дата начала проекта
project.FinishDate = DateTime.Today; //Дата Завершения проекта
project.Manager = (User)UserManager.Instance.LoadByLogin("admin"); //Менеджер проекта
project.Name = "Название проекта"; //Название проекта
ProjectManager.Instance.SaveNew(project, true);
//Поиск плана проекта со статусом версии "Черновик"
var filter = InterfaceActivator.Create<ProjectPlanFilter>();
filter.Id = project.Id;
filter.Status = ProjectPlanVersionStatus.Draft;
var projectplan = EntityManager<ProjectPlan>.Instance.Find(filter, null).LastOrDefault();
//Создание исполнителя проектной задачи типа Пользователь
var executor = InterfaceActivator.Create<ProjectTaskExecutor>();
executor.Type = ProjectTaskExecutorType.User; //Тип Пользователь
executor.User = (User)UserManager.Instance.LoadByLogin("admin");
executor.Save();
//Создание простой проектной задачи
var PrjTask = InterfaceActivator.Create<ProjectPlanItem>();
PrjTask.ItemType = ProjectPlanItemType.ProjectTask; //Тип задачи - проектная задача
PrjTask.StartDate = DateTime.Today; //Дата начала - сегодня
PrjTask.EndDate = DateTime.Today; //Дата завершения - сегодня
PrjTask.CreationAuthor = (User)UserManager.Instance.LoadByLogin("admin"); //Автор задачи
PrjTask.Executor = executor; //Исполнитель - Тип (Пользователь), Пользователь
PrjTask.Subject = "Проектная задача"; //Название задачи
PrjTask.ProjectPlan = projectplan; //План проекта
//Добавление созданной задачи в план (версии "Черновик")
projectplan.Items.Add(PrjTask); // Добавление задачи в план
projectplan.Save(); // Сохранение плана
//Создание контрольной точки
var Milestone = InterfaceActivator.Create<ProjectPlanItem>();
Milestone.ItemType = ProjectPlanItemType.Milestone; //Тип задачи - контрольная точка
Milestone.StartDate = DateTime.Today; //Дата начала - сегодня
Milestone.EndDate = DateTime.Today; //Дата завершения - сегодня
Milestone.CreationAuthor = (User)UserManager.Instance.LoadByLogin("admin"); //Автор задачи
Milestone.Executor = executor; //Исполнитель - Тип (Пользователь), Пользователь
Milestone.Subject = "Контрольная точка"; //Название задачи
Milestone.ProjectPlan = projectplan; //План проекта