我正在尝试编写一个包含编码查询的查询,但是不确定我的语法是否正确(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,而我的位置= MD,Rockville,则将收到第5条(蓝色)。如果我的occ是2210,但是我位于加利福尼亚州的旧金山,我希望获得第4条报道,因为职务系列比地点优先。如果我的occ是1234,并且我位于罗克维尔,我将获得第一篇文章,因为我的工作系列不存在。最后,如果机会不多,我的occ是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';
}
}
最佳答案
在我看来,当您对GlideRecord进行扩展会更有效时,您正在使用IF语句。我们还将利用'CONTAINS'
operator of addQuery,它用作LIKE语句。如果occ
和loc
变量实际上是HTML字段,则需要使用'CONTAINS'
,但是如果该值为空,则需要使用更精确的'='
(aka默认操作)。
试用以下代码,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';
}