Показать записи, в которых поле имеет значение NULL во всплывающем окне

Мне удалось отфильтровать записи, которые появляются, когда мы нажимаем кнопку select внутри подпанели. Это можно сделать, переопределив значение $initial_filter следующим образом:

public function display($widget_data, $additionalFormFields = null, $nonbutton = false) {
    global $app_strings; $initial_filter = '';
    $initial_filter.='&SOME_FIELD='.urlencode("SOMEVALUE");
}

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

Теперь сложная часть заключается в том, что я пытаюсь понять, как его отфильтровать, чтобы он показывал записи, в которых SOME_FIELD пуст… Я пробовал что-то вроде SOME_FIELD=null или SOME_FIELD=false, но это не работает… Если кто-нибудь может что-нибудь предложить, я был бы признателен.


person Robert Sinclair    schedule 31.01.2020    source источник


Ответы (1)


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

Только для просмотра списка: custom/modules/MODULE_NAME/views/view.list.php

и следующий вспомогательный код:

require_once('include/MVC/View/views/view.list.php');
class MODULE_NAMEViewList extends ViewList {

    function listViewProcess() {
        global $current_user;
        $this->params['custom_where'] = ' AND module_name.name = "test" ';

        parent::listViewProcess();
}

}



Для списка и всплывающего окна (оба):

Вам нужно изменить логику внутри функции create_new_list_query, которая фактически подготавливает запрос. Некоторые модули переопределяют уровень компонента (например, см. modules/Leads/Lead.php).

Если вы хотите переопределить его безопасным способом обновления, создайте файл в пользовательском каталоге, например: custom/modules/Leads/Lead.php, затем расширьте его из класса основного компонента следующим образом:

<?php
if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');

require_once('modules/Leads/Lead.php');
class CustomLead extends Lead {

    function create_new_list_query($order_by, $where,$filter=array(),$params=array(), $show_deleted = 0,$join_type='', $return_array = false,$parentbean=null, $singleSelect = false, $ifListForExport = false)
    { 
        // Code from create_new_list_query in and then modify it accordingly. 
    }
}

Зарегистрируйте новый класс компонента в этом месте: custom/Extension/application/Ext/Include/custom_leads_class.php и код регистрации будет выглядеть следующим образом:

<?php
$objectList['Leads'] = 'Lead';
$beanList['Leads'] = 'CustomLead';
$beanFiles['CustomLead'] = 'custom/modules/Leads/Lead.php';
?>
person Star    schedule 24.02.2020
comment
С тех пор я сделал это по-другому, потому что не мог понять, но спасибо, что нашли время написать такой подробный ответ. Я обязательно попробую это в будущем. - person Robert Sinclair; 25.02.2020