如何通过SugarCRM中的钩子区分价值与现有价值?

时间:2017-02-14 05:00:02

标签: sugarcrm

我正在尝试使用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
    }

感谢。

2 个答案:

答案 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的当前值感兴趣。