ServiceNow编码查询验证

时间:2013-09-05 10:38:39

标签: servicenow

我打算让用户在ServiceNow SOAP请求中指定encoded query

问题是如果用户指定了无效的查询字符串(例如“?#@”或“sometext”),ServiceNow不会返回任何异常,而是返回每行或根本没有行。

有没有办法通过webservice检查编码查询的有效性?

4 个答案:

答案 0 :(得分:5)

Fandic,

如果您提前知道SOAP查询将针对哪个表运行(或者可以在用户提交查询时从用户处获取该信息),则可以专门设置自己的Web服务以检查查询字符串的有效性

GlideRecord具有用于放入编码查询的“addedEncodedQuery”方法,它有一个getEncodedQuery,用于将当前查询转换为编码字符串。如果你实例化一个GlideRecord对象,并传递一个无效的查询字符串,如下所示:

var myGR = new GlideRecord('incident');
    myGr.addEncodedQuery('invalid_field_foo=BAR');

然后,您可以调用getEncodedQuery以查看它是否有效:

var actual_query = myGR.getEncodedQuery(); //sys_idNotValidnull

您不应该在输入和输出之间进行简单比较,因为API不保证有效查询将返回与输入完全相同的字符串。最好简单地验证actual_query不等于'sys_idNotValidnull'。

答案 1 :(得分:2)

我总是建议启用系统属性' glide.invalid_query.returns_no_rows'避免这种影响。该物业正如它所说的那样。我永远不明白为什么你想要为无效查询返回所有行。我已经看到了一些开发人员遇到查询缺陷的情况,并且因为行已经回来而从未知道它。

答案 2 :(得分:0)

您可以使用以下代码,以便查询仅在正确时返回结果。

gs.getSession().setStrictQuery(boolean);

这会覆盖系统属性的值:

glide.invalid_query.returns_no_rows

参考:https://docs.servicenow.com/bundle/istanbul-platform-administration/page/administer/reference-pages/reference/r_AvailableSystemProperties.html

答案 3 :(得分:0)

检查属性值glide.invalid_query.returns_no_rows。如果为true,则无效查询不返回任何行。如果为假(或不可用),它将被忽略。

可以使用 gs.getSession()。setStrictQuery(boolean); 逐个脚本地对此进行覆盖。