
###########
ZnunyHelper
###########


****
NAME
****


Kernel::System::ZnunyHelper


***********
DESCRIPTION
***********


All ZnunyHelper functions.


****************
PUBLIC INTERFACE
****************


new()
=====


create an object. Do not use it directly, instead use:


.. code-block:: perl

     use Kernel::System::ObjectManager;
     local $Kernel::OM = Kernel::System::ObjectManager->new();
     my $ZnunyHelperObject = $Kernel::OM->Get('Kernel::System::ZnunyHelper');



_ItemReverseListGet()
=====================


checks if a item (for example a service name) is in a reverse item list (for example reverse %ServiceList)
with case sensitive check


.. code-block:: perl

     my $ItemID = $ZnunyHelperObject->_ItemReverseListGet($ServiceName, %ServiceListReverse);


Returns:


.. code-block:: perl

     my $ItemID = 123;



_PostmasterXHeaderAdd()
=======================


This function adds a Postmaster X-Header to the list of Postmaster X-Headers to the SysConfig.


.. code-block:: perl

     my $Success = $ZnunyHelperObject->_PostmasterXHeaderAdd(
         Header => 'X-OTRS-OwnHeader'
     );
 
     or
 
     my $Success = $ZnunyHelperObject->_PostmasterXHeaderAdd(
         Header => [
             'X-OTRS-OwnHeader',
             'AnotherHeader',
         ]
     );



_PostmasterXHeaderRemove()
==========================


This function removes a Postmaster X-Header from the list of Postmaster X-Headers in the SysConfig.


.. code-block:: perl

     my $Success = $ZnunyHelperObject->_PostmasterXHeaderRemove(
         Header => 'X-OTRS-OwnHeader'
     );
 
     or
 
     my $Success = $ZnunyHelperObject->_PostmasterXHeaderRemove(
         Header => [
             'X-OTRS-OwnHeader',
             'AnotherHeader',
         ]
     );



_EventAdd()
===========


This function adds an Event to the list of Events of an Object to the SysConfig.


.. code-block:: perl

     my $Success = $ZnunyHelperObject->_EventAdd(
         Object => 'Ticket', # Ticket, Article, Queue...
         Event  => 'MyCustomEvent'
     );
 
     or
 
     my $Success = $ZnunyHelperObject->_EventAdd(
         Object => 'Ticket',
         Event  => [
             'MyCustomEvent',
             'AnotherCustomEvent',
         ]
     );



_EventRemove()
==============


This function removes an Event to the list of Events of an Object to the SysConfig.


.. code-block:: perl

     my $Success = $ZnunyHelperObject->_EventRemove(
         Object => 'Ticket', # Ticket, Article, Queue...
         Event  => 'MyCustomEvent'
     );
 
     or
 
     my $Success = $ZnunyHelperObject->_EventRemove(
         Object => 'Ticket',
         Event  => [
             'MyCustomEvent',
             'AnotherCustomEvent',
         ]
     );



_ValidDynamicFieldScreenListGet()
=================================


Returns a list of valid screens for dynamic fields.


.. code-block:: perl

     my $ValidDynamicFieldScreenList = $ZnunyHelperObject->_ValidDynamicFieldScreenListGet(
         Result => 'ARRAY', # HASH or ARRAY, defaults to ARRAY
     );


Returns as HASH:


.. code-block:: perl

     my $ValidDynamicFieldScreenList = {
         'DynamicFieldScreens' => {
            'Ticket::Frontend::AgentTicketZoom###DynamicField' => 'AgentTicketZoom',
            'Ticket::Frontend::AgentTicketZoom###ProcessWidgetDynamicField' => 'ProcessWidgetDynamicField'
            [...]
         },
         'DefaultColumnsScreens' => {
             'DashboardBackend###0110-TicketEscalation' => 'DashboardWidget TicketEscalation',
             'DashboardBackend###0130-TicketOpen' => 'DashboardWidget TicketOpen',
             [...]
         }
     };


Returns as ARRAY:


.. code-block:: perl

     my $ValidDynamicFieldScreenList = {
         'DynamicFieldScreens' => [
            'Ticket::Frontend::AgentTicketZoom###DynamicField',
            'Ticket::Frontend::AgentTicketZoom###ProcessWidgetDynamicField',
            [...]
         ],
         'DefaultColumnsScreens' => [
             'DashboardBackend###0110-TicketEscalation',
             'DashboardBackend###0130-TicketOpen',
             [...]
         ]
     };



_DefaultColumnsGet()
====================


This function returns the DefaultColumn Attributes of the requested SysConfigs.


.. code-block:: perl

     my @Configs = (
         'Ticket::Frontend::AgentTicketStatusView###DefaultColumns',
         'Ticket::Frontend::AgentTicketQueue###DefaultColumns',
         'Ticket::Frontend::AgentTicketResponsibleView###DefaultColumns',
         'Ticket::Frontend::AgentTicketWatchView###DefaultColumns',
         'Ticket::Frontend::AgentTicketLockedView###DefaultColumns',
         'Ticket::Frontend::AgentTicketEscalationView###DefaultColumns',
         'Ticket::Frontend::AgentTicketSearch###DefaultColumns',
         'Ticket::Frontend::AgentTicketService###DefaultColumns',
 
         # substructure of DefaultColumns
         'DashboardBackend###0100-TicketPendingReminder',
         'DashboardBackend###0110-TicketEscalation',
         'DashboardBackend###0120-TicketNew',
         'DashboardBackend###0130-TicketOpen',
 
         # substructure of DefaultColumns
         'AgentCustomerInformationCenter::Backend###0100-CIC-TicketPendingReminder',
         'AgentCustomerInformationCenter::Backend###0110-CIC-TicketEscalation',
         'AgentCustomerInformationCenter::Backend###0120-CIC-TicketNew',
         'AgentCustomerInformationCenter::Backend###0130-CIC-TicketOpen',
     );
 
     my %Configs = $ZnunyHelperObject->_DefaultColumnsGet(@Configs);


Returns:


.. code-block:: perl

     my %Configs = (
         'Ticket::Frontend::AgentTicketStatusView###DefaultColumns' => {
             Title                     => 2,
             CustomerUserID            => 1,
             DynamicField_DropdownTest => 1,
             DynamicField_Anotherone   => 2,
         },
         'DashboardBackend###0100-TicketPendingReminder' => {
             Title                     => 2,
             CustomerUserID            => 1,
             DynamicField_DropdownTest => 1,
             DynamicField_Anotherone   => 2,
         },
     );



_DefaultColumnsEnable()
=======================


This function enables the given Attributes for the requested DefaultColumns.


.. code-block:: perl

     my %Configs = (
         'Ticket::Frontend::AgentTicketStatusView###DefaultColumns' => {
             Title                     => 2,
             CustomerUserID            => 1,
             DynamicField_DropdownTest => 1,
             DynamicField_Anotherone   => 2,
         },
         'DashboardBackend###0100-TicketPendingReminder' => {
             Title                     => 2,
             CustomerUserID            => 1,
             DynamicField_DropdownTest => 1,
             DynamicField_Anotherone   => 2,
         },
         'Ticket::Frontend::AgentTicketQueue###DefaultColumns'           => {},
         'Ticket::Frontend::AgentTicketResponsibleView###DefaultColumns' => {},
         'Ticket::Frontend::AgentTicketWatchView###DefaultColumns'       => {},
         'Ticket::Frontend::AgentTicketLockedView###DefaultColumns'      => {},
         'Ticket::Frontend::AgentTicketEscalationView###DefaultColumns'  => {},
         'Ticket::Frontend::AgentTicketSearch###DefaultColumns'          => {},
         'Ticket::Frontend::AgentTicketService###DefaultColumns'         => {},
 
         'DashboardBackend###0110-TicketEscalation'                                 => {},
         'DashboardBackend###0120-TicketNew'                                        => {},
         'DashboardBackend###0130-TicketOpen'                                       => {},
         'AgentCustomerInformationCenter::Backend###0100-CIC-TicketPendingReminder' => {},
         'AgentCustomerInformationCenter::Backend###0110-CIC-TicketEscalation'      => {},
         'AgentCustomerInformationCenter::Backend###0120-CIC-TicketNew'             => {},
         'AgentCustomerInformationCenter::Backend###0130-CIC-TicketOpen'            => {},
     );
 
     my $Success = $ZnunyHelperObject->_DefaultColumnsEnable(%Configs);


Returns:


.. code-block:: perl

     my $Success = 1;



_DefaultColumnsDisable()
========================


This function disables the given Attributes for the requested DefaultColumns.


.. code-block:: perl

     my %Configs = (
         'Ticket::Frontend::AgentTicketStatusView###DefaultColumns' => {
             Title                     => 2,
             CustomerUserID            => 1,
             DynamicField_DropdownTest => 1,
             DynamicField_Anotherone   => 2,
         },
         'DashboardBackend###0100-TicketPendingReminder' => {
             Title                     => 2,
             CustomerUserID            => 1,
             DynamicField_DropdownTest => 1,
             DynamicField_Anotherone   => 2,
         },
         'Ticket::Frontend::AgentTicketQueue###DefaultColumns'           => {},
         'Ticket::Frontend::AgentTicketResponsibleView###DefaultColumns' => {},
         'Ticket::Frontend::AgentTicketWatchView###DefaultColumns'       => {},
         'Ticket::Frontend::AgentTicketLockedView###DefaultColumns'      => {},
         'Ticket::Frontend::AgentTicketEscalationView###DefaultColumns'  => {},
         'Ticket::Frontend::AgentTicketSearch###DefaultColumns'          => {},
         'Ticket::Frontend::AgentTicketService###DefaultColumns'         => {},
 
         'DashboardBackend###0110-TicketEscalation'                                 => {},
         'DashboardBackend###0120-TicketNew'                                        => {},
         'DashboardBackend###0130-TicketOpen'                                       => {},
         'AgentCustomerInformationCenter::Backend###0100-CIC-TicketPendingReminder' => {},
         'AgentCustomerInformationCenter::Backend###0110-CIC-TicketEscalation'      => {},
         'AgentCustomerInformationCenter::Backend###0120-CIC-TicketNew'             => {},
         'AgentCustomerInformationCenter::Backend###0130-CIC-TicketOpen'            => {},
     );
 
     my $Success = $ZnunyHelperObject->_DefaultColumnsDisable(%Configs);


Returns:


.. code-block:: perl

     my $Success = 1;



_DynamicFieldsDefaultColumnsGet()
=================================


Returns the DefaultColumn attributes of the requested SysConfigs, reduced to dynamic fields.


.. code-block:: perl

     my @Configs = (
         'Ticket::Frontend::AgentTicketStatusView###DefaultColumns',
         'Ticket::Frontend::AgentTicketQueue###DefaultColumns',
         'Ticket::Frontend::AgentTicketResponsibleView###DefaultColumns',
         'Ticket::Frontend::AgentTicketWatchView###DefaultColumns',
         'Ticket::Frontend::AgentTicketLockedView###DefaultColumns',
         'Ticket::Frontend::AgentTicketEscalationView###DefaultColumns',
         'Ticket::Frontend::AgentTicketSearch###DefaultColumns',
         'Ticket::Frontend::AgentTicketService###DefaultColumns',
 
         # substructure of DefaultColumns
         'DashboardBackend###0100-TicketPendingReminder',
         'DashboardBackend###0110-TicketEscalation',
         'DashboardBackend###0120-TicketNew',
         'DashboardBackend###0130-TicketOpen',
 
         # substructure of DefaultColumns
         'AgentCustomerInformationCenter::Backend###0100-CIC-TicketPendingReminder',
         'AgentCustomerInformationCenter::Backend###0110-CIC-TicketEscalation',
         'AgentCustomerInformationCenter::Backend###0120-CIC-TicketNew',
         'AgentCustomerInformationCenter::Backend###0130-CIC-TicketOpen',
     );
 
     my %Configs = $ZnunyHelperObject->_DynamicFieldsDefaultColumnsGet(@Configs);


Returns:


.. code-block:: perl

     my %Configs = (
         'Ticket::Frontend::AgentTicketStatusView###DefaultColumns' => {
             DropdownTest => 1,
             Anotherone   => 2,
         },
         'DashboardBackend###0100-TicketPendingReminder' => {
             DropdownTest => 1,
             Anotherone   => 2,
         },
     );



_DynamicFieldsScreenGet()
=========================


This function returns the defined dynamic fields in the screens.


.. code-block:: perl

     my @Configs = (
         'Ticket::Frontend::AgentTicketSearch###Defaults###DynamicField',
         'Ticket::Frontend::CustomerTicketZoom###FollowUpDynamicField',
         'Ticket::Frontend::AgentTicketSearch###SearchCSVDynamicField',
     );
 
     my %Configs = $ZnunyHelperObject->_DynamicFieldsDefaultColumnsGet(@Configs);


Returns:


.. code-block:: perl

     my %Configs = (
         Ticket::Frontend::AgentTicketSearch###Defaults###DynamicField => {
             TestDynamicField1 => 1,
             TestDynamicField2 => 2,
             TestDynamicField3 => 0,
             TestDynamicField4 => 1,
             TestDynamicField5 => 2,
         },
         'Ticket::Frontend::CustomerTicketZoom###FollowUpDynamicField' => {
             TestDynamicField1 => 1,
             TestDynamicField2 => 2,
             TestDynamicField3 => 0,
             TestDynamicField4 => 1,
             TestDynamicField5 => 2,
         },
         'Ticket::Frontend::AgentTicketSearch###SearchCSVDynamicField' => {
             TestDynamicField1 => 1,
             TestDynamicField2 => 2,
             TestDynamicField3 => 0,
             TestDynamicField4 => 1,
             TestDynamicField5 => 2,
         },
     );



_DynamicFieldsScreenEnable()
============================


This function enables the defined dynamic fields in the needed screens.


.. code-block:: perl

     my %Screens = (
         AgentTicketFreeText => {
             TestDynamicField1 => 1,
             TestDynamicField2 => 1,
             TestDynamicField3 => 1,
             TestDynamicField4 => 1,
             TestDynamicField5 => 1,
         },
         'CustomerTicketZoom###FollowUpDynamicField' => {
             TestDynamicField1 => 1,
             TestDynamicField2 => 1,
             TestDynamicField3 => 1,
             TestDynamicField4 => 1,
             TestDynamicField5 => 1,
         },
         'AgentTicketSearch###Defaults###DynamicField' => {
             TestDynamicField1 => 1,
             TestDynamicField2 => 1,
             TestDynamicField3 => 1,
             TestDynamicField4 => 1,
             TestDynamicField5 => 1,
         },
         'ITSMChange::Frontend::AgentITSMChangeEdit###DynamicField' => {
             ChangeFreeText1 => 1,
             ChangeFreeText2 => 1,
             ChangeFreeText3 => 1,
             ChangeFreeText4 => 1,
             ChangeFreeText5 => 1,
         },
         'ITSMWorkOrder::Frontend::AgentITSMWorkOrderEdit###DynamicField' => {
             WorkOrderFreeText1 => 1,
             WorkOrderFreeText2 => 1,
             WorkOrderFreeText3 => 1,
             WorkOrderFreeText4 => 1,
             WorkOrderFreeText5 => 1,
         },
     );
 
     my $Success = $ZnunyHelperObject->_DynamicFieldsScreenEnable(%Screens);


Returns:


.. code-block:: perl

     my $Success = 1;



_DynamicFieldsScreenDisable()
=============================


This function disables the defined dynamic fields in the needed screens.


.. code-block:: perl

     my %Screens = (
         AgentTicketFreeText => {
             TestDynamicField1 => 1,
             TestDynamicField2 => 1,
             TestDynamicField3 => 1,
             TestDynamicField4 => 1,
             TestDynamicField5 => 1,
         },
         'CustomerTicketZoom###FollowUpDynamicField' => {
             TestDynamicField1 => 1,
             TestDynamicField2 => 1,
             TestDynamicField3 => 1,
             TestDynamicField4 => 1,
             TestDynamicField5 => 1,
         },
         'AgentTicketSearch###Defaults###DynamicField' => {
             TestDynamicField1 => 1,
             TestDynamicField2 => 1,
             TestDynamicField3 => 1,
             TestDynamicField4 => 1,
             TestDynamicField5 => 1,
         },
         'ITSMChange::Frontend::AgentITSMChangeEdit###DynamicField' => {
             ChangeFreeText1 => 1,
             ChangeFreeText2 => 1,
             ChangeFreeText3 => 1,
             ChangeFreeText4 => 1,
             ChangeFreeText5 => 1,
         },
         'ITSMWorkOrder::Frontend::AgentITSMWorkOrderEdit###DynamicField' => {
             WorkOrderFreeText1 => 1,
             WorkOrderFreeText2 => 1,
             WorkOrderFreeText3 => 1,
             WorkOrderFreeText4 => 1,
             WorkOrderFreeText5 => 1,
         },
     );
 
     my $Success = $ZnunyHelperObject->_DynamicFieldsScreenDisable(%Screens);


Returns:


.. code-block:: perl

     my $Success = 1;



_DynamicFieldsDelete()
======================


This function delete the defined dynamic fields


.. code-block:: perl

     my @DynamicFields = (
         'TestDynamicField1',
         'TestDynamicField2',
         'TestDynamicField3',
     );
 
     my $Success = $ZnunyHelperObject->_DynamicFieldsDelete(@DynamicFields);


Returns:


.. code-block:: perl

     my $Success = 1;



_DynamicFieldsDisable()
=======================


This function disables the defined dynamic fields


.. code-block:: perl

     my @DynamicFields = (
         'TestDynamicField1',
         'TestDynamicField2',
         'TestDynamicField3',
     );
 
     my $Success = $ZnunyHelperObject->_DynamicFieldsDisable(@DynamicFields);


Returns:


.. code-block:: perl

     my $Success = 1;



_DynamicFieldsCreateIfNotExists()
=================================


creates all dynamic fields that are necessary

Usable Snippets (SublimeTextAdjustments):
    otrs.dynamicfield.config.text
    otrs.dynamicfield.config.checkbox
    otrs.dynamicfield.config.datetime
    otrs.dynamicfield.config.dropdown
    otrs.dynamicfield.config.textarea
    otrs.dynamicfield.config.multiselect


.. code-block:: perl

     my @DynamicFields = (
         {
             Name       => 'TestDynamicField1',
             Label      => "TestDynamicField1",
             ObjectType => 'Ticket',
             FieldType  => 'Text',
             Config     => {
                 DefaultValue => "",
             },
         },
         {
             Name       => 'TestDynamicField2',
             Label      => "TestDynamicField2",
             ObjectType => 'Ticket',
             FieldType  => 'Text',
             Config     => {
                 DefaultValue => "",
             },
         },
     );
 
     my $Result = $ZnunyHelperObject->_DynamicFieldsCreateIfNotExists( @DynamicFields );


Returns:


.. code-block:: perl

     my $Success = 1;



_DynamicFieldsCreate()
======================


creates all dynamic fields that are necessary

Usable Snippets (SublimeTextAdjustments):
    otrs.dynamicfield.config.text
    otrs.dynamicfield.config.checkbox
    otrs.dynamicfield.config.datetime
    otrs.dynamicfield.config.dropdown
    otrs.dynamicfield.config.textarea
    otrs.dynamicfield.config.multiselect


.. code-block:: perl

     my @DynamicFields = (
         {
             Name          => 'TestDynamicField1',
             Label         => "TestDynamicField1",
             InternalField => 0,                     # optional, 0 or 1, internal fields are protected
             ObjectType    => 'Ticket',
             FieldType     => 'Text',
             Config        => {
                 DefaultValue => "",
             },
         },
         {
             Name                 => 'TestDynamicField2',
             Label                => "TestDynamicField2",
             InternalField        => 0,                     # optional, 0 or 1, internal fields are protected
             ObjectType           => 'Ticket',
             FieldType            => 'Text',
             FieldOrderAfterField => 'TestDynamicField1',   # special feature to order fields at a specific point. Can be also used for fields which are getting created in the same array before this dynamic field
             Config               => {
                 DefaultValue => "",
             },
         },
     );
 
     my $Success = $ZnunyHelperObject->_DynamicFieldsCreate( @DynamicFields );


Returns:


.. code-block:: perl

     my $Success = 1;



DynamicFieldFieldOrderAfterFieldGet()
=====================================


This function will return the field order after a specific dynamic field field name.

e.g.

TestDynamicField has the field order 100.


.. code-block:: perl

     my $FieldOrder = $ZnunyHelperObject->DynamicFieldFieldOrderAfterFieldGet(
         Name => 'TestDynamicField1',
     );


Returns:


.. code-block:: perl

     my $FieldOrder = 101;



DynamicFieldValueCreate()
=========================


Add a new dropdown value to a dynamic field. This function
will extended the possible values for the field.


.. code-block:: perl

     my $Success = $ZnunyHelperObject->DynamicFieldValueCreate(
         Name  => 'DynamicFieldName',
         Key   => 'ValueDropdown',
         Value => 'ValueDropdown',    # optional (Parameter "Key" is default)
     );


Returns:


.. code-block:: perl

     my $Success = 1;



_DynamicFieldsConfigExport()
============================


exports configuration of all dynamic fields


.. code-block:: perl

     my $Configs = $ZnunyHelperObject->_DynamicFieldsConfigExport(
         Format                => 'perl|yml|yaml|var', # defaults to perl. var returns the
         IncludeInternalFields => 1, # defaults to 1, also includes dynamic fields with flag 'InternalField',
         IncludeAllConfigKeys  => 1, # defaults to 1, also includes config keys ChangeTime, CreateTime, ID, InternalField, ValidID
         Result                => 'ARRAY', # HASH or ARRAY, defaults to ARRAY
         DynamicFields         => [  # optional, returns only the configs for the given fields
             'NameOfDynamicField',
             'SecondDynamicField',
         ],
     );


Returns:


.. code-block:: perl

     my $ARRAYResult = [
         {
           'Config' => {
               'DefaultValue' => ''
           },
           'FieldOrder' => '1',
           'FieldType'  => 'Text',
           'Label'      => "DynField1 Label",
           'Name'       => 'DynField1',
           'ObjectType' => 'Ticket'
         },
         {
           'Config' => {
               'DefaultValue' => ''
           },
           'FieldOrder' => '2',
           'FieldType'  => 'Text',
           'Label'      => 'DynField2 Label',
           'Name'       => 'DynField2',
           'ObjectType' => 'Ticket'
         },
     ];
 
     my $HASHResult = {
         'DynField1' => {
           'Config' => {
             'DefaultValue' => ''
           },
           'FieldOrder' => '1',
           'FieldType'  => 'Text',
           'Label'      => "DynField1 Label",
           'Name'       => 'DynField1',
           'ObjectType' => 'Ticket'
         },
         'DynField2' => {
           'Config' => {
             'DefaultValue' => ''
           },
           'FieldOrder' => '2',
           'FieldType'  => 'Text',
           'Label'      => 'DynField2 Label',
           'Name'       => 'DynField2',
           'ObjectType' => 'Ticket'
         },
     };



_DynamicFieldsScreenConfigExport()
==================================


exports all configured screens of one ore more dynamic fields


.. code-block:: perl

     my $Configs = $ZnunyHelperObject->_DynamicFieldsScreenConfigExport(
         DynamicFields         => [              # optional, returns only for those fields
             'NameOfDynamicField',
             'SecondDynamicField',
         ],
     );


Returns:


.. code-block:: perl

     my $Result = {
         'DynField1' => {
             'AgentCustomerInformationCenter::Backend###0100-CIC-TicketPendingReminder' => '2',
             'DashboardBackend###0100-TicketPendingReminder'                            => '1',
             'DashboardBackend###0130-TicketOpen'                                       => '1',
             'DashboardBackend###0140-RunningTicketProcess'                             => '1',
             'Ticket::Frontend::AgentTicketQueue###DefaultColumns'                      => '2',
             'Ticket::Frontend::AgentTicketResponsible###DynamicField'                  => '2',
             'Ticket::Frontend::AgentTicketSearch###DefaultColumns'                     => '2',
             'Ticket::Frontend::AgentTicketStatusView###DefaultColumns'                 => '2',
             'Ticket::Frontend::AgentTicketZoom###DynamicField'                         => '0',
             'Ticket::Frontend::CustomerTicketOverview###DynamicField'                  => '2',
             'Ticket::Frontend::OverviewPreview###DynamicField'                         => '2',
         },
         'DynField2' => {
             'Ticket::Frontend::AgentTicketResponsible###DynamicField'                  => '2',
             'Ticket::Frontend::AgentTicketSearch###DefaultColumns'                     => '2',
         },
     };



_DynamicFieldsScreenConfigImport()
==================================


imports all configured screens of one ore more dynamic fields


.. code-block:: perl

     %Config = {
         'DynField1' => {
             'AgentCustomerInformationCenter::Backend###0100-CIC-TicketPendingReminder' => '2',
             'DashboardBackend###0100-TicketPendingReminder'                            => '1',
             'DashboardBackend###0130-TicketOpen'                                       => '1',
             'DashboardBackend###0140-RunningTicketProcess'                             => '1',
             'Ticket::Frontend::AgentTicketQueue###DefaultColumns'                      => '2',
             'Ticket::Frontend::AgentTicketResponsible###DynamicField'                  => '2',
             'Ticket::Frontend::AgentTicketSearch###DefaultColumns'                     => '2',
             'Ticket::Frontend::AgentTicketStatusView###DefaultColumns'                 => '2',
             'Ticket::Frontend::AgentTicketZoom###DynamicField'                         => '0',
             'Ticket::Frontend::CustomerTicketOverview###DynamicField'                  => '2',
             'Ticket::Frontend::OverviewPreview###DynamicField'                         => '2',
         },
         'DynField2' => {
             'Ticket::Frontend::AgentTicketResponsible###DynamicField'                  => '2',
             'Ticket::Frontend::AgentTicketSearch###DefaultColumns'                     => '2',
         },
     };
 
     my $Success = $ZnunyHelperObject->_DynamicFieldsScreenConfigImport( %Config );


Returns:


.. code-block:: perl

     my $Success = 1;



_PostMasterFilterCreateIfNotExists()
====================================


creates all postmaster filter that are necessary


.. code-block:: perl

     my @Filters = (
         {
             'Match' => {
                 'Auto-Submitted' => '123'
             },
             'Name' => 'asdf',
             'Not' => {
                 'Auto-Submitted' => undef
             },
             'Set' => {
                 'X-OTRS-DynamicField-blub' => '123'
             },
             'StopAfterMatch' => '0'
         },
     );
 
     my $Result = $ZnunyHelperObject->_PostMasterFilterCreateIfNotExists( @Filters );


Returns:


.. code-block:: perl

     my $Success = 1;



_PostMasterFilterCreate()
=========================


creates all postmaster filter that are necessary


.. code-block:: perl

     my @Filters = (
         {
             'Match' => {
                 'Auto-Submitted' => '123'
             },
             'Name' => 'asdf',
             'Not' => {
                 'Auto-Submitted' => undef
             },
             'Set' => {
                 'X-OTRS-DynamicField-blub' => '123'
             },
             'StopAfterMatch' => '0'
         },
     );
 
     my $Result = $ZnunyHelperObject->_PostMasterFilterCreate( @Filters );


Returns:


.. code-block:: perl

     my $Success = 1;



_PostMasterFilterConfigExport()
===============================


exports configuration of all postmaster filter


.. code-block:: perl

     my $Configs = $ZnunyHelperObject->_PostMasterFilterConfigExport(
         Format => 'yml|perl', # defaults to perl
     );



_PostMasterFilterConfigImport()
===============================


imports configuration of postmaster filter via yml


.. code-block:: perl

     my $Success = $ZnunyHelperObject->_PostMasterFilterConfigImport(
         Filter => $Filter,
         Format => 'yml',        # optional - default
     );
 
     $Filter = "---
 - Match:
   - Key: Body
     Value: '123'
   Name: 'PostmasterFilter'
   Not:
   - Key: Body
     Value: ~
   Set:
   - Key: X-OTRS-DynamicField-test
     Value: '123'
   StopAfterMatch: 0
 ";


Returns:


.. code-block:: perl

     my $Success = 1;



_GroupCreateIfNotExists()
=========================


creates group if not exists


.. code-block:: perl

     my $Success = $ZnunyHelperObject->_GroupCreateIfNotExists(
         Name => 'Some Group Name',
     );


Returns:


.. code-block:: perl

     my $Success = 1;



_RoleCreateIfNotExists()
========================


creates role if not exists


.. code-block:: perl

     my $Success = $ZnunyHelperObject->_RoleCreateIfNotExists(
         Name => 'Some Role Name',
     );


Returns:


.. code-block:: perl

     my $Success = 1;



_TypeCreateIfNotExists()
========================


creates Type if not exists


.. code-block:: perl

     my $Success = $ZnunyHelperObject->_TypeCreateIfNotExists(
         Name => 'Some Type Name',
     );


Returns:


.. code-block:: perl

     my $Success = 1;



_PriorityCreateIfNotExists()
============================


creates Priority if not exists


.. code-block:: perl

     my $Success = $ZnunyHelperObject->_PriorityCreateIfNotExists(
         Name => 'Some Priority Name',
     );


Returns:


.. code-block:: perl

     my $Success = 1;



_StateCreateIfNotExists()
=========================


creates State if not exists


.. code-block:: perl

     # e.g. new|open|closed|pending reminder|pending auto|removed|merged
     my $StateTypeID = $StateObject->StateTypeLookup( StateType => 'pending auto' );
 
     my $Success = $ZnunyHelperObject->_StateCreateIfNotExists(
         Name   => 'Some State Name',
         TypeID => $StateTypeID,
     );


Returns:


.. code-block:: perl

     my $Success = 1;



_StateDisable()
===============


disables a given state


.. code-block:: perl

     my @States = (
         'State1',
         'State2',
     );
 
     my $Success = $ZnunyHelperObject->_StateDisable(@States);


Returns:


.. code-block:: perl

     my $Success = 1;



_StateTypeCreateIfNotExists()
=============================


creates state types if not exists


.. code-block:: perl

     my $StateTypeID = $ZnunyHelperObject->_StateTypeCreateIfNotExists(
         Name    => 'New StateType',
         Comment => 'some comment',
         UserID  => 123,
     );



_ServiceCreateIfNotExists()
===========================


creates Service if not exists


.. code-block:: perl

     my $Success = $ZnunyHelperObject->_ServiceCreateIfNotExists(
         Name => 'Some ServiceName',
         %ITSMParams,                        # optional params for Criticality or TypeID if ITSM is installed
     );


Returns:


.. code-block:: perl

     my $Success = 1;



_SLACreateIfNotExists()
=======================


creates SLA if not exists


.. code-block:: perl

     my $Success = $ZnunyHelperObject->_SLACreateIfNotExists(
         Name => 'Some ServiceName',
         ServiceIDs          => [ 1, 5, 7 ],  # (optional)
         FirstResponseTime   => 120,          # (optional)
         FirstResponseNotify => 60,           # (optional) notify agent if first response escalation is 60% reached
         UpdateTime          => 180,          # (optional)
         UpdateNotify        => 80,           # (optional) notify agent if update escalation is 80% reached
         SolutionTime        => 580,          # (optional)
         SolutionNotify      => 80,           # (optional) notify agent if solution escalation is 80% reached
     );


Returns:


.. code-block:: perl

     my $Success = 1;



_UserCreateIfNotExists()
========================


creates user if not exists


.. code-block:: perl

     my $UserID = $ZnunyHelperObject->_UserCreateIfNotExists(
         UserFirstname => 'Manfred',
         UserLastname  => 'Huber',
         UserLogin     => 'mhuber',
         UserPw        => 'some-pass', # not required
         UserEmail     => 'email@example.com',
         UserMobile    => '1234567890', # not required
         ValidID       => 1,
         ChangeUserID  => 123,
     );


Returns:


.. code-block:: perl

     my $User = 123;



_CustomerUserCreateIfNotExists()
================================


creates CustomerUser if not exists


.. code-block:: perl

     my $CustomerUserLogin = $ZnunyHelperObject->_CustomerUserCreateIfNotExists(
         Source         => 'CustomerUser', # CustomerUser source config
         UserFirstname  => 'Manfred',
         UserLastname   => 'Huber',
         UserCustomerID => 'A124',
         UserLogin      => 'mhuber',
         UserPassword   => 'some-pass', # not required
         UserEmail      => 'email@example.com',
     );


Returns:


.. code-block:: perl

     my $CustomerUserLogin = 'mhuber';



_QueueCreateIfNotExists()
=========================


creates Queue if not exists


.. code-block:: perl

     my $QueueID = $ZnunyHelperObject->_QueueCreateIfNotExists(
         Name    => 'Some Queue Name',
         GroupID => 1,
     );


Returns:


.. code-block:: perl

     my $QueueID = 123;



_GeneralCatalogItemCreateIfNotExists()
======================================


adds a general catalog item if it does not exist


.. code-block:: perl

     my $ItemID = $ZnunyHelperObject->_GeneralCatalogItemCreateIfNotExists(
         Name            => 'Test Item',
         Class           => 'ITSM::ConfigItem::Test',
         Comment         => 'Class for test item.',
         PermissionGroup => 'itsm-configitem',              # optional
     );


Returns:


.. code-block:: perl

     my $ItemID = 1234;



_ITSMConfigItemDefinitionCreate()
=================================


adds or updates a definition for a ConfigItemClass. You need to provide the configuration
of the CMDB class in the following directory:

/opt/znuny/scripts/cmdb_classes/Private_Endgeraete.config

The required general catalog item will be created automatically.


.. code-block:: perl

     my $DefinitionID = $ZnunyHelperObject->_ITSMConfigItemDefinitionCreate(
         Class           => 'Private Endgeraete',
         ClassFile       => 'Private_Endgeraete',  # optional
         PermissionGroup => 'itsm-configitem',     # optional
     );


Returns:


.. code-block:: perl

     my $DefinitionID = 1234;



_ITSMConfigItemDefinitionCreateIfNotExists()
============================================


add if not exists a definition for a ConfigItemClass. You need to provide the configuration
of the CMDB class in the following directory:

/opt/znuny/scripts/cmdb_classes/Private_Endgeraete.config

The required general catalog item will be created automatically.


.. code-block:: perl

     my $DefinitionID = $ZnunyHelperObject->_ITSMConfigItemDefinitionCreateIfNotExists(
         Class           => 'Private Endgeraete',
         ClassFile       => 'Private_Endgeraete',  # optional
         PermissionGroup => 'itsm-configitem',     # optional
     );


Returns:


.. code-block:: perl

     my $DefinitionID = 1234;



_ITSMConfigItemVersionAdd()
===========================


adds or updates a ConfigItem version.


.. code-block:: perl

     my $VersionID = $ZnunyHelperObject->_ITSMConfigItemVersionAdd(
         ConfigItemID  => 12345,
         Name          => 'example name',
 
         ClassID       => 1234,
         ClassName     => 'example class',
         DefinitionID  => 1234,
 
         DeplStateID   => 1234,
         DeplStateName => 'Production',
 
         InciStateID   => 1234,
         InciStateName => 'Operational',
 
         XMLData => {
             'Priority'    => 'high',
             'Product'     => 'test',
             'Description' => 'test'
         },
     );
 
     EXAMPLE Create Computer:
 
     my $ZnunyHelperObject    = $Kernel::OM->Get('Kernel::System::ZnunyHelper');
     my $ConfigItemObject     = $Kernel::OM->Get('Kernel::System::ITSMConfigItem');
     my $GeneralCatalogObject = $Kernel::OM->Get('Kernel::System::GeneralCatalog');
     my $ValidObject          = $Kernel::OM->Get('Kernel::System::Valid');
 
     # get valid id
     my $ValidID = $ValidObject->ValidLookup(
         Valid => 'valid',
     );
 
     my $ClassListRef = $GeneralCatalogObject->ItemList(
         Class => 'ITSM::ConfigItem::Class',
         Valid => $ValidID,
     );
     my %ClassList = reverse %{ $ClassListRef || {} };
 
     my $YesNoRef = $GeneralCatalogObject->ItemList(
         Class => 'ITSM::ConfigItem::YesNo',
         Valid => $ValidID,
     );
     my %YesNoList = reverse %{ $YesNoRef || {} };
 
     my $ConfigItemID = $ConfigItemObject->ConfigItemAdd(
         ClassID => $ClassList{Computer},
         UserID  => 1,
     );
 
     # create new version of ConfigItem
     my $VersionID = $ZnunyHelperObject->_ITSMConfigItemVersionAdd(
         ConfigItemID  => $ConfigItemID,
         Name          => 'blub',
         ClassName     => 'Computer',
         DeplStateName => 'Production',
         InciStateName => 'Operational',
         XMLData => {
             OtherEquipment         => '...',
             Note                   => '...',
             WarrantyExpirationDate => '2016-01-01',
             InstallDate            => '2016-01-01',
             NIC                    => [
                 {
                     Content => 'NIC',
                     IPoverDHCP => [
                         {
                             Content => $YesNoList{Yes},
                         },
                     ],
                     IPAddress => [
                         {
                             Content => '127.0.0.1'
                         },
                     ],
                 },
             ],
         },
     );


Returns:


.. code-block:: perl

     my $VersionID = 1234;



_ITSMConfigItemVersionExists()
==============================


checks if a version already exists without returning a error.


.. code-block:: perl

     my $Found = $ZnunyHelperObject->_ITSMConfigItemVersionExists(
         VersionID  => 123,
     );
 
     or
 
     my $Found = $ZnunyHelperObject->_ITSMConfigItemVersionExists(
         ConfigItemID => 123,
     );


Returns:


.. code-block:: perl

     my $Found = 1;



_ITSMConfigItemVersionGet()
===========================


get a ConfigItem version.


.. code-block:: perl

     my %Version = $ZnunyHelperObject->_ITSMConfigItemVersionGet(
         ConfigItemID    => 12345,
         XMLDataMultiple => 1,      # default: 0, This option will return a more complex XMLData structure with multiple element data! Makes sense if you are using CountMin, CountMax etc..
     );


Returns:


.. code-block:: perl

     my %Version = (
         ConfigItemID  => 12345,
 
         DefinitionID => 1234,
         DeplStateID  => 1234,
         DeplState    => 'Production',
         InciStateID  => 1234,
         InciState    => 'Operational',
         Name         => 'example name',
         XMLData      => {
             'Priority'    => 'high',
             'Product'     => 'test',
             'Description' => 'test'
         },
     );



_ITSMVersionAdd()
=================


DEPRECATED, use $Self->_ITSMConfigItemVersionAdd instead.


_ITSMVersionExists()
====================


DEPRECATED, use $Self->_ITSMConfigItemVersionExists instead.


_ITSMVersionGet()
=================


DEPRECATED, use $Self->_ITSMConfigItemVersionGet instead.


_ParseXML2Data()
================


this is a internal function for _ITSMVersionGet to parse the additional data
stored in XMLData.


.. code-block:: perl

     my $Success = $ZnunyHelperObject->_ParseXML2Data(
         Parent          => $Identifier,          # optional: contains the field name of the parent xml
         Result          => $Result,              # contains the reference to the result hash
         Data            => $Data{$Field}->[1],   # contains the xml hash we want to parse
         XMLDataMultiple => 1,                    # default: 0, This option will return a more complex XMLData structure with multiple element data! Makes sense if you are using CountMin, CountMax etc..
     );


Returns:


.. code-block:: perl

     my $Success = 1;



_ParseData2XML()
================


this is a internal function for _ITSMVersionAdd to parse the additional data
for xml storage.


.. code-block:: perl

     my $Success = $ZnunyHelperObject->_ParseData2XML(
         Parent => $Identifier,          # optional: contains the field name of the parent xml
         Result => $Result,              # contains the reference to the result hash
         Data   => $Data{$Field}->[1],   # contains the xml hash we want to parse
     );


Returns:


.. code-block:: perl

     my $Success = 1;



_WebserviceCreateIfNotExists()
==============================


creates web services that not exist yet


.. code-block:: perl

     # installs all .yml files in $OTRS/scripts/webservices/
     # name of the file will be the name of the webservice
     my $Result = $ZnunyHelperObject->_WebserviceCreateIfNotExists(
         SubDir => 'ZnunyAssetDesk', # optional
     );


OR:


.. code-block:: perl

     my $Result = $ZnunyHelperObject->_WebserviceCreateIfNotExists(
         Webservices => {
             'New Webservice 1234' => '/path/to/Webservice.yml',
             # ...
         }
     );



_WebserviceCreate()
===================


creates or updates web services


.. code-block:: perl

     # installs all .yml files in $OTRS/scripts/webservices/
     # name of the file will be the name of the webservice
     my $Result = $ZnunyHelperObject->_WebserviceCreate(
         SubDir => 'ZnunyAssetDesk', # optional
     );


OR:


.. code-block:: perl

     my $Result = $ZnunyHelperObject->_WebserviceCreate(
         Webservices => {
             'New Webservice 1234' => '/path/to/Webservice.yml',
             # ...
         }
     );



_WebserviceDelete()
===================


deletes web services


.. code-block:: perl

     # deletes all .yml files webservices in $OTRS/scripts/webservices/
     # name of the file will be the name of the webservice
     my $Result = $ZnunyHelperObject->_WebserviceDelete(
         SubDir => 'ZnunyAssetDesk', # optional
     );


OR:


.. code-block:: perl

     my $Result = $ZnunyHelperObject->_WebserviceDelete(
         Webservices => {
             'Not needed Webservice 1234' => 1, # value is not used
             # ...
         }
     );



_WebservicesGet()
=================


gets a list of .yml files from $OTRS/scripts/webservices


.. code-block:: perl

     my $Result = $ZnunyHelperObject->_WebservicesGet(
         SubDir => 'ZnunyAssetDesk', # optional
     );
 
     $Result = {
         'Webservice'          => '$OTRS/scripts/webservices/ZnunyAssetDesk/Webservice.yml',
         'New Webservice 1234' => '$OTRS/scripts/webservices/ZnunyAssetDesk/New Webservice 1234.yml',
     }



_RebuildConfig()
================


Rebuilds OTRS config.


.. code-block:: perl

     my $Success = $ZnunyHelperObject->_RebuildConfig();


Returns:


.. code-block:: perl

     my $Success = 1;



_ProcessCreateIfNotExists()
===========================


creates processes if there is no active process with the same name


.. code-block:: perl

     # installs all .yml files in $OTRS/scripts/processes/
     # name of the file will be the name of the process
     my $Success = $ZnunyHelperObject->_ProcessCreateIfNotExists(
         SubDir => 'ZnunyAssetDesk', # optional
     );


OR:


.. code-block:: perl

     my $Success = $ZnunyHelperObject->_ProcessCreateIfNotExists(
         Processes => {
             'New Process 1234' => '/path/to/Process.yml',
             # ...
         }
     );



_ProcessCreate()
================


creates or updates processes


.. code-block:: perl

     # installs all .yml files in $OTRS/scripts/processes/
     # name of the file will be the name of the process
     my $Success = $ZnunyHelperObject->_ProcessCreate(
         SubDir => 'ZnunyAssetDesk', # optional
     );


OR:


.. code-block:: perl

     my $Success = $ZnunyHelperObject->_ProcessCreate(
         Processes => {
             'New Process 1234' => '/path/to/Process.yml',
             # ...
         }
     );



_ProcessesGet()
===============


gets a list of .yml files from $OTRS/scripts/processes


.. code-block:: perl

     my $Result = $ZnunyHelperObject->_ProcessesGet(
         SubDir => 'ZnunyAssetDesk', # optional
     );
 
     $Result = {
         'Process'          => '$OTRS/scripts/processes/ZnunyAssetDesk/Process.yml',
         'New Process 1234' => '$OTRS/scripts/processes/ZnunyAssetDesk/New Process 1234.yml',
     }



_ProcessWidgetDynamicFieldGroupsGet()
=====================================


gets ProcessWidgetDynamicFieldGroups


.. code-block:: perl

     # get ProcessWidgetDynamicFieldGroups
     my %ProcessWidgetDynamicFieldGroups = $ZnunyHelperObject->_ProcessWidgetDynamicFieldGroupsGet();
 
     return:
 
     %ProcessWidgetDynamicFieldGroups = (
         Group1 = [
             'DynamicField1',
             'DynamicField3',
         ],
         Group2 = [
             'DynamicField2',
         ],
     );



_ProcessWidgetDynamicFieldGroupsAdd()
=====================================


gets ProcessWidgetDynamicFieldGroups


.. code-block:: perl

     my %ProcessWidgetDynamicFieldGroups = (
         Group1 = [
             'DynamicField1',
             'DynamicField3',
         ],
         Group2 = [
             'DynamicField2',
         ],
     );
 
     my $Success = $ZnunyHelperObject->_ProcessWidgetDynamicFieldGroupsAdd(
         %ProcessWidgetDynamicFieldGroups
     );



_ProcessWidgetDynamicFieldGroupsRemove()
========================================


gets ProcessWidgetDynamicFieldGroups


.. code-block:: perl

     my %ProcessWidgetDynamicFieldGroups = (
         Group1 = [
             'DynamicField1',
             'DynamicField3',
         ],
         Group2 = [],            # deletes the whole group
     );
 
     my $Success = $ZnunyHelperObject->_ProcessWidgetDynamicFieldGroupsRemove(
         %ProcessWidgetDynamicFieldGroups
     );



_ModuleGroupAdd()
=================


This function adds one or more groups to the list of groups of a frontend module registration for any interface.


.. code-block:: perl

     my $Success = $HelperObject->_ModuleGroupAdd(
         Module => 'Admin',
         Group  => [
             'users',
         ],
         GroupRo => [
             'some_other_group'
         ],
         Frontend => 'Frontend::Module', # Frontend::Module (default), PublicFrontend::Module, CustomerFrontend::Module
     );



_ModuleGroupRemove()
====================


This function removes one or more groups from the list of groups of a frontend module registration for any interface.


.. code-block:: perl

     my $Success = $ZnunyHelperObject->_ModuleGroupRemove(
         Module => 'Admin',
         Group  => [
             'users',
         ],
         GroupRo => [
             'some_other_group'
         ],
         Frontend => 'Frontend::Module', # Frontend::Module (default), PublicFrontend::Module, CustomerFrontend::Module
     );



_NotificationEventCreate()
==========================


create or update notification event


.. code-block:: perl

     my @NotificationList = (
         {
             Name => 'Agent::CustomerVIPPriorityUpdate',
             Data => {
                 Events => [
                     'TicketPriorityUpdate',
                 ],
                 ArticleAttachmentInclude => [
                     '0'
                 ],
                 LanguageID => [
                     'en',
                     'de'
                 ],
                 NotificationArticleTypeID => [
                     1,
                 ],
                 Recipients => [
                     'Customer',
                 ],
                 TransportEmailTemplate => [
                     'Default',
                 ],
                 Transports => [
                     'Email',
                 ],
                 VisibleForAgent => [
                     '0',
                 ],
             },
             Message => {
                 en => {
                     Subject     => 'Priority for your ticket changed',
                     ContentType => 'text/html',
                     Body        => '...',
                 },
                 de => {
                     Subject     => 'Die Prioritaet Ihres Tickets wurde geaendert',
                     ContentType => 'text/html',
                     Body        => '...',
                 },
             },
         },
         # ...
     );
 
     my $Success = $ZnunyHelperObject->_NotificationEventCreate( @NotificationList );


Returns:


.. code-block:: perl

     my $Success = 1;



_NotificationEventCreateIfNotExists()
=====================================


creates notification event if not exists


.. code-block:: perl

     my $NotificationID = $ZnunyHelperObject->_NotificationEventCreateIfNotExists(
         Name => 'Agent::CustomerVIPPriorityUpdate',
         Data => {
             Events => [
                 'TicketPriorityUpdate',
             ],
             ArticleAttachmentInclude => [
                 '0'
             ],
             LanguageID => [
                 'en',
                 'de'
             ],
             NotificationArticleTypeID => [
                 1,
             ],
             Recipients => [
                 'Customer',
             ],
             TransportEmailTemplate => [
                 'Default',
             ],
             Transports => [
                 'Email',
             ],
             VisibleForAgent => [
                 '0',
             ],
         },
         Message => {
             en => {
                 Subject     => 'Priority for your ticket changed',
                 ContentType => 'text/html',
                 Body        => '...',
             },
             de => {
                 Subject     => 'Die Prioritaet Ihres Tickets wurde geaendert',
                 ContentType => 'text/html',
                 Body        => '...',
             },
         },
     );


Returns:


.. code-block:: perl

     my $NotificationID = 123;



_StandardTemplateCreate()
=========================


create or update standard template


.. code-block:: perl

     my @StandardTemplateList = (
         {
             Name         => 'New Standard Template',
             Template     => 'Thank you for your email.',
             ContentType  => 'text/plain; charset=utf-8',
             TemplateType => 'Answer',                     # 'Answer', 'Create', 'Email', 'Forward', 'Note', 'PhoneCall'
             Comment      => '',                           # optional
             ValidID      => 1,
             UserID       => 1,
         },
     );
 
     my $Success = $ZnunyHelperObject->_StandardTemplateCreate( @StandardTemplateList );


Returns:


.. code-block:: perl

     my $Success = 1;



_GenericAgentCreate()
=====================


creates or updates generic agents


.. code-block:: perl

     my @GenericAgents = (
         {
             Name => 'JobName',
             Data => {
                 Valid => '1',
 
                 # Automatic execution (multiple tickets)
                 ScheduleMinutes => [
                     '16'
                 ],
                 ScheduleHours => [
                     '4'
                 ],
                 ScheduleDays => [
                     '5'
                 ],
 
                 # Event based execution (single ticket)
                 EventValues => [
                     'TicketCreate'
                     # SysConfig - Events###Ticket
                     # SysConfig - Events###Article
                 ],
 
                 # Select Tickets
                 TicketNumber      => '1234',
                 Title             => 'Title',
                 CustomerID        => 'Kundennummer',
                 CustomerUserLogin => 'Kundenbenutzer',
                 From              => 'VonZnuny',
                 To                => 'AnZnuny',
                 Cc                => 'CCZnuny',
                 Body              => 'Text',
                 Subject           => 'Subject',
                 ServiceIDs        => [
                     '1'
                 ],
                 SLAIDs => [
                     '1'
                 ],
                 PriorityIDs => [
                     '3'
                 ],
                 QueueIDs => [
                     '2',
                     '1'
                 ],
                 StateIDs => [
                     '4'
                 ],
                 OwnerIDs => [
                     '1'
                 ],
                 LockIDs => [
                     '1'
                 ],
                 Search_DynamicField_Text => '',
 
                 EscalationResponseTimeSearchType => '',
                 EscalationSolutionTimeSearchType => '',
                 EscalationTimeSearchType         => '',
                 EscalationUpdateTimeSearchType   => '',
                 LastChangeTimeSearchType         => '',
                 TimePendingSearchType => '',
                 TimeSearchType        => '',
                 ChangeTimeSearchType => '',
                 CloseTimeSearchType  => '',
 
                 # Update/Add Ticket Attributes
                 NewPendingTime       => '',
                 NewCustomerID        => 'Znuny',
                 NewCustomerUserLogin => 'Customer',
                 NewLockID            => '1',
                 NewOwnerID           => '1',
                 NewPendingTimeType   => '60',
                 NewPriorityID        => '1',
                 NewQueueID           => '2',
                 NewSLAID             => '3',
                 NewServiceID         => '7',
                 NewStateID           => '1',
                 NewTitle             => 'New Title',
                 DynamicField_Text    => '',
 
                 # Add Note
                 NewNoteFrom      => 'support@znuny.com',
                 NewNoteSubject   => 'Znuny Note Subject',
                 NewNoteBody      => 'Znuny Note Text',
                 NewNoteTimeUnits => '1604',
 
                 # Execute Ticket Commands
                 NewCMD                => '',
                 NewSendNoNotification => '0',
                 NewDelete             => '0',
 
                 # Execute Custom Module
                 NewModule      => '',
                 NewParamKey1   => '',
                 NewParamKey2   => '',
                 NewParamKey3   => '',
                 NewParamKey4   => '',
                 NewParamKey5   => '',
                 NewParamKey6   => '',
                 NewParamValue1 => '',
                 NewParamValue2 => '',
                 NewParamValue3 => '',
                 NewParamValue4 => '',
                 NewParamValue5 => '',
                 NewParamValue6 => '',
             },
             UserID => 1,
         },
     );
 
     my $Success = $ZnunyHelperObject->_GenericAgentCreate( @GenericAgents );


Returns:


.. code-block:: perl

     my $Success = 1;



_GenericAgentCreateIfNotExists()
================================


creates generic agents if not exists


.. code-block:: perl

     my @GenericAgents = (
         {
             Name => 'JobName',
             Data => {
                 Valid => '1',
                 # ...
                 Title => 'Test'
             },
             UserID => 1,
         },
     );
 
     my $Success = $ZnunyHelperObject->_GenericAgentCreateIfNotExists( @GenericAgents );


Returns:


.. code-block:: perl

     my $Success = 1;



_ArticleActionsAdd()
====================


Adds article action menu items.


.. code-block:: perl

     my %ArticleActions = (
         Internal => [ # Channel name (Internal, Phone, Email or Invalid)
             {
                 Key      => 'ZnunyMarkTicketSeenUnseen',
                 Module   => 'Kernel::Output::HTML::ArticleAction::MyMenuItem',
                 Priority => 999,
             },
         ],
     );
 
     my $Success = $ZnunyHelperObject->_ArticleActionsAdd(%ArticleActionMenuItems);


Returns:


.. code-block:: perl

     my $Success = 1;



_ArticleActionsRemove()
=======================


Removes article action menu items.


.. code-block:: perl

     my %ArticleActions = (
         Internal => [ # Channel name (Internal, Phone, Email or Invalid)
             {
                 Module   => 'Kernel::Output::HTML::ArticleAction::MyMenuItem',
                 Priority => 999,
             },
         ],
     );
 
     my $Success = $ZnunyHelperObject->_ArticleActionsRemove(%ArticleActions);


Returns:


.. code-block:: perl

     my $Success = 1;




