在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的属性?
答案 0 :(得分:1)
这就是SugarCRM / SuiteCRM处理NEW与现有bean的方式。
获取的行用于在更新之前获取先前的值。 如果它为空,则表示正在创建bean。
$date_entered = $bean->fetched_row['date_entered'];
此值是要保存的值。
$date_entered = $bean->date_entered;
事实上,要检测到您正在处理CREATION而不是编辑,您可以检查空$bean->fetched_row['id']
这对于新创建的实体是空的。