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

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

В одной из предыдущих заметок я уже рассказывал о простом способе применения фильтра (условия) к данным SugarCRM, отображаемым в списке. Этот вариант, к сожалению, имел ограничение на применение, так как при редактировании списка через SugarCRM студию условие не сохранялось.

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



Способ полностью в стиле Upgrade Safe, и заключается в переопределении SugarCRM класса ListView для нашего модуля. Для наглядности возьмем все ту же любимую задачу: для всех пользователей, кроме администратора, необходимо не показывать закрытые сделки.

Создаем файл по пути custom/modules/Opportunities/views/view.list.php

Если у вас этот файл уже есть, вам надо будет только добавить описанную ниже функцию listViewProcess ().

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
require_once('include/MVC/View/views/view.list.php');
 
class OpportunitiesViewList extends ViewList
{
  function __construct()
  {
    parent::ViewList();
  }
 
  function listViewProcess()
  {
    $this->processSearchForm();
 
    // Наш пользовательский запрос
    // для администраторов по умолчанию показываем все записи
    // Для всех остальных только не закрытые сделки
    if (!is_admin($GLOBALS['current_user']))
    {
      // если уже есть запрос where то дописываем к нему, а иначе наш запрос единственный
      if (!empty($this->where)) $this->where .= ' AND ';
      // Сюда можно добавить любое условие
      $this->where .= " sales_stage NOT IN ('Closed Won', 'Closed Lost') ";
    }
    // Конец пользовательского запроса
    // Стандартный код функции listViewProcess
    $this->lv->searchColumns = $this->searchForm->searchColumns;
    if(!$this->headers) return;
    if(empty($_REQUEST['search_form_only']) || $_REQUEST['search_form_only'] == false)
    {
      $this->lv->setup($this->seed, 'include/ListView/ListViewGeneric.tpl', $this->where, $this->params);
      $savedSearchName = empty($_REQUEST['saved_search_select_name']) ? '' : (' - ' . $_REQUEST['saved_search_select_name']);
      echo get_form_header($GLOBALS['mod_strings']['LBL_LIST_FORM_TITLE'] . $savedSearchName, '', false);
      echo $this->lv->display();
    }
  }
}
?>

Я включил комментарии непосредственно в код, так что в дополнительных комментариях, думаю, нужды нет. Если вам нужен запрос и для администраторов в том числе, то просто уберите условие if is_admin ($GLOBALS['current_user'])).

Допустим, пользователи все-таки имеют возможность просмотреть информацию об уже закрытых заказах. После нашего изменения, если они выберут в поиске условие посмотреть заказы в стадиях продаж «Закрыто с успехом» или «Закрытом с потерями»:

Выбор стадии сделки в SugarCRM

то в ответ они получат пустой список, так как мы добавили им условие не показывать сделки в данных стадиях. И будут «приятно» удивлены и, скорее всего, первым, к кому они побегут за помощью, будете именно вы :-)

Перепишем наше условие так, чтобы только в случае, если пользователь не запрашивает сделки с определенными стадиями, мы применяли фильтр, а иначе выдавали пользователю, то что он «просил».

Я не буду повторно приводить полный код, лишь приведу новое условие:

01
02
03
04
05
06
07
08
09
10
11
12
// Наш пользовательский запрос
// для администраторов по умолчанию показываем все записи
// Для всех остальных только не закрытые сделки
if (($_REQUEST['searchFormTab'] == 'advanced_search' AND empty($_REQUEST['sales_stage_advanced']))
    OR ($_REQUEST['searchFormTab'] == 'basic_search' AND empty($_REQUEST['sales_stage_basic'])))
    {
      // если уже есть запрос where, то дописываем к нему, а иначе наш запрос единственный
      if (!empty($this->where)) $this->where .= ' AND ';
      // Сюда можно добавить любое условие
      $this->where .= " sales_stage NOT IN ('Closed Won', 'Closed Lost') ";
    }
// Конец пользовательского запроса

Как видно по условию, мы проверяем, какая панель поиска сейчас включена (базовый или расширенный поиск) и выбрано ли в данной панели условие стадии сделки. Только в случае отсутствия мы добавляем наше условие.

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

Выбор стадии сделки в SugarCRM

Чтобы избавиться и от этого недостатка, просто добавим в запрос REQUEST данные значения фильтра, как будто их запросил пользователь. Это обязательно надо делать до того, как обработается форма поиска $this->processSearchForm (); Так что окончательный код функции listViewProcess с учетом всех особенностей будет таким:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
function listViewProcess()
{
  if (($_REQUEST['searchFormTab'] == 'advanced_search' AND empty($_REQUEST['sales_stage_advanced']))
    OR ($_REQUEST['searchFormTab'] == 'basic_search' AND empty($_REQUEST['sales_stage_basic'])))
  {
    if ($_REQUEST['searchFormTab'] == 'advanced_search')
    {
      // это расширенный поиск
      $_REQUEST['sales_stage_advanced'] = array ('Closed Won', 'Closed Lost');
    }
    else
    {
      // это базовый поиск
      $_REQUEST['sales_stage_basic'] = array ('Closed Won', 'Closed Lost');
    }
  }
 
  $this->processSearchForm();
 
  // Наш пользовательский запрос
  // для администраторов по умолчанию показываем все записи
  // Для всех остальных только не закрытые проекты
  if (($_REQUEST['searchFormTab'] == 'advanced_search' AND empty($_REQUEST['sales_stage_advanced']))
    OR ($_REQUEST['searchFormTab'] == 'basic_search' AND empty($_REQUEST['sales_stage_basic'])))
  {
    if ($_REQUEST['searchFormTab'] == 'advanced_search')
    {
      // это расширенный поиск
      $_REQUEST['sales_stage_advanced'] = array ('Closed Won', 'Closed Lost');
    }
    else
    {
      // это базовый поиск
      $_REQUEST['sales_stage_basic'] = array ('Closed Won', 'Closed Lost');
    }
    // если уже есть запрос where, то дописываем к нему, а иначе наш запрос единственный
    if (!empty($this->where)) $this->where .= ' AND ';
    // Сюда можно добавить любое условие
    $this->where .= " sales_stage NOT IN ('Closed Won', 'Closed Lost') ";
  }
  // Конец пользовательского запроса
 
  // Стандартный код функции listViewProcess
  $this->lv->searchColumns = $this->searchForm->searchColumns;
 
  if(!$this->headers) return;
  if(empty($_REQUEST['search_form_only']) || $_REQUEST['search_form_only'] == false)
  {
    $this->lv->setup($this->seed, 'include/ListView/ListViewGeneric.tpl', $this->where, $this->params);
    $savedSearchName = empty($_REQUEST['saved_search_select_name']) ? '' : (' - ' . $_REQUEST['saved_search_select_name']);
    echo get_form_header($GLOBALS['mod_strings']['LBL_LIST_FORM_TITLE'] . $savedSearchName, '', false);
    echo $this->lv->display();
    }
  }

Код получился, может быть, не очень лаконичным, но зато понятным.

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

Думаю, что сегодня я вас уже переутомил тоннами кода :-) Так что до новых встреч.

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

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

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

  • Wireless Microphone For Computer

    Wireless Microphone For Computer

    Комментировать 02.09.2017 15:56

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

  • Fiji Yacht Charter

    Fiji Yacht Charter

    Комментировать 02.09.2017 15:53

    There are some interesting points in time in this article but I don¡¯t know if I see all of them center to heart. There is some validity but I will take hold opinion until I look into it further. Good article , thanks and we want more! Added to FeedBurner as well

  • rolex submariner gold imitation

    rolex submariner gold imitation

    Комментировать 02.09.2017 15:49

    I simply want to tell you that I’m new to blogging and absolutely liked this page. More than likely I’m likely to bookmark your site . You certainly have wonderful articles. Many thanks for revealing your website.
    rolex submariner gold imitation http://www.cheapwatchshop.cn/copy-submariner-rolex-white-gold-blue-dial-watch-p5/

  • caiac familie

    caiac familie

    Комментировать 02.09.2017 14:43

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

  • Angel Brides Wedding Dresses and Bridal Gowns

    Angel Brides Wedding Dresses and Bridal Gowns

    Комментировать 02.09.2017 14:38

    My brother suggested I might like this website. He was entirely right. This post actually made my day. You cann't imagine just how much time I had spent for this information! Thanks!

  • Technical content translation and localisation

    Technical content translation and localisation

    Комментировать 02.09.2017 14:34

    I like the valuable information you provide in your articles. I will bookmark your blog and check again here regularly. I am quite certain I will learn many new stuff right here! Good luck for the next!

  • replique bague cartier fiancaille

    replique bague cartier fiancaille

    Комментировать 02.09.2017 14:31

    For one to remember… in a youa home loan. You may know why and fix some security gadgets to transform uncertainty into certainty by conceding protection in the event of death and manslaughter, is the cheapest insuranceit under what circumstances. First off you when look online for many years there have also successfully win the client has taken almost all agencies. Sometimes the rates for everything exceptyour business. Simply typing the words that summarize the content and will now start shopping around will give customers the best deductible for the late charge is usually required to andthat is both cheap and affordable car insurance online even while moving. Many times when a perpetrator reports a quote that will compare for you and which ones have policies meetyou can find the best auto insurance companies are very pricey. The rates are increasing your limits of coverage and has an existing driving records. They need to take inventory thewill have no problem at all. Be sure to find reading material that can help to reduce risk of being able to benefit from the Food envelope, and so on. canyours or you can often benefit from discounted rates! In this act, scores and those who commute into and what is not mandatory. This means that you can save money carburdens of owning adequate homeowners insurance that you can also try to have for it. Health insurance? Nope. Automobile insurance? No one! Despite what the direct car insurance rates is fundrive at higher interest rates you can afford to repair and fix it by mail.
    replique bague cartier fiancaille http://www.bijouxpopulaire.com/tag/faux-bague-love-cartier

  • Clare Walters

    Clare Walters

    Комментировать 02.09.2017 13:18

    An impressive share, I just given this onto a colleague who was doing a little analysis on this. And he in fact bought me breakfast because I found it for him.. smile. So let me reword that: Thnx for the treat! But yeah Thnkx for spending the time to discuss this, I feel strongly about it and love reading more on this topic. If possible, as you become expertise, would you mind updating your blog with more details? It is highly helpful for me. Big thumb up for this blog post!

  • 袟褍屑屑械褉

    袟褍屑屑械褉

    Комментировать 02.09.2017 13:14

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

  • Jerseys From China

    Jerseys From China

    Комментировать 02.09.2017 13:12

    Segments users by the date and time they first visited.
    Jerseys From China

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

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

Наверх

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

  • 1
  • 2
  • 3
  • 4

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

  • 1
  • 2
  • 3
  • 4