Интеграция между Atlassian Jira и 1С:Предприятие 8.3 используя Jira REST API (выборка, создание и изменение запросов, чтение, создание и удаление записей о работах, чтение комментариев и другие возможности)















Внешняя обработка на управляемой форме для 1С:Предприятие 8.3 по интеграции с Atlassian Jira используя Jira REST API. Ключевые функции: выборка запросов с использованием JQL; добавление и изменение запросов; добавление, изменение и удаление записей о работах; чтение комментариев к запросам; сохранение всех ключевых параметров между сеансами работы. Тестирование проводилось на платформе 1С (8.3.11.2954) совместно с JIRA Server platform (7.3.7)

Функции

Ключевые функции

  1. Получение для проекта Jira всех типов запросов (issue type)  и связанных с ними статусов (status) запросов.
  2. Выборка измененных запросов из Jira с отбором по проекту, периоду, с ограничением на кол-во отбираемых записей и используя шаблон JQL запроса.
  3. Получение списка пользователей Jira исходя из полей запроса (assignee, reporter, creator), полей worklog-а (autor, update autor) и полей комментариев (autor, update autor) и отображение имени пользователя и представления пользователя при выборе пользователя при редактировании полей запроса и полей записи о работе.
  4. Чтение и запись ключевых полей запроса (issue) Jira: Наименование (summary), Описание (description), Тип запроса (issue type), Родитель подзадачи (parent), Ссылка на epic (epic link), Приоритет (priority), Исполнитель (assignee), Автор (reporter), Создатель (creator), Срок исполнения (due date), Дата создания (created), Дата обновления (updated), Компоненты проекта Jira (components), Метки (labels), Первоначальная оценка (original estimate), Оставшееся время (remaining estimate), Всего затраты (time spent).
  5. Чтение и установка нового статуса запроса (status). Получение допустимых транзакции (transitions) Jira для перехода к новому статусу и осуществление перехода используя подходящую транзакцию.
  6. Чтение записей о работах (worklog) для запроса Jira. Добавление, Изменение и Удаление записей о работе.
  7. Чтение комментариев к запросу Jira. Формирование ссылки для перехода в Jira непосредственно к выбранному комментарию.

Дополнительные возможности

  1. В случае ошибки в момент выполнения http запроса к Jira, программа выдает диагностическое сообщение с кодом состояния и открывает для просмотра в виде текста файл с ответом от Jira.
  2. Программа отдельно контролирует список изменившихся полей запроса и при записи запроса передает в  Jira только изменения.
  3. Основные значения сохраняются между сеансами работы с обработкой (параметры подключения к Jira, типы и статусы запросов, настройки отбора выборки запросов, список пользователей, последние выбранные значения полей запроса).
  4. Реквизиты и элементы формы для сохраняемых полей создаются программно.

Источники и ссылки

  1. Спецификация по работе с JIRA с использованием REST: http://docs.atlassian.com/jira/REST/latest/
  2. Спецификация REST API для JIRA SERVER: https://docs.atlassian.com/jira/REST/server/
  3. Примеры REST запросов к JIRA: https://developer.atlassian.com/server/jira/platform/jira-rest-api-examples/
  4. Продвинутый поиск в Jira используя Jira Query Language (JQL): https://confluence.atlassian.com/jirasoftwareserver073/advanced-searching-861256227.html
  5. Онлайн просмотр .json: jsonviewer.stack.hu

Особенности и ограничения

  1. Данная обработка предназначена для работы с серверной версией Jira.
  2. Для подключения к Jira используется обычная проверка подлинности (Basic authentication).
  3. При изменении статуса запроса (status) выполняется дополнительный запрос для определения подходящей транзакций перехода от текущего к выбранному статусу. В определенных случаях (например для "подзадачи") переход к выбранному статусу может оказаться невозможным. В таком случае программа выдаст диагностическое сообщение "Не удалось определить ""ID транзакции"" для статуса …".
  4. При создании в Jira записи о работах (work log) в качестве автора запись всегда устанавливается пользователи под которым выполнено подключение к Jira (указать другого автора нельзя).
  5. При определенных настройках Jira, в момент перехода к новому статусу, также может изменится исполнитель (assignee) на пользователя от имени которого выполнено подключение к Jira.
  6. Используя REST невозможно изменить тип запроса "подзадача" на другой тип запроса. При попытке выполнить такое изменение Jira вернет код ошибки и описание ошибки в файле с ответом.
  7. Для комментариев к запросу реализовано только чтения списка комментариев и непосредственный переход к комментарию в браузере. Создание, изменение и удаление комментариев не поддерживается (при необходимости может быть легко реализовано по аналогии как это сделано для  записей о работах (worklog).

Варианты использования

Короткий ролик с демонстрацией основных возможностей обработки (~ 7 мин, только текстовые комментарии, без голосового сопровождения)

Подключение к серверу Jira

На закладке "Параметры" указываются параметры для подключения к Jira:

  1. Адрес сервера для подключения.
  2. Ссылка по которой доступен REST API.
  3. Ключ проекта Jira который будет использоваться.
  4. Пользователь и пароль для подключения к Jira. Подключение к Jira выполняется используя простой (незащищённый) способ аутентификации (подробнее по ссылке: Basic authentication).
 

Снимок экрана: Параметры подключения к Jira

Получение Типов и статусов запросов для проекта Jira

  1. На закладке "Параметры" по кнопке "Заполнить типы и статусы из Jira" выполняется запрос к Jira, который возвращает .json файл с информацией о типах и статусах запросов используемых для указанного проекта. (см. https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/project-getAllStatuses)
  2. Данные из таблицы используются в дальнейшем для заполнения списков выбора полей "Типа запроса" и "Статус запроса" в карточке запроса на закладке "Запрос". 
  3. Информация из таблицы используется для определения "подзадач" и "id" типа запроса. Эти данные требуется для обращения к Jira при редактирования и создания запросов.
  4. Список типов и статусов автоматически сохраняется между сеансами работы в данных формы.
 

 Снимок экрана: Типы и статусы запросов в Jira

Выборка запросов используя JQL запрос к Jira

  1. На закладке "Выборка запросов" по команде "Прочитать из Jira" выполняется запрос к Jira по результатам которого заполняется список запросов (см. https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/search-searchUsingSearchRequest)
  2. Запросы из Jira отбираются согласно JQL запроса.
  3. Итоговый JQL запрос формируется путем подстановки параметров в строку "Шаблон запрос JQL для выборки данных".
  4. Данные выбираются в количестве не более "Всего выбрать" заданными порциями.
  5. Из списка запросов по ссылке "Browse link" можно перейти к запросу в браузере.
  6. Из списка запросов по кнопкам "Добавить", "Изменить" можно перейти к созданию или редактированию запроса. При этом будет активирована закладка "Запрос" (в случае операции "Изменить" будет выполнено обращение к Jira и заполнены все предусмотренные для редактирования поля, а также получены все комментарии и записи о работах для выбранного запроса).
 

 Снимок экрана: Выборка запросов из Jira

Список пользователей Jira для выбора

  1. Список на закладке "Пользователи" является основой для содержимого списков выбора при выборе участников запроса.
  2. Пользователи в список добавляются автоматически при "Выборке запросов" или при чтения данных конкретного запроса (с учетом записей о работах и комментариев).
  3. При необходимости пользователей в список можно добавить "вручную".
  4. Список пользователей автоматически сохраняется между сеансами работы в данных формы.
 

 Снимок экрана: Список пользователей Jira

Чтение запроса из Jira

  1. На закладке "Запрос" выполняются основные операции по просмотру и редактированию полей запроса.
  2. Если выбрана операция "Изменить запрос" и заполнен "Ключ запроса" (Key) доступна команда "Прочитать из Jira".
  3. При нажатии "Прочитать из Jira" выполняется запрос к Jira и заполняются поля запроса, записи о работах и комментарии.
  4. Если заполнен "Ключ запроса" тогда отображается "ссылка для перехода к запросу в браузере".
  5. По ссылке "JSON" выполняется переход в браузере к файлу .json с данными запроса.
  6. Для чтения значений полей выполняется запрос к Jira (см. https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/issue-getIssue).
  7. В случае успешной операции чтения из Jira, все поля запроса отмечаются как "не изменявшиеся".
  8. Значения полей, количество записей о работах и количество комментариев (кроме самих записей о работах и комментариев) сохраняются между сеансами работы в данных формы.
 

 Снимок экрана: Чтение запроса из Jira

Изменение полей запроса и запись в Jira

  1. Программа отдельно хранит все предыдущие значения полей запроса.
  2. Каждый раз при чтении запроса из Jira текущие и предыдущие значения полей синхронизируются.
  3. При изменение какого-либо из полей запроса, сравнивается новое значение и предыдущее.
  4. Если новое значение отличается от предыдущего, поле отмечается как "измененное" и выделяется на форме с помощью фона и цвета текста заголовка.
  5. При записи в Jira передаются только измененные поля (для которых новое значение отличается от предыдущего).
  6. Для записи выполняется запрос к Jira (см. https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/issue-editIssue)
  7. Предыдущие значения реквизитов сохраняются между сеансами работы в данных формы.
  8. Для "обнуления" измененных реквизитов можно либо "Прочитать из Jira" или "Записать в Jira" (после успешной записи автоматически выполняется "Прочитать из Jira".
 

 Снимок экрана: Изменение полей запроса

Создание нового запроса в Jira

  1. Для создания нового запроса на закладке "Запрос" необходимо выбрать операцию "Создать запрос".
  2. Пока запрос не создан, недоступны ссылки для перехода к запросу, комментариям и списку записей о работах.
  3. Для создания запроса выполняется запрос к Jira (см. https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/issue-createIssue)
  4. После создания запроса в Jira, автоматически выполняется чтение запроса и активация операции "Изменить запрос".
 

 Снимок экрана: Создание нового запроса

Изменение статуса запроса в Jira

  1. Если изменяется статус запроса, программа показывает информационную надпись вида "При записи статус изменится с "В работе" -> "Выполнен".
  2. Изменение статуса происходит при нажатии "Записать в Jira".
  3. Сначала выполняется запрос по записи измененных полей запроса, а затем изменяется статус запроса.
  4. Изменение статуса запроса происходит в несколько этапов:
    1. Сначала выполняется дополнительный запрос для получения списка всех допустимых транзакция для текущего запроса (см. https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/issue-getTransitions)
    2. Из списка допустимых транзакция определяется подходящая транзакция, для которой конечный статус равен выбранному в запросе.
    3. Выполняется отдельный запрос для выполнения транзакции перехода (см. https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/issue-doTransition)
  5. После изменения статуса запроса, автоматически выполняется чтение запроса из Jira.
 

 Снимок экрана: Изменение статуса запроса

Чтение, Добавление и Удаление записей о работах в Jira

  1. В карточке запроса на закладке "Записи о работах" отображается список записей о работах запроса.
  2. По кнопке "Прочитать work log" выполняется запрос к Jira и заполняется список записей о работах для запроса (см. https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/issue-getIssueWorklog).
  3. По кнопке "Добавить" появляется форма для создания новой записи о работе. По кнопке "Сохранить запись" выполняется запрос к Jira для добавления новой записи о работе (см. https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/issue-addWorklog).
  4. По кнопке "Изменить" появляется форма для редактирования выбранной записи о работе. По кнопке "Записать изменения" выполняется запрос к Jira для обновления данных существующей записи о работе (см. https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/issue-updateWorklog).
  5. По кнопке "Удалить запись" выполняется запрос к Jira для удаления записи о работах (см. https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/issue-deleteWorklog)
 

 Снимок экрана: Список "Записи о работах"

 

Снимок экрана: Добавление записи о работе

 

Снимок экрана: Изменить запись о работе

 

Снимок экрана: Удалить запись о работе

Чтение комментариев и переход по ссылке к конкретному комментарию в Jira 

  1. В карточке запроса на закладке "Комментарии" отображается список всех комментариев для запроса.
  2. По кнопке "Прочитать комментарии" выполняется запрос к Jira и заполняется список комментариев для запроса (см. https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/issue-getComments).
  3. По ссылке "Ссылка на комментарий" можно непосредственно перейти к комментарию в Jira.
 

 Снимок экрана: Список комментариев 

65 Comments

  1. Steelvan

    Вы используете Jira как веб-морду, общедоступную для всех ?

    А 1С как учетную систему для расчета зарплаты и прочих расчетов ?

    Reply
  2. Ko1t

    (1) Да, именно так.

    Jira + Confluence — снаружи для клиентов и внешних подрядчиков.

    1С — внутри, для аналитики, документооборота, расчетов и учета.

    Reply
  3. o.nikolaev

    Отлично просто. Сам собирался, но, руки так и не дошли.

    Reply
  4. Ko1t

    (4) пользуйтесь, «на здоровье» )

    Reply
  5. TreeDogNight

    Спасибо за отличную разработку, очень нуждался в таком инструменте!

    При попытке изменить задачу выходит следующая ошибка:



    Ссылка на полноразмерный скриншот

    В чем может быть проблема?

    Reply
  6. Ko1t

    (6) Возможно вы не заполнили на закладке «Параметры» таблицу «Типы и статусы запросов». Если причина не в этом, готов к вам подключится по teamviewer и удаленно разобраться с проблемой. Напишите мне в личку… я буду на связи ~ после 15.00

    Reply
  7. TreeDogNight

    (7) «Типы и статусы запросов» я заполнил, нужно что-нибудь в ней менять вручную?



    Ссылка на полноразмерный скриншот

    Reply
  8. Ko1t

    (8) При моих настройках 1С и Jira ошибку не удается воспроизвести… но я попробовал предположить в чём может быть проблема в вашем случае. детали на картинке:

    https://ibb.co/bXo2eH

    Reply
  9. nordcomp

    Жаль что только управляемые формы. Обработка конечно очень хороша. Все действия пишет. Все ошибки четко выводит. Но вот код читать немного трудно без многих комментов.

    Если не полениться то можно подстроить под любую систему. Жаль нельзя добавить +10

    Reply
  10. Ko1t

    (12) Спасибо за оценку :). Про комментарии кода — согласен… по хорошему надо было бы… но уже и так все свои временные лимиты израсходовал на обработку + публикацию :). Потому как в пришлось все свои наработки по интеграции достать из рабочей конфигурации и много чего написать нового и переписать по другому под формат внешней обработки.

    Reply
  11. user992401

    Спасибо за отличную разработку

    Reply
  12. Ko1t

    (14) пожалуйста, рад что понравилось 🙂

    Reply
  13. wowan ht

    Добрый день. Jira Server развернут в демо-версии на локальной машине, созданы 2 пользователя: админ и обычный пользователь

    Из обработки не могу подключиться, выдает ошибку аутентификации 401.

    Подскажите, пожалуйста, в чем может быть дело.

    Спасибо.

    Reply
  14. Ko1t

    (16) Добрый день. Что вижу на картинке, и с чем приходилось иногда сталкиваться… Jira иногда не работает корректно с кириллическими именами пользователей. Попробуйте создать пользователей, указав имя пользователя латиницей (на английском), Например не «Владимир», а «wowan_ht»

    Reply
  15. wowan ht

    (17) Спасибо большое, все получилось

    Reply
  16. Ko1t

    (18) Пожалуйста, рад что смог помочь )

    Reply
  17. user1024781

    Добрый вечер. При попытке заполнить таблицу типов и статусов из Jira, выдается сообщение: Неудача. Код состояния: 404. Данные не получены. Подскажите пожалуйста, где искать ошибку.

    Reply
  18. Ko1t

    (20) Добрый день, сложно сказать не имея подробной информации.

    Попробую предположить исходя из того что в этот момент происходит.

    В момент получения статусов выполняется REST запрос:

    GET /rest/api/2/project/{projectIdOrKey}/statuses 

    подробнее по ссылке (ссылка есть в описании к обработке): https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/project-getAllStatuses)

    Вы можете просто в браузере выполнить запрос как показано на картинке:

    https://ibb.co/gEUrgK

    Если запрос написан правильно, в ответ вы получите информацию в формате json.

    В вашем случае скорее всего ошибка может быть в написании ключа проекта.

    Reply
  19. user1024781

    (21) Добрый день. Спасибо за ответ. Попробовал выполнить запрос через браузер. Но выдало вот что:

    <status>

    <status-code>404</status-code>

    <message>

    null for uri: https://jira.affect.ru/……………………/statuses

    </message>

    </status>

    Пробовал с разными ключами. Всегда одно и тоже.

    Reply
  20. Ko1t

    (24) Добрый день. Данная обработка предназначена для серверной версии Jira. При этом, на сколько я знаю, если речь идет об облачной версии, могут быть нюансы в написании отдельных запросов через REST.

    Я посмотрел какой должен быть запрос для облачной версии Jira (см. ссылку)

    https://developer.atlassian.com/cloud/jira/platform/rest/#api-api-2-project-projectIdOrKey-statuses-get

    GET /rest/api/2/project/{projectIdOrKey}/statuses

    — запрос такой же как и для серверной версии.

    Возможно проблема в настройках прав пользователя под которым вы выполняете этот запрос:

    Permissions required: Browse Projects project permission.

    Просто если у вас не работает запрос через браузер, сл-но он не работает и через обработку.

    Reply
  21. user1024781

    (25) Добрый вечер. Синхронизацию запустить получилось. Данные получены. Но столкнулся с еще одной проблемой: не могу создать новую задачу в обработке. Ошибка Код состояния 400 {«errorMessages»:[],»errors»:{«reporter»:»Field ‘reporter’ cannot be set. It is not on the appropriate screen, or unknown.»}}. А при попытке изменить задачу выдается ошибка: Значение не является значением объектного типа (Количество).

    Reply
  22. Ko1t

    (26) Добрый день.

    По Вопросу-1. «Не могу создать новую задачу… «reporter»:»Field ‘reporter’ cannot be set»

    Судя по ошибке при ваших настройках Jira, и с правами пользователя, под которым вы подключаетесь к Jira, нет возможности изменить поле «reporter».

    Я проверил на «своей» Jira — у меня всё работает.

    Ниже на картинке то как информация о «reporter» (автор) запроса отображается в моей Jira.

    Попробуйте посмотреть как у вас:

    1. Работает ли у вас выборка запросов (Закладка в обработке «Выборка запросов» — «Прочитать из Jira»/

    2. Выводиться ли информация в поле «Reporter.name» (В списке выбранных запросов)

    3. Откройте ссылку из колонки «Rest link» в браузере, и поищете поиском «reporter»

    Если информация читается, но не записывается, причина с большой вероятность в ограниченных правах пользователя под которыми вы работаете c Jira через Rest.Проверьте что вы можете непосредственно в Jira под этим пользователем создать Запрос.

    А затем попробуете при создании через обработку, указывать в качестве Автора (reporter), того же пользователя.

    https://ibb.co/nFV41U

    По Вопросу-2 приведите пжл. полное сообщение об ошибке, чтобы увидеть номер строки обработки в которой возникает ошибка

    Reply
  23. user1024781

    (27) По первому вопросу: выборка запросов работает, в поле «Reporter.name» отображается информация, а вот с ссылкой ситуация непонятна. Нажимаю на ссылку и мне предлагается сохранить файл формата json, после этого его можно посмотреть только через блокнот.

    В Jira под пользователем могу создавать и изменять запросы. При создании через обработку с тем же автором приходит сообщение с ошибкой 400.

    По второму вопросу: полное сообщение {ВнешняяОбработка.Jira_1C_Rest_Обмен_1С8_3.Форма.Форма.Форма(1897)}: Значение не является значением объектного типа (Количество)

    Если fields_components.Количество() > 0 Тогда

    Reply
  24. Ko1t

    (28)

    По первому вопросу: выборка запросов работает, в поле «Reporter.name» отображается информация, а вот с ссылкой ситуация непонятна. Нажимаю на ссылку и мне предлагается сохранить файл формата json, после этого его можно посмотреть только через блокнот.

    В Jira под пользователем могу создавать и изменять запросы. При создании через обработку с тем же автором приходит сообщение с ошибкой 400.

    Просмотр через блокнот или сразу в окне браузере не принципиально. Если это поле читается при выборке запросов, значит вопрос с его установкой из обработки.

    Проблема может быть из-за имени пользователя в Jira введенного кириллицей. Такой вопрос уже подымался (смотрите комментарий №17). А как у в вашем случае?

    По второму вопросу: полное сообщение {ВнешняяОбработка.Jira_1C_Rest_Обмен_1С8_3.Форма.Форма.Форма(1897)}: Значение не является значением объектного типа (Количество)

    Если fields_components.Количество() > 0 Тогда

    Судя по ошибке, скорее всего в вашем случае в проекте Jira не используются «Компоненты». Проверить это вы можете скачав файл json и проанализировав поля запроса.

    В публикации в разделе «Источники и ссылки» в п.5 есть ссылка на онлайн просмотр Json файлов.

    Вы можете закомментировать код обработки по чтению данных о компонентах в таком случае, чтобы избежать ошибки при работе обработки.

    Reply
  25. user1024781

    (29) Добрый день. Большое спасибо. По второму вопросу все получилось. Нужно было часть кода закомментировать, как вы и подсказывали. Но вот добавление пока не получается. Имя пользователя на английском.

    Reply
  26. Ko1t

    (30)

    Имя пользователя на английском.

    На всякий случай, чтобы наверняка, привожу картинку что я имею ввиду под именем пользователя.

    И это имя должно быть без пробелов и латиницей:

    https://ibb.co/fcWyAp

    Если все-таки не работает, тогда опять же попробуйте закомментировать код в котором устанавливается поле «reporter» в строке: 2066

    &НаКлиенте
    Процедура СоздатьОбновитьЗапросОбработка(ДопПарам=Неопределено, Отказ=Ложь)
    ….
    //ДобавитьПолеЗапросаДляИзмененияВJira(fields,»reporter»,»name»,»ПарамЗапросJira»,»Reporter_Name»);
    …
    КонецПроцедуры
    
    Reply
  27. nordcomp

    4 месяца юзаю вашу обработку, и пишу свою под наши задачи. на самом деле очень многое помогает, но с некоторыми ошибками приходиться долго бороться (пример с компонентой). Через ваш запрос не отработало ( ругается на timetracking, даже не нашла что это за поле), а у меня выдало ошибку типа : «Компоненты не являются массивом». Проверила создание запроса было, вот так в моей обработке:

    | «»fields»»: {

    | «»project»»: {

    | «»key»»: «»PRODDEP»»

    | },

    | «»issuetype»»: {

    | «»id»»: «»10204″»

    | },

    | «»components»»:{

    | «»id»»:»»11102″»

    | },

    долго мочилась, но посмотрела через вашу обработку код аналогичной задачи и увидела квадратные скобки

    вот так получилось в итоге:

    | «»fields»»: {

    | «»project»»: {

    | «»key»»: «»PRODDEP»»

    | },

    | «»issuetype»»: {

    | «»id»»: «»10204″»

    | },

    | «»components»»: [ {

    | «»id»»:»»11102″»

    | } ] ,

    Reply
  28. Ko1t

    (32) Добрый день, рад что обработка оказалась полезной.

    Подозреваю что могут быть нюансы на разных версиях Jira.

    Мне часто помогал простой способ, когда я интерактивно формировал запрос в Jira, а потом просто скачивал rest представлением этого запроса и анализировал его структуру.

    В обработке в списке «Выборка запросов из Jira» есть колонка «Rest link» — ссылка по которой можно скачать такое представление.

    Reply
  29. unichkin

    Доброго времени суток! Я в позитивном шоке) Не ожидал что это чудо взлетит без единого пинка, но-таки взлетело. Большое спасибо) Помимо функциональности порадовало соблюдение ИТС при оформлении кода, прям бальзам на душу.

    Один только вопрос. Я кажется знаю ответ, но все-же уточню. Программный интерфейс не выносился на сервер, ради локальных запросов с клиента?

    Reply
  30. Ko1t

    (34) Добрый день! Спасибо за оценку, приятно :).

    Программный интерфейс не выносился на сервер, ради локальных запросов с клиента

    Да, так и есть. Данная обработка по своей сути — демонстрации возможностей интеграции. В реальности у меня большинство функций работает на сервере в рамках фоновых заданий.

    Reply
  31. maloi3390

    В обработке не реализована возможность прикрепить файл к задаче Jira?

    Reply
  32. Ko1t

    (36) Добрый день! Возможности из 1С прикрепить файл к задаче Jira нет.

    Reply
  33. gortol

    (37) Добрый день

    Отличная обработка!!! мне очень помогает, благодарю Вас за сей продукт

    вопросы такие

    каким образом получить:

    * список вложений к задаче (в том числе картинки прикладываемые)

    * метки к задаче

    * компоненты

    * связи с другими задачами

    где бы почитать про это?!

    Reply
  34. gortol

    (38) сам себе отвечу

    /rest/api/latest/issue/<номерЗадачи>?&expand=renderedFields

    она даёт кучу дополнительный полей (в обработке это при изменении запроса)

    и компоненты и метки можно и связи с другими задачами и вложения тоже получаются…

    так вопрос закрыт)

    Reply
  35. Ko1t

    (38)

    Добрый день, спасибо за оценку )

    каким образом получить:

    * метки к задаче

    * компоненты

    — такой функционал реализован в обработке:

    Метки получается из Jira и передаются в Jira через реквизит на форме обработки «Labels»,

    С компонентами — аналогично, на форме есть реквизит «Components».

    *список вложений к задаче (в том числе картинки прикладываемые)

    На первый взгляд, мне кажется что это не тривиальная задача, поэтому я её я не делал, но если вы реализуете этот момент, и поделитесь с удовольствием скачаю себе 🙂

    *Связи с другими задачами

    В реальной базе у меня используется этот функционал, но в рамках данной обработке его «не прикручивал» (итак потратил на «некоммерческую» обработку больше трудозатрат чем планировал)

    где бы почитать про это?!

    Почитать об этом можно по ссылкам которые приведены в описании к публикации 🙂

    В частности про вложения:

    https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-api-3-attachment-meta-get

    Для установки связи с другой задачей.

    https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-api-3-issueLink-post

    Reply
  36. FeSTy

    Можно ли данную обработку использовать для подключения к jira cloud? Если нет, то сложно ли адаптировать?

    Reply
  37. Ko1t

    (41)

    Добрый день. Специально только что зарегился в Jira Cloud:

    1. Подключение к Jira работает.

    2. Типы и статусы запросов читаются.

    3. Выборка запросов из Jira — работает.

    4. Создание запроса в Jira выдает ошибку «{«errorMessages»:[],»errors»:{«reporter»:»Field ‘reporter’ cannot be set. It is not on the appropriate screen, or unknown.»}}» — на первом этапе можно просто закомментить обновление этого поля.

    5. Записи о работах читаются.

    6. Записи о работах создаются.

    7. Комментарии читаются.

    8. Переходы по ссылкам работают.

    ИТОГО:

    Можно ли данную обработку использовать для подключения к jira cloud? Если нет, то сложно ли адаптировать?

    Да, можно.

    Но есть отдельные вопросы с созданием запроса, которые легко решаются.

    Reply
  38. Ko1t

    (43) Добрый день, не совсем понял ваш вопрос. Какая «такая» обработка? И что значит скинуть на почту?

    Здесь обсуждается одна и та же обработка «Jira и 1C обмен через REST 1C 8.3.epf»

    Скачать её можно по ссылке к публикации.

    Чтобы её скачать нужно иметь всего лишь 1 стартмани.

    Reply
  39. sauron777

    А как можно получить 1 стартмани?

    Reply
  40. Ko1t

    (45)

    Попросить знакомого скачать, у которого они есть,

    или заплатить деньги и купить себе стартмани: https://infostart.ru/about/service/premium/

    Reply
  41. Ko1t

    (47) Спасибо 🙂

    Reply
  42. Артано

    (47) Минус за использование латинизма «плюс», вместо, например славянского «любо»

    Reply
  43. Ko1t

    (49) И Вам, спасибо 🙂

    Reply
  44. Steelvan

    (49) «Любо», отличное слово, куда лучше противного англицизма «лайк».

    Reply
  45. galich

    Оставлю здесь код для записи вложений в созданный issue:

    На вход нужно передать соответствие «СоответствиеВложений» где ключ — имя файла вложения, а значение — base64 строка с данными файла. В переменную НомерIssue нужно передать ключ запроса.

    ИмяФайлаОтправки = ПолучитьИмяВременногоФайла();
    Поток = Новый ПотокВПамяти;
    ФайлОтправки = Новый ЗаписьДанных(Поток, КодировкаТекста.UTF8);
    Boundary = «jiraattach»;
    Для Каждого Вложение Из СоответствиеВложений Цикл
    //Определяем раздел двоичных данных
    ФайлОтправки.ЗаписатьСтроку(«—» + Boundary);
    ФайлОтправки.ЗаписатьСтроку(«Content-Disposition: form-data; name=»»file»»; filename=»»» + Вложение.Ключ + «»»»);
    ФайлОтправки.ЗаписатьСтроку(«Content-Type: application/octet-stream» + Символы.ПС);
    //Записываем кодированные двоичные данные
    ФайлОтправки.Записать(Base64Значение(Вложение.Значение));
    ФайлОтправки.ЗаписатьСтроку(«»);
    //Завершение сообщения для сервера
    КонецЦикла;
    ФайлОтправки.ЗаписатьСтроку(«—» + Boundary + «—«);
    ФайлОтправки.Закрыть();
    РазмерФайлаОтправки = XMLСтрока(СтрДлина(Вложение.Значение));
    ЗапросHTTP = Новый HTTPЗапрос;
    ЗапросHTTP.Заголовки.Вставить(«Content-Type», «multipart/form-data; boundary=» + Boundary);
    ЗапросHTTP.Заголовки.Вставить(«X-Atlassian-Token», «no-check»);
    ЗапросHTTP.АдресРесурса = «/rest/api/2/issue/»+НомерIssue+»/attachments»;
    ЗапросHTTP.УстановитьТелоИзДвоичныхДанных(Поток.ЗакрытьИПолучитьДвоичныеДанные());
    Ответ = СоединениеJira.ОтправитьДляОбработки(ЗапросHTTP);
    

    Показать

    Reply
  46. sauron777

    Добрый день!

    А как можно добавить наблюдателя к задаче в jira?

    Reply
  47. Ko1t

    (53) Добрый день. Такой функционал в представленной обработке изначально не реализован. Но впринципе REST спецификация Jira позволяет реализовать такую функцию.

    Reply
  48. sauron777

    (54)А поподробнее можно? Каким запросом это делается?

    Reply
  49. sauron777

    А поподробнее можно? Каким запросом это делается?

    Reply
  50. Ko1t

    https://docs.atlassian.com/software/jira/docs/api/REST/7.12.0/?_ga=2.236894849.1610401476.1551257879-2080302165.1551257879#api/2/issue-addWatcher

    Add watcher: POST /rest/api/2/issue/{issueIdOrKey}/watchers

    Remove watcher DELETE /rest/api/2/issue/{issueIdOrKey}/watchers

    Reply
  51. sauron777

    (57) А пример передаваемого json?

    Reply
  52. Ko1t

    (58) Судя по документации надо передать просто «json строку»

    https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-api-3-issue-issueIdOrKey-watchers-post

    Adds a user as a watcher of an issue by passing the account ID or name of the user as a JSON string. For example, «384093:32b4d9w0-f6a5-3535-11a3-9c8c88d10192». The use of name is deprecated due to privacy changes. Use account ID instead. See the migration guide for details. If no user is specified the calling user is added.
    Reply
  53. sauron777

    (59) Спасибо

    Reply
  54. gortol

    (52)

    Оставлю здесь код для записи вложений в созданный issue:

    Доброго дня

    Благодарю за код, это я так понимаю для отправки в Jira Файла, а вот как получить его из Jira? может есть у кого наработки?

    Reply
  55. gortol

    а вот как такие конструкции restapi в 1с обработать? (Для получения файла из Jira)

    GET /rest/api/2/attachment/{id}

    Reply
  56. galich

    (62) Вызываешь данные запроса по адресу

    {Сервер JIRA}/rest/api/2/issue/{Номер issue}?fields=attachment

    В ответ получаешь json вида

    {
    «id»: «10002»,
    «self»: «http://www.example.com/jira/rest/api/2/issue/10002»,
    «key»: «EX-1»,
    «fields»: {
    «attachment»: [
    {
    «self»: «http://www.example.com/jira/rest/api/2.0/attachments/10000»,
    «filename»: «picture.jpg»,
    «author»: {
    «self»: «http://www.example.com/jira/rest/api/2/user?username=fred»,
    «name»: «fred»,
    «avatarUrls»: {
    «48×48»: «http://www.example.com/jira/secure/useravatar?size=large&ownerId=fred»,
    «24×24»: «http://www.example.com/jira/secure/useravatar?size=small&ownerId=fred»,
    «16×16»: «http://www.example.com/jira/secure/useravatar?size=xsmall&ownerId=fred»,
    «32×32»: «http://www.example.com/jira/secure/useravatar?size=medium&ownerId=fred»
    },
    «displayName»: «Fred F. User»,
    «active»: false
    },
    «created»: «2019-03-06T08:35:37.143+0000»,
    «size»: 23123,
    «mimeType»: «image/jpeg»,
    «content»: «http://www.example.com/jira/attachments/10000»,
    «thumbnail»: «http://www.example.com/jira/secure/thumbnail/10000»
    }
    ]
    }

    Показать

    «10000» тут — id, который ты можешь передать в указанную тобой конструкцию и получить json аналогичный тому, что тебе тут уже в attachment пришло.

    А можешь просто в цикле обежать, найти нужный файл по filename и вызвать строчку из content. Должна начаться закачка файла.

    Reply
  57. gortol

    оставлю тут для поколений:

    Решил задачу с получением файлов из Attachment

    взял библиотеку от Автора в виде Общего.Модуля: КоннекторHTTP из публикации https://infostart.ru/public/709325/

    и такой код

    ДополнительныеПараметры=Новый Структура;
    ДополнительныеПараметры.Вставить(«Заголовки», ПарамСерверJira.ЗаголовкиHTTP);
    ДополнительныеПараметры.Вставить(«РазрешитьПеренаправление», Истина);
    
    рез= КоннекторHTTP.Get(JiraВложение[«content»],, ДополнительныеПараметры );
    

    в переменной Рез.Тело — двоичныеДанные файла

    отлично работает эта спарка — рекомендую!!!

    Reply
  58. gortol

    (63) Благодарю, но что то в «лоб» не решается так задачка у меня

    то что ниже по комментарию взлетела

    там засада в том, что при первичном httpЗапросе возвращается 302 редирект на API atlassian где по токену надо выдёргивать файл

    + как мне подсказали в телеграм канале по 1с — там ещё Cookies задействованы… так что пока через КоннекторHTTP работает и славно!!!

    Reply
  59. gortol

    Добавлю для искателей приключений по данным Jira

    Для получения всех полей используемых в Задаче (включая Пользовательские поля)

    С ТИПАМИ значений, а также с возможными подстановками в поле

    существует такой запрос

    ПарамСерверJira.JiraАдресRestAPI+»/issue/»+issue[«key»] + «/editmeta»

    при таком GetЗапросе получается вся структура созданных полей для данного issue

    Reply
  60. z585

    Если есть доступ к административной панели Jira, то рекомендую поставить плагин Atlassian REST API Browser.

    В нем библиотека всех запросов REST и возможность прямо из интерфейса выполнять запросы. Помогает сразу увидеть результат и с помощью фильтров получить итоговый текст get или post запроса.

    Reply
  61. woland

    (52) Подскажите, почему в ответ может приходить код 415?

    Расшифровка такая: 415 Unsupported Media Type — Неподдерживаемый тип данных.

    Передаю обычный текстовый файл.

    Reply
  62. galich

    (68) Судя по коду — у вас в JIRA стоит ограничение на расширения файлов вложений, которые могут быть прикреплены, а в файле передается имя файла не соответствующее фильтру (как вариант — в имени файла вообще не указано расширение).

    Reply
  63. xsazar

    Привет, откуда взять поле epic link?

    Reply
  64. Ko1t

    (70) Привет, не уверен что правильно понял вопрос, поэтому приведу пример из реальной жизн 🙂

    Reply
  65. xsazar

    (71)

    имел ввиду другое), разобрался, спасибо

    Reply

Leave a Comment

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