Приветствую комрады.
В общем задача такая: Необходимо высылать уведомления юзерам которые не зарегистрированы как клиенты в ОТРС. Каждая заявка может содержать разных получателей. Каждый клиент будет содержать или не содержать дополнительный не зарегистрированный Email
Что сделано:
Создана таблица для кастомера куда вносится дополнительный email. (Работает)
Дописана информация в Config.pm (Работает)
Настроен маппинг этого атрибута в динамическое поле. (Работает)
В уведомлениях есть дополнительный адрес получателя. Который по описанию понимает динамические поля
"You can use OTRS-tags like <OTRS_TICKET_DynamicField_...> to insert values from the current ticket."
Если я вставляю туда просто почту все отрабатывает, и уведомление уходит.
Но если там тэг то ничего не проиходит. Хотя в freetext эти поля видны со значениями.
В логах тишина.
Куда копать комрады???
Динаамическое поле в качестве получателя уведомления РЕШЕНО
Модератор: ykolesnikov
-
- OTRS Новобранец
- Сообщения: 110
- Зарегистрирован: 16 ноя 2017, 12:48
- Благодарил (а): 2 раза
- Поблагодарили: 2 раза
Re: Динаамическое поле в качестве получателя уведомления РЕШЕНО
Так как юзаю аддон NotitficationSenderbyQueue в Email.pm отсутствовал кусок кода отвечающий за вытягивание данных с дин полей
Код: Выделить всё
sub _ReplaceTicketAttributes {
my ( $Self, %Param ) = @_;
return if !$Param{Field};
# get needed objects
my $DynamicFieldObject = $Kernel::OM->Get('Kernel::System::DynamicField');
my $DynamicFieldBackendObject = $Kernel::OM->Get('Kernel::System::DynamicField::Backend');
# replace ticket attributes such as <OTRS_Ticket_DynamicField_Name1> or
# <OTRS_TICKET_DynamicField_Name1>
# <OTRS_Ticket_*> is deprecated and should be removed in further versions of OTRS
my $Count = 0;
REPLACEMENT:
while (
$Param{Field}
&& $Param{Field} =~ m{<OTRS_TICKET_([A-Za-z0-9_]+)>}msxi
&& $Count++ < 1000
)
{
my $TicketAttribute = $1;
if ( $TicketAttribute =~ m{DynamicField_(\S+?)_Value} ) {
my $DynamicFieldName = $1;
my $DynamicFieldConfig = $DynamicFieldObject->DynamicFieldGet(
Name => $DynamicFieldName,
);
next REPLACEMENT if !$DynamicFieldConfig;
# get the display value for each dynamic field
my $DisplayValue = $DynamicFieldBackendObject->ValueLookup(
DynamicFieldConfig => $DynamicFieldConfig,
Key => $Param{Ticket}->{"DynamicField_$DynamicFieldName"},
);
my $DisplayValueStrg = $DynamicFieldBackendObject->ReadableValueRender(
DynamicFieldConfig => $DynamicFieldConfig,
Value => $DisplayValue,
);
$Param{Field} =~ s{<OTRS_TICKET_$TicketAttribute>}{$DisplayValueStrg->{Value} // ''}ige;
next REPLACEMENT;
}
# if ticket value is scalar substitute all instances (as strings)
# this will allow replacements for "<OTRS_TICKET_Title> <OTRS_TICKET_Queue"
if ( !ref $Param{Ticket}->{$TicketAttribute} ) {
$Param{Field} =~ s{<OTRS_TICKET_$TicketAttribute>}{$Param{Ticket}->{$TicketAttribute} // ''}ige;
}
else {
# if the value is an array (e.g. a multiselect dynamic field) set the value directly
# this unfortunately will not let a combination of values to be replaced
$Param{Field} = $Param{Ticket}->{$TicketAttribute};
}
}
return $Param{Field};
}
OTRS 5.0.26
CentOS 7
Skype dimdim5858
CentOS 7
Skype dimdim5858