Как изменить вводимое значение на выбор?

Запросы на решение проблем

Модератор: ykolesnikov

Ответить
e.alekseenko
OTRS Новобранец
Сообщения: 2
Зарегистрирован: 11 апр 2019, 14:40
Благодарил (а): 1 раз

Как изменить вводимое значение на выбор?

Сообщение e.alekseenko » 18 июн 2019, 17:53

Доброго времени суток.

Столкнулся с такой задачей: нужно, чтобы поле "Затраченное время" во время создания заметки к заявке было не просто полем, в которое можно вписать любое значение, а полем, значение к которому нужно выбирать из списка (как, например, поле "текстовый шаблон").

Как я понял, сделать это в GUI не получится, поэтому пошел пробовать изменить немного файл AgentTicketActionCommon.pm, расположенный в /opt/otrs/Kernel/Modules

Воспользовавшись нагугленной инфой отсюда ( https://doc.otrs.com/doc/api/otrs/6.0/P ... ut.pm.html ), а также примером в этом же файле решил попробовать изменить фрагмент с 2724 строки по 2741.

Было так:

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

if ( $ConfigObject->Get('Ticket::Frontend::AccountTime') ) {
            if ( $ConfigObject->Get('Ticket::Frontend::NeedAccountedTime') ) {
                $LayoutObject->Block(
                    Name => 'TimeUnitsLabelMandatory',
                    Data => \%Param,
                );
            }
            else {
                $LayoutObject->Block(
                    Name => 'TimeUnitsLabel',
                    Data => \%Param,
                );
            }
            $LayoutObject->Block(
                Name => 'TimeUnits',
                Data => \%Param,
            );
        }
Стало так:

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

my $ArrayRef = [
'5',
'15',
'30',
'45',
'60',
'90',
'120',
'150',
'180',
'210',
'240',
'270',
'300',
'330',
'360',
'390',
'420',
'450',
'480',
];

if ( $ConfigObject->Get('Ticket::Frontend::AccountTime') ) {
            if ( $ConfigObject->Get('Ticket::Frontend::NeedAccountedTime') ) {
                $LayoutObject->BuildSelection(
                    Name => 'TimeUnitsLabelMandatory',
                    Data => $ArrayRef,
                    Class => 'Modernize',
                );
            }
            else {
                $LayoutObject->BuildSelection(
                    Name => 'TimeUnitsLabel',
                    Data => $ArrayRef,
                    Class => 'Modernize',
                );
            }
            $LayoutObject->BuildSelection(
                Name => 'TimeUnits',
                Data => $ArrayRef,
                Class => 'Modernize',
            );
        }
В итоге проблема состоит в том, что поле "Затраченное время" почему-то просто не выводится во время создания заметки (да и во время других действий тоже).

В итоге у меня вопрос: "Что я делаю не так?". Я где-то совершил небольшую ошибку и не могу её найти или вообще неверно понял концепцию BuildSelection'а?

P.S. В настройках NeedAccauntedTime включен, если что.
OTRS 6, Ubuntu 18

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

Re: Как изменить вводимое значение на выбор?

Сообщение alexus » 18 июн 2019, 19:14

А к чему вообще такие сложности? У нас есть плагин, который делает всё более наглядно
Более 59 минут вбить нельзя, лимит по часам тоже в конфиге задаётся.
afa0880598.png
afa0880598.png (169.11 КБ) 1910 просмотров
С уважением,
Алексей Юсов

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? Спросите меня как!

Ответить