2017-03-24 7 views
0

私はSuiteletを使って着陸費用を(.csvファイルを使って)領収書に適用しています。以下のコードは、PO番号の配列を繰り返して、nlapiSearchRecord()に渡す式(数値)を作成しています。javascriptの文字列変数をnlapiSearchRecordフィルターに渡す

検索フィルタの一部を変数から渡すときに検索が失敗することがあります。私はさまざまなサイズの文字列を二重引用符と一重引用符を伴って渡すことを試みました(アイデアについてはセクションをコメントアウトしています)、今では変数testNumberを検索文字列に渡しています。それはまだ私は、このエラーを与えて失敗しています:完全なラインが

["formulanumeric: case when {number} = 'PO476' or {number} = '294' then 1 else 2 end","equalto","1"], 

     for(var i = 0; i<poNumbers.length; i++) { 

      if(i < (poNumbers.length - 1)) { 

       poFormula += "{number} = '"+poNumbers[i]+"' or "; 

      } 

      else { 
       poFormula += "{number} = '"+poNumbers[i]+"'"; 
      } 

     } 

     //poFormula(string) --> {number} = 'PO481' or {number} = 'PO476' or {number} = '294' or {number} = 'PO440' or {number} = 'PO441' 

     //var searchFormulaStart = "formulanumeric: case when "+poFormula+" then 1 else 2 end"; 
     //var sfMiddle = "equalto"; 
     //var sfEnd = "1"; 

     var testNumber = "'PO476'"; 

     var purchaseorderSearch = nlapiSearchRecord("purchaseorder",null, 
     [ 
      ["mainline","is","T"], 
      "AND", 
      ["type","anyof","PurchOrd"], 
      "AND", 
      ["formulanumeric: case when {number} = "+testNumber+" then 1 else 2 end","equalto","1"], 
      //[searchFormulaStart,sfMiddle,sfEnd], 
      "AND", 
      ["type","anyof","PurchOrd"] 
     ], 
     [ 
      new nlobjSearchColumn("internalid",null,null) 
     ] 
     ); 

ことになっている

SSS_INVALID_SRCH_FILTER_EXPR_OBJ_TYPE
Malformed search filter expression: Unrecognized object type.

アイデアは、私は彼らを得ることができるので、.CSVに含まれるすべてのPOを返す必要があるということです内部ID。コードの後半では、これらのIDをアイテム受領書に対する別の検索に渡し、それらのPOから作成されたすべての領収書を検索します。私はそれらを持っていると、私はそれらの領収書に貨物コストを適用することができます。

 var itemreceiptSearch = nlapiSearchRecord("itemreceipt",null, 
      [ 
       ["type","anyof","ItemRcpt"], 
       "AND", 
       ["mainline","is","T"], 
       "AND", 
       ["createdfrom","anyof", poInternalIds] 
      ], 
      [ 
       new nlobjSearchColumn("tranid",null,null) 
      ] 
      ); 

このような変数からの検索文字列の一部を渡すと、いくつかの文書化されていないバグか何かがあるのならば誰でも確認することができますか?あるいは、PO番号と貨物料金を指定すると、入荷したコストを入荷に適用する良い方法がありますか?

ありがとうございます!

答えて

1

スラックの人々の助けを借りて解決策を見つけました。変数をフィルタ文字列に連結するのではなく、次に示すようにforEach()ループでフィルタ配列全体を作成しています。

Netsuite APIが検索で連結を使用してフォーマットされたものが好きではなかった理由はまだ分かりませんが、とにかくこれははるかにクリーンなソリューションです。

 for(var i = 0; i<freightCosts.length; i++) { 

      poNumbers.push(freightCosts[i].PO); 

     } 

     poNumbers.forEach(function(tranid){ 

      filters.push(["tranid", "is", tranid]); 
      filters.push("or"); 

     }); 
     // remove the last "or" 
     filters.pop(); 

     var purchaseorderSearch = nlapiSearchRecord("purchaseorder",null, 
     [ 
      ["mainline","is","T"], 
      "AND", 
      ["type","anyof","PurchOrd"], 
      "AND", 
      [filters] 
     ], 
     [ 
      new nlobjSearchColumn("internalid",null,null) 
     ] 
     ); 
0

私はちょうど先週、この正確な問題に遭遇しました。 Netsuiteが使用するRhino Javascriptエンジンのバグのようです。それを動作させるための回避策は、連結を1つにまとめることです。String()

[String("formulanumeric: case when {number} = "+ testNumber + " then 1 else 2 end"), "equalto", "1"] 
関連する問題