Добавление фильтра в транзакцию (рабочее задание) для поиска нескольких идентификаторов транзакций - PullRequest
0 голосов
/ 02 мая 2018

Я строю поиск в RESTlet. Я застрял на создании элегантного фильтра на основе transactionumber. Я хотел бы отфильтровать его с помощью оператора ANYOF , передавая массив чисел для значений, но это не представляется возможным.

Единственное решение, которое я нашел, - это предварительно обработать массив в строку чисел и использовать условную функцию SQL для его проверки:

search.createFilter({
    name : 'formulanumeric',
    formula :  'case when TO_NUMBER({transactionnumber}) in (' 
        + tranids.join(',')   // e.g.   in (741,744)  
        + ') then 1 else 0 end',
    operator : search.Operator.NOTEQUALTO,
    values : 0
});

Конечно, есть лучший способ. Выше есть (небольшое) снижение производительности преобразования массива в строку, и меня беспокоят ограничения формульно-числового поля - то есть длина формулы строка.

1 Ответ

0 голосов
/ 02 января 2019

номер транзакции является текстовым полем, поэтому вы не можете использовать оператор anyof , когда пытаетесь его использовать. Вам придется использовать is с filterExpressions и соединять их с оператором или .

Вы можете попробовать что-то вроде ниже

transactionNumbersList = ['abc', 'xyz'];

var searchFilters = [];

transactionNumbersList.forEach(function (transactionNumber) {
  searchFilters.push(['transactionnumber', 'is', transactionNumber], 'or')
});

// pop trailing `or`
searchFilters.pop();
...