0

我正在尝试查看客户付款数据的“应用”子列表中的值是否已更改并根据它执行一些操作。

我的 SuiteScript 如下:

define(['N/record', 'N/https'],
function(record,https)
{

function afterSubmit(context)
{
    var oldRec = context.oldRecord;
    log.debug({title: 'oldRec ', details: oldRec });
    // This log shows that the JSON has an 
    // attribute called sublists which contains "apply" which has all the applied payments
   // eg: {"id":"1234",  "type":"customerpayment",  "fields":{all the fields},
   // "sublists": {"apply" : {"line 1"...}}}

   var oldRecSublists = oldRec.sublists;
   log.debug({title: 'oldRecApply ', details: oldRecSublists });
   // This returns empty or null though there is data

我在这里做错了什么?

基本上我想要实现的是比较 context.oldRecord.sublists.apply 和 context.newRecord.sublists.apply 以查找 amt 是否已更改。

有没有更好的方法是 SuiteScript 2.0?

提前致谢!

4

1 回答 1

3

那里发生的部分情况是,您似乎正试图通过您在 print 语句中看到的内容来探索 NS 数据结构。您根本没有使用 NS api。

当您将 NS 对象发送到 log 函数时,我相信它会通过自定义 JSON.stringify 过程,因此如果您只想检查值,您可以执行以下操作:

var oldRecObj = JSON.parse(JSON.stringify(oldRec));

现在oldRecObj可以像检查一个简单的对象一样检查它。但你根本无法操纵它。

您应该使用NS 模式浏览​​器

并参考帮助文档对 N/record 进行操作

我经常用来处理子列表的一个片段是:

function iter(rec, listName, cb){
    var lim = rec.getLineCount({sublistId:listName});
    var i = 0;
    var getV = function (fld){
        return rec.getSublistValue({sublistId:listName, fieldId:fld, line:i});
    };
    var setV = function(fld, val){
        rec.setSublistValue({sublistId:listName, fieldId:fld, line:i, value:val});
    };
    for(; i< lim; i++){
        cb(i, getV, setV);
    }
}

进而

iter(oldRec, 'apply', function(idx, getV, setV){
    var oldApplied = getV('applied');
});
于 2018-03-22T23:25:32.173 回答