所以我最近一直在广泛地使用SugarCRM,我需要能够显示联系人最后一次发送电子邮件的日期,以及根据联系人多久前发送电子邮件进行搜索。
我可以很容易地创建一个逻辑挂钩来获取最后一封电子邮件的日期,但我不能基于它的值进行搜索。
因此,我在SearchFields.php中查找了以下代码,该代码显然可以获得联系人的电子邮件。
'email' =>
array (
'query_type' => 'default',
'operator' => 'subquery',
'subquery' => 'SELECT eabr.bean_id FROM email_addr_bean_rel eabr JOIN email_addresses ea ON (ea.id = eabr.email_address_id) WHERE eabr.deleted=0 AND ea.email_address LIKE',
'db_field' =>
array (
0 => 'id',
),
),
使用这些数据,我决定使用以下代码创建一个新的数组,以获取最后一封电子邮件的日期。显然,如果联系人被多次发送电子邮件,但你明白了,那么需要对其进行排序或其他事情来获得实际的最后一封电子邮件日期。
'last_email_c' =>
array (
'query_type' => 'default',
'operator' => 'subquery',
'subquery' => 'SELECT e.date_sent FROM emails e WHERE e.parent_type = ''Contacts'' AND e.parent_id = ''{0}''',
'db_field' =>
array (
0 => 'id',
),
),
我的问题是,我不知道该如何处理这个新的子查询,我检查了listviewdefs和searchdefs,但找不到对这两个自定义SearchFields的任何引用。
我错过了什么?
试试这个。基本上,当您使用子查询时,您必须假设表单中的参数将添加到子查询的末尾,因此如果您搜索blah@blah.comsugar将附加到您的子查询'blah@blah.com%所以LIKE操作符是实现的唯一方法
t_email_c' => array (
'query_type' => 'default',
'operator' => 'subquery',
'subquery' => 'SELECT e.date_sent FROM emails e WHERE e.parent_type = ''Contacts'' AND e.parent_id LIKE ',
'db_field' =>
array (
0 => 'id',
),
此外,您还应该选择父记录的id,这样它就可以与父记录相匹配。
基本上,在您的子查询中,您应该选择一个联系人ID,其中最后一个电子邮件日期是这样的。
若不能以这种方式编写查询,则需要覆盖list.view操作。