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

bean object in hooks: What are the rules to allow access to a field as a property or in an array() belonging to property fetched_row

在 suitecrm 7.8 中,我一直在研究 after_save 逻辑挂钩功能 ()。

我在为 after_save_class_method 中的给定模块实现的 SugarBean 对象中获得一致模式的现有字段值时遇到了一些困难=19=].

我解释一下: 在 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}.

为了了解发生了什么,我在我的 <after save class name> 中放置了一个 var_dump($bean),一个关于 AOS_Quotes 和一个关于 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>",
      ....
    }
    ...
}

它确认对象 AOS_Quotes 上存在 属性 fetched_row。我可以使用 $bean->{field_name} 模式访问大部分字段,除了名为 date_entered 的字段(我的猜测是 date_entered 不应该被用户在 after_save 钩子因此不应作为 属性)

访问

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

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

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

我想知道在 SugarBean 对象中设置可访问性的规则和设置是什么:

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

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

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

这个值就是要保存的值。

$date_entered = $bean->date_entered;

事实上,要检测您处理的是 CREATION 而不是 EDIT,您可以检查是否为空 $bean->fetched_row['id'] 这对于新创建的实体来说是空的。