ServiceNow编码的查询语法

时间:2017-03-15 16:39:22

标签: javascript syntax servicenow

我正在尝试编写包含编码查询的查询,但我不确定我的语法是否正确(99.9%它完全错误)。我希望此查询循环浏览所有可用的知识文章,并根据作业系列和位置,为用户提供正确的文章。第一步是获取用户的作业系列和位置,并将它们保存为变量,我在这里完成了:

var gr = new GlideRecord('hr_profile');
    gr.addQuery('user', gs.getUserID());
    gr.query();
    if(gr.next())
    {
  var occ = gr.job_series.getHTMLValue();
  var loc = gr.user.location.getHTMLValue();
     }

接下来,我想将occ和loc匹配到文章的系列和位置。我想要包含一些规则,可以通过这种视觉更好地解释:

enter image description here

假设我的occ = 2210而我的loc = Rockville,MD,我会收到文章#5(蓝色)。如果我的密码是2210,但我位于加利福尼亚州的旧金山,我希望获得第4条,因为工作系列优先于位置。如果我的时间是1234而且我位于罗克维尔,我会收到文章#1,因为我的工作系列不存在。最后,在关闭机会我的时间是0101,我的位置在波特兰,或者(不在此列表中),我会收到文章#7。有了这个,我开始编写以下查询,但它不起作用。

我很确定语法错误,特别是处理代码的编码部分。有人可以帮我解决问题吗?

var ka = new GlideRecord('x_knowledge_articles');
   ka.addQuery('workflow_state', 'published');
   ka.query();
   while(ka.next()) {
       if("seriesLIKE"+occ+"^locationLIKE"+loc) {
            data.article = ka.number.getHTMLValue(); }
       else if("seriesLIKE"+occ+"^locationNOT LIKE"+loc) {
            var occDefault = "seriesLIKE"+occ+"^locationISEMPTY"
            data.article = occDefault.number.getHTMLValue(); }
      else if("locationLIKE"+loc+"^seriesNOT LIKE"+occ) {
            var locDefault = "locationLIKE"+loc+"^seriesISEMPTY"
            data.article = locDefault.number.getHTMLValue();}
       else {
            data.article = 'KB0010050';
       }
  }

1 个答案:

答案 0 :(得分:2)

在我看来,当你的GlideRecord扩展更有效时,你会使用IF语句。我们还将利用'CONTAINS' operator of addQuery作为LIKE语句。如果occloc变量实际上是HTML字段,我们需要使用'CONTAINS',但我们需要使用更准确的'='(也就是默认值)操作)如果值为空。

试试下面的代码,OP:

// To the best of my knowledge, the hr_profile code is fine
var gr = new GlideRecord('hr_profile');
gr.addQuery('user', gs.getUserID());
gr.query();
if(gr.next())
{
    var occ = gr.job_series.getHTMLValue();
    var loc = gr.user.location.getHTMLValue();
}


var ka = new GlideRecord('x_knowledge_articles');
ka.addQuery('workflow_state', 'published');

// We'll want to take blank values into account
// because using a CONTAINS addQuery on blank would return everything
if(occ == ''){
    // The line below is no different from ka.addQuery('series', occ)
    ka.addQuery('series', '=', occ);
}
else{
    ka.addQuery('series', 'CONTAINS', occ);
}

if(loc == ''){
    ka.addQuery('location', '=', loc);
}
else{
    ka.addQuery('location', 'CONTAINS', loc);
}       
ka.query();

if(ka.hasNext()){
    // I don't know if you need .getHTMLValue() for a number. Have you tried a vanilla getValue()?
    data.article = ka.number.getValue();
}
// If the queries above fail, fall back on KB0010050
else{
    data.article = 'KB0010050';
}