【问题标题】:ServiceNow Encoded Query validationServiceNow 编码查询验证
【发布时间】:2013-09-05 10:38:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: servicenow


    【解决方案1】:

    狂热,

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

    GlideRecord 有“addEncodedQuery”方法用于输入编码查询,它有一个 getEncodedQuery 用于将当前查询转换为编码字符串。如果你实例化一个 GlideRecord 对象,并传递一个无效的查询字符串,像这样:

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

    然后你可以调用getEncodedQuery 看看是否有效:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        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

        【讨论】:

          【解决方案4】:

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

          这可以逐个脚本地用 gs.getSession().setStrictQuery(boolean); 覆盖。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-03-27
            • 2020-02-28
            • 2011-06-26
            • 2020-04-07
            • 1970-01-01
            • 2017-01-28
            • 1970-01-01
            相关资源
            最近更新 更多