TicketUpdate#

NAME#

Kernel::GenericInterface::Operation::Ticket::TicketUpdate - GenericInterface Ticket TicketUpdate Operation backend

PUBLIC INTERFACE#

new()#

usually, you want to create an instance of this by using Kernel::GenericInterface::Operation->new();

Run()#

perform TicketUpdate Operation. This will return the updated TicketID and if applicable the created ArticleID.

my $Result = $OperationObject->Run(
    Data => {
        UserLogin         => 'some agent login',                            # UserLogin or CustomerUserLogin or SessionID is
                                                                            #   required
        CustomerUserLogin => 'some customer login',
        SessionID         => 123,

        Password  => 'some password',                                       # if UserLogin or customerUserLogin is sent then
                                                                            #   Password is required

        TicketID     => 123,                                                # TicketID or TicketNumber is required
        TicketNumber => '2004040510440485',

        Ticket {                                                            # optional
            Title      => 'some ticket title',

            QueueID       => 123,                                           # Optional
            Queue         => 'some queue name',                             # Optional
            LockID        => 123,                                           # optional
            Lock          => 'some lock name',                              # optional
            TypeID        => 123,                                           # optional
            Type          => 'some type name',                              # optional
            ServiceID     => 123,                                           # optional
            Service       => 'some service name',                           # optional
            SLAID         => 123,                                           # optional
            SLA           => 'some SLA name',                               # optional
            StateID       => 123,                                           # optional
            State         => 'some state name',                             # optional
            PriorityID    => 123,                                           # optional
            Priority      => 'some priority name',                          # optional
            OwnerID       => 123,                                           # optional
            Owner         => 'some user login',                             # optional
            ResponsibleID => 123,                                           # optional
            Responsible   => 'some user login',                             # optional
            CustomerUser  => 'some customer user login',

            PendingTime {       # optional
                Year   => 2011,
                Month  => 12,
                Day    => 03,
                Hour   => 23,
                Minute => 05,
            },
            # or
            # PendingTime {
            #     Diff => 10080, # Pending time in minutes
            #},
        },
        Article => {                                                          # optional
            CommunicationChannel            => 'Email',                    # optional
            CommunicationChannelID          => 1,                          # optional
            IsVisibleForCustomer            => 1,                          # optional
            SenderTypeID                    => 123,                        # optional
            SenderType                      => 'some sender type name',    # optional
            AutoResponseType                => 'some auto response type',  # optional
            ArticleSend                     => 1,                          # optional
            From                            => 'some from string',         # optional
            To                              => 'some to address',          # optional, required if ArticleSend => 1
            Cc                              => 'some Cc address',          # optional
            Bcc                             => 'some Bcc address',         # optional
            Subject                         => 'some subject',
            Body                            => 'some body',

            ContentType                     => 'some content type',        # ContentType or MimeType and Charset is required
            MimeType                        => 'some mime type',
            Charset                         => 'some charset',

            HistoryType                     => 'some history type',        # optional
            HistoryComment                  => 'Some  history comment',    # optional
            TimeUnit                        => 123,                        # optional
            NoAgentNotify                   => 1,                          # optional
            ForceNotificationToUserID       => [1, 2, 3]                   # optional
            ExcludeNotificationToUserID     => [1, 2, 3]                   # optional
            ExcludeMuteNotificationToUserID => [1, 2, 3]                   # optional
            Attachment => [
                {
                    Content     => 'content'                                 # base64 encoded
                    ContentType => 'some content type'
                    Filename    => 'some fine name'
                },
                # ...
            ],
            # or:
            Attachment => {
                Content     => 'content'                                 # base64 encoded
                ContentType => 'some content type'
                Filename    => 'some fine name'
            },

            # Signing and encryption, only used when ArticleSend is set to 1
            Sign => {
                Type    => 'PGP',
                SubType => 'Inline|Detached',
                Key     => '81877F5E',
                Type    => 'SMIME',
                Key     => '3b630c80',
            },
            Crypt => {
                Type    => 'PGP',
                SubType => 'Inline|Detached',
                Key     => '81877F5E',
                Type    => 'SMIME',
                Key     => '3b630c80',
            },
        },

        DynamicField => [                                                  # optional
            {
                Name   => 'some name',
                Value  => $Value,                                          # value type depends on the dynamic field
            },
            # ...
        ],
        # or
        # DynamicField {
        #    Name   => 'some name',
        #    Value  => $Value,
        #},

        Attachment => [
            {
                Content     => 'content',                                # base64 encoded
                ContentType => 'some content type',
                Filename    => 'some fine name'
            },
            # ...
        ],
        #or
        #Attachment => {
        #    Content     => 'content',
        #    ContentType => 'some content type',
        #    Filename    => 'some fine name'
        #},
    },
);

$Result = {
    Success         => 1,                       # 0 or 1
    ErrorMessage    => '',                      # in case of error
    Data            => {                        # result data payload after Operation
        TicketID    => 123,                     # Ticket ID in Znuny
        ArticleID   => 43,                      # Article ID in Znuny
        Error => {                              # should not return errors
                ErrorCode    => 'TicketUpdate.ErrorCode',
                ErrorMessage => 'Error Description'
        },

        # If IncludeTicketData is enabled
        Ticket => [
            {
                TicketNumber       => '20101027000001',
                Title              => 'some title',
                TicketID           => 123,
                State              => 'some state',
                StateID            => 123,
                StateType          => 'some state type',
                Priority           => 'some priority',
                PriorityID         => 123,
                Lock               => 'lock',
                LockID             => 123,
                Queue              => 'some queue',
                QueueID            => 123,
                CustomerID         => 'customer_id_123',
                CustomerUserID     => 'customer_user_id_123',
                Owner              => 'some_owner_login',
                OwnerID            => 123,
                Type               => 'some ticket type',
                TypeID             => 123,
                SLA                => 'some sla',
                SLAID              => 123,
                Service            => 'some service',
                ServiceID          => 123,
                Responsible        => 'some_responsible_login',
                ResponsibleID      => 123,
                Age                => 3456,
                Created            => '2010-10-27 20:15:00',
                CreateBy           => 123,
                Changed            => '2010-10-27 20:15:15',
                ChangeBy           => 123,
                ArchiveFlag        => 'y',

                DynamicField => [
                    {
                        Name  => 'some name',
                        Value => 'some value',
                    },
                ],

                # (time stamps of expected escalations)
                EscalationResponseTime           (unix time stamp of response time escalation)
                EscalationUpdateTime             (unix time stamp of update time escalation)
                EscalationSolutionTime           (unix time stamp of solution time escalation)

                # (general escalation info of nearest escalation type)
                EscalationDestinationIn          (escalation in e. g. 1h 4m)
                EscalationDestinationTime        (date of escalation in unix time, e. g. 72193292)
                EscalationDestinationDate        (date of escalation, e. g. "2009-02-14 18:00:00")
                EscalationTimeWorkingTime        (seconds of working/service time till escalation, e. g. "1800")
                EscalationTime                   (seconds total till escalation of nearest escalation time type - response, update or solution time, e. g. "3600")

                # (detailed escalation info about first response, update and solution time)
                FirstResponseTimeEscalation      (if true, ticket is escalated)
                FirstResponseTimeNotification    (if true, notify - x% of escalation has reached)
                FirstResponseTimeDestinationTime (date of escalation in unix time, e. g. 72193292)
                FirstResponseTimeDestinationDate (date of escalation, e. g. "2009-02-14 18:00:00")
                FirstResponseTimeWorkingTime     (seconds of working/service time till escalation, e. g. "1800")
                FirstResponseTime                (seconds total till escalation, e. g. "3600")

                UpdateTimeEscalation             (if true, ticket is escalated)
                UpdateTimeNotification           (if true, notify - x% of escalation has reached)
                UpdateTimeDestinationTime        (date of escalation in unix time, e. g. 72193292)
                UpdateTimeDestinationDate        (date of escalation, e. g. "2009-02-14 18:00:00")
                UpdateTimeWorkingTime            (seconds of working/service time till escalation, e. g. "1800")
                UpdateTime                       (seconds total till escalation, e. g. "3600")

                SolutionTimeEscalation           (if true, ticket is escalated)
                SolutionTimeNotification         (if true, notify - x% of escalation has reached)
                SolutionTimeDestinationTime      (date of escalation in unix time, e. g. 72193292)
                SolutionTimeDestinationDate      (date of escalation, e. g. "2009-02-14 18:00:00")
                SolutionTimeWorkingTime          (seconds of working/service time till escalation, e. g. "1800")
                SolutionTime                     (seconds total till escalation, e. g. "3600")

                Article => [
                    {
                        ArticleID
                        From
                        To
                        Cc
                        Subject
                        Body
                        ReplyTo
                        MessageID
                        InReplyTo
                        References
                        SenderType
                        SenderTypeID
                        CommunicationChannelID
                        IsVisibleForCustomer
                        ContentType
                        Charset
                        MimeType
                        IncomingTime

                        DynamicField => [
                            {
                                Name  => 'some name',
                                Value => 'some value',
                            },
                        ],

                        Attachment => [
                            {
                                Content            => "xxxx",     # actual attachment contents, base64 enconded
                                ContentAlternative => "",
                                ContentID          => "",
                                ContentType        => "application/pdf",
                                Filename           => "StdAttachment-Test1.pdf",
                                Filesize           => "4.6 KBytes",
                                FilesizeRaw        => 4722,
                            },
                        ],
                    },
                ],
            },
        ],
    },
};

_CheckTicket()#

checks if the given ticket parameters are valid.

my $TicketCheck = $OperationObject->_CheckTicket(
    Ticket => $Ticket,                          # all ticket parameters
);

returns:

$TicketCheck = {
    Success => 1,                               # if everything is OK
}

$TicketCheck = {
    ErrorCode    => 'Function.Error',           # if error
    ErrorMessage => 'Error description',
}

_CheckArticle()#

checks if the given article parameter is valid.

my $ArticleCheck = $OperationObject->_CheckArticle(
    Article => $Article,                        # all article parameters
);

returns:

$ArticleCheck = {
    Success => 1,                               # if everything is OK
}

$ArticleCheck = {
    ErrorCode    => 'Function.Error',           # if error
    ErrorMessage => 'Error description',
}

MakeArrayRef#

Returns its argument unmodified if it is a listref, otherwise returns a reference to a new single-element list containing the argument.

Simple functionn, not a method!

_ValidateDynamicFields()#

Validate a list of dynamic field specs. Also removes leading and trailing spaces from DF values. Set C<$IsArticle> to 1 to validate an Article dynamic field.

$Check = $OperationObject->_ValidateDynamicFields($DynamicField);
$Check = $OperationObject->_ValidateDynamicFields($DynamicField, 1);

Returns undef on success, a hash with an error message otherwise.

_CheckDynamicField()#

Checks if the given dynamic field parameter is valid. Set C<$IsArticle> to 1 to validate an Article dynamic field.

my $DynamicFieldCheck = $OperationObject->_CheckDynamicField($DynamicField);

Returns undef on success, a hash with an error message otherwise.

_CheckAttachment()#

checks if the given attachment parameter is valid.

my $AttachmentCheck = $OperationObject->_CheckAttachment(
    Attachment => $Attachment,                  # all attachment parameters
);

returns:

$AttachmentCheck = {
    Success => 1,                               # if everything is OK
}

$AttachmentCheck = {
    ErrorCode    => 'Function.Error',           # if error
    ErrorMessage => 'Error description',
}

_CheckUpdatePermissions()#

check if user has permissions to update ticket attributes.

my $Response = $OperationObject->_CheckUpdatePermissions(
    TicketID     => 123,
    Ticket       => $Ticket,                  # all ticket parameters
    Article      => $Ticket,                  # all attachment parameters
    DynamicField => $Ticket,                  # all dynamic field parameters
    Attachment   => $Ticket,                  # all attachment parameters
    UserID       => 123,
);

returns:

$Response = {
    Success => 1,                               # if everything is OK
}

$Response = {
    Success      => 0,
    ErrorCode    => "function.error",           # if error
    ErrorMessage => "Error description"
}

_TicketUpdate()#

updates a ticket and creates an article and sets dynamic fields and attachments if specified.

my $Response = $OperationObject->_TicketUpdate(
    TicketID     => 123,
    Ticket       => $Ticket,                  # all ticket parameters
    Articles     => @Articles,                # all article parameters, optionally with dynamic fields
    DynamicField => $DynamicField,            # all ticket dynamic field parameters
    Attachment   => $Attachment,              # all attachment parameters
    UserID       => 123,
    UserType     => 'Agent'                   # || 'Customer
);

returns:

$Response = {
    Success => 1,                               # if everything is OK
    Data => {
        TicketID     => 123,
        TicketNumber => 'TN3422332',
        ArticleID    => 123,                    # if new article was created, or
        ArticleIDs   => [ 123, 456 ],           # if multiple articles were created
    }
}

$Response = {
    Success      => 0,                         # if unexpected error
    ErrorMessage => "$Param{ErrorCode}: $Param{ErrorMessage}",
}