Создание Проекта и Задач в проекте из 1С 8.3 в MS Project 2024 (обычные формы)


Внешняя обработка (используя методы HTTP запросов и Json) для создания из 1С Проекта в MS Project Server 2024 и создание Задачи в Проекте. Обработка тестировалась на конфигурации 1С:УПП+CRM (SQL) 1.3.112/1.4.11 платформа 1С Предприятие: 8.3.10.2252, обычные формы.

Основное по работе с обработкой:
1. Для создания проекта обязательны для заполнения поля:

  • Сервер
  • Login
  • Password
  • Наименование проекта

2.Для создания задачи в проекте обязательны для заполнения поля:

  • Сервер
  • Login
  • Password
  • Наименование задачи
  • MSProjectссылка на проект с ID проекта (пример:-https://Сервер/_api/ProjectServer/Projects(‘857b301a-c9ec-e811-ab63-66a60938dcd6’)- где 857b301a-c9ec-e811-ab63-66a60938dcd6- ID)
  • Длительность задачи — иначе длительность равна 0, также от указанной буквы, зависит в чем измеряется длительность (в моем примере 80ч=10 рабочим дням).

3. Можно последовательно создать проект и создать в нем задачу, достаточно заполнить поля шапки:

  • Сервер
  • Login
  • Password
  • Наименование проекта
  • Наименование задачи
  • Длительность задачи — иначе длительность равна 0, также от указанной буквы, зависит в чем измеряется длительность (в моем примере 80ч=10 рабочим дням)
    Далее последовательно нажимаем Создать Проект и Добавить задачу.

Очень мало информации есть по REST API в Project Server, еще меньше ее на русском языке. Грусть печаль, но для умеющих читать английскую техническую документацию и умеющих читать/писать в JavaScript все проще (вот чем я пользовалась Создание, получение, обновление и удаление проектов с использованием JavaScript Project Server здесь все касается PS 2013, Project-REST-Basic-Operations/createproject.ps1— пример кода для его анализа, CSOM and REST samples showing task indent and insertCalling SharePoint REST API with POST from FiddlerDraftProject class— помогло с решение последнего нюанса).
Использую HTTPЗапрос+Json. Нашла прекрасную процедуру+функцию для парсинга Json и возможности получения необходимых данных в данной статье: Импорт из Json в 1с. Так же очень понравилась статья про Таймамуты: Паузы при исполнении кода (Sleep для 1С) — паузы в моем коде установлены с учетом нашего Сервера (паузы нужны не везде, но все же выбран не нагружающий вариант). Для чтения ошибок очень хорошо помогли данные ссылки: Коды ошибок Project Server и Справочник по кодам статуса HTTP,  ДЕКOДИРОВАТЬ ТЕКСТ U0XXX ОНЛАЙН— очень помогает, тк многие ошибки возвращаются со строками такого плана "u041du043eu0432u043eu0435 u0432"
 .
И ГЛАВНОЕ СПАСИБО коллегам на работе— нюансы со статикой подключения и пример работы в Java были предоставлены ими (пример взятый у коллег выложить не могу, но схожее указано в ссылках выше).

И так по шагам разбираю действия обработки:

Создание Проекта:
1."/_api/contextinfo" — метод получения информации о подключении.
Я бы сказала метод фиксации подключения, мы в ответ получаем текст json, выбираем "FormDigestValue" полностью с датой, временем и с цифрами в конце, определяем как ID подключения и в дальнейшем при работе указываем в заголовке "X-RequestDigest". Это очень важный момент, мало где можно найти информацию о необходимости такой статистики подключения.
Заголовки:
"Accept","application/json;odata=verbose"
"Content-Type", "application/json"
"odata","verbose"
"X-RequestForceAuthentication","true"   
         

2. "/_api/ProjectServer/Projects/Add()" — метод добавления проекта. К данному методу формируется временный файл json с параметрами, которые обязательны при заполнении, id проекта при этом формируется автоматически уже в самом Project-е. Дата старта, если ее не указывать будет равна текущей дате.
Заголовки:
"Accept","application/json;odata=verbose"
"Content-Type", "application/json"
"odata","verbose"
"X-RequestForceAuthentication","true"
   

"X-HTTP-Method", "POST" — можно не указывать
"X-RequestDigest","FormDigestValue" — id подключения

Пример json:
      {
      ‘parameters’:{
      ‘Name’:’"1C тест test’,
      ‘Start’:2024-11-07T14:37:08′}
       }

 

Все на выходе мы получим опубликованный в Project проект и ссылку на него, для дальнейших манипуляций.

Создание задачи в Проекте:
1." /_api/contextinfo"— аналогично действиям выше.
Заголовки:
"Accept","application/json;odata=verbose"
"Content-Type", "application/json"
"odata","verbose"
"X-RequestForceAuthentication","true" 

2. "/_api/ProjectServer/Projects(‘%s’)/checkout()" — где %s-  id проекта, метод получения Проекта (в Project проект будет извлечен для изменений). Без извлечения проекта, добавлять и изменять в нем данные не получится. Так же извлекать проект необходимо при работе с Дополнительными параметрами проекта. 
Заголовки:

"Accept","application/json;odata=verbose"
"Content-Type", "application/json"
"odata","verbose"
"X-RequestForceAuthentication","true"   

"X-HTTP-Method", "POST" — можно не указывать
"X-RequestDigest","FormDigestValue" — id подключения

3."/_api/ProjectServer/Projects(‘%s’)/Draft/Tasks/Add()" — метод добавления задачи. К данному методу формируется временный файл json с параметрами, которые обязательны при заполнении, id задачи при этом формируется автоматически уже в самом Project-е. Дата старта, если ее не указывать будет равна дате старта проекта. Продолжительность если не указать букву, будет автоматически измеряться в стандартной единице измерения (в моем примере стандартная единица измерения "день"-соответствует букве "д", так же можно указать в "часах", соответственно указав после цифр букву "ч", при этом учитывается рабочее время 8 часовой рабочий день 5/7 дней в неделю.)
Заголовки:

"Accept","application/json;odata=verbose"
"Content-Type", "application/json"
"odata","verbose"
"X-RequestForceAuthentication","true"   

"X-HTTP-Method", "POST" — можно не указывать
"X-RequestDigest","FormDigestValue" — id подключения

Пример json:
      {
      ‘parameters’:{
      ‘Name’:’"1C test’,
      ‘Start’:2024-11-07T14:37:08′,
      ‘Duration’:’5′}
       }

4. "/_api/ProjectServer/Projects(‘%s’)/Draft/update()" —  метод обновления данных в проекте. Необходимо зафиксировать внесенные данные в очереди на публикацию.
Заголовки:

"Accept","application/json;odata=verbose"
"Content-Type", "application/json"
"odata","verbose"
"X-RequestForceAuthentication","true"   

"X-HTTP-Method", "POST" — можно не указывать
"X-RequestDigest","FormDigestValue" — id подключения

5. "/_api/ProjectServer/Projects(‘%s’)/Draft/Publish(true)" — метод публикации проекта. Вот тут была своя "заковырка". Вроде и передаю уже в самом ресурсе (True), но оказалось не достаточно. Необходимо формировать временный файл json с указанием  checkIn=true.
Заголовки:

"Accept","application/json;odata=verbose"
"Content-Type", "application/json"
"odata","verbose"
"X-RequestForceAuthentication","true"   

"X-HTTP-Method", "POST" — можно не указывать
"X-RequestDigest","FormDigestValue" — id подключения

Пример json:
      {
      ‘checkIn’:’true’
       }

Все, далее опубликуется проект с задачей. 

Хочу заметить, что в процессе тестирования создалось много задач не опубликованных и не видимых для пользователей.  И хотя проект был принудительно возвращен, задачи не появлялись в списке и при этом ни куда не пропали. При первой же удачной попытке публикации проекта из 1С с задачами, все эти ранее созданные  задачи так же отобразились!!!!

Видимо, здесь акцент идет на очередь публикации из метода Update. Но пока точно не проверено.

ЗЫ: Надеюсь, для кого-то сделала доброе дело)))

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *