См. Проблема подкачки источника данных (пересмотренная)
за оригинальный вопрос.
Маркус, вы были достаточно любезны, чтобы помочь решить проблему с включением счетчика записей в запрос с использованием вычисленного источника данных. У меня есть форма поиска с 15 виджетами - смесь диапазонов дат, выпадающих списков, текстовых значений и ._contains, ._equals, ._greaterThanOrEquals, ._lessThanOrEquals и т. Д.
Я тщательно протестировал этот код на SQL-коде MySQL, и он отлично работает.
Я добавил 16-й параметр PropertyNames, представляющий собой список с привязкой @ datasource.query.filters.Property.PropertyName._in и пустыми параметрами. Виджет на форме скрыт, потому что он используется только для дополнительной фильтрации.
Используется следующая логика, так что конкретный вошедший в систему пользователь может просматривать только свои собственные свойства. Поэтому, если они выполняют поиск, а свойство не указано, мы делаем: -
if (params.param_Property === null && canViewAllRecords === false) {
console.log(params.param_PropertyNames); // correct output
ds.filters.Property.PropertyName._in = params.param_PropertyNames;
}
Количество записей (records.length) правильное, и если я перебрать массив записей, набор записей будет правильным.
Однако на странице результатов в таблице отображается больший набор результатов, в котором отсутствует фильтр PropertyNames. Поэтому, если бы мне пришлось искать в статусе «Открыто» (результаты MySQL 50), а затем я добавляю единственное значение ['Имя свойства London SW45'] для params.param_PropertyNames, количество записей равно 6, массив записей равен 6, но отображение источника данных 50. Таким образом, источник данных не фильтруется в массиве свойств.
Изначально я пытался без добавления дополнительного параметра и виджета формы и просто использовал код, такой как
if (params.param_Property === null && canViewAllRecords === false) {
console.log(params.param_PropertyNames); // correct output
ds.filters.Property.PropertyName._in = properties; // an array of
properties to filter out
}
Но это не сработало, отсюда и идея добавления виджета формы и дополнительного параметра к вычисленному источнику данных countcount.
Если я проверю в параметрах query.parameters, то увижу: -
"param_Status": "Open",
"param_PropertyNames": ["Property Name London SW45"],
Если я проверю query.filters: -
name=param_Status, value=Open
name=param_PropertyNames, value=[]}]}
Похоже, что фильтр не установлен. Даже жесткое кодирование
ds.filters.Property.PropertyName._in = ['Имя свойства London SW45'],
Я получаю тот же результат.
Есть ли у вас какие-либо идеи, что может вызвать эту проблему и что я могу сделать для обхода?