Столкнулся с такой задачей: нужно, чтобы поле "Затраченное время" во время создания заметки к заявке было не просто полем, в которое можно вписать любое значение, а полем, значение к которому нужно выбирать из списка (как, например, поле "текстовый шаблон").
Как я понял, сделать это в 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 включен, если что.