在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的
<?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访问大多数字段(我的猜测是,用户不应该在after_save钩子中修改date_entered,因此不应该作为属性访问)。
在关于“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>发布于 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'] --对于新创建的实体,这是空的。
https://stackoverflow.com/questions/50250736
复制相似问题