Добавление одного к старшему серийному номеру, найденному в поиске

1

Когда серийный номер присутствует, ничего не делайте, когда серийный номер отсутствует в нашей базе данных и добавьте его к самому большому серийному номеру. Мой код не добавляет его, когда. Поэтому я просто получаю одинаковый номер. Когда серийный номер присутствует, ничего не делайте, когда серийный номер отсутствует в нашей базе данных и добавьте его к самому большому серийному номеру. Мой код не добавляет его, когда. Поэтому я просто получаю одинаковый номер.

 // Is there a current serial number? If yes, use that sequence number else generate a new one.
        var currentSerialNumber = nlapiGetFieldValue('custrecordbcs_arm_serial');
        if (currentSerialNumber == null || currentSerialNumber == '')
            {
            nlapiLogExecution('DEBUG','NUmber of REcords3','here');
            // ok - serial number is blank - let'g get a new sequence number
                var SerialNo = nextSerialNo();

            } else {
                nlapiLogExecution('DEBUG','NUmber of REcords4','here');
                // a serial number has already been issued - use it sequence number
                var SerialNo = currentSerialNumber.substring(10,14);

            }




        var modulecode = 'ARM';
        var tmpSubscription = nlapiGetFieldValue('custrecordbcs_arm_c');
        if (tmpSubscription == 'T') {
            var subscription = true;
        } else {
            var subscription = false;
        }
        if (subscription == true) {
          isSubscription = true;
          serialtype = 'C';
        } else {
          isSubscription = false;
        }
        // calculating the final serial number 
        var finalserialnumber = (serialtype + HashKey + months + year + modulecode + SerialNo);
        nlapiLogExecution('DEBUG','Final Serial',finalserialnumber);
        // calculating the unlock key
        var unlockkey = Getunlockforuser(companyname, finalserialnumber, isSubscription);
        nlapiLogExecution('DEBUG','Unlock',unlockkey);
        // this is placing the serial number and unlock key into the fields in netsuite.
        nlapiSetFieldValue('custrecordbcs_arm_unlock',unlockkey);
        nlapiSetFieldValue('custrecordbcs_arm_serial',finalserialnumber);
        //

        }




        function nextSerialNo(){
            // this function will calculate the serial number based off the highest record found in netsuite
            nlapiLogExecution('DEBUG','NUmber of REcords1','here');
            var filters = new Array();
            filters[0] = new nlobjSearchFilter('isinactive',null,'is','F');
            filters[1] = new nlobjSearchFilter('custrecord_bcs_cm_lapse',null,'is','F');
            filters[2] = new nlobjSearchFilter('custrecordbcs_arm_serial',null,'isnotempty','F');

            var columns = new Array();
            columns[0] = new nlobjSearchColumn('internalid');
            columns[1] = new nlobjSearchColumn('custrecordbcs_arm_serial');


            var highNumber = 0;
            var allUnlockKeys = nlapiSearchRecord('customrecord_bcs_contracts',null,filters,columns);


            nlapiLogExecution('DEBUG','NUmber of REcords','null');

            for (var i=0; allUnlockKeys != null && i < allUnlockKeys.length; i++)
            {

                var x  = Number(allUnlockKeys[i].getValue(columns[1]).substring(10,14));
                nlapiLogExecution('DEBUG','value of x',x.toString());
                if (x > highNumber){
                        highNumber = x+1;
                 }
             }

                return padstring(highNumber,4);
          }
  • 1
    Нужна дополнительная информация, я думаю, чтобы дать точный ответ. Есть ли конкретная причина, по которой вы используете для сравнения только часть возвращенного серийного номера? Почему бы не сравнить весь серийный номер с highNumber? Сколько всего записей в пользовательской записи 'customrecord_bcs_contracts'? Я спрашиваю, потому что nlapistSearchRecord может максимально вернуть 1000 результатов. Почему вы не используете группировку / суммирование в поиске? Вы можете просто использовать это, чтобы получить наибольшее число непосредственно из поиска: new nlobjSearchColumn ('custrecordbcs_arm_serial', null, "MAX"); Нет необходимости перебирать результаты
Теги:
netsuite
suitescript

1 ответ

0

Во-первых, я бы предложил перейти к SuiteScript 2.0. Говоря о том, что здесь есть краткая и грязная попытка ответить на ваш вопрос, так как я не уверен на 100%, как выглядят ваши данные. Я также проанализировал число как целое число, чтобы убедиться, что это число. Я бы добавил некоторые тесты на это, а также в производственной версии. Надеюсь, это поможет вам в правильном направлении.

Короче говоря, используйте ваш поиск, но сортируйте по убыванию поля, которое вы хотите добавить (таким образом, ваш первый результат должен быть самым высоким). Вы также можете сделать это в сохраненном поиске и просто загрузить этот поиск, глядя только в первую строку.

require(['N/search'],function(search){
  function nextSerialNo(){
    log.debug('NUmber of REcords1','here');
    var highNumber=0;
    var resultArray=[];
    var contractlineSearchObj=search.create({
      type:"customrecord_bcs_contracts",
      filters:[["isinactive","is",false],"and",["custrecord_bcs_cm_lapse","is",false],"and",["custrecordbcs_arm_serial","isnotempty"]],
      columns:[
        search.createColumn({
          name:"internalid",
        }),
        search.createColumn({
          name:"custrecordbcs_arm_serial",
          sort:search.Sort.DESC
       })
      ]
    }).run().each(function(result){
      log.debug('result: ',JSON.stringify(result));
      var highNumber=result.getValue({name:'custrecordbcs_arm_serial'});
      log.debug('highNumber1: ',JSON.stringify(highNumber));

      var highNumber=highNumber.toString().substring(2,3);
      log.debug('highNumber2: ',JSON.stringify(highNumber));

      var highNumber=parseInt(highNumber)+1;
      log.debug('highNumber3: ',JSON.stringify(highNumber));
      return false
    });

    return padstring(highNumber,4);
  }

  nextSerialNo()
});

Кроме того, здесь представлена главная страница модулей 2.0: Модули SuiteScript 2.0

  • 1
    Потрясающие! Огромное спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню