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

How to compare 2 columns in GlideRecord.addQuery() method?

假设我有一个 table 数据为:

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

是否可以检索 col_1 < col_2id?。所以这里的预期输出是 id:11

据我所知,不可能在 GlideRecord 查询中执行此操作。我们无法再访问 sql,所以我认为这根本不可能。

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

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

您可以使用 Insert & update 业务规则设置 sup 标志,这样您就可以在 GlideRecord 查询中查询 sup 字段。

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

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

允许比较两个不同字段的运算符 table:

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

如有疑问,您可以随时为过滤器 UI 支持的任何内容编写 GlideRecord 查询。只需在 UI、运行 中构建您想要的过滤器,然后右键单击面包屑(过滤器构建器正上方 UI),然后 select "Copy URL". 这将为您提供编码查询 URL,您可以直接将其粘贴到 GlideRecord api gr.addEncodedQuery(...) 或使用 3 参数 gr.addQuery(columnName, operatorName, value) 进行解构,在这种情况下动态字段比较运算符,value arg 是 other 列名。

是的,这绝对有可能。关于字段比较,我首先想到的是列表过滤器。您需要尝试验证是否可以从列表视图中过滤掉这些记录。如果是,您当然可以使用 GlideRecord API 查询它们。如果无法查询它们,我们还有其他选项,例如动态过滤器甚至数据库视图都可以提供帮助。

所以我为数据添加了一个示例table,您需要确保列是整数类型并应用我的过滤器

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

现在下一步是进行 table 查询以获取所需的 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
}

以及通过后台脚本执行时的输出

现在可以应用相同的方法从服务中查询任何记录 table。