日志更新时重新分配工单
当客户在门户中更新工单日志时,自动将工单重新分配给处理人。
本文档介绍如何在客户更新工单日志时自动重新分配工单。更多详细内容请参考 iTop 官方文档。
目标
在本教程中,我们将了解当客户在门户工单案例日志中输入新条目时,如何强制自动将用户请求重新分配给处理人的不同解决方案。
通常,当客户在用户门户中提供信息或询问有关正在进行的工单的问题时,我们希望工单处理人能够知晓并响应工单,最简单的方式就是重新分配工单。使用 “Mail To Ticket Automation” 扩展可以相对容易地配置此功能,但在门户中则不然。
有多种方式可以实现。这里提供 2 种方法:
- 强制门户用户通过转换更新日志,该转换将重新分配工单
- 检查日志是否在门户中更新,并触发后台转换
通过转换更新
在 pending 状态下拒绝案例日志编辑
使用事件和 PHP 回调方法,在以下情况下使案例日志只读:
- 在门户中
- 处于
pending状态 - 不在转换中
/** * EVENT_DB_SET_ATTRIBUTES_FLAGS 的事件监听器 */ public function EvtSetAttributesFlags(Combodo\iTop\Service\Events\EventData $oEventData) { // $oEventData->Get('target_state') 如果不在转换中返回 null,否则提供转换的目标状态 if (ContextTag::Check('GUI:Portal') && ($this->Get('status') === 'pending') && ($oEventData->Get('target_state') == null)) { $this->AddAttributeFlags('public_log', OPT_ATT_READONLY); } }更改从 pending 到 assigned 的转换所使用的激励,将
ev_assign替换为ev_reopen,这是允许门户用户使用的激励。在转换中强制编辑案例日志(必须提示)
后台强制转换
使用 EVENT_DB_AFTER_WRITE 事件和回调方法,如果条件匹配,则应用适当的激励以重新分配工单。
public function EvtAfterWriteUserRequest(Combodo\iTop\Service\Events\EventData $oEventData)
{
// 不在创建中,也不在转换中
if (!$oEventData->Get('is_new') && $oEventData->Get('stimulus_applied') === null) {
$sStatus = $this->Get('status');
if (ContextTag::Check('GUI:Portal') && in_array($sStatus, ['pending', 'resolved'])) {
// 此操作期间所做的更改列表
$aChanges = $oEventData->Get('changes') ?? [];
if (array_key_exists('public_log', $aChanges))
{
$sStimulus = ($sStatus === 'resolved') ? 'ev_reopen' : 'ev_assign';
$this->ApplyStimulus($sStimulus);
}
}
}
}
原文:https://www.itophub.io/wiki/page?id=3_2_0:customization:reassign-on-log-update
版本:3_2_0/customization/reassign-on-log-update.txt · Last modified: 2025/08/12 14:41 by 127.0.0.1