Sugarcrm支持产品指南糖开发人员糖开发人员指南11.0建筑学过滤器

过滤器

概述

过滤器是预先定义搜索的方法,呈现呈现列表视图,弹出搜索和查找的记录列表。此页面介绍如何实现用于记录列表视图的各种类型的过滤器。 

过滤器包含以下属性:

财产 类型 描述
ID 细绳 过滤器的唯一标识符
名称 细绳  过滤器显示标签的标签键
filter_definition. 大批 过滤器定义适用于结果
可编辑 布尔基  确定用户是否可以编辑过滤器。
笔记:如果要为用户创建预定义过滤器,则应设置为false
is_template. 布尔基 与初始弹出过滤器一起使用以确定过滤器是否可用作模板

笔记:如果过滤器包含自定义字段,则必须在Studio中启用这些字段> {Module Name} > Layouts > Search.

运营商

运营商, defined in ./clients/base/filters/operators/operators.php., are expressions used by a filter to represent query operators. They are constructed in the filter_definition. to help generate the appropriate query syntax that is sent to the database for a specific field type. Operators can be defined on a global or module level. The accepted paths are listed below:

  • ./clients/base/filters/operators/operators.php.
  • ./custom/clients/base/filters/perators/operators.php.
  • ./modules/<module>/ clients/base/filters/operators.php.
  • ./custom/modules/<module>/ clients/base/filters/operators.php.

库存运算符列表如下所示:

操作员 标签/钥匙 描述
$包含
  • 是/ lbl_operator_contains.
    • 由多面元使用
匹配包含该值的任何东西。
$空
  • 是空的 / lbl_operator_empty.
    • 由枚举和标签使用
匹配空值。
$ not_contains.
  • 不是任何/ lbl_operator_not_contains.
    • 由多面元使用
匹配不包含指定值的任何内容。
$ not_empty.
  • 不是空的/ LBL_OPERATOR_NOT_EMPTY.
    • 由枚举和标签使用
匹配非空值。
$ in.
  • 是/ lbl_operator_contains.
    • enum,int,closate,teamset和标签使用
查找字段与指定为数组的值之一匹配的任何东西。
$ not_in.
  • 不是任何/ lbl_operator_not_contains.
    • 由枚举,相关,团队集和标签使用
查找字段与指定值数组中的任何值不匹配的内容。
$等于
  • 完全匹配/ lbl_operator_matches.
    • 由varchar,姓名,电子邮件,文本和textarea使用
  • 等于/ lbl_operator_equals.
    • 用货币,int,double,float,小数和日期使用
  • 是 / lbl_operator_is.
    • 由BOOL,电话,Radioenum和父母使用
在该字段上执行完全匹配。
$开始
  • 以。。开始 / lbl_operator_starts_with.
    • 由varchar,名称,电子邮件,文本,textarea和手机使用
  • 等于/ lbl_operator_equals.
    • DateTime和DateTimecombo使用
匹配任何以值开头的东西。
$ not_equals.
  • 不等于/ lbl_operator_not_equals.
    • 用货币,int,double,float和decimal使用
  • 不是 / lbl_operator_is_not.
    • 由Radeyenum使用
匹配非匹配值。
$ gt.
  • 大于/ lbl_operator_greater_than.
    • 用货币,int,double,float和decimal使用
  • 后 / lbl_operator_awter.
    • 日期使用
当字段大于值时匹配。
$ lt.
  • 小于 / lbl_operator_less_than.
    • 用货币,int,double,float和decimal使用
  • 前 / lbl_operator_before.
    • 日期使用
匹配字段小于值时。
$ GTE.
  • 大于或等于/ lbl_operator_greater_than_or_equals.
    • 用货币,int,double,float和decimal使用
  • 后 / lbl_operator_awter.
    • DateTime和DateTimecombo使用
当字段大于或等于该值时匹配
$ lte.
  • 小于或等于/ lbl_operator_less_than_or_equals.
    • 用货币,int,double,float和decimal使用
  • 前 / lbl_operator_before.
    • DateTime和DateTimecombo使用
当字段小于或等于值时匹配。
之间
  • 在。。。之间 / lbl_operator_between.
    • 用货币,int,double,float和decimal使用
当数值在另外两个数值之间时匹配。
Last_7_days.
  • 最后7天/ lbl_operator_last_7_days.
    • 日期,DATETIME和DATETIMECOMBO使用
与当前日期相对于当前日期的最后7天匹配日期。
Next_7_days.
  • 接下来7天/ lbl_operator_next_7_day.
    • 日期,DATETIME和DATETIMECOMBO使用
相对于当前日期,接下来的7天内匹配日期。
last_30_days.
  • 过去30天/ lbl_operator_last_30_days.
    • 日期,DATETIME和DATETIMECOMBO使用
相对于当前日期的最近30天内匹配日期。
下一个_30_days.
  • 接下来30天/ lbl_operator_next_30_day
    • 日期,DATETIME和DATETIMECOMBO使用
相对于当前日期,接下来的30天内匹配日期。
上个月
  • 上个月 / lbl_operator_last_month.
    • 日期,DATETIME和DATETIMECOMBO使用
匹配上个月相对于当前月份的日期。
这个月
  • 这个月 / lbl_operator_this_month.
    • 日期,DATETIME和DATETIMECOMBO使用
匹配当前月份的日期。
下个月
  • 下个月 / lbl_operator_next_month.
    • 日期,DATETIME和DATETIMECOMBO使用
与当前月相比下个月的匹配日期。
去年
  • 去年 / lbl_operator_last_year
    • 日期,DATETIME和DATETIMECOMBO使用
与当年相比,去年的匹配日期。
今年
  • 今年 / lbl_operator_this_year
    • 日期,DATETIME和DATETIMECOMBO使用
匹配日期在当年。
明年
  • 明年 / lbl_operator_next_year
    • 日期,DATETIME和DATETIMECOMBO使用
与当年相比,明年的匹配日期。
$ 20between.
  • 在。。。之间 / lbl_operator_between.
    • 日期,DATETIME和DATETIMECOMBO使用
匹配两个给定日期之间的日期。
昨天
  • 昨天 / lbl_operator_yesterday
    • 日期,DATETIME和DATETIMECOMBO使用
符合昨天的日期相对于当前日期。
今天
  • 今天 / lbl_operator_today
    • 日期,DATETIME和DATETIMECOMBO使用
匹配当前日期中的日期。
明天
  • 明天 / LBL_OPERATOR_OROMORRIN.
    • 日期,DATETIME和DATETIMECOMBO使用
匹配明天相对于当前日期的日期。

例子

The example below defines a filter where the type field must contain the value Customer and the 名称 field must start with the letter A.

$filters = array(
    array(
        'type' => array(
            '$in' => array(
                'Customer',
            ),
        ),
    ),
    array(
        'name' => array(
            '$starts' => 'A',
        ),
    ),
);

子表达式

Sub-expressions group filter expressions into groupings. By default, all expressions are bound by an $和 expression grouping. 

子表达 描述
$和 在“和”表达式中加入过滤器
$或 在“或”表达式中加入过滤器

笔记: 子表达式仅适用于预定义的过滤器,不能用于初始过滤器。  

The example below defines a filter where the 名称 field must begin with the letters A or C.

$filters = array(
    '$or' => array (
        array(
            'name' => array(
                '$starts' => 'A',
            ),
        ),
        array(
            'name' => array(
                '$starts' => 'C',
            ),
        ),
    )
);

模块表达式

Module expressions operate on modules instead of specific fields. The current module can be specified by either using the module name _this or by leaving the module name as a blank string.

模块表达式 描述
$最爱 通过当前用户收藏物品过滤记录。
$所有者 通过分配的用户筛选记录。

下面的示例定义了一个过滤器,其中记录必须受到物品。

$filters = array(
    array(
        '$favorite' => '_this'
    ),
);

过滤示例

将预定义的过滤器添加到列表视图过滤器列表中

要将预定义的过滤器添加到模块的列表视图,请创建一个新的过滤器定义扩展名,将过滤器附加到模块的视图。

过滤器

以下示例将演示如何在帐户模块上添加预定义过滤器,以返回具有“客户”和“其他”业界的帐户类型的所有记录。

To create a predefined filter, create a display label extension in  ./custom/Extension/modules/<module>/Ext/Language/. For this example, we will create:

./custom/extension/modules/accounts/ext/language/en_us.filteraccountByTypeAndindustry.php.

<?php

$mod_strings['LBL_FILTER_ACCOUNT_BY_TYPE_AND_INDUSTRY'] = 'Customer/Other Accounts';

Next, create a custom filter extension in  ./custom/Extension/modules/<module>/Ext/clients/base/filters/basic/.

对于此示例,我们将创建:

./custom/extension/modules/accounts/ext/clients/base/filters/basic/filteraccountbountypeandindustry.php.

<?php

$viewdefs['Accounts']['base']['filter']['basic']['filters'][] = array(
    'id' => 'filterAccountByTypeAndIndustry',
    'name' => 'LBL_FILTER_ACCOUNT_BY_TYPE_AND_INDUSTRY',
    'filter_definition' => array(
        array(
            'account_type' => array(
                '$in' => array(
                    'Customer',
                ),
            ),
        ),
        array(
            'industry' => array(
                '$in' => array(
                    'Other',
                ),
            ),
        ),
    ),
    'editable' => false,
    'is_template' => false,
);

您应该注意到可编辑和IS_TEMPLATE选项已设置为“FALSE”。如果未将可编辑设置为“false”,则过滤器将不会显示在列表视图过滤器列表中。

最后,导航到管理员>修复并单击“快速修复和重建”以重建扩展并使用户提供预定义的过滤器。

添加初始过滤器以查找搜索

要添加初始过滤器以记录查找和键入前方搜索,请定义过滤器模板。在查找父相关的记录时,这将允许您过滤用户的结果。以下示例将演示如何为联系人模块上添加帐户查找的初始过滤器。此初始过滤器将限制记录到具有“客户”的帐户类型和由联系人分配的用户确定的动态分配的用户值。

To add an initial filter to the Contacts record view, create a display label for the filter in ./custom/Extension/modules/<module>/Ext/Language/. For this example , we will create:

./custom/extension/modules/accounts/ext/language/en_us.filteraccountTemplate.php.

<?php

$mod_strings['LBL_FILTER_ACCOUNT_TEMPLATE'] = 'Customer Accounts By A Dynamic User';

Next, create a custom template filter extension in  ./custom/Extension/modules/<module>/Ext/clients/base/filters/basic/. For this example, create:

./custom/extension/modules/accounts/ext/clients/base/filters/basic/filteraccounttemplate.php.

<?php

$viewdefs['Accounts']['base']['filter']['basic']['filters'][] = array(
    'id' => 'filterAccountTemplate',
    'name' => 'LBL_FILTER_ACCOUNT_TEMPLATE',
    'filter_definition' => array(
        array(
            'account_type' => array(
                '$in' => array(),
            ),
        ),
        array(
            'assigned_user_id' => ''
        )
    ),
    'editable' => true,
    'is_template' => true,
);

如您所见,filter_definition包含account_type和Assended_User_ID的数组。这些过滤器定义将从联系人记录视图的元数据中收到它们的值。您还应该注意,此过滤器具有is_template和可编辑设置为“true”。这是初始过滤器所必需的。

Once the filter template is in place, modify the contact record view's metadata. To accomplish this, edit ./custom/modules/Contacts/clients/base/views/record/record.php to adjust the account_name field. If this file does not exist in your local Sugar installation, navigate to Admin > Studio > Contacts > Layouts >记录视图并单击“保存&部署“要生成它。在此文件中,标识面板_Body数组,如下所示:

1 => 
array (
    'name' => 'panel_body',
    'label' => 'LBL_RECORD_BODY',
    'columns' => 2,
    'labelsOnTop' => true,
    'placeholders' => true,
    'newTab' => false,
    'panelDefault' => 'expanded',
    'fields' => 
    array (
        0 => 'title',
        1 => 'phone_mobile',
        2 => 'department',
        3 => 'do_not_call',
        4 => 'account_name',
        5 => 'email',
    ),
),

接下来,修改Consum_Name字段以包含初始过滤器参数。 

1 =>
array (
    'name' => 'panel_body',
    'label' => 'LBL_RECORD_BODY',
    'columns' => 2,
    'labelsOnTop' => true,
    'placeholders' => true,
    'newTab' => false,
    'panelDefault' => 'expanded',
    'fields' =>
    array (
        0 => 'title',
        1 => 'phone_mobile',
        2 => 'department',
        3 => 'do_not_call',
        4 => array (
            //field name
            'name' => 'account_name',

            //the name of the filter template
            'initial_filter' => 'filterAccountTemplate',

            //the display label for users
            'initial_filter_label' => 'LBL_FILTER_ACCOUNT_TEMPLATE',

            //the hardcoded filters to pass to the templates filter definition
            'filter_populate' => array(
                'account_type' => array('Customer')
            ),

            //the dynamic filters to pass to the templates filter definition
            //please note the index of the array will be for the field the data is being pulled from
            'filter_relate' => array(
                //'field_to_pull_data_from' => 'field_to_populate_data_to'
                'assigned_user_id' => 'assigned_user_id',
            )
        ),
        5 => 'email',
    ),
),

最后,导航到管理员>修复并单击“快速修复和重建”。 This will rebuild the extensions and make the initial filter available for users when selecting a parent account for a contact.

将初始过滤器添加到来自控制器的抽屉

创建自己的视图时,您可能需要过滤从自定义控制器中调用的抽屉。使用初始滤波器,如下所述 添加初始过滤器以查找搜索 section, we can filter a drawer with predefined values by creating a filter object and populating the config.filter_populate property as shown below:

//create filter
var filterOptions = new app.utils.FilterOptions()
    .config({
        'initial_filter': 'filterAccountTemplate',
        'initial_filter_label': 'LBL_FILTER_ACCOUNT_TEMPLATE',
        'filter_populate': {
            'account_type': ['Customer'],
            'assigned_user_id': 'seed_sally_id'
        }
    })
    .format();

//open drawer
app.drawer.open({
    layout: 'selection-list',
    context: {
        module: 'Accounts',
        filterOptions: filterOptions,
        parent: this.context
    }
});

To create a filtered drawer with dynamic values, create a filter object and populate the config.filter_relate property using the populateRelate method as shown below:

//record to filter related fields by
var contact = app.data.createBean('Contacts', {
    'first_name': 'John',
    'last_name': 'Smith',		
    'assigned_user_id': 'seed_sally_id'
});

//create filter
var filterOptions = new app.utils.FilterOptions()
    .config({
        'initial_filter': 'filterAccountTemplate',
        'initial_filter_label': 'LBL_FILTER_ACCOUNT_TEMPLATE',
        'filter_populate': {
            'account_type': ['Customer'],
        },
        'filter_relate': {
            'assigned_user_id': 'assigned_user_id'
        }
    })
    .populateRelate(contact)
    .format();

//open drawer
app.drawer.open({
    layout: 'selection-list',
    context: {
        module: 'Accounts',
        filterOptions: filterOptions,
        parent: this.context
    }
});

最后修改:2021-02-17 02:44:13