Динаамическое поле в качестве получателя уведомления РЕШЕНО

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

Модератор: ykolesnikov

Ответить
Glifed
OTRS Новобранец
Сообщения: 110
Зарегистрирован: 16 ноя 2017, 12:48
Благодарил (а): 2 раза
Поблагодарили: 2 раза

Динаамическое поле в качестве получателя уведомления РЕШЕНО

Сообщение Glifed » 05 дек 2018, 16:03

Приветствую комрады.
В общем задача такая: Необходимо высылать уведомления юзерам которые не зарегистрированы как клиенты в ОТРС. Каждая заявка может содержать разных получателей. Каждый клиент будет содержать или не содержать дополнительный не зарегистрированный Email
Что сделано:
Создана таблица для кастомера куда вносится дополнительный email. (Работает)
Дописана информация в Config.pm (Работает)
Настроен маппинг этого атрибута в динамическое поле. (Работает)
В уведомлениях есть дополнительный адрес получателя. Который по описанию понимает динамические поля
"You can use OTRS-tags like <OTRS_TICKET_DynamicField_...> to insert values from the current ticket."
Если я вставляю туда просто почту все отрабатывает, и уведомление уходит.
Но если там тэг то ничего не проиходит. Хотя в freetext эти поля видны со значениями.
В логах тишина.
Куда копать комрады???
OTRS 5.0.26
CentOS 7
Skype dimdim5858

Glifed
OTRS Новобранец
Сообщения: 110
Зарегистрирован: 16 ноя 2017, 12:48
Благодарил (а): 2 раза
Поблагодарили: 2 раза

Re: Динаамическое поле в качестве получателя уведомления РЕШЕНО

Сообщение Glifed » 05 дек 2018, 18:43

Так как юзаю аддон 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

Ответить