iTop - 在门票

时间:2017-08-14 15:36:57

标签: customization itil

在iTop中,如何在门票中保存来电者的IP地址(用户请求和事件)

我尝试修改扩展模块中的 datamodel.itop-tickets.xml 。我成功添加了一个名为'ip'的字段,但在<methods>部分我无法使用$_SERVER['REMOTE_ADDR']获取客户端的IP。

<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 个答案:

答案 0 :(得分:0)

经过多次尝试后我终于找到了解决办法:) 我们必须重新定义 LifeCycleAction 类型的方法,因此我在 Inciudent 中重新定义了 ComputeImpactedItems 方法和 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>

答案 1 :(得分:0)

还有另一种选择,在itop海关扩展中,您可以包含另一个数据模型。 (您可以使用XML或PHP数据模型)。 因此,您必须创建一个新的php文件并编写您想要的类来扩展数据模型。您必须使用以下内容扩展它们:https://www.combodo.com/documentation/api-ref-extensions/packages/Extensibility.html

如果您使用界面&#34; iApplicationObjectExtension&#34;,您可以使用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
        }
    }
}