Как прочитать из модуля все его Key -> Content ?

Обсуждение вопросов и решений

Модератор: ykolesnikov

Ответить
VARD32
OTRS Новобранец
Сообщения: 55
Зарегистрирован: 09 фев 2017, 15:18

Как прочитать из модуля все его Key -> Content ?

Сообщение VARD32 » 27 фев 2017, 21:23

Здравствуйте.
Есть модуль:

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

   <ConfigItem Name="Company::Frontend::MyModule###PriorityMappings" Required="0" Valid="1">
	<Description Translatable="1">FrontendModule for priority mapping.</Description>
	<Group>Company</Group>
	<SubGroup>Company::Frontend::MyModule</SubGroup>
	<Setting>
	    <Hash>
		<Item Key="1 very low">C</Item>
		<Item Key="1 Консультация">C</Item>
		<Item Key="2 low">B</Item>
		<Item Key="2 Небольшая">B</Item>
	        <Item Key="3 normal">B</Item>
                <Item Key="3 Крупная">B</Item>
	        <Item Key="4 high">A</Item>
		<Item Key="4 Критическая">A</Item>
	        <Item Key="5 very high">A</Item>
	        <Item Key="5 Неотложная">A</Item>
	    </Hash>   
	</Setting>
   </ConfigItem>
Мне надо прочитать все его "пары" Ключ:Значение. Понятно что не по одному а как то в цикле...

Знаю как прочитать значение по ключу:

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

my $config = $Kernel::OM->Get('Kernel::Config');
my $priority = $config->Get('Company::Frontend::MyModule')->{'PriorityMappings'}->{"3 normal"};
но это не совсем то. Мне нужно просто куда то в массив записать названия всех приоритетов т.е. "1 very low", "1 Консультация", .. и т.д.

Подскажите пожалуйста как это можно сделать?

Artjoms
OTRS Новобранец
Сообщения: 34
Зарегистрирован: 06 окт 2011, 17:36
Откуда: Latvija

Re: Как прочитать из модуля все его Key -> Content ?

Сообщение Artjoms » 27 фев 2017, 21:46

Используйте структуру данных "HASH" (ассоциативный массив) - Читать маны


Пример навскидку:

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

my $configHashRef= $Kernel::OM->Get('Kernel::Config')->Get('Company::Frontend::MyModule')->{'PriorityMappings'};

# check with OTRS inbuilt method IsHashRefWithData
if ( IsHashRefWithData( $configHashRef ) ) {
    for my $entry( sort keys %{$configHashRef} ) {
       # do something
       my $myKey = $entry;
       my $myValue = {$configHashRef}->{$entry};
    }
}
Smile :)
----------------------------------------
Artjoms Petrovs
System Analyst / Системный Аналитик
Software Developer / Разработчик Информационных Систем
----------------------------------------
OTRS 5 Patch Level 9

VARD32
OTRS Новобранец
Сообщения: 55
Зарегистрирован: 09 фев 2017, 15:18

Re: Как прочитать из модуля все его Key -> Content ?

Сообщение VARD32 » 28 фев 2017, 08:29

Artjoms,
В Вашем примере есть ошибочка:

заместо

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

my $myValue = {$configHashRef}->{$entry};
нужно написать:

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

my $myValue = $configHashRef->{$entry};
Огромное Вам человеческое спасибо! Реально помогли!

Ответить