我正在尝试编写包含编码查询的查询,但我不确定我的语法是否正确(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匹配到文章的系列和位置。我想要包含一些规则,可以通过这种视觉更好地解释:
假设我的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';
}
}
答案 0 :(得分:2)
在我看来,当你的GlideRecord扩展更有效时,你会使用IF语句。我们还将利用'CONTAINS'
operator of addQuery作为LIKE语句。如果occ
和loc
变量实际上是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';
}