复制 n:n 对象
复制 n:n 对象。
本文档介绍如何在 iTop 中使用对象复制器扩展复制 n:n 关系,例如从 FunctionalCI 创建工单时自动复制关联的联系人。更多详细内容请参考 iTop 官方文档。
前提条件
目标
丰富 User actions configurator 扩展,以复制关系。
示例:从 FunctionalCI 创建工单时,检索链接到该 FunctionalCI 的联系人,并自动将其链接到工单。
public function CopyContactsFromFunctionalCI($oSource)
{
// 此方法应从 FunctionalCI 调用
$sSourceClass = get_class($oSource);
if ($sSourceClass != 'FunctionalCI')
{
throw new Exception("Wrong source class '$sSourceClass' :
CopyContactsFromFunctionalCI method should be called by a user action on a FunctionalCI!");
}
// 此方法被调用两次:
// 创建表单显示时:'????'
// 保存时:'apply_new'
// 仅在一个情况下复制链接,避免链接重复
$sOperation= utils::ReadPostedParam('operation');
if ($sOperation == 'apply_new')
{
return;
}
// 获取相关对象列表
$oSetSrc = new CMDBObjectSet(DBObjectSearch::FromOQL("
SELECT Contact AS c
JOIN lnkContactToFunctionalCI AS l1 ON l1.contact_id = c.id
WHERE l.functionalci_id = :id"), array(), array('id'=>$oSource->GetKey()));
// 更简单的方案:$oSetSrc = $oSource->Get('contacts_list');
$oSetDst = $this->Get('contacts_list');
while ($oSrc = $oSetSrc->Fetch())
{
$oLnkDst = MetaModel::NewObject('lnkContactToTicket');
$oLnkDst->Set('contact_id', $oSrc->GetKey());
$oSetDst->AddItem($oLnkDst);
}
$this->Set('contacts_list', $oSetDst);
}
原文:https://www.itophub.io/wiki/page?id=3_2_0:customization:object-copier-linkedset
版本:3_2_0/customization/object-copier-linkedset.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1