钩子中的bean对象:允许作为属性或属于属性fetched_row的数组()访问字段的规则是什么

时间:2018-05-09 10:09:03

标签: sugarcrm suitecrm

在suitecrm 7.8中,我一直在研究after_save逻辑钩子函数(see answer to that question)。

SugarBean中针对给定模块实施的after_save_class_method中的[suitecrm folder]/custom/modules/<module name>/<after save class name>.php对象的现有字段的值中,我有一点难以获得一致的模式

我解释说: 在AOS_Quotes中获取字段date_entered的值,我必须这样做:             $date_entered = $bean->fetched_row['date_entered'];

如果我尝试$bean->date_entered,该属性将不存在于该对象上,而其他属性是可通过该模式直接访问的字段。

然而在AOS_Products_Quotes中,如果我试图通过属性$bean->fetched_row[{field_name}]获取字段的值,那么它将无效并且我必须使用此模式获取字段:$bean->{field_name}

为了理解发生了什么,我在var_dump($bean)<after save class name>以及关于AOS_Quotes的{​​{1}}中都放置了AOS_Products_Quotes

<?php

    if (!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');

    class <after save class name>
    {
        function after_save_method($bean, $event, $arguments)
        {
            //logic
            echo '<pre>';
            var_dump($bean);
            echo '</pre>';
            exit;


        }
    }

?>

在关于'AOS_Quotes'的那个中,var_dump的结果给出:

object(AOS_Quotes)#46 (141) {
    ...
    ["fetched_row"]=>
    array(51) {
      ["id"]=>
      string(36) "<some id>",
      ....
    }
    ...
}

确认对象fetched_row上存在属性AOS_Quotes。我可以使用模式$bean->{field_name}访问大多数字段,但名为date_entered的字段除外(我的猜测是date_entered不应该由用户在after_save挂钩中更改,因此应该不能作为财产访问)

在关于'AOS_Products_Quotes'的那个中,var_dump的结果给出了:

object(AOS_Products_Quotes)#428 (94) {
...
  ["fetched_row"]=>
  bool(false)
...
}

确认对象fetched_row上不存在属性AOS_Products_Quotes

我想知道在SugarBean对象中设置辅助功能的规则和设置是什么:

  • fetched_row中包含<field_name>的属性array();

  • 或直接将<field_name>作为SugarBean的属性?

1 个答案:

答案 0 :(得分:1)

这就是SugarCRM / SuiteCRM处理NEW与现有bean的方式。

获取的行用于在更新之前获取先前的值。 如果它为空,则表示正在创建bean。

$date_entered = $bean->fetched_row['date_entered'];

此值是要保存的值。

$date_entered = $bean->date_entered;

事实上,要检测到您正在处理CREATION而不是编辑,您可以检查空$bean->fetched_row['id']这对于新创建的实体是空的。