Пример настройки фильтра для поиска по заполненным полям пользовательской формы.
Код:
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 => 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 requestIdArray: string[] = [];
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 filter: any) {
}
json () {
returnthis.filter;
}
}