1

我打算让用户在 ServiceNow SOAP 请求中指定编码查询。

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

有没有办法通过网络服务检查编码查询的有效性?

4

4 回答 4

5

范迪克,

如果您提前知道 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'。

于 2013-10-04T21:33:46.603 回答
2

我总是建议启用系统属性“ glide.invalid_query.returns_no_rows ”以避免这种影响。该物业按照它所说的去做。我从来不明白你为什么要为无效查询返回所有行。我见过很多情况,开发人员有查询缺陷,但由于行返回而从不知道。

于 2016-08-28T22:30:52.967 回答
0

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

这可以用gs.getSession().setStrictQuery(boolean);覆盖。在逐个脚本的基础上。

于 2018-08-08T05:04:53.003 回答
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

于 2018-01-22T09:59:41.780 回答