钩子中的 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 对象中设置可访问性的规则和设置是什么:
在 属性 fetched_row
中包含 <field_name>
在 array()
;
或者直接将 <field_name>
作为 SugarBean 的 属性?
这就是 SugarCRM/SuiteCRM 处理新 bean 与现有 bean 的方式。
获取的行用于获取更新前的先前值。
如果为空,则表示正在创建bean。
$date_entered = $bean->fetched_row['date_entered'];
这个值就是要保存的值。
$date_entered = $bean->date_entered;
事实上,要检测您处理的是 CREATION 而不是 EDIT,您可以检查是否为空 $bean->fetched_row['id']
这对于新创建的实体来说是空的。
在 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 对象中设置可访问性的规则和设置是什么:
在 属性
fetched_row
中包含<field_name>
在array()
;或者直接将
<field_name>
作为 SugarBean 的 属性?
这就是 SugarCRM/SuiteCRM 处理新 bean 与现有 bean 的方式。
获取的行用于获取更新前的先前值。 如果为空,则表示正在创建bean。
$date_entered = $bean->fetched_row['date_entered'];
这个值就是要保存的值。
$date_entered = $bean->date_entered;
事实上,要检测您处理的是 CREATION 而不是 EDIT,您可以检查是否为空 $bean->fetched_row['id']
这对于新创建的实体来说是空的。