TicketArticleCreate in ProzessManagment

Hilfe zu OTRS Problemen aller Art
Post Reply
MakuBa
Znuny newbie
Posts: 9
Joined: 21 Dec 2013, 10:06
Znuny Version: 3.3.10
Real Name: Markus Sachs
Company: all for IT Systemhaus GmbH

TicketArticleCreate in ProzessManagment

Post by MakuBa »

Hallo zusammen,

ich habe versucht in einem Workflow die Übergangsaktion TicketCreateArticle zu benutzen.
Hat soweit auch geklappt er erstellt eine Notiz mit der angegebenen Überschrift.
Jetzt würde ich aber gerne im Body der Nachricht Werte aus DynamischenFeldern einfügen ist das Möglich und wenn ja wie?
Die Tags aus den Antworten (<OTRS_xx_xx) funktionieren leider nicht.
---------------------------------------------------------------------------------------------------
Gruß Markus
RStraub
Znuny guru
Posts: 2210
Joined: 13 Mar 2014, 09:16
Znuny Version: 6.0.14
Real Name: Rolf Straub

Re: TicketArticleCreate in ProzessManagment

Post by RStraub »

Daran bin ich auch schon gescheitert :/
Das Problem ist wohl dass man nicht den "Inhalt" auslesen kann, evtl. klappts mit den Klammern:
<DynamicField_[FieldName]>
Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
ThorstenEckel
Znuny newbie
Posts: 24
Joined: 18 Dec 2013, 16:57
Znuny Version: *.*.*
Company: Znuny GmbH
Location: Berlin
Contact:

Re: TicketArticleCreate in ProzessManagment

Post by ThorstenEckel »

Hallo zusammen,

das beschriebene Verhalten gibt der OTRS Standard so leider nicht her. Es gibt mehrere Möglichkeiten:

1.) Ihr entwickelt eine saubere Lösung für den Standard und contributed ihn via Pull-Request in den Standard
2.) Ihr tragt es auf IdeaScale ein: https://otrsteam.ideascale.com/
3.) Ihr wendet euch an einen OTRS Dienstleister und lasst es euch entwickeln (und contributed es?!)
4.) Ihr kopiert meinen folgenden quick-hack, erstellt daraus eine neue Datei namens 'TicketArticleCreateReplaceOTRSTags.pm' im Verzeichnis 'Kernel/System/ProcessManagement/TransitionAction/' und verwendet in eurer Prozess-Config als Modul 'Kernel::System::ProcessManagement::TransitionAction::TicketArticleCreateReplaceOTRSTags' anstelle von 'Kernel::System::ProcessManagement::TransitionAction::TicketArticleCreate'.

Code: Select all

# --
# Kernel/System/ProcessManagement/TransitionAction/TicketArticleCreateReplaceOTRSTags.pm - A module to create an article and replace OTRS tags
# Copyright (C) 2001-2013 xxx, http://otrs.com/
# ThorstenEckel for OtterHub, http://forums.otterhub.org/viewtopic.php?f=35&t=24438
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (AGPL). If you
# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
# --

package Kernel::System::ProcessManagement::TransitionAction::TicketArticleCreateReplaceOTRSTags;

use strict;
use warnings;

use Kernel::System::User;
use Kernel::System::CustomerUser;
use Kernel::System::Queue;
use Kernel::System::TemplateGenerator;

use Kernel::System::VariableCheck qw(:all);

use utf8;

=head1 NAME

Kernel::System::ProcessManagement::TransitionAction::TicketArticleCreateReplaceOTRSTags - A module to create an article and replace OTRS tags

=head1 SYNOPSIS

All TicketArticleCreateReplaceOTRSTags functions.

=head1 PUBLIC INTERFACE

=over 4

=cut

=item new()

create an object

    use Kernel::Config;
    use Kernel::System::Encode;
    use Kernel::System::Log;
    use Kernel::System::Time;
    use Kernel::System::Main;
    use Kernel::System::DB;
    use Kernel::System::Ticket;
    use Kernel::System::ProcessManagement::TransitionAction::TicketArticleCreateReplaceOTRSTags;

    my $ConfigObject = Kernel::Config->new();
    my $EncodeObject = Kernel::System::Encode->new(
        ConfigObject => $ConfigObject,
    );
    my $LogObject = Kernel::System::Log->new(
        ConfigObject => $ConfigObject,
        EncodeObject => $EncodeObject,
    );
    my $TimeObject = Kernel::System::Time->new(
        ConfigObject => $ConfigObject,
        LogObject    => $LogObject,
    );
    my $MainObject = Kernel::System::Main->new(
        ConfigObject => $ConfigObject,
        EncodeObject => $EncodeObject,
        LogObject    => $LogObject,
    );
    my $DBObject = Kernel::System::DB->new(
        ConfigObject => $ConfigObject,
        EncodeObject => $EncodeObject,
        LogObject    => $LogObject,
        MainObject   => $MainObject,
    );
    my $TicketObject = Kernel::System::Ticket->new(
        ConfigObject       => $ConfigObject,
        LogObject          => $LogObject,
        DBObject           => $DBObject,
        MainObject         => $MainObject,
        TimeObject         => $TimeObject,
        EncodeObject       => $EncodeObject,
    );
    my $TicketArticleCreateReplaceOTRSTagsActionObject = Kernel::System::ProcessManagement::TransitionAction::TicketArticleCreateReplaceOTRSTags->new(
        ConfigObject       => $ConfigObject,
        LogObject          => $LogObject,
        EncodeObject       => $EncodeObject,
        DBObject           => $DBObject,
        MainObject         => $MainObject,
        TimeObject         => $TimeObject,
        TicketObject       => $TicketObject,
    );

=cut

sub new {
    my ( $Type, %Param ) = @_;

    # allocate new hash for object
    my $Self = {};
    bless( $Self, $Type );

    # get needed objects
    for my $Needed (
        qw(ConfigObject LogObject EncodeObject DBObject MainObject TimeObject TicketObject)
        )
    {
        die "Got no $Needed!" if !$Param{$Needed};

        $Self->{$Needed} = $Param{$Needed};
    }

    $Self->{UserObject}              = Kernel::System::User->new( %{ $Self } );
    $Self->{CustomerUserObject}      = Kernel::System::CustomerUser->new( %{ $Self } );
    $Self->{QueueObject}             = Kernel::System::Queue->new( %{ $Self } );
    $Self->{TemplateGeneratorObject} = Kernel::System::TemplateGenerator->new( %{ $Self } );

    return $Self;
}

=item Run()

    Run Data

    my $TicketArticleCreateReplaceOTRSTagsResult = $TicketArticleCreateReplaceOTRSTagsActionObject->Run(
        UserID                   => 123,
        Ticket                   => \%Ticket,   # required
        ProcessEntityID          => 'P123',
        ActivityEntityID         => 'A123',
        TransitionEntityID       => 'T123',
        TransitionActionEntityID => 'TA123',
        Config                   => {
            # required:
            ArticleType      => 'note-internal',                        # note-external|phone|fax|sms|...
                                                                        #   excluding any email type
            SenderType       => 'agent',                                # agent|system|customer
            ContentType      => 'text/plain; charset=ISO-8859-15',      # or optional Charset & MimeType
            Subject          => 'some short description',               # required
            Body             => 'the message text',                     # required
            HistoryType      => 'OwnerUpdate',                          # EmailCustomer|Move|AddNote|PriorityUpdate|WebRequestCustomer|...
            HistoryComment   => 'Some free text!',

            # optional:
            From             => 'Some Agent <email@example.com>',       # not required but useful
            To               => 'Some Customer A <customer-a@example.com>', # not required but useful
            Cc               => 'Some Customer B <customer-b@example.com>', # not required but useful
            ReplyTo          => 'Some Customer B <customer-b@example.com>', # not required
            MessageID        => '<asdasdasd.123@example.com>',          # not required but useful
            InReplyTo        => '<asdasdasd.12@example.com>',           # not required but useful
            References       => '<asdasdasd.1@example.com> <asdasdasd.12@example.com>', # not required but useful
            NoAgentNotify    => 0,                                      # if you don't want to send agent notifications
            AutoResponseType => 'auto reply'                            # auto reject|auto follow up|auto reply/new ticket|auto remove

            ForceNotificationToUserID   => [ 1, 43, 56 ],               # if you want to force somebody
            ExcludeNotificationToUserID => [ 43,56 ],                   # if you want full exclude somebody from notfications,
                                                                        # will also be removed in To: line of article,
                                                                        # higher prio as ForceNotificationToUserID
            ExcludeMuteNotificationToUserID => [ 43,56 ],               # the same as ExcludeNotificationToUserID but only the
                                                                        # sending gets muted, agent will still shown in To:
                                                                        # line of article

            UserID => 123,                                              # optional, to override the UserID from the logged user
        }
    );
    Ticket contains the result of TicketGet including DynamicFields
    Config is the Config Hash stored in a Process::TransitionAction's  Config key
    Returns:

    $TicketArticleCreateReplaceOTRSTagsResult = 1; # 0

    );

=cut

sub Run {
    my ( $Self, %Param ) = @_;

    for my $Needed (
        qw(UserID Ticket ProcessEntityID ActivityEntityID TransitionEntityID
        TransitionActionEntityID Config
        )
        )
    {
        if ( !defined $Param{$Needed} ) {
            $Self->{LogObject}->Log(
                Priority => 'error',
                Message  => "Need $Needed!",
            );
            return;
        }
    }

    # define a common message to output in case of any error
    my $CommonMessage = "Process: $Param{ProcessEntityID} Activity: $Param{ActivityEntityID}"
        . " Transition: $Param{TransitionEntityID}"
        . " TransitionAction: $Param{TransitionActionEntityID} - ";

    # Check if we have Ticket to deal with
    if ( !IsHashRefWithData( $Param{Ticket} ) ) {
        $Self->{LogObject}->Log(
            Priority => 'error',
            Message  => $CommonMessage . "Ticket has no values!",
        );
        return;
    }

    # Check if we have a ConfigHash
    if ( !IsHashRefWithData( $Param{Config} ) ) {
        $Self->{LogObject}->Log(
            Priority => 'error',
            Message  => $CommonMessage . "Config has no values!",
        );
        return;
    }

    # override UserID if specified as a parameter in the TA config
    if ( IsNumber( $Param{Config}->{UserID} ) ) {
        $Param{UserID} = $Param{Config}->{UserID};
        delete $Param{Config}->{UserID};
    }

    # Check ArticleType
    if ( $Param{Config}->{ArticleType} =~ m{\A email }msxi ) {
        $Self->{LogObject}->Log(
            Priority => 'error',
            Message  => $CommonMessage
                . "ArticleType $Param{Config}->{ArticleType} is not supported",
        );
        return;
    }

    # get user data
    my %User = $Self->{UserObject}->GetUserData(
        UserID => $Param{UserID},
        Valid  => 1,
    );

    # get user language
    my $Language = $User{UserLanguage} || $Self->{ConfigObject}->Get('DefaultLanguage') || 'en';

    # replace placeholders in Subject and Body
    for my $Attribute (qw(Subject Body)) {

        $Param{Config}->{ $Attribute } = $Self->{TemplateGeneratorObject}->_Replace(
            RichText => 0,
            Text     => $Param{Config}->{ $Attribute },
            TicketID => $Param{Ticket}->{TicketID},
            UserID   => $Param{UserID},
            Language => $Language,
            Data     => {},
        );
    }

    my $Success = $Self->{TicketObject}->ArticleCreate(
        %{ $Param{Config} },
        TicketID => $Param{Ticket}->{TicketID},
        UserID   => $Param{UserID},
    );

    if ( !$Success ) {
        $Self->{LogObject}->Log(
            Priority => 'error',
            Message  => $CommonMessage
                . "Couldn't create article for Ticket: "
                . $Param{Ticket}->{TicketID} . '!',
        );
        return;
    }
    return 1;
}

1;

=back

=head1 TERMS AND CONDITIONS

This software is part of the OTRS project (L<http://otrs.org/>).

This software comes with ABSOLUTELY NO WARRANTY. For details, see
the enclosed file COPYING for license information (AGPL). If you
did not receive this file, see L<http://www.gnu.org/licenses/agpl.txt>.

=cut
DISCLAIMER:
Ich gebe keine Gewährleistung auf Funktionalität. Es sind keine Tests enthalten. Einsatz auf eigene Gefahr.
(lokal getestet in einer OTRS 3.3.3 Umgebung)
Znuny4OTRS Extensions auf Github: https://github.com/znuny/
Znuny4OTRS - intl. Enterprise Services: https://znuny.com
NancyL
Znuny expert
Posts: 247
Joined: 05 Aug 2014, 08:13
Znuny Version: 6.0.30
Real Name: Nancy

Re: TicketArticleCreate in ProzessManagment

Post by NancyL »

ich versuche mich gerade daran. welchen wert muss ich setzen wenn ich will das der inhalt meiner Dynamischen Felder als Artikel übertragen wird. Hätte auch kein Problem damit wenn die history für das dynamische Feld als Artikel drin stehen würde.
Mir ist aber nicht so ganz klar wie?
OTRS 6.0.30 /OS: Ubuntu/ Mysql
Post Reply