iTop - Получить IP звонящего в билетах
В iTop, как можно сохранить IP-адрес звонящего в тикете (запрос пользователя и инцидент)
Я попытался изменить datamodel.itop-tickets.xml в моем модуле расширения. Я успешно добавил поле с именем "ip", но в <methods>
раздел я не могу получить IP клиента с помощью $_SERVER['REMOTE_ADDR']
,
<methods>
<method id="DBInsertNoReload" _delta="redefine">
<static>false</static>
<access>public</access>
<type>Overload-DBObject</type>
<code><![CDATA[
public function DBInsertNoReload()
{
$oMutex = new iTopMutex('ticket_insert');
$oMutex->Lock();
$iNextId = MetaModel::GetNextKey(get_class($this));
$sRef = $this->MakeTicketRef($iNextId);
$this->Set('ref', $sRef);
$iKey = parent::DBInsertNoReload();
$oMutex->Unlock();
return $iKey;
$this->Set('ip', $_SERVER['REMOTE_ADDR'] );
}
]]></code>
</method>
</methods>
2 ответа
Есть и другой вариант, в таможенное расширение itop можно включить еще одну модель данных. (вы можете использовать XML или PHP datamodel). Итак, вам нужно создать новый php-файл и написать класс, который вы хотите внутри, чтобы расширить модель данных. Вы должны расширить их с помощью: https://www.combodo.com/documentation/api-ref-extensions/packages/Extensibility.html
Если вы используете интерфейс "iApplicationObjectExtension", вы можете использовать метод OnDBInsert для установки другого поля в вашем объекте /
например
Class YourClassName implements iApplicationObjectExtension {
public function OnIsModified($oObject){}
public function OnCheckToWrite($oObject){}
public function OnCheckToDelete($oObject){}
public function OnDBUpdate($oObject, $oChange = null){}
public function OnDBDelete($oObject, $oChange = null){}
public function OnDBInsert($oObject, $oChange = null) {
if ($oObject instanceof UserRequest) {
// Do what you want with $oObject
$oObject->DBUpdate(); // Update object
}
}
}
После множества попыток я наконец нашел решение:) Мы должны переопределить метод типа LifeCycleAction, и поэтому я только что переопределил метод ComputeImpactedItems в классах Inciudent и UserRequest.
Для большей ясности я покажу один из них здесь:
<class id="Incident">
<methods>
<method id="ComputeImpactedItems" _delta="redefine">
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
<code><![CDATA[ public function ComputeImpactedItems()
{
// This method is kept for backward compatibility
// in case a delta redefines it, but you may call
// UpdateImpactedItems directly
$this->UpdateImpactedItems();
// This line is added by this exstension for saving caller's ip
$this->Set('ip', $_SERVER['REMOTE_ADDR']);
}]]></code>
</method>
</methods>
</class>