logo

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

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