Заполните поле дата на основе значения поля условия

#netsuite #suitescript #suitescript2.0

Вопрос:

Можно ли заполнить duedate поле на основе terms поля? Например, у меня есть дата в duedate поле, но я хочу продлить ее в зависимости от terms поля. Как я могу это сделать? Через Suitescript или рабочий процесс?

Код неполон, потому что я не знаю, на правильном ли я пути. (ПРИМЕЧАНИЕ: Это пользовательское событие)

 function beforeLoad(context) {
    
}

function beforeSubmit(context) {
    
}

function afterSubmit(context) {
   var dataEntrega = context.currentRecord

   currentRecordRecord.getValue({
       fieldId: 'duedate'
   })

   var dataCondicoes = context.currentRecord

   currentRecord.getValue({
       fieldId: 'terms'
   })

   

}

return {
    beforeLoad: beforeLoad,
    beforeSubmit: beforeSubmit,
    afterSubmit: afterSubmit
}
 

Ответ №1:

Зачем вам нужно это писать? Я считаю, что срок выполнения рассчитывается на основе условий из коробки, нет необходимости в написании сценариев

Комментарии:

1. Отвечая на заказ компании, мне нужно, чтобы дата выставления счета была продлена в соответствии с условиями оплаты клиента. Я хотел сделать это с помощью рабочего процесса (который, я думаю, является альтернативой).

Ответ №2:

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

 function afterSubmit(context) {

  //load record
  var curRec = context.newRecord; //can substitute "context.oldRecord", or "currentRecord.get();"

  //get current due date
  var transDueDate = curRec.getValue({fieldId: 'duedate'});

  //get the terms, this will likely come as an internal id. use getText if you want the text.
  var transTerms = curRec.getValue({fieldId: 'terms'});

  //empty string to hold terms as a number of days
  var addtlDays;

  //transform the internal id to terms as a number of days
  switch (transTerms){
    case 1: // Ex: 1 = internal id for term "Net 15"
      addtlDays = 15;
      break;

    case 2: // Ex: 2 = internal id for term "Net 30"
      addtlDays = 30;
      break;

    //add additional case statements as needed

    default:
      addtlDays = 0;
  }

  //calculuate the new due date
  var d = new Date(transDueDate);
  var newDueDate = d.setDate(d.getDate()   addtlDays);

  //set the new due date
  curRec.setValue({
    fieldId: 'duedate',
    value: newDueDate,
    ignoreFieldChange: true //optional, default is false
  });
}
 

Комментарии:

1. Это должно помочь. Возможно, мне придется внести некоторые коррективы от имени компании, но я вам очень признателен

2. Никаких проблем, желаю удачи!

3. Привет, Марта, у меня возникла проблема с кодом. netsuite выдает мне эту ошибку: org.mozilla.javascript.EcmaError: Ошибка типа: Не удается вызвать метод «GetValue» неопределенного (/SuiteScripts/alter_date_ue.js#23)

4. Приношу свои извинения за оплошность с моей стороны. «curRec» не определен, так как «context.CurrentRecord» не является допустимым параметром для типа сценария afterSubmit ( netsuite.custhelp.com/app/answers/detail/a_id/44547/kw/44547 ). Я изменил ответ выше, чтобы отразить использование одного из следующих способов загрузки текущей записи: «context.newRecord», «context.oldRecord» или CurrentRecord.get();

5. Нет проблем! Еще раз спасибо