我打算让用户在编码查询 SOAP请求中指定ServiceNow。
问题是,如果用户指定无效的查询字符串(例如"?#@“或"sometext"),则ServiceNow不会返回任何异常,而是返回每一行或根本不返回行。
是否有方法通过webservice检查编码查询的有效性?
发布于 2013-10-04 21:33:46
范迪奇
如果提前知道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‘。
发布于 2016-08-28 22:30:52
我总是建议启用系统属性“行”以避免这种影响。物业就像它说的那样。我从来不明白为什么要为无效的查询返回所有行。我见过很多情况,开发人员有查询缺陷,而且自从行回来后就不知道了。
发布于 2018-01-22 09:59:41
您可以使用下面的代码,这样查询只有在其正确时才会返回结果。
gs.getSession().setStrictQuery(boolean);这将重写系统属性值:
glide.invalid_query.returns_no_rowshttps://stackoverflow.com/questions/18634101
复制相似问题