在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>
答案 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
}
}
}