Еще один вопрос по быстрым фильтрам
Ситуация: конкретно в нашей фирме объект "База знаний" (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 выводит в консоль какое-то сообщение об ошибке - очень объемное и очень непонятное, чтобы его воспроизвести здесь в адекватном виде.
Вопрос: что я сделал неправильно?
Нравится
Все потому, что в модуле быстрых фильтров много свойств указано по умолчанию.
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 указывать не нужно.
Закрыл соответствующую строчку комментарием - в поведении фильтра ничего не изменилось. По-прежнему идет очень большое и непонятное сообщение об ошибке.
И на всякий случай уточняю постановку задачи. В записи в базе знаний поле "группа" - это просто строка (не ссылка на справочник!). И нужно найти записи, у которых значение в этом поле равно указанному в фильтре. При этом поле в изначальной конструкции отсутствует, т.е. по умолчанию средств фильтрации конкретно для него нет. Их надо как-то создать самому.
Кстати, что изменится в решении, если нужно фильтровать не по точному совпадению, а по вхождению подстроки? (У меня следующая задача как раз на такую тему)
- Где-нибудь можно посмотреть их все и их значения по умолчанию?
В коде с помощью дебага.
- Вот почему-то не отобразилось. Совсем никак. Видимо, еще что-то где-то подкрутить надо.
У меня при точно такоем же коде, как у вас все работает.
- Где можно посмотреть, какие иконки доступны, и как их указывать?
Вы можете загрузить свою иконку. Доступных к выбору нет.
- Все остальное.
Таки может есть смысл сбросить текст или скриншот ошибки. Так как все должно работать