Ticket Creation from eMails (обращение к подклассу)

Доброго дня!
Возникла задача: по умолчанию создавать service_request вместо incident

В Ticket Default Values прописываю
request_type: service_request

Только это не работает потому что у класса Ticket нет такого параметра, зато есть у дочернего UserRequest
При этом задан параметр Ticket Class=User Request

Подозреваю, что как-то можно задавать параметры подклассов. помогите разобраться с синтаксисом.

забыл указать версии
itop version: 2.1.0
Ticket Creation from eMails version: 2.6.5

грубый способ тоже не сработал:

	public function CreateTicketFromEmail(EmailMessage $oEmail, Contact $oCaller)
	{
...

if (MetaModel::IsValidAttCode(get_class($oTicket), 'request_type'))
{
	$oTicket->Set('request_type', 'service_request');
}
...

Это как? Вместо Инцидентов регистрировать Запросы?

Какие модули тикетов установлены?
Выложи настройки Ticket Creation from eMails.

$oTicket = MetaModel::NewObject($this->Get('target_class'));

не могу понять, почему создается объект класса Ticket, тогда как указан класс UserRequest

Не пойму, где ты это видишь? Класс Ticket является родителем для UserRequest.

Еще раз, какие модули тикетов установлены в iTop?

обращения на почту только для запросов незарегистрированных пользователей. Если потребуется - оператор будет создавать инцидент

вручную создать запрос могу
модули установлены:
itop-incident-mgmt-itil
itop-request-mgmt
itop-request-mgmt-itil

все параметры, дотсупные для userRequest игнорируются

Это взаимоисключающие модули.

в настройках указан только itop-request-mgmt

я окончательно запутался.

Давай сначала.

  1. Лезешь в меню в правом верхнем углу (кнопка “on/off”) -> “Об этом iTop…” -> “Информация для технической поддержки”, копируешь всё сюда.
  2. Что и как должно работать, и как не работает (конкретно, по действиям)?

версия 2.1.0-2127 основан на 2014-12-17 20:26:15
Модель данных: 2.1.0
MySQL: 5.5.43-0+deb7u1
PHP: 5.4.39-0+deb7u2

External user authentication (1.0.0)
User authentication based on LDAP (1.0.0)
User authentication based on the local DB (1.0.0)
Send Ticket Log Updates by Email (1.0.0)
Tickets Attachments (2.1.0)
Links between virtualization and storage (2.1.0)
Configuration Management (CMDB) (2.1.0)
Datacenter Management (2.1.0)
End-user Devices Management (2.1.0)
Ticket Creation from Emails (Standard) (2.6.2)
Advanced Storage Management (2.1.0)
Virtualization Management (2.1.0)
Change Management (2.1.0)
Known Errors Database (2.1.0)
Problem Management (2.1.0)
Simple Ticket Management (2.1.0)
Service Management (2.1.0)
My cl (1.0.0)
My menu (1.0.0)

в момент прихода почты сейчас создается тип запроса= "инцидент"
я хочу чтобы создавался тип запроса= “запрос на обслуживание”

поменял в datamodel.itop-request-mgmt.xml

<field id="request_type" xsi:type="AttributeEnum">
  <values>
    <value id="incident">incident</value>
    <value id="service_request">service_request</value>
  </values>
  <sql>request_type</sql>
  <default_value>service_request</default_value>
  • так создается тип запроса= “запрос на обслуживание”

Так делать ни в коем случае нельзя. Все изменения стандартной модели данных только в отдельном модуле!

Как обходное решение назначение нужного значения по умолчанию подойдет.

В модуле получения почты неверно реализовано сравнение задаваемого значения по умолчанию с допустимыми значениями для данного поля. Это касается не только request_type, а всех полей выбора (impact, urgency и т.д.), у которых id не равно отображаемому значению (‘1’ => ‘A departament’, ‘2’ => ‘A service’ и т.д.). Исключение является поле Origin (Источник), для которого в англоязычном интерфейсе id и значения совпадают (‘mail’ => ‘mail’, ‘phone’ => ‘phone’ и т.д.).
Чтобы починить модуль, нужно в файле combodo-email-synchro\mailinbox.class.inc.php заменить цикл foreach строки 679 - 687:

foreach($aValues as $allowedValue)
{
	if ($allowedValue == $value)
	{
		$bFound = true;
		$oObj->Set($sAttCode, $value);
		break;
	}
}

на такой:

foreach($aValues as $allowedKey => $allowedValue)
{
	if ($allowedValue == $value || $allowedKey == $value)
	{
		$bFound = true;
		$oObj->Set($sAttCode, $value);
		break;
	}
}

В этом случае параметры Ticket Default Values:

request_type:service_request
impact:3
...

будут работать.

да уж …я уже поменял отображаемое значение на совпадающее, а протестировать не успел

спасибо, все заработало без обходного варианта )