2017-07-05 2 views
1

J'essaie d'ajouter un filtre dans la condition de recherche.Filtre de recherche Netsuite pour la liste des éléments

Le problème auquel je suis confronté est que pendant que j'utilise l'internalid et l'int 1111 cela fonctionne très bien. Mais si je remplace avec une autre colonne avec une chaîne, cela ne fonctionne pas. Il lance une erreur dans la ligne de recherche cust. Quelqu'un peut-il suggérer?

 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; 
     }); 

Répondre

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

Merci. Ce code fonctionne pour moi. – Arindam

+0

Oui, mon code fait la même chose que le vôtre, juste de manière itérative. Et vous pouvez l'utiliser avec n'importe quel champ de chaîne que vous avez (pas seulement 'email') –

+0

Si j'utilise le filtre il donne l'erreur comme. Je l'ai détaillé dans mes dernières années. ** {"name": "WRONG_PARAMETER_TYPE", "message": "Type de paramètre incorrect: les filtres sont attendus en tant que tableau."} ** – Arindam

4

Le champ E-mail n'est pas compatible avec l'opérateur ANYOF. Essayez l'une des façons suivantes:

  • TOUTE
  • EST
  • isempty
  • startswith
  • CONTIENT
  • IsNot
  • ISNOTEMPTY
  • DOESNOTSTARTWITH
  • DOESNOTCONTAIN

Si vous avez besoin de filtrer par plusieurs emails, vous pouvez utiliser des expressions pour ajouter "OR". Je suggère d'utiliser l'extension Chrome Netsuite: Search Export pour rendre les choses plus faciles.

+1

Merci pour le lien vers le plugin Search Export. C'est très utile. –

1

options.filters que vous utilisez pourraient être:

  • un seul objet search.Filter
  • un tableau d'objets search.Filter
  • une expression de filtre de recherche
  • un tableau d'expressions de filtre de recherche

Dans votre exemple, vous créez 2 objets de filtre (filterscust1 et filterscust2). Après cela, vous essayez pour créer une expression de filtre de recherche, en combinant deux objets de filtre avec 'ou' chaîne à l'intérieur. Mais ce n'est pas correct:

Une expression de filtre de recherche est un JavaScript de zéro ou plusieurs éléments. Chaque élément est l'un des éléments suivants:

  • opérateur - soit 'NON', 'ET' ou 'OU'
  • Filtre terme
  • expression filtre de recherche Nested

Ainsi, le code équivalent doit être:

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] 

}); 

ou directement:

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

}); 
+0

Merci ... Ce code fonctionne pour moi. L'exception de tableau ci-dessus n'est plus. – Arindam