Привет, это пост для обсуждения надо ли добавлять поддержку фильтрации в сервисы, которые получают сделки, задачи, контакты и т.д.
Ишью с критериями и описанием возможностей фильтрации — https://github.com/bitrix24/b24phpsdk/issues/338
Я хочу собрать обратную связь от комьюнити PHP-разработчиков.Есть два варианта:
Как обычно
Принимаем массив, а если разработчик накосячил, то он сам виноват, что не может запомнить код служебного поля в сделке 😀
$deals->getList(
[
["status", "=", "NEW"],
["id", "in", [3,4,5]]
]
);
Делаем билдеры и заморачиваемся
Накидал требований, которые описывают мои ожидания от фильтра, если вы уже повидали некоторое дерьмо, то расскажите, пожалуйста, о своем опыте. 1. Фильтрация идет по полям конкретной сущности
$deals->getList(
new DealFilter()
->title('OpenAI')
->price(100500)
);
2. Поддержка пользовательских полей: на конкретном портале могут добавить 100500 полей разных типов в сущность, например в сделку.
$task->getList(
new TaskFilter()
->title('ASAP')
->withUserField('UF_CRM_1234567890','danger')
);
3. поддержка операторов: greater than, in, not equal etc.
$deals->getList(
new DealFilter()
->title()->eq('ASAP')
->id()->in([1,2,3]
);
4. Поддержка вложенных блоков or
$deals->getList(
new DealFilter()
->status()->eq('NEW')
->or(function (DealFilter $f) {
$f->id()->in([1, 2]);
$f->stageId()->eq('WON');
$f->userField('UF_CRM_1700000000')->eq('yes');
})
);
5. Поддержка raw-массива для олдов
$deals->getList(
new DealFilter()
->withRaw(
[
["status", "=", "NEW"],
["id", "in", [3,4,5]]
]
)
);
5. Все эти фильтры надо генерить из метаданных OA3 спецификации и при появлении изменений — ребилдить.
Что вас бесит в таких штуках?
Где вам понравилась реализация подобных фильтров?