我正在尝试使用after_save
逻辑挂钩,如果我是Leads中的更新受让人,则应将同一受让人分配给其相关的Notes。以下是我正在使用的代码。我目前在6.5企业。有没有人知道如何比较这两个值?
在modules / Leads / logic_hook.php
中$hook_array['after_save'] = Array();
$hook_array['after_save'][] = Array(1, 'Leads edited', 'custom/modules/Leads/ExtraLogic.php', 'ExtraLogic', 'saveAssigneeToNotes');
在custom / modules / Leads / ExtraLogic.php
中 //check if a fields value has changed
if ($assigned_user_id != $bean->assigned_user_id)
{
// execute logic
} else {
// Same value
}
感谢。
答案 0 :(得分:0)
在这种情况下,简单地使用before_save
逻辑钩子会更容易。我建议在官方文档中查看不同的用例:Module Hooks。
这是我如何更新笔记'相关潜在客户已分配用户更改后的分配用户:
在custom/modules/Leads/logic_hooks.php
中包含此条目,
<?php
$hook_version = 1;
$hook_array = array();
$hook_array['before_save'] = array();
$hook_array['before_save'][] = array(
50,
'Update Assigned User for Notes',
'custom/modules/Leads/NotesUpdater.php',
'NotesUpdater',
'updateOnAssignedUserChange',
);
该文件设置对要调用的文件,类和方法的引用。现在使用以下内容创建custom/modules/Leads/NotesUpdater.php
<?php
class NotesUpdater
/**
* @param $bean Lead
* @param $event string e.g. 'before_save'
* @param $arguments array
*/
public function updateOnAssignedUserChange($bean, $event, $arguments){
// skip if this is a new record, since there are no related Notes yet
if(empty($bean->fetched_row)) return TRUE;
// check for a change on the Assigned User on the Lead
if($bean->assigned_user_id != $bean->fetched_row['assigned_user_id]){
$bean->load_relationship('notes');
foreach($bean->notes->getBeans() as $note){
$note->assigned_user_id = $bean->assigned_user_id;
// if the Note record was changed, save it
// (otherwise there is no need to save)
if($note->assigned_user_id != $note->fetched_row['assigned_user_id']){
$note->save();
}
}
}
}
这种检测变化并对其作用的方法可以通过上述before_save
逻辑钩100%完成。 IMO对after_save
挂钩的使用很少且非常具体,但如果您将来需要它,SugarCRM的开发人员博客条目Doing before/after field comparisons in after_save logic hooks将介绍如何使用它。
答案 1 :(得分:0)
你不必比较任何值(至少在SugarCRM 7中没有,不确定6.5),因为SugarCRM已经为你做了这个:
通常使用这些参数调用挂钩:($bean, $event, $arguments
)。
在after_save
挂钩中,$arguments
在更改指定用户时会显示如下内容:
Array
(
[isUpdate] => 1
[dataChanges] => Array
(
[date_modified] => Array
(
[field_name] => date_modified
[data_type] => datetime
[before] => 2016-12-28 22:05:50
[after] => 2017-02-21 19:23:42
)
[modified_by_name] => Array
(
[field_name] => modified_by_name
[data_type] => relate
[before] => Administrator
[after] => admin
)
[assigned_user_id] => Array
(
[field_name] => assigned_user_id
[data_type] => id
[before] => d4229698-640b-18f9-af63-179b140cfa7a
[after] => a4329698-640b-18f9-af63-179b140cfe76
)
)
)
(将file_put_contents('/tmp/after_save_arguments.txt', print_r($arguments, true));
放入after_safe
挂钩生成的代码
所以你需要的所有信息都应该在那里。
您可以检查array_key_exists('assigned_user_id', $arguments['dataChanges'])
并使用$bean
的当前变量对新值执行某些逻辑。
如果您还需要执行有关旧值的逻辑,那么您可以使用$arguments['dataChanges']['assigned_user_id']['before']
。
哦,对了,也不要忘记检查是否isUpdate == false
,因为在那种情况下,刚刚新创建了bean,dataChanges
将为空,因为之前的记录不存在。
在这种情况下,您只对$bean
的当前值感兴趣。