Оператор If Else внутри nlapiSearchRecord

#netsuite #suitescript #suitescript1.0

#netsuite #suitescript #suitescript1.0

Вопрос:

Очень нужна помощь.. Я пытаюсь добавить условие в свой API nlapiSearchRecord, но условие не выполняется. Несмотря на то, что он работает нормально без ошибок, suitelet просматривает первый параметр, даже если он должен следовать за оператором else .

Пожалуйста, обратитесь к строке: var arrSearchResults = nlapiSearchRecord(searchRecordType, null, arrSearchFilters, (searchRecordType = 'transaction') ? arrSearchColumnsTrans : arrSearchColumnsCustomers) || [];

Несмотря на то, что searchRecordType равен ‘customers‘, он по-прежнему следует arrSearchColumnsTrans, а не arrSearchColumnsCustomers


 var searchRecordType = request.getParameter ('custpage_rectype'); 
var searchLookupText = request.getParameter ('custpage_lookuptext'); 
var searchLookupField = request.getParameter ('custpage_lookupfield'); 
var searchParameter = request.getParameter ('custpage_searchparam'); 

var arrSearchFilters = [new nlobjSearchFilter(searchLookupField, null, searchParameter, searchLookupText)];
                            
var arrSearchColumnsTrans = [new nlobjSearchColumn('internalid'),
                                  new nlobjSearchColumn('type'),
                                  new nlobjSearchColumn('entity')];

var arrSearchColumnsCustomers = [new nlobjSearchColumn('internalid'),
                                  new nlobjSearchColumn('entityid'),
                                  new nlobjSearchColumn('companyname')];
        
  
var arrSearchResults =  nlapiSearchRecord(searchRecordType, null, arrSearchFilters, 
(searchRecordType = 'transaction') ? arrSearchColumnsTrans : arrSearchColumnsCustomers) || [];
        
var objVal = {};
for (var i = 0, ii = arrSearchResults.length; i < ii; i  ) 
{
    var val = arrSearchResults[i];
    objVal[val.getId()] = {};
    objVal[val.getId()].tranid = val.getValue('tranid');
    objVal[val.getId()].internalid = val.getValue('internalid');
    objVal[val.getId()].type = val.getValue('type');
    objVal[val.getId()].entityid = val.getValue('entityid');
    objVal[val.getId()].entity = val.getText('entity');
    }
   
  

Ответ №1:

Ваш троичный оператор на самом деле не имеет условного:

 (searchRecordType = 'transaction') ? ...
  

Поскольку вы используете = , вы просто присваиваете значение 'transaction' to searchRecordType . Если вместо этого вы хотите сравнить два значения, вы захотите использовать == или === .

См. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Equality и https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Strict_equality

Ответ №2:

Спасибо! Теперь все хорошо..

 var arrSearchResults = (searchRecordType === 'transaction') ? nlapiSearchRecord(searchRecordType, null, arrSearchFilters, arrSearchColumnsTrans) : (searchRecordType === 'item') ? nlapiSearchRecord(searchRecordType, null, arrSearchFilters, arrSearchColumnsItems) : nlapiSearchRecord(searchRecordType, null, arrSearchFilters, arrSearchColumns) || [];