Имя: Пароль:
1C
1С v8
Создание задач в Redmine из 1С
0 bUbA
 
10.05.18
09:06
Доброе утро!

При создании задач использую мануал http://www.redmine.org/projects/redmine/wiki/Rest_api

Вот пример кода, с помощью которого я пытаюсь создать задачу:
    
    HTTPЗапрос = Новый HTTPЗапрос;
    HTTPЗапрос.Заголовки.Вставить("Connection", "keep-alive");
    HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/octet-stream");
    HTTPЗапрос.АдресРесурса = "/uploads.json";
    //HTTPЗапрос.АдресРесурса = "/issues.json";
    
    Попытка
        Текст = Новый ТекстовыйДокумент;
        Текст.Прочитать(issue, "UTF-8");
        СтрокаЗапроса = Текст.ПолучитьТекст();
        HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаЗапроса, "UTF-8", ИспользованиеByteOrderMark.НеИспользовать);
    Исключение
        HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(Новый ДвоичныеДанные(issue));
    КонецПопытки;
    
    Попытка
        Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки

issue - это путь к файлу формата json
Вот содержимое этого файла:

{
    "issue": {
        "id": 9792,
        "project": {
            "id": 94,
            "name": "Имя проекта"
        },
        "tracker": {
            "id": 14,
            "name": "Поддержка"
        },
        "status": {
            "id": 1,
            "name": "Новая"
        },
        "priority": {
            "id": 5,
            "name": "Высокий"
        },
        "author": {
            "id": 194,
            "name": "Автор задачи"
        },
        "fixed_version": {
            "id": 202,
            "name": "Поддержка"
        },
        "subject": "Тестовая тема",
        "description": "Тестовое описание",
        "start_date": "2018-05-08",
        "due_date": "2018-05-08",
        "done_ratio": 0,
        "spent_hours": 0,
        "total_spent_hours": 0,
        "custom_fields": [
            {
                "id": 14,
                "name": "",
                "multiple": true,
                "value": []
            },
            {
                "id": 16,
                "name": "",
                "value": "0"
            }
        ],
        "created_on": "2018-05-08T15:55:05Z",
        "updated_on": "2018-05-08T15:55:05Z"
    }
}

Файл отправляю на адрес ресурса /uploads.json, получаю код ответа 201 и токен.

После этого формирую второй файл, тоже формата json:

{
    "issue": {
        "project_id": 1,
        "subject": "Тестовая тема",
        "uploads": [
            {
                "token": "7973.a062c6e4722ed1d9d547a09e89d60320c536062b7ef2b7f105cdb1d32f15f1e7"
            }
        ]
    }
}

Второй файл отправляю на адрес ресурса /issues.json. В ответ получаю код ответа 422 Unprocessable Entity. И содержание ответа

{
  "errors": [
    "Тема не может быть пустым",
    "Проект не может быть пустым",
    "Трекер не может быть пустым",
    "Статус не может быть пустым"
  ]
}

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

Подскажите пожалуйста в чем ошибка и куда копать надо.
1 triviumfan
 
10.05.18
09:08
Неверное тело запроса, структура некорректна => ИС сообщает о незаполненных полях.
2 triviumfan
 
10.05.18
09:08
Строка запроса в студию!
3 bUbA
 
10.05.18
09:12
(1) Такую структуру файла я взял путем отправки GET запроса
/issues/НомерЗадачи.json, и на основании полученного файла создал свой.

(2) Строка запроса - это содержимое первого файла
4 ximik33rus
 
10.05.18
09:14
"project": {
            "id": 94,
            "name": "Имя проекта"
        },
        "tracker": {
            "id": 14,
            "name": "Поддержка"
        },
        "status": {
            "id": 1,
            "name": "Новая"
        },
        "priority": {
            "id": 5,
            "name": "Высокий"
        },
        "author": {
            "id": 194,
            "name": "Автор задачи"
        },
        "fixed_version": {
            "id": 202,
            "name": "Поддержка"


Может, для некоторых элементов типа status, tracker следует использовать не кириллицу а латинские ключи? или цифровые идентификаторы. На .NET к примеру подобные элементы определены типом данных "Перечисление" и там поиск и заполнение нужным значением производится именно идентификатором а не заголовком.
5 bUbA
 
10.05.18
09:28
(4) Пробовал менять на латиницу, использовать идентификатор вместо имени, пробовал вот так

{
    "issue": {
        "id": 9789,
        "project": 94,
        "tracker": 14,
        "status": 1,
        "priority": {
            "id": 5,
            "name": "Высокий"
        },
        "author": {
            "id": 194,
            "name": "Автор"
        },
        "fixed_version": {
            "id": 202,
            "name": "Поддержка"
        },
        "subject": "1",

и вот так

{
    "issue": {
        "id": 9789,
        "project": "System",
        "tracker": "Podderzka",
        "status": "Novaya",
        "priority": {
            "id": 5,
            "name": "Высокий"
        },
        "author": {
            "id": 194,
            "name": "Анастасия Кузеванова"
        },
        "fixed_version": {
            "id": 202,
            "name": "Поддержка Дилеров"
        },
        "subject": 1,

Но ответ везде один и тот же
6 ximik33rus
 
10.05.18
09:30
а совсем "name": исключить нельзя?
7 Новиков
 
10.05.18
09:30
8 Apokalipsec
 
10.05.18
09:31
9 triviumfan
 
10.05.18
09:32
А ты вообще пробовал какие данные отправлять? Или сразу же напоролся на issues?
У меня тут недавно тоже был недавно пример... так оказалось, что в в тело запроса нужно было передавать "{ body: <твой json> }", хотя в документации этого не было)
10 triviumfan
 
10.05.18
09:34
(9) yii фреймворк)
11 zippygrill
 
10.05.18
09:35
какой он ужасный этот ваш Редмайн
12 g00d
 
10.05.18
09:37
(11) лучший из того что есть бесплатно
13 bUbA
 
10.05.18
09:39
(7) В обработке используются только методы GET, мне же нужен POST
14 bUbA
 
10.05.18
09:39
(8) subject есть, сейчас еще попробую формат поменять...
15 bUbA
 
10.05.18
09:40
(9) Так мне только issue и надо
16 triviumfan
 
10.05.18
09:45
17 triviumfan
 
10.05.18
09:46
Странный у тебя Content-Type
18 bUbA
 
10.05.18
09:56
Спасибо, ребята!!!

В итоге помогло переделывание текста запроса под формат из (8) и замена текста заголовка на "application/json"!

Буду дальше допиливать)
19 zippygrill
 
10.05.18
13:27
(12) Как насчет Битрикса24?
20 g00d
 
10.05.18
14:16
(19) прошлой осенью мели глупость перейти с редмайна на битрикс24. Так то красово конечно, но с отчетами по учету времени там беда, интерфейс тормозной.
В общем редмайн был быстрее, точнее и удобнее. Очень гибко кастомизируется.
21 g00d
 
10.05.18
14:18
(19) прошлой осенью имели глупость перейти с редмайна на битрикс24. Так то красиво конечно, но с отчетами по учету времени там беда + интерфейс тормозной.
В общем редмайн был быстрее, точнее и удобнее. Очень гибко кастомизируется.