首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >钩子中的bean对象:允许作为属性或属于属性fetched_row的数组()访问字段的规则是什么

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

Stack Overflow用户
提问于 2018-05-09 10:09:02
回答 1查看 857关注 0票数 0

在SUCARM7.8中,我一直在研究after_save逻辑钩子功能(see answer to that question)。

我要用一个一致的模式来获得一个现有字段的值,这是为在SugarBean [suitecrm folder]/custom/modules/<module name>/<after save class name>.php**.**中为给定模块实现的 after_save_class_method 中的对象中存在的字段的值。

我解释:在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>中放置了一个<after save class name>,一个是关于AOS_Quotes的,一个是关于AOS_Products_Quotes

代码语言:javascript
复制
<?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的结果给出了:

代码语言:javascript
复制
object(AOS_Quotes)#46 (141) {
    ...
    ["fetched_row"]=>
    array(51) {
      ["id"]=>
      string(36) "<some id>",
      ....
    }
    ...
}

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

在关于“AOS_Products_Quotes”的一个例子中,var_dump的结果给出了:

代码语言:javascript
复制
object(AOS_Products_Quotes)#428 (94) {
...
  ["fetched_row"]=>
  bool(false)
...
}

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

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

  • 属性fetched_row <field_name> 中的,其中包含 array()**;**中的<field_name>
  • 或将直接用作SugarBean?的属性。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-09 15:02:00

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

获取的行用于在更新之前获取先前的值。如果它是空的,则意味着正在创建bean。

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

这个值将被保存。

$date_entered = $bean->date_entered;

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50250736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档