#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. Нет проблем! Еще раз спасибо