Страница 1 из 1

Автозаполнение поля "копия"

Добавлено: 04 сен 2019, 10:16
alidml
Добрый день.
OTRS 6.0.10
Хочу что бы при создании ответа на заявку (AgentTicketCompose) автоматически заполнялось поле "копия" по аналоги с полем "получатель"
Для этого создал динамическое поле ccemail откуда будет браться нужный email.
Проанализировал существующий механизм заметил что значения поля получатель передаётся через скрипт Core.Config.AddConfig("EmailAddressesTo":[{"CustomerKey":"%ключ получателя%,"CustomerTicketText":"%Фио получателя <%email получателя%>"}]

В AgentTicketCompose.pm есть аналогичный механизм для копии EmailAddressesСс

Вопрос, где и каким образом я могу задать значение переменной EmailAddressesCc?

Пока просто вставил в шаблоне AgentTicketCompose.tt

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

 <Input id="CcCustomer" ...value="[% Data.DynamicFields_ccemail | html %]"...>
но поле необходимо "прожимать энтером", что бы запись email подтянулась.

Хочется автоматики.

Re: Автозаполнение поля "копия"

Добавлено: 05 сен 2019, 11:27
alex.t
Добрый день!

Находим файл AgentTicketCompose.pm, в коде ищем где происходит отправка '# send email' и перед отправкой добавляем следующий код:

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

        # Получаем дин поле:
        my $DF_ccmail = $Kernel::OM->Get('Kernel::System::DynamicField')->DynamicFieldGet( Name => 'ccemail' );  

        # Проверка на существование дин поля 'ccemail':
        unless ( $DF_ccmail ) 
        {
            # Пишем в лог и консоль что дин поля нет:
            $Kernel::OM->Get('Kernel::System::Log')->Log(
                Priority => 'error',
                Message  => "Dynamic field 'ccemail' not defined!",
            );
        }
        else 
        {   
            # Получаем текст из поля 'ccemail':
            my $DFV_email = $Kernel::OM->Get('Kernel::System::DynamicField::Backend')->ValueGet(
                DynamicFieldConfig => $DF_ccmail,
                ObjectID           => $Self->{TicketID}
            );

            # Если в копии кто то есть, то добавляем email из 'ccemail':
            if ( $GetParam{Cc} ) { $GetParam{Cc} .= ', ' . $DFV_email }
            # Иначе записываем email из 'ccemail':
            else { $GetParam{Cc} = $DFV_email }            
        }
        # ---

        # send email
        my $ArticleID = $TicketObject->ArticleSend(
            ArticleTypeID  => $ArticleTypeID,
            SenderType     => 'agent',
            TicketID       => $Self->{TicketID},
            HistoryType    => 'SendAnswer',
            HistoryComment => "\%\%$Recipients",
            From           => $GetParam{From},
            To             => $GetParam{To},
            Cc             => $GetParam{Cc},
            Bcc            => $GetParam{Bcc},
            Subject        => $GetParam{Subject},
            UserID         => $Self->{UserID},
            Body           => $GetParam{Body},
            InReplyTo      => $GetParam{InReplyTo},
            References     => $GetParam{References},
            Charset        => $LayoutObject->{UserCharset},
            MimeType       => $MimeType,
            Attachment     => \@AttachmentData,
            %ArticleParam,
        );
При отправке в экшене AgentTicketCompose email не отобразится, но письмо отправится, в копии будет указан email из ccemail.
На 5 версии работает.

Re: Автозаполнение поля "копия"

Добавлено: 23 сен 2019, 23:28
alexus
Было бы здорово запостить для памяти в How-to!