2012-04-19 1 views
0

вопрос я имею я постоянно получаю следующее сообщение об ошибке при выполнении сценария событий пользователя в NetSuite:неопределенная ошибка при получении количества запасов в NetSuite

TypeError: Cannot read property "amazon" from undefined 

NetSuite использует Javascript, чтобы сделать бизнес-логику на обоих клиент и сервер. Для тех, кто не использует NetSuite, на сервере выполняется скрипт пользовательского события.

код можно разделить следующим образом:

var qtyAvail = 0; 
qtyAvail = rec.getValue('locationquantityavailable'); 
if(!qtyAvail || qtyAvail === 'undefined' || qtyAvail === null || isNaN(qtyAvail) || typeof qtyAvail === "undefined"){ 
       qtyAvail = 0; 

      } 
    location = rec.getValue(kColumns[3]); 
      if(location == 7 ||location == 16 ||location == 20 ||location == 3 ||location == 19 ||location == 1 ||location == 27 ||location == 27){  
       if(location == 7){ 
        fba = qtyAvail; 
        if(!fba){ 
         qtyAvail = 0; 
        }      
       } 
...more business code here.... 
return { 

      amazon: fba, 
      ups: upsName 
} 

Я зову возвращаемые значения, как:

var itemQty = getLocationQty(item); 
      if(itemQty.amazon){ 
       var fbaStock = itemQty.amazon; 
      } else { fbaStock = 0;} 

Этот код прекрасно работает для некоторых из моих мест, но если там нет количество, доступное в определенном месте, оно возвращается неопределенным, а не устанавливает qtyAvail в 0, как я ожидал.

У меня отсутствует сравнение для проверки неопределенности в любом месте, или кто-либо еще видит какие-либо проблемы с кодом?

ответ

1

Из фрагмента, который вы включили, похоже, что вы не инициализируете значение fba.

Добавить var fba=0; в начале и посмотреть, исправляет ли он это.

Возможно, вы хотели назначить qtyAvail для амазонки вместо fba.

+0

Я инициализирован FBA до 0, не повезло. Я назначаю qtyAvail для fba, так как когда я возвращаюсь, я возвращаю ассоциативный массив, из которого я могу вытащить объекты из-за пределов функции. Что странно, так это то, что код будет работать с некоторыми файлами, а другие с ошибкой не будут определены. Сравнительное сравнение записей, расположенных рядом друг с другом, показывает, что значения присутствуют в местоположении fba, которое терпит неудачу. Любые другие идеи? Я собираюсь рассмотреть возможность перезаписи своих функций, но я бы предпочел, чтобы избежать этого. –

+1

Вы пробовали использовать свой код в отладчике netsuite? – Craig

+0

Да, у меня есть - я нашел источник моего горя, хотя: элементы набора вызывают сбои, поэтому я написал функцию, которая отбрасывает часть набора имени элемента и возвращает основную часть. Поскольку это изменение работает, я в настоящее время выполняю партию из 200 заказов на продажу, чтобы увидеть, как она работает. –

1

Из битов кода, которые вы разделили, и вашего исходного описания, похоже, что литерал объекта, который вы возвращали из вашей функции, фактически не возвращался. «amazon» является свойством этого объекта, и поскольку ошибка говорит, что она не определена, эта функция ничего не возвращает.

Выполните следующий код двигателя JS:

function foo() 
{ 
    return; 
} 

alert(foo().amazon); 

, и вы увидите:

TypeError: Cannot read property 'amazon' of undefined

Я вижу, что вы нашли решение, я просто не понимаю, как это связано с о вашей первоначальной проблеме, о которой вы сообщали. Я что-то упускаю?

Также, хотя и не часть вашего вопроса я думал, что я мог бы упомянуть еще один подход к написанию проверки местоположения, немного легче читать:

var acceptedLocations = [ 7, 16, 20, 3, 19, 1, 27 ]; 
if(acceptedLocations.indexOf(location) > 0) 
{ 
    // Do rad stuff 
} 
+0

Спасибо Стив, решение, которое я продолжал терпеть при определенных обстоятельствах, заставляя меня перезаписать код, достаточно интересно, что я использовал indexOf для поддержки более чистого дизайна. +1 за ваше предложение, спасибо. –

Смежные вопросы