Добавление фильтра к транзакции (заказу на работу) поиск по нескольким идентификаторам транзакции

Я строю поиск в 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
});

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


person gillyspy    schedule 01.05.2018    source источник


Ответы (1)


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

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

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

var searchFilters = [];

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

// pop trailing `or`
searchFilters.pop();
person Avi    schedule 02.01.2019
comment
Это не работает: tranid и номер транзакции не являются одним и тем же полем или одним и тем же типом данных. - person gillyspy; 30.01.2019
comment
@gillyspy, извините, я не проверял, что вы пытались использовать transactionnumber, поскольку в вашем примере вы, похоже, используете параметр с именем tranids. Я обновил свой ответ. - person Avi; 30.01.2019