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>
Другие вопросы по тегам