Как сравнить 2 столбца в методе GlideRecord.addQuery ()? - PullRequest
0 голосов
/ 19 декабря 2018

Предполагая, что у меня есть данные таблицы:

id    col_1    col_2
----------------------  
11    10000    20000
12    13000    10000

Возможно ли получить id с, для которых col_1 < col_2 ?.Таким образом, ожидаемый результат здесь id:11.

Ответы [ 3 ]

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

Вы сравниваете поля с помощью специальных операторов сравнения полей:

var gr = new GlideRecord("u_table_name");
gr.addQuery("col_1", "SAMEAS", "col_2"); // i.e. WHERE col_1 = col_2
gr.query();

Операторы, которые позволяют сравнивать два разных поля в одной таблице:

  • SAMEAS: field =другое поле
  • NSAMEAS: поле! = другое поле
  • GT_FIELD: поле> другое поле
  • LT_FIELD: поле <другое поле </li>
  • GT_OR_EQUALS_FIELD: поле> = другое поле
  • LT_OR_EQUALS_FIELD: поле <= другое поле </li>

Если есть сомнения, вы всегда можете написать запрос GlideRecord для всего, что поддерживаетсяинтерфейс фильтра.Просто создайте нужный фильтр в пользовательском интерфейсе, запустите его, затем щелкните правой кнопкой мыши хлебные крошки (чуть выше пользовательского интерфейса построителя фильтров) и выберите «Копировать URL».Это даст вам URL-адрес закодированного запроса, который вы можете просто вставить непосредственно в API GlideRecord gr.addEncodedQuery(...) или деконструировать, используя 3-аргумент gr.addQuery(columnName, operatorName, value), где в случае операторов динамического сравнения полей аргумент value равен другое имя столбца.

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

Да, это определенно возможно.Первое, что приходит мне на ум при сравнении полей - это фильтры списков.Вам нужно попробовать и проверить, если есть возможность отфильтровать эти записи из списка.Если да, вы можете запросить их с помощью API GlideRecord.Если они не могут быть запрошены, у нас также могут быть другие параметры, такие как динамические фильтры или даже представление базы данных.

Поэтому я добавил образец таблицы для данных. Необходимо убедиться, что столбцы имеют тип Integer иприменил мой фильтр

Filter

Соответствующий запрос был скопирован из фильтра как u_col_1LT_FIELDu_col_2.Вы можете получать разные закодированные запросы в зависимости от оператора фильтра.

Теперь следующим шагом будет создание табличного запроса для получения необходимых идентификаторов.

var myTable = new GlideRecord('u_custom_table'); //Table to query
myTable.addEncodedQuery('u_col_1LT_FIELDu_col_2');  //Replace your filter query
myTable.query();
while(myTable.next()){
 gs.print("Id: "+myTable.u_id); //Replace id column
}

и вывод при выполнении с помощью фонового скрипта

enter image description here

Можно применить тот же подходзапросить любые записи из таблицы Service Now.

0 голосов
/ 21 декабря 2018

Насколько я знаю, это невозможно сделать в запросе GlideRecord.У нас больше нет доступа к sql, поэтому я думаю, что это вообще невозможно.

Но если вы можете добавить столбец в вашу таблицу, вы можете сделать это так:

id    col_1    col_2   sup
---------------------------  
11    10000    20000   true
12    13000    10000   false

Можно установить флаг sup с помощью бизнес-правила «Вставить и обновить», чтобы можно было запросить поле sup в запросе GlideRecord.

...