2017-02-23 15 views
3

モーニング奉仕者複数の「数式」列の検索値

複数の「数式」列を持つNetsuite内に保存された検索があります。

たとえば、それぞれが固有であるためにいくつかの「formulapercent' named columns, although theラベルがあります。

しかし、nlobjSearchResult.getValue('formulapercent')を使用しているときは、当然のことながら最初のformulapercent列の値が得られます。

どのように指定するのですかgetValueの値の列を返すのですか?

Netsuite内で保存された検索に新しい列を挿入する必要がある場合は、実際には列番号を使用したくない場合があります。私は、マルチパラメータオプションを試してみましたが、それは動作しませんnlobjSearchResult.getValue('formulapercent','<label>')

の線に沿って何かを願い

簡易修正?

乾杯

スティーブ

答えて

3

私が一般的に行っていることは、保存された検索式の列にラベルを追加することです。次に、

var f1Val, f2Val, etc; 
results.forEach(function(res){ 
    var cols = res.getAllColumns(); 
    cols.forEach(function(col){ 
    switch(col.getLabel()){ 
     case 'formula1' : f1Val = res.getValue(col); break; 
     case 'formula2' : f2Val = res.getValue(col); break; 
     ... 
    } 
    }); 
}); 
+0

お返事ありがとうございます。実際に値を返すのはどうですか?私はラベルを持つgetValueを試しました(すべての列にラベルがあります)、しかし 'null 'を返します –

+0

編集を参照してください。あなたはキーとして列自体を使用することができます – bknights

+0

ありがとうBK、私は今朝それを試してみる:) –

1

getAllColumns(と呼ばれるnlobjSearchResultオブジェクトのメソッドがあります)。次に、数式列のインデックスを使用して値を取得します。

数式列の値を取得する他の方法はわかりません。このメソッドを使用すると、保存された検索の列の順序を変更すると、スクリプトが壊れることに注意してください。

1

私はSuiteScript 2.0を使用しています。これを関数に入れて必要な変数を渡します。

if(join){ 
    if(summary){ 
     if(String(name).startsWith("formula")){ 
      return result.getValue(result.columns[column]) 
     }else{ 
      var searchResult = result.getValue({ 
           name: name, 
           join: join, 
           summary:summary 
          }); 
      return searchResult 
     } 

    }else{ 
     if(String(name).startsWith("formula")){ 
      return result.getValue(result.columns[column]) 
     }else{ 
      var searchResult = result.getValue({ 
           name: name, 
           join: join 
          }); 
      return searchResult 
     } 
    } 

}else{ 
    if(summary){ 
     if(String(name).startsWith("formula")){ 
      return result.getValue(result.columns[column]) 
     }else{ 
      var searchResult = result.getValue({ 
           name: name, 
           summary: summary, 
          }); 
      if((column==7 || column ==8 || column==10 || column==12) && type=='cases'){ 

       return dropDown_Obj[column].getKeyByValue(searchResult) 
      } 
      return searchResult 
     } 

    }else{ 
     if(String(name).startsWith("formula")){ 
      return result.getValue(result.columns[column]) 
     }else{ 
      var searchResult = result.getValue({ 
           name: name 
          }); 
      return searchResult 
     } 
    } 
} 
0

私はそれ以降の回答を追加したいと思います。

列に総称して番号を付ける代わりに。例えば:これに代え

var column = [] 
column[0] = new nlobjSearchColumn('formulanumeric').setFormula('myformula1'); 
column[1] = new nlobjSearchColumn('formulanumeric').setFormula('myformula2'); 
searchresults = nlapiSearchRecord(.......); 

は、式Iの列の値を取得する最も簡単な方法は、一意の列を定義することがわかった:

var colformula1 = new nlobjSearchColumn('formulanumeric').setFormula('myformula1'); 
var colformula2 = new nlobjSearchColumn('formulanumeric').setFormula('myformula2'); 

var searchresults = nlapiSearchRecord('item',null,filters,[colformula1,colformula2]); 

次に数式の結果つかむために:

var formulares1 = searchresults[i].getValue(colformula1'); 
var formulares2 = searchresults[i].getValue(colformula2'); 

列の順序が変更された場合に問題を削除します。

これは誰かを助けるかもしれないと思った。