2016-12-07 2 views
0

In der netSuite haben wir Monate (nicht in der Reihenfolge). Monate Werte sagen:Suchfilter in Netsuite für bestimmte Monate

list_month = [182,183,186,187,188,190,191,192,194,195,196,199,200,201]; 

Ich möchte Suchfilter anwenden zu bekommen Aufzeichnungen in bestimmten Monaten sagen, von 183 auf 194.

var period = 183; 
var period1 = 194; 

ich verwendet, um die „zwischen“ und „innerhalb“, aber es ‚funktionierte nicht

Hier ist mein Filter:

filters.push(new nlobjSearchFilter("postingperiod","transaction","within",period,period1)); 

diese zurück auf ly die Werte von 183. Ich will alle von ihnen: 183,186,187,188,190,191,192,194.

* Hinweis: Dies ist nicht Termine sind aber Monate (ab 1 zum letzten Tag des Monats beginnen)

Wie ich das bekommen kann.

Dank

Antwort

2

Sie würden jede Periode als separater Filter angeben müssen und .setParens(1) und .setOr(true) verwenden, um die Logik Ihrer Suche wie diese zu bauen:

var results = nlapiSearchRecord('invoice', null, [ 
    new nlobjSearchFilter('mainline', null, 'is', 'T'), 
    new nlobjSearchFilter('postingperiod', null, 'within', 122).setLeftParens(1).setOr(true), 
    new nlobjSearchFilter('postingperiod', null, 'within', 123).setRightParens(1) 
], [ 
    new nlobjSearchColumn('internalid', null, 'count') 
]); 

Wenn Sie nicht immer wissen Welche Zeiträume Sie benötigen, können Sie diese Filter dynamisch mit einer Funktion wie dieser erzeugen:

function buildPeriodFilters(periodIds) { 
    // Return empty array if nothing is passed in so our search doesn't break 
    if (!periodIds) { 
     return []; 
    } 

    // convert to array if only a single period id is passed in. 
    periodIds = [].concat(periodIds); 

    return periodIds.map(function(periodId, index, periodIds) { 
     var filter = new nlobjSearchFilter('postingperiod', null, 'within', periodId); 

     // if this is the first periodid, add a left parenthesis 
     if (index === 0) { 
      filter = filter.setLeftParens(1); 
     } 

     // if this is the last period id, add a right parenthesis, otherwise add an 'or' condition 
     if (index !== periodIds.length - 1) { 
      filter = filter.setOr(true); 
     } else { 
      filter = filter.setRightParens(1); 
     } 

     return filter; 
    }); 
} 

var dynamicPeriodFilter = buildPeriodFilters([122,123,124]); 

var results = nlapiSearchRecord('invoice', null, [ 
    new nlobjSearchFilter('mainline', null, 'is', 'T'), 
].concat(dynamicPeriodFilter), [ 
    new nlobjSearchColumn('internalid', null, 'count') 
]); 
+0

Dies funktioniert aber nur für die zu und von Monat. Es überspringt die mittleren Monate, die ich will. Array für den Monat ist: list_month = [182,183,186,187,188,190,191,192,194,195,196,199,200,201]; sagen, dass ich es in 183 und 194. So sollen die Filter zu 183.186.187.188.190.191.192.194 sein will zur Zeit angewandt werden, es ist nur auf 183 und 19 –

+0

* und 194 Dies ist, wie ich tue angewandt zu werden: 'var Periode = 183; var Zeitraum1 = 194; filters.push (new nlobjSearchFilter ("postingperiod", "Transaktion", "zwischen", Punkt) .setLeftParens (1) .setOr (true)); \t \t \t filters.push (new nlobjSearchFilter ("postingperiod", "Geschäft", "zwischen", Periode1) .setRightParens (1)); ' \t \t \t I versucht: ' filters.push (new nlobjSearchFilter ("postingperiod", "Transaktion", "zwischen", list_month [Punkt]). setLeftParens (1) .setOr (true)); \t \t \t filters.push (new nlobjSearchFilter ("postingperiod", "Geschäft", "zwischen", list_month [period1]) setRightParens (1).); ' \t \t \t aber dies nicht funktioniert. –

+0

Versuchen Sie, in den Filterdefinitionen "zwischen" zu "innerhalb" zu ändern. –