2017-07-05 6 views
1

Ich versuche, einen Filter in der Suchbedingung hinzuzufügen.Netsuite Suchfilter für die Liste der Elemente

Das Problem, mit dem ich konfrontiert bin, ist, dass, während ich die Internalid und die Int 1111 verwende, es gut funktioniert. Aber wenn ich mit einer anderen Spalte durch eine Zeichenfolge ersetze, funktioniert es nicht. Es löst einen Fehler in der Suchzeile aus. Kann jemand vorschlagen?

 var custSearch = search.create({ 
     type : record.Type.CUSTOMER, 
     columns : searchColumn,   
     filters: [ 
       'email', 'ANYOF', ["[email protected]","[email protected]"]] 
       //'internalid', 'ANYOF', ["1397","1251"]] // Works fine 

     }); 
     custSearch.run().each(function(result) { // throw errors 
      log.debug("Found !",result); 
      return true; 
     }); 

Antwort

1
function stringFieldAnyOf(fieldId, listOfValues) { 
    var result = []; 
    if (listOfValues.length > 0) { 
    for (var i = 0; i < listOfValues.length; i++) { 
     result.push([fieldId, 'startswith', listOfValues[i]]); 
     result.push('or'); 
    } 
    result.pop(); // remove the last 'or' 
    } 
    return result; 
} 

// usage: (two more filters added just to illustrate how to combine with other filters) 
var custSearch = search.create({ 
    type: record.Type.CUSTOMER, 
    columns: searchColumn, 
    filters: [ 
    ['companyname', 'startswith', 'A'], 'and', 
    stringFieldAnyOf('email', ['[email protected]', '[email protected]']), 'and', 
    ['companyname', 'contains', 'b'] 
    ] 

}); 
+0

Danke. Dieser Code funktioniert für mich. – Arindam

+0

Ja, mein Code macht dasselbe wie Ihr, nur in iterativer Weise. Und Sie können es mit jedem Zeichenfolgenfeld verwenden, das Sie haben (nicht nur 'E-Mail') –

+0

Wenn ich den Filter verwende, gibt es einen Fehler als. Ich habe es in meinen letzten Jahren genau beschrieben. ** {"name": "WRONG_PARAMETER_TYPE", "Nachricht": "Falscher Parametertyp: Filter wird als Array erwartet."} ** – Arindam

4

Das E-Mail-Feld ist nicht mit dem Operator ANYOF kompatibel. Versuchen Sie eine der folgenden Aktionen:

  • ANY
  • IS
  • isEmpty
  • starts
  • ENTHÄLT
  • IsNot
  • ISNOTEMPTY
  • DOESNOTSTARTWITH
  • DOESNOTCONTAIN

Wenn Sie nach mehreren E-Mails filtern müssen, können Sie Ausdrücke verwenden, um "ODER" s hinzuzufügen. Ich empfehle, die Chrome-Erweiterung Netsuite: Search Export zu verwenden, um die Dinge einfacher zu machen.

+1

Danke für den Link zum Search Export Plugin. Das ist sehr hilfreich. –

1

options.filters, die Sie könnten verwenden sein:

  • ein einzelnes Objekt search.Filter
  • ein Array von search.Filter Objekte
  • einen Suchfilter Ausdruck
  • ein Array von Suchfilterausdrücken

In Ihrem Beispiel erstellen Sie 2 Filterobjekte (filterscust1 und filterscust2). Danach versuchen Sie einen Suchfilterausdruck zu erstellen, indem Sie zwei Filterobjekte mit 'oder' Zeichenfolge innerhalb kombinieren. Aber das ist nicht korrekt:

Ein Suchfilter Ausdruck ist ein JavaScript String-Array von null oder mehr Elemente. Jedes Element ist eine der folgenden Möglichkeiten:

  • Operator - entweder 'NICHT', 'UND' oder 'ODER'
  • Filter Begriff
  • Verschachtelte Suchfilter Ausdruck

Also, die entsprechender Code sollte sein:

filterscust1 = ['email', 'contains', '[email protected]']; 

filterscust2 = ['email', 'contains', '[email protected]']; 

var filtersExp = [ filterscust1, 'or', filterscust2 ]; 

var custSearch = search.create({ 
    type: record.Type.CUSTOMER, 
    columns: searchColumn, 
    filters: [filtersExp] 

}); 

oder direkt:

var custSearch = search.create({ 
    type: record.Type.CUSTOMER, 
    columns: searchColumn, 
    filters: [ ['email', 'contains', '[email protected]'], 'or', 
      ['email', 'contains', '[email protected]'] 
      ] 

}); 
+0

Danke ... Dieser Code funktioniert bei mir. Die obige Array-Ausnahme ist nicht mehr. – Arindam

Verwandte Themen