Шаблоны телефонной заявки в OTRS 6 CE

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

Модератор: ykolesnikov

Ответить
lemur5555
OTRS Новобранец
Сообщения: 18
Зарегистрирован: 28 май 2015, 10:49
Поблагодарили: 1 раз

Шаблоны телефонной заявки в OTRS 6 CE

Сообщение lemur5555 » 02 дек 2022, 08:42

Добрый день сообществу!
Долгое время эксплуатируем OTRS 4, недавно мигрировали на OTRS 6 CE по причине невозможности прикрутить SSO аутентификацию из-за старого Debian, на который была установлена OTRS 4. SSO теперь работает, аллилуйя!

К теме. В прежней "четверке" шаблоны телефонной заявки были созданы по мануалам из данного форума, сориентирую тех, кто будет искать решение:
1. Создан файл перевода /opt/otrs/Kernel/Language/ru_Custom.pm
2. Отредактирован файл /opt/otrs/Kernel/Output/HTML/Standard/AgentTicketPhone.tt, определив выпадающее меню с наименованиями шаблонов, а также определил действия для этого меню и action-скрипт (JS). Использовал инспекцию страницы в браузере, чтобы определить значения полей.

Пытаюсь повторить все это на OTRS 6 CE, меню появилось, поля Subject, Body и Dest подставляются без проблем, но ServiceID и SLAID не заполняются, причем скорее всего из-за того, что они не активны до тех пор, пока не выберешь пользователя, а SLA не активно, пока не выберешь Service. Такого в 4 версии не было, и как решить - не знаю. Не могу найти параметр в самой OTRS, который регулирует эту зависимость активности полей. Может кто знает, как сделать так, чтобы в телефонной заявке сразу были доступны для редактирования все поля?

Стрелками отмечены неактивные поля в OTRS 6, пока последовательно не заполнить Пользователя и Сервис:
OTRS 4
Изображение
OTRS 6 CE
Изображение

lemur5555
OTRS Новобранец
Сообщения: 18
Зарегистрирован: 28 май 2015, 10:49
Поблагодарили: 1 раз

Re: Шаблоны телефонной заявки в OTRS 6 CE

Сообщение lemur5555 » 02 дек 2022, 13:50

Ну вот, сам себе отвечаю.

Как и предполагал, пока пользователь не определен, сервис ему подставить невозможно, чтобы эту зависимость исключить идем:

Настройка системы-Core-Ticket-Ticket::Service::Default::UnknownCustomer

и включаем его. Как гласит пояснение: "Разрешает установить Сервис по умолчанию для несуществующих клиентов."

После этого в конфигурационном файле /opt/otrs/Kernel/Output/HTML/Standard/AgentTicketPhone.tt можно указывать значения для ServiceID и SLAID тем, кому необходима категоризация заявки сразу при создании.

Приведу блоки из AgentTicketPhone.tt, сразу после этой строки:

# example template for customizations, see hidden form at the end of the file

можно описать либо выпадающее меню с шаблонами (что удобнее, если их много), либо кнопки (не использую):

# ------------------------------------ Здесь определяем либо кнопки, ----------------------------------------------------------------------------------------------------
# <label>[% Translate("Templates") | html %]:</label>
# <div class="Field">
# <button type="button" onclick="$('#Template1').submit()" value="[% Translate("Example Template") | html %]">[% Translate("Example Template") | html %]</button>
# </div>
# <div class="Clear"></div>
# ---------------------------------------------- либо выпадающее меню для шаблонов заявок --------------------------------------------------------------------------------
<label>[% Translate("Templates") | html %]:</label>
<div class="Field">
<form>
<select id="setemplates" size="1">
<option value="nothing" selected="selected">- Здесь можно выбрать шаблон типовой заявки - </option>
<option value="Cartridge">[% Translate("Cartridge") | html %]</option>
<option value="Share">[% Translate("Share") | html %]</option>
<option value="Install">[% Translate("Install") | html %]</option>
<option value="Unblock">[% Translate("Unblock") | html %]</option>
<option value="Inet">[% Translate("Inet") | html %]</option>
<option value="Mail">[% Translate("Mail") | html %]</option>
<option value="1C-1">[% Translate("1C-1") | html %]</option>
<option value="1C-2">[% Translate("1C-2") | html %]</option>
<option value="1C-3">[% Translate("1C-3") | html %]</option>
<option value="1C-4">[% Translate("1C-4") | html %]</option>
<option value="1C-5">[% Translate("1C-5") | html %]</option>
<option value="1C-6">[% Translate("1C-6") | html %]</option>
<option value="1C-7">[% Translate("1C-7") | html %]</option>
<option value="1C-8">[% Translate("1C-8") | html %]</option>
<option value="1C-9">[% Translate("1C-9") | html %]</option>
</select>
</form>
</div>
<div class="Clear"></div>

#--------------------------------------- Конец блока определения кнопок ---------------------------------------------------------------------------------------------------
[% RenderBlockStart("TicketType") %]

И второй блок с действиями для созданного меню, важно вставить в нужном месте:

# example template form for customizations
#<form action="[% Env("CGIHandle") %]" method="post" enctype="multipart/form-data" id="Template1">
# <input type="hidden" name="Action" value="[% Env("Action") %]"/>
# <input type="hidden" name="Subaction" value="StoreNew"/>
# <input type="hidden" name="FormID" value="[% Data.FormID | html %]"/>
# <input type="hidden" name="ExpandCustomerName" value="1"/>
# <input type="hidden" name="Subject" value="Example Subject"/>
# <input type="hidden" name="Body" value="Name:
#Product:
#Comment:"/>
#</form>

#-----------------Тут описаны действия присвояения значений полям при выборе шаблона из списка-----------------------------

#--------------------Cartridge--------------------------------
<form action="[% Env("CGIHandle") %]" method="post" enctype="multipart/form-data" id="Cartridge">
<input type="hidden" name="Action" value="[% Env("Action") %]"/>
<input type="hidden" name="Subaction" value="StoreNew"/>
<input type="hidden" name="FormID" value="[% Data.FormID | html %]"/>
<input type="hidden" name="ExpandCustomerName" value="1"/>
<input type="hidden" name="Subject" value="Установка расходного материала по заявке"/>
<input type="hidden" name="Body" value="Прошу согласовать выдачу расходных материалов согласно заявке:"/>
<input type="hidden" name="Dest" value="Первичная техническая поддержка"/>
<input type="hidden" name="ServiceID" value="16"/>
<input type="hidden" name="SLAID" value="4"/>
<input type="hidden" name="TimeUnits" value="3"/>
</form>

привел только первый шаблон, остальные по аналогии, и главное, в конце определения действий - action скрипт на JS, чтобы все это забегало:

#------------------- скрипт подстановки значений, без него шаблоны не работают --------------------------------------------
<script type="text/javascript">
var selectmenu=document.getElementById("setemplates")
selectmenu.onchange=function(){ //run some code when "onchange" event fires
var chosenoption=this.options[this.selectedIndex] //this refers to "selectmenu"
if (chosenoption.value!="nothing"){
document.getElementById(chosenoption.value).submit();
}
}
</script>

Надеюсь, внятно объяснил, как создать файл кастомного перевода написано здесь:

viewtopic.php?f=4&t=1395

Ответить