...

Фильтрация записей приложения

Тема в разделе "Примеры сценариев", создана пользователем ELMA365, 1 дек 2021.

  1. ELMA365

    ELMA365 Moderator

    Пример настройки фильтра для поиска по заполненным полям пользовательской формы.

    Код:
    
    const myAppSearch = Namespace.app.myApp.search();

    // фильтрация по полю фильтра "Имя/Текст" (тип "Строка"). Необходимо найти совпадения в строках.
    if (Context.data.text) {
        
    myAppSearch .where( (f,g) => g.or(f.myAppName.like(Context.data.text!), f.myAppText.like(Context.data.text!)) );
    }
    //фильтрация по полю фильтра "Исполнитель" (тип "Пользователь", одиночный)
    if (Context.data.executor) {
        
    myAppSearch .where(=> f.myAppExecutor.eq(Context.data.executor!));
    }
    // фильтрация по полю фильтра "Приложение" (тип "Приложение", одиночный)
    // по свойству типа "Приложение" (одиночный) фильтрацию необходимо производить через 'link()'
    if (Context.data.request){
    myAppSearch .where(f=>f.myAppApplication.link(Context.data.request!));
    }
    // фильтрация по полю фильтра "Приложение" (тип "Приложение", множественный)
    // по свойству типа "Приложение" (множественный) фильтрацию необходимо производить через 'link()'
    if(Context.data.requestList && Context.data.requestList.length 0){
        
    let requestIdArraystring[] = [];
        for(
    let request of Context.data.requestList){
            
    requestIdArray.push(request.id);
        }
        
    myAppSearch .where(f=> new CustomFilter( {link:[ {field'myAppRequestList'}, {list: requestIdArray} ]} ));
    }
    const 
    solutions await myAppSearch .all();
    // класс кастомного фильтра для поиска по свойствам типа "Приложение" (множественный)
    class CustomFilter {
        
    constructor (private filterany) {
        }
        
    json () {
            
    returnthis.filter;
        }
    }
  2. px2099

    px2099 Участник

    Спасибо за пояснения с поиском по приложениям.
    А как быть с поиском по объектам типа Temail, TFullname Это же не справочники, но объекты?
    Как например найти записи справочников, где составное поле email пустое?
    Спасибо за ответ.
  3. mihaylukov_ka

    mihaylukov_ka Новичок

    Добрый день.
    Уточните, как настраивать элемент выбора приложения, чтобы можно было применять скрипт фильтра?
  4. grebina

    grebina Техническая поддержка

    Пример поиска контактов по пустому email:

    const contacts = await Context.fields.kontakt.app.search().where(c=>c._email.eq(null)).all()
  5. grebina

    grebina Техническая поддержка

    Если имеется в виду метод setFilter() , то сам сценарий фильтрации можно прописать при загрузке формы или в событии при изменении значения какой-либо переменной. Всё зависит от того, когда и при каких условиях должна выполняться фильтрация.
  6. MrIncognitoo

    MrIncognitoo Новичок

    Подскажите, а как задать в фильтре по полю с типом "Приложение" множественный, в который НЕ входит определенное значение

    upload_2022-12-6_16-18-57.png
  7. fkam

    fkam Участник

    neq
  8. MrIncognitoo

    MrIncognitoo Новичок

    neq работает для одиночной связи (eq и противоположность neq)
    А для множественной? (in, но нет противоположности)
  9. krivonos

    krivonos Техническая поддержка

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

    Пример:
    const result = all_elements.filter(n => !filter_elements.some(m => m.data.__id === n.data.__id));
    в result записываются элементы, которые не прошли фильтрацию с указанным значением
    где all_elements - все элементы приложения
    filter_elements - элементы после фильтрации