Вопрос

Еще один вопрос по быстрым фильтрам

Ситуация: конкретно в нашей фирме объект "База знаний" (KnowledgeBase) модифицирован - в него добавлен дополнительный элемент "группа", в котором живет строчка - название группы сотрудников, для которых предназначена запись в базе знаний.

 

Задача: нужно сделать быстрый фильтр по этой строчке.

 

Что я делаю:

1. В пакете Custom нахожу клиентский модуль по имени "KnowledgeBaseSectionV2"

2. Беру его во встроенный редактор системы

3. В соответствии с рекомендацией https://academy.terrasoft.ru/documents/technic-sdk/7-16/dobavlenie-v-ra… создаю в этом модуле дополнительную локализуемую строку с именем "GroupFilterCaption" и значением "Группа"

4. В соответствии с той же рекомендацией привожу описание модуля к такому виду:

 

-------

define("KnowledgeBaseSectionV2", ["BaseFiltersGenerateModule"], function(BaseFiltersGenerateModule) {
    return {
        entitySchemaName: "KnowledgeBase",
        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
        diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
        methods: {
            initFixedFiltersConfig: function() {
                var fixedFilterConfig = {
                    entitySchema: this.entitySchema,
                    filters: [
                        {
                            name: "Group",
                            caption: this.get("Resources.Strings.GroupFilterCaption"),
                            columnName: "UsrGroup1",
                            defValue: '',
                            dataValueType: this.Terrasoft.DataValueType.TEXT,
                            filter: BaseFiltersGenerateModule.GroupFilter,
                        }
                    ]
                };
                this.set("FixedFilterConfig", fixedFilterConfig);
            }
        }
    };
});

-------

Результат получается, мягко говоря, несколько неожиданный:

1. При табличном просмотре базы знаний в том месте, где должны находиться быстрые фильтры, появляется фильтр. (Начало обнадеживающее. Но... см. ниже)

2. Рядом с этим фильтром нет никакой надписи. (Хм... Я же задавал свойство "caption"... Куда оно делось? )

3. Рядом с этим фильтром есть иконка "человек", которая обычно применяется в других местах при фильтрации по имени сотрудника. (Хм... На каком основании? Я этого не заказывал.)

4. При попытке посмотреть установки этого фильтра в качестве значения по умолчанию предлагается мое имя. (Хм... С какого перепугу? Я же вроде бы через свойство defValue указал, что по умолчанию пустая строка...)

5. При попытке установить другое значение этого фильтра экран заливается белым цветом, и больше ничего не происходит. При этом в броузерном отладчике видно, что Javascript выводит в консоль какое-то сообщение об ошибке - очень объемное и очень непонятное, чтобы его воспроизвести здесь в адекватном виде.

 

Вопрос: что я сделал неправильно?

Нравится

3 комментария

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

2. caption должно отображатся в поле.

3. Иконка по умолчанию, так как самое частое использование - фильтр по ответственному. Хотите другую иконку - укажите свойство imageConfig.

4. defValue - это значение, которое будет сразу установлено при от открытии раздела. За пункт меню с именем текущего пользователя отвечает свойство appendCurrentContactMenuItem, нужно установить в него false и пункта не будет.

5. Ошибка скорее всего из-за того, что вы обращаетесь к несуществующему методу BaseFiltersGenerateModule.GroupFilter. Свойство filter - метод фильтрации доступных к выбору значений. Если у вас просто фильтр по группе, и к выбору должны быть доступны все группы, то свойство filter указывать не нужно.

Владислав Литвинчук пишет:

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

Где-нибудь можно посмотреть их все и их значения по умолчанию?

 

2. caption должно отображатся в поле.

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

 

3. Иконка по умолчанию, так как самое частое использование - фильтр по ответственному. Хотите другую иконку - укажите свойство imageConfig.

Где можно посмотреть, какие иконки доступны, и как их указывать? И как сделать, чтобы не было вообще никакой?

 

4. defValue - это значение, которое будет сразу установлено при от открытии раздела. За пункт меню с именем текущего пользователя отвечает свойство appendCurrentContactMenuItem, нужно установить в него false и пункта не будет.

Добавил в описание соответствующую строчку. Мое имя в качестве начального значения фильтра подставляться перестало. Хорошо, но несколько не то, что мне нужно.

 

5. Ошибка скорее всего из-за того, что вы обращаетесь к несуществующему методу BaseFiltersGenerateModule.GroupFilter. Свойство filter - метод фильтрации доступных к выбору значений. Если у вас просто фильтр по группе, и к выбору должны быть доступны все группы, то свойство filter указывать не нужно.

Закрыл соответствующую строчку комментарием - в поведении фильтра ничего не изменилось. По-прежнему идет очень большое и непонятное сообщение об ошибке.

И на всякий случай уточняю постановку задачи. В записи в базе знаний поле "группа" - это просто строка (не ссылка на справочник!). И нужно найти записи, у которых значение в этом поле равно указанному в фильтре. При этом поле в изначальной конструкции отсутствует, т.е. по умолчанию средств фильтрации конкретно для него нет. Их надо как-то создать самому.

Кстати, что изменится в решении, если нужно фильтровать не по точному совпадению, а по вхождению подстроки? (У меня следующая задача как раз на такую тему)

- Где-нибудь можно посмотреть их все и их значения по умолчанию?
В коде с помощью дебага.
- Вот почему-то не отобразилось. Совсем никак. Видимо, еще что-то где-то подкрутить надо.
У меня при точно такоем же коде, как у вас все работает.
- Где можно посмотреть, какие иконки доступны, и как их указывать?

Вы можете загрузить свою иконку. Доступных к выбору нет.
- Все остальное.
Таки может есть смысл сбросить текст или скриншот ошибки. Так как все должно работать

Показать все комментарии