如何比较GlideRecord.addQuery()方法中的2列?

时间:2018-12-19 14:05:08

标签: servicenow

假设我有一个表数据为:

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

是否可以检索id的{​​{1}}?因此,此处的预期输出为col_1 < col_2

3 个答案:

答案 0 :(得分:1)

您使用特殊字段比较运算符比较字段:

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

允许比较同一张表上两个不同字段的运算符:

  • SAMEAS:字段=其他字段
  • NSAMEAS:字段!=其他字段
  • GT_FIELD:字段>其他字段
  • LT_FIELD:字段<其他字段
  • GT_OR_EQUALS_FIELD:字段> =其他字段
  • LT_OR_EQUALS_FIELD:字段<=其他字段

如有疑问,您随时可以针对过滤器用户界面支持的所有内容编写GlideRecord查询。只需在UI中构建所需的过滤器,然后运行它,然后右键单击面包屑(在过滤器构建器UI上方),然后选择“复制URL”。 这将为您提供编码的查询URL,您可以将其直接粘贴到GlideRecord api gr.addEncodedQuery(...)中,也可以使用3个参数gr.addQuery(columnName, operatorName, value)进行解构,对于动态字段比较运算符,{ {1}} arg是 other 列名称。

答案 1 :(得分:1)

是的,这绝对是可能的。关于字段比较,我想到的第一件事就是列表过滤器。您需要尝试验证是否可以从列表视图中过滤掉这些记录。如果是,则可以肯定地使用GlideRecord API对其进行查询。如果无法查询它们,我们还可以使用其他选项,例如动态过滤器,甚至数据库视图也可以提供帮助。

所以我为数据添加了一个样本表,您需要确保这些列是Integer Type并对其应用过滤器

Filter

相关查询已从过滤器复制为u_col_1LT_FIELDu_col_2。您可以根据过滤器运算符获取不同的编码查询。

现在,下一步是进行表查询以获取所需的ID。

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

可以将相同的方法应用于从“立即服务”表中查询任何记录。

答案 2 :(得分:0)

据我所知,在GlideRecord查询中是不可能做到的。我们再也无法使用sql了,所以我认为根本不可能。

但是,如果您可以在表格中添加一列,则可以这样做:

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

您可以使用插入和更新业务规则设置sup标志,以便在GlideRecord查询中查询sup字段。