OData для извлечения большего количества столбцов, без повторного извлечения уже извлеченных столбцов - PullRequest
0 голосов
/ 17 января 2020

У меня есть требование, согласно которому мы должны выполнять определенные операции фильтрации, а также скрывать и отображать некоторые столбцы в огромном куске данных, для повышения производительности я решил попробовать OData.

Я прошел через некоторые блоги, где упоминалось, что с помощью OData мы можем создавать запросы на лету, которые помогут, если предположим, что у нас указан c no. столбцов для отображения таким образом, чтобы получить только эти столбцы.

Здесь я обнаружил новый сценарий, в котором изначально мы отображаем определенный набор столбцов (предположим, 25 столбцов), если в пользовательском интерфейсе мы дали возможность выбрать еще несколько столбцов, и при этом выборе нам нужно отобразить данные для этих недавно добавленные столбцы (еще 10 столбцов). Таким образом, следуя подходу ODATA, я создам запрос fre sh, состоящий из всех столбцов (25 старых + 10 новых), который снова извлечет все 35 столбцов. Теперь, когда данные для 25 столбцов уже выбраны, существует способ извлечения только новых требуемых столбцов из того же вызова API, который принесет все данные 35 столбцов без повторного извлечения уже существующих данных 25 столбцов.

Хотя это можно сделать, если я получу новые данные столбцов, выполню некоторую операцию соединения и выведу окончательные данные. (Вы можете посчитать это глупым) Но мотив этого вопроса заключается в том, отслеживает ли OData каким-либо образом отслеживание уже извлеченных данных, с тем чтобы оно получало только новые требуемые данные.

1 Ответ

1 голос
/ 17 января 2020

Я думаю, вы можете проверить, содержат ли ваши объекты уже столбец. Если нет, то добавьте его в список и снова отправьте запрос в api.

пример:

    var data: any;
    var columns = ['col1', 'col2', ... 'col35']
    var initialQueryParams = columns.slice(0, 20) // get only 20 columns

    // 1. initial query : 
    api/controller/method?queryParam$select(id, col1, col2, ... col20)
    // data = result of api request

    var newCols: string[] = [];
    //2. check if your obj contain cols 'col21' ... 'col35'
    (!data[0].hasOwnProperty('col21')) {
      // if not, add to list
      newCols.push('col21');
    }
    // - second query: 
    api/controller/method?queryParam$select(id, newCols)
    data.forEach(item => {
           data['col21'] = result['col21'];
           ...
           data['col35'] = result['col35'];
    });

Для всех запросов вам необходим первичный ключ id который будет отправлен с любым запросом.

Вам нужно немного изменить строку запроса, я не напоминаю ее совершенно.

...