SugarTalk - ресурс для администраторов и разработчиков системы SugarCRM.

Пользовательское условие на вывод данных в listview

Одна из самых востребованных функций списка (listview) в sugarcrm — это возможность фильтрации данных в зависимости от пользовательского условия.  И почему-то ни в каких мануалах я не нашел простого изящного решения, неизменного при обновлении системы (в документации на английском – так называемый Upgrade Save). Многие начинают модифицировать bean класс sugarcrm, в частности, метод  get_list_view_data,а, соответственно, можно применить только для пользовательских модулей, при обновлении sugarcrm любые изменения bean классов в родных модулях будут потеряны.

Предлагаю простой метод , как задавать условия в listview. Открываем файл listviewdefs.php в папке metadata модуля, и в самом конце добавляем строчку:

$this->where = "";

Где внутри задаем пользовательское условие к БД.

Например, в списке сделок нам не надо показывать уже закрытые сделки, тогда добавляем следующее условие:

$this->where = "sales_stage <> 'Closed Won' AND sales_stage <> 'Closed Lost'";

sales_stage – это поле в БД, которое хранит статус  сделки.

Не забывайте, чтобы файл не изменился при обновлении системы, необходимо изменить его в custom директории. Например, для модуля Сделки – это будет следующий путь: custom/modules/Opportunities/metadata/listviewdefs.php

Если у вас не будет любой из папок в этом пути, создайте ее вручную. Если вы не модифицировали список через студию sugarcrm, то скорей всего, у вас не будет по этому пути и файла listviewdefs.php. Если это так, то просто скопируйте его из папки modules/Opportunities/metadata или же просто зайдите в студию -> модуль сделки -> макеты -> форма списка -> сохранить и установить. После этого он сам появится по данному пути. Изменять необходимо именно файл по этому пути.

Усложним предыдущий пример и модифицируем так,  чтобы это условие работало только для обычных пользователей sugarcrm. А, например, администраторы видели все записи.

Вынесем наше условие в отдельную функцию (или класс), которую можно будет потом модифицировать под любые наши нужды, для этого сделаем файл в custom директории. У меня он находится по пути custom/custom_script/list_view_where.php

Содержимое файла:

01
02
03
04
05
06
07
08
09
10
<?php
function limit_list(&$view, $module_name)
{
    global $current_user;
    if ($module_name == 'Opportunities' and !is_admin($current_user))
    {
        $view->where = "sales_stage <> 'Closed Won' AND sales_stage <> 'Closed Lost'";
    }
}
?>

В listviewdefs.php соответственно вызовем нашу функцию

1
2
3
4
<?php
require_once('custom/custom_script/list_view_where.php');
limit_list($this, 'Opportunities');
?>

Таким образом, вы можете модифицировать функцию  под любые ваши нужды и подключать ее в необходимых модулях. К сожалению, этот метод  имеет один недостаток: если вы правите listviewdefs через sugar studio, то при сохранении макета  подключение пользовательской функции исчезнет, и вам надо будет снова подключать вашу функцию. Именно поэтому я рекомендую выносить всю  вашу логику для listview в отдельный файл.

P.S. Новая статья на данную тему доступна здесь

Высказать своё мнение о статье Вы можете в комментариях, если Вас интересуют какие либо вопросы или дополнения, то обсуждение по данной теме доступно на нашем форуме.

Последнее изменениеПонедельник, 10 июля 2017 18:03
  • Оцените материал
    (0 голосов)
  • Опубликовано в SugarCRM
  • Прочитано 24163 раз

8082 комментарии

Оставить комментарий

Убедитесь, что вы вводите (*) необходимую информацию, где нужно
HTML-коды запрещены

Наверх

Последние новости

  • 1
  • 2
  • 3
  • 4

Популярные новости