ZnunyHelper

Contents

ZnunyHelper#

NAME#

Kernel::System::ZnunyHelper

DESCRIPTION#

All ZnunyHelper functions.

PUBLIC INTERFACE#

new()#

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

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

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

Returns:

my $ItemID = 123;

_PostmasterXHeaderAdd()#

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

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.

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.

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.

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.

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

Returns as HASH:

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:

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.

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:

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.

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:

my $Success = 1;

_DefaultColumnsDisable()#

This function disables the given Attributes for the requested DefaultColumns.

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:

my $Success = 1;

_DynamicFieldsDefaultColumnsGet()#

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

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:

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.

my @Configs = (
    'Ticket::Frontend::AgentTicketSearch###Defaults###DynamicField',
    'Ticket::Frontend::CustomerTicketZoom###FollowUpDynamicField',
    'Ticket::Frontend::AgentTicketSearch###SearchCSVDynamicField',
);

my %Configs = $ZnunyHelperObject->_DynamicFieldsDefaultColumnsGet(@Configs);

Returns:

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.

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:

my $Success = 1;

_DynamicFieldsScreenDisable()#

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

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:

my $Success = 1;

_DynamicFieldsDelete()#

This function delete the defined dynamic fields

my @DynamicFields = (
    'TestDynamicField1',
    'TestDynamicField2',
    'TestDynamicField3',
);

my $Success = $ZnunyHelperObject->_DynamicFieldsDelete(@DynamicFields);

Returns:

my $Success = 1;

_DynamicFieldsDisable()#

This function disables the defined dynamic fields

my @DynamicFields = (
    'TestDynamicField1',
    'TestDynamicField2',
    'TestDynamicField3',
);

my $Success = $ZnunyHelperObject->_DynamicFieldsDisable(@DynamicFields);

Returns:

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

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:

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

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:

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.

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

Returns:

my $FieldOrder = 101;

DynamicFieldValueCreate()#

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

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

Returns:

my $Success = 1;

_DynamicFieldsConfigExport()#

exports configuration of all dynamic fields

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:

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

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

Returns:

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

%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:

my $Success = 1;

_PostMasterFilterCreateIfNotExists()#

creates all postmaster filter that are necessary

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:

my $Success = 1;

_PostMasterFilterCreate()#

creates all postmaster filter that are necessary

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:

my $Success = 1;

_PostMasterFilterConfigExport()#

exports configuration of all postmaster filter

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

_PostMasterFilterConfigImport()#

imports configuration of postmaster filter via yml

    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:

my $Success = 1;

_GroupCreateIfNotExists()#

creates group if not exists

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

Returns:

my $Success = 1;

_RoleCreateIfNotExists()#

creates role if not exists

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

Returns:

my $Success = 1;

_TypeCreateIfNotExists()#

creates Type if not exists

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

Returns:

my $Success = 1;

_PriorityCreateIfNotExists()#

creates Priority if not exists

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

Returns:

my $Success = 1;

_StateCreateIfNotExists()#

creates State if not exists

# 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:

my $Success = 1;

_StateDisable()#

disables a given state

my @States = (
    'State1',
    'State2',
);

my $Success = $ZnunyHelperObject->_StateDisable(@States);

Returns:

my $Success = 1;

_StateTypeCreateIfNotExists()#

creates state types if not exists

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

_ServiceCreateIfNotExists()#

creates Service if not exists

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

Returns:

my $Success = 1;

_SLACreateIfNotExists()#

creates SLA if not exists

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:

my $Success = 1;

_UserCreateIfNotExists()#

creates user if not exists

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:

my $User = 123;

_CustomerUserCreateIfNotExists()#

creates CustomerUser if not exists

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:

my $CustomerUserLogin = 'mhuber';

_QueueCreateIfNotExists()#

creates Queue if not exists

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

Returns:

my $QueueID = 123;

_GeneralCatalogItemCreateIfNotExists()#

adds a general catalog item if it does not exist

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

Returns:

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.

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

Returns:

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.

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

Returns:

my $DefinitionID = 1234;

_ITSMConfigItemVersionAdd()#

adds or updates a ConfigItem version.

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:

my $VersionID = 1234;

_ITSMConfigItemVersionExists()#

checks if a version already exists without returning a error.

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

or

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

Returns:

my $Found = 1;

_ITSMConfigItemVersionGet()#

get a ConfigItem version.

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:

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.

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:

my $Success = 1;

_ParseData2XML()#

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

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:

my $Success = 1;

_WebserviceCreateIfNotExists()#

creates web services that not exist yet

# 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:

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

_WebserviceCreate()#

creates or updates web services

# 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:

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

_WebserviceDelete()#

deletes web services

# 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:

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

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.

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

Returns:

my $Success = 1;

_ProcessCreateIfNotExists()#

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

# 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:

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

_ProcessCreate()#

creates or updates processes

# 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:

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

_ProcessesGet()#

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

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

# get ProcessWidgetDynamicFieldGroups
my %ProcessWidgetDynamicFieldGroups = $ZnunyHelperObject->_ProcessWidgetDynamicFieldGroupsGet();

return:

%ProcessWidgetDynamicFieldGroups = (
    Group1 = [
        'DynamicField1',
        'DynamicField3',
    ],
    Group2 = [
        'DynamicField2',
    ],
);

_ProcessWidgetDynamicFieldGroupsAdd()#

gets ProcessWidgetDynamicFieldGroups

my %ProcessWidgetDynamicFieldGroups = (
    Group1 = [
        'DynamicField1',
        'DynamicField3',
    ],
    Group2 = [
        'DynamicField2',
    ],
);

my $Success = $ZnunyHelperObject->_ProcessWidgetDynamicFieldGroupsAdd(
    %ProcessWidgetDynamicFieldGroups
);

_ProcessWidgetDynamicFieldGroupsRemove()#

gets ProcessWidgetDynamicFieldGroups

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.

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.

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

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:

my $Success = 1;

_NotificationEventCreateIfNotExists()#

creates notification event if not exists

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:

my $NotificationID = 123;

_StandardTemplateCreate()#

create or update standard template

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:

my $Success = 1;

_GenericAgentCreate()#

creates or updates generic agents

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:

my $Success = 1;

_GenericAgentCreateIfNotExists()#

creates generic agents if not exists

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

my $Success = $ZnunyHelperObject->_GenericAgentCreateIfNotExists( @GenericAgents );

Returns:

my $Success = 1;

_ArticleActionsAdd()#

Adds article action menu items.

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:

my $Success = 1;

_ArticleActionsRemove()#

Removes article action menu items.

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

my $Success = $ZnunyHelperObject->_ArticleActionsRemove(%ArticleActions);

Returns:

my $Success = 1;