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

Публикация № 954408

Обмен - Обмен с другими системами

ProjectServer Rest API Json обычные формы

7
Внешняя обработка (используя методы HTTP запросов и Json) для создания из 1С Проекта в MS Project Server 2016 и создание Задачи в Проекте. Обработка тестировалась на конфигурации 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 ОНЛАЙН- очень помогает, тк многие ошибки возвращаются со строками такого плана "\u041d\u043e\u0432\u043e\u0435 \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':2018-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':2018-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. Но пока точно не проверено.

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

7

Скачать файлы

Наименование Файл Версия Размер
Создание Проекта и Задач в проекте из 1С 8.3 в MS Project 2016:
.epf 12,36Kb
04.12.18
5
.epf 8.3/2016 12,36Kb 5 Скачать

См. также

Специальные предложения

Избранное Подписка Сортировка: Древо
В этой теме еще нет сообщений.
Оставьте свое сообщение