Would this be better in VLOookup form: ``` ...
# suitescript
g
Would this be better in VLOookup form:
Copy code
var search_sku = SEARCH.create({
                type: SEARCH.Type.INVENTORY_ITEM,
                columns: ['internalid', 'itemid'],
                filters: ['custitem43', 'IS', asin]
            });
            search_sku.run().each(function (result) {
                id = result.getValue('internalid')
                name = result.getValue('itemid')
            });
can you do a lookup with the data that ur looking up not being the ID of the datatype?
s
I assume you are referring to search.lookupFields, and no you cannot do a lookup unless you know the id of the record
g
yes. just wanted to confirm that as im having governance issues in a script and looking to get rid of some high price itmes
s
It's usually pretty tough to run of governance, I would pretty much never recommend using a lookup in any type of loop/recursion
b
ideally you lookup multiple items in one search
in this case use an
OR
operator in your filter expression or use a formula with an IN Condition
m
from what I have seen, a formula with IN condition is orders of magnitude more faster than a filter expression with OR
b
i personally see the opposite, what did your searches look like
m
Copy code
var searchWithMultipleFilters = nlapiCreateSearch('salesorder', [["mainline", "is", "N"], "and", [["custcol_fsg_olid", "is", "14b3e190-0a9f-ad61-5851-f269099c4247"], "or", ["custcol_fsg_olid", "is", "dfcc8af2-bfc8-34db-b991-2af1130c20f5"] /* etc.. */]]);

console.time("searchWithMultipleFilters");
var resultsFromSearchWithMultipleFilters = searchWithMultipleFilters.runSearch().getResults(0, 1000);
console.log(resultsFromSearchWithMultipleFilters );
console.timeEnd("searchWithMultipleFilters");

var lineGuids = ["14b3e190-0a9f-ad61-5851-f269099c4247", "dfcc8af2-bfc8-34db-b991-2af1130c20f5" /* etc */];

var formula = "formulanumeric: CASE WHEN {custcol_fsg_olid} IN (" + lineGuids.map(function(guid) {
    return "'" + guid + "'";
}).join(", ") + ") THEN 1 END";

var searchWithFormula = nlapiCreateSearch('salesorder', [["mainline", "is", "N"], "and", [String(formula), "equalto", 1]]);

console.time("searchWithFormula");
var resultsFromSearchWithFormula = searchWithFormula.runSearch().getResults(0, 1000);
console.log(resultsFromSearchWithFormula);
console.timeEnd("searchWithFormula");
message has been deleted
b
Copy code
var searchWithMultipleFilters = nlapiCreateSearch("customrecord1", [
  ["custrecord_internal_id", "is", "1"],
  "or",
  ["custrecord_internal_id", "is", "2"],
]);

console.time("searchWithMultipleFilters");
var resultsFromSearchWithMultipleFilters = searchWithMultipleFilters
  .runSearch()
  .getResults(0, 1000);
console.log(resultsFromSearchWithMultipleFilters);
console.timeEnd("searchWithMultipleFilters");

var lineGuids = ["1", "2"];

var formula =
  "formulanumeric: CASE WHEN {custrecord_internal_id} IN (" +
  lineGuids
    .map(function (guid) {
      return "'" + guid + "'";
    })
    .join(", ") +
  ") THEN 1 END";

var searchWithFormula = nlapiCreateSearch("customrecord1", [
  String(formula),
  "equalto",
  1,
]);

console.time("searchWithFormula");
var resultsFromSearchWithFormula = searchWithFormula
  .runSearch()
  .getResults(0, 1000);
console.log(resultsFromSearchWithFormula);
console.timeEnd("searchWithFormula");
message has been deleted
opposite, though i was pretty lazy on the ids
m
interesting, what do you think is causing the difference?
those screenshots are from about a year ago, i can try running again now in case something changed
b
was less lazy with the ids
Copy code
var lineGuids = nlapiSearchRecord(
  "customrecord1",
  null,
  ["custrecord_internal_id", "ISNOT", "@EMPTY@"],
  new nlobjSearchColumn("custrecord_internal_id")
)
  .map(function (result) {
    return result.getValue("custrecord_internal_id");
  })
  .slice(0, 121);

var orFilterExpression = [];
lineGuids.forEach(function (id) {
  orFilterExpression.push("OR", ["custrecord_internal_id", "IS", id]);
});
orFilterExpression.shift();

var searchWithMultipleFilters = nlapiCreateSearch(
  "customrecord1",
  orFilterExpression
);

console.time("searchWithMultipleFilters");
var resultsFromSearchWithMultipleFilters = searchWithMultipleFilters
  .runSearch()
  .getResults(0, 1000);
console.log(resultsFromSearchWithMultipleFilters);
console.timeEnd("searchWithMultipleFilters");

var formula =
  "formulanumeric: CASE WHEN {custrecord_internal_id} IN (" +
  lineGuids
    .map(function (guid) {
      return "'" + guid + "'";
    })
    .join(", ") +
  ") THEN 1 END";

var searchWithFormula = nlapiCreateSearch("customrecord1", [
  String(formula),
  "equalto",
  1,
]);

console.time("searchWithFormula");
var resultsFromSearchWithFormula = searchWithFormula
  .runSearch()
  .getResults(0, 1000);
console.log(resultsFromSearchWithFormula);
console.timeEnd("searchWithFormula");
same result