Проблема при создании Article для созданного тикета. (PHP-SOAP-OTRS 6)

Обсуждение вопросов и решений

Модератор: ykolesnikov

Ответить
denisdanilenko
OTRS Новобранец
Сообщения: 2
Зарегистрирован: 23 окт 2018, 12:40
Благодарил (а): 1 раз

Проблема при создании Article для созданного тикета. (PHP-SOAP-OTRS 6)

Сообщение denisdanilenko » 23 окт 2018, 12:48

Здравствуйте.

Возникла проблема с созданием Article в PHP через SOAP.
У меня на Ubuntu установлен OTRS 6.0.* версии.
Использую код, который работал в 5 версии. Но как мне известно, структуру Article изменили в 6 версии.

Создаю тикет и получаю его ID. Тут всё успешно. Пустой тикет создается.
Но вот содержимое создать не могу.

Пишет ошибку:
Can't locate object method "ArticleCreate" via package "Kernel::System::Ticket"
Проблема в
"TicketObject", "ArticleCreate"
, либо во всем блоке передаваемого массива.

Подскажите, пожалуйста. Что изменилось/как это можно поправить?
В офф.документации немного не понимаю, как сделать.

Спасибо.

Код: Выделить всё

public function addArticle(
        $ticketID,
        $createdBy,
        $userID,
        $subject,
        $body,
        $articleType = 'webrequest',
        $from = null,
        $contentType = 'text/plain; charset=ISO-8859-1'
    )
    {

        if (strlen(trim($subject)) == 0) {
            throw new \Exception('Need a subject. Subject is empty');
        }
        if (strlen(trim($body)) == 0) {
            throw new \Exception('Need a body. Body is empty');
        }
        if (strlen(trim($articleType)) == 0) {
            throw new \Exception('Article Type can not be empty.');
        }
        if (!is_int($ticketID)) {
            throw new \Exception('TicketID needs to be an integer');
        }

        $request = [
            "TicketObject", "ArticleCreate",
            "TicketID", $ticketID,
            "ArticleType", $articleType,
            "SenderType", "system",
            "HistoryType", "WebRequestCustomer",
            "HistoryComment", $createdBy,
            "Subject", $subject,
            "ContentType", $contentType,
            "Body", $body,
            "UserID", $userID,

        ];

        switch ($articleType) {
            case 'note-internal':
                $request = array_merge($request, [
                    "NoAgentNotify", 1,
                ]);
                break;
            case 'webrequest':
                $request = array_merge($request, [
                    "Loop", 0,
                    "From", $from,
                    "AutoResponseType", 'auto reply',
                    "OrigHeader", [
                        'From' => $from,
                        'To' => 'Postmaster',
                        'Subject' => $subject,
                        'Body' => $body,
                    ]
                ]);
                break;
        }

        $articleID = $this->send($request);

        return $articleID;
    }

alexus
OTRS Гуру
Сообщения: 5095
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 76 раз
Поблагодарили: 74 раза

Re: Проблема при создании Article для созданного тикета. (PHP-SOAP-OTRS 6)

Сообщение alexus » 23 окт 2018, 14:00

https://github.com/OTRS/otrs/tree/rel-6 ... le/Backend - тут есть код, по нему всё понятно должно быть
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

denisdanilenko
OTRS Новобранец
Сообщения: 2
Зарегистрирован: 23 окт 2018, 12:40
Благодарил (а): 1 раз

Re: Проблема при создании Article для созданного тикета. (PHP-SOAP-OTRS 6)

Сообщение denisdanilenko » 23 окт 2018, 14:33

alexus писал(а):
23 окт 2018, 14:00
https://github.com/OTRS/otrs/tree/rel-6 ... le/Backend - тут есть код, по нему всё понятно должно быть
Спасибо!

Сразу тогда вопрос.
Вот там в коде идет в начале

Код: Выделить всё

package Kernel::System::Ticket::Article::Backend::Base;
Но а как быть, если ОТРС на одном сервера, а скрипт выполняется на другом.
как я понимаю, такая конструкция не должна же работать?

T.O.M.
OTRS Новобранец
Сообщения: 3
Зарегистрирован: 02 сен 2020, 09:27

Re: Проблема при создании Article для созданного тикета. (PHP-SOAP-OTRS 6)

Сообщение T.O.M. » 02 сен 2020, 11:39

Добрый день.
У меня та же проблема, что и у автора.
alexus писал(а):
23 окт 2018, 14:00
https://github.com/OTRS/otrs/tree/rel-6 ... le/Backend - тут есть код, по нему всё понятно должно быть
По коду понятно, что метод "ArticleCreate" находится в "Kernel/System/Ticket/Article/Backend/Base.pm", но как на него обратиться?

Если я в запросе вместо
"TicketObject", "ArticleCreate",
указываю
"ArticleBackendObject", "ArticleCreate",
то получаю ошибку
"No such Object ArticleBackendObject!"
По логике я понимаю, что в данном случае "ArticleBackendObject" ищется в корне, а его там нет. Из-за этого и ошибка. Но я не могу понять, как мне обратиться на нужный метод именно в Article. Подскажите, пожалуйста.

Аналогичная проблема с изменением динамических полей. Я отправляю запрос:

Код: Выделить всё

$response = $client->__soapCall("Dispatch", array(
    'username', 'password',
    'DynamicFieldValueObject', 'ValueSet',
    'FieldID', 4,
    'ObjectID', $TicketID,
    'Value', 'test',
    'UserID', $UserID
));
Но получаю ответ:
"No such Object DynamicFieldValueObject!"
Здесь вообще не понимаю, т.к. "DynamicFieldValue" находится в корне https://github.com/OTRS/otrs/blob/rel-6 ... ldValue.pm

Буду очень благодарен за помощь.
Последний раз редактировалось T.O.M. 02 сен 2020, 12:20, всего редактировалось 1 раз.

alexus
OTRS Гуру
Сообщения: 5095
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 76 раз
Поблагодарили: 74 раза

Re: Проблема при создании Article для созданного тикета. (PHP-SOAP-OTRS 6)

Сообщение alexus » 02 сен 2020, 12:13

Добрый день!

А не будет ли проще использовать REST API - там простой вызов TicketUpdate. И делайте с ним что угодно - заметки создавайте, динамические поля меняйте.
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

T.O.M.
OTRS Новобранец
Сообщения: 3
Зарегистрирован: 02 сен 2020, 09:27

Re: Проблема при создании Article для созданного тикета. (PHP-SOAP-OTRS 6)

Сообщение T.O.M. » 02 сен 2020, 12:19

alexus писал(а):
02 сен 2020, 12:13
А не будет ли проще использовать REST API - там простой вызов TicketUpdate. И делайте с ним что угодно - заметки создавайте, динамические поля меняйте.
Возможно, будет. Не подскажете, где можно посмотреть документацию и какие-нибудь примеры?

alexus
OTRS Гуру
Сообщения: 5095
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 76 раз
Поблагодарили: 74 раза

Re: Проблема при создании Article для созданного тикета. (PHP-SOAP-OTRS 6)

Сообщение alexus » 02 сен 2020, 12:30

https://doc.otrs.com/doc/manual/admin/6 ... ebservices - мануал по настройке
https://doc.otrs.com/doc/api/otrs/6.0/Perl/ - все методы Kernel::GenericInterface::Operation::*
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

T.O.M.
OTRS Новобранец
Сообщения: 3
Зарегистрирован: 02 сен 2020, 09:27

Re: Проблема при создании Article для созданного тикета. (PHP-SOAP-OTRS 6)

Сообщение T.O.M. » 02 сен 2020, 12:51

Спасибо! Буду разбираться.

Ответить