2017-03-15 17 views
1

エンコードされたクエリを含むクエリを作成しようとしていますが、構文が正しくてもわかりません(99.9%は完全に間違っています)。私は利用可能なすべてのナレッジ項目を順番に調べ、仕事シリーズと場所に基づいて、ユーザーに正しい記事を提供したいと思っています。最初のステップは、ユーザの仕事シリーズと場所をつかむと、私はここでやった変数、としてそれらを保存することです:ServiceNowでエンコードされたクエリの構文

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をマッチさせたいです記事。 = 2210私のOCCと私のLOC =ロックビル、MDを想定し

enter image description here

、私は記事#5(青添えられる:私は含まれており、それが良いこのビジュアルで説明することができますしたいいくつかのルールがあります。 )。私の場合は2210ですが、私はサンフランシスコ、カリフォルニア州に位置しています。私は記事#4を務めたいと思います。私のoccが1234で、私がロックビルに位置していれば、私の仕事シリーズがないので、記事#1で奉仕します。最後に、オフチャンスで私の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'; 
     } 
    } 

答えて

2

GlideRecordの拡張がより効果的である場合は、IF文を使用しているようです。また、LIKEステートメントとして機能する'CONTAINS'operator of addQueryを利用します。 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'; 
} 
+0

...そしてあなたがそのよう実際に照会GlideRecordのデータに移動するために ')' ka.next(への呼び出しが必要になるだろう'ka.number'への呼び出しはreadyのデータを持っています。 – Joey

関連する問題