Netsuite - 加载前的 Suitescript 用户事件 - 获取子列表值加入 -> 设置子列表值自定义子记录

Posted

技术标签:

【中文标题】Netsuite - 加载前的 Suitescript 用户事件 - 获取子列表值加入 -> 设置子列表值自定义子记录【英文标题】:Netsuite - Suitescript User Event Before Load - Get Sublist Value Join -> Set sublist value custom child record 【发布时间】:2019-12-16 13:42:02 【问题描述】:

我在加载之前创建了一个用户事件脚本(在任务表单上),它应该在任务表单上插入多个字段的子列表值(自定义子列表子记录)。 “交易”字段的来源。

我想知道如何遍历销售订单上的行,然后在自定义子记录中创建这些行。

这就是我所拥有的 - 这是有效的。但我错过了循环功能,我现在明白了。

如果有人可以提供帮助会很高兴:

更新:

我找到了一种循环子列表的方法。 但我无法使用“提交行”功能在自定义子列表中设置下一行。 有人知道怎么做吗?

/**

*@NApiVersion 2.x

*@NScriptType UserEventScript

*/

define(['N/record'],
function(record) 
function beforeLoad(context) 
if (context.type !== context.UserEventType.CREATE)
return;

        var newRecord = context.newRecord;

var objRecord = record.load(
    type: record.Type.SALES_ORDER, 
    id: context.newRecord.getValue(fieldId: 'transaction'),
    isDynamic: true

  );

var objSublist = objRecord.getSublist(
   sublistId: 'item' 

);

  var numLines = objRecord.getLineCount(
    sublistId: 'item'
);

  for (var line = 0; line < numLines.length; line++)

  var objColumn = objSublist.getColumn(
   fieldId: 'item' 
);   

  var ObjField = objRecord.getSublistField(
    sublistId: 'item',
    fieldId: 'custcol12',
    line: line
  );

var sublistFieldValue = objRecord.getSublistValue(
    sublistId: 'item',
    fieldId: 'custcol12',
    line: line,
        );

      //SET Position#
   newRecord.setSublistValue(
          sublistId: 'recmachcustrecord250',
          fieldId: 'custrecord251',
          line: line,
          value: objRecord.getSublistValue(
            sublistId: 'item',
            fieldId: 'custcol12',
            line: line)
);
        //SET Item
     newRecord.setSublistValue(
          sublistId: 'recmachcustrecord250',
          fieldId: 'custrecord252',
          line: line,
          value: objRecord.getSublistValue(
            sublistId: 'item',
            fieldId: 'item',
            line: line)
);
      //SET Description
       newRecord.setSublistValue(
          sublistId: 'recmachcustrecord250',
          fieldId: 'custrecord253',
          line: line,
          value: objRecord.getSublistValue(
            sublistId: 'item',
            fieldId: 'description',
            line: line)
);
    //SET QUANTITY
         newRecord.setSublistValue(
          sublistId: 'recmachcustrecord250',
          fieldId: 'custrecord257',
          line: line,
          value: objRecord.getSublistValue(
            sublistId: 'item',
            fieldId: 'quantity',
            line: line)
);
  //SET INVENTORY DETAILS
           newRecord.setSublistValue(
          sublistId: 'recmachcustrecord250',
          fieldId: 'custrecord254',
          line: line,
          value: objRecord.getSublistValue(
            sublistId: 'item',
            fieldId: 'inventorydetail',
            line: line)
);

    //SET Condition
           newRecord.setSublistValue(
          sublistId: 'recmachcustrecord250',
          fieldId: 'custrecord255',
          line: line,
          value: objRecord.getSublistValue(
            sublistId: 'item',
            fieldId: 'custcol29',
            line: line)
);


return 
beforeLoad: beforeLoad,
;

);

【问题讨论】:

更新:我找到了一种循环子列表的方法。但我无法使用“提交行”功能在自定义子列表中设置下一行。有人知道怎么做吗? 【参考方案1】:

据我了解,您需要创建自定义记录,这是任务记录上的子记录。

var objRecord = record.load(
    type: record.Type.SALES_ORDER,
    id: context.newRecord.getValue( fieldId: 'transaction' ),
    isDynamic: true
);
var objSublist = objRecord.getSublist(
    sublistId: 'item'
);

var numLines = objRecord.getLineCount(
    sublistId: 'item'
);

for (var line = 0; line < numLines.length; line++) 

    //Get values from required fields of each line. 

   // create custom record for each SO line and make sure to add Parent (i.e. Task Record)


如果这没有帮助,请告诉我。

【讨论】:

感谢您的回复但是“为每个 SO 行创建自定义记录...”仅在提交后发生,对吗?因为我必须使用当前事务 ID 设置父字段值,这是不可能的,因为它尚未创建,对吧? 顺便说一句:也许我的想法一点都不好,而您知道更好的方法: 说明:我们在销售订单上有 10# 个不同的项目。 1. 我创建了一个任务记录并将其分配给今天的技术员#1(T#1)。 2. 我从子记录中删除除 Item#1 和 Item#8 之外的所有项目(在任务上) 3. 我创建第二个任务并将其分配给明天的 T#2 4. 我删除 item#1 和 item#8 因为他们已经分配给技术员#1 5. 两位技术员都知道他们必须修理哪个项目#【参考方案2】:

想通了。 我忘记了 循环区域....

这里是最终代码

/**
*@NApiVersion 2.x
*@NScriptType UserEventScript
*/

define(['N/record'],
function(record) 
function beforeLoad(context) 
if (context.type !== context.UserEventType.CREATE)
return;
        var newRecord = context.newRecord;

var objRecord = record.load(
    type: record.Type.SALES_ORDER, 
    id: context.newRecord.getValue(fieldId: 'transaction'),
    isDynamic: true

  );

var objSublist = objRecord.getSublist(
   sublistId: 'item' 

);


  var numLines = objRecord.getLineCount(
    sublistId: 'item'
);

        for (var i = 0; i < numLines; i++)  

  var ObjField = objRecord.getSublistField(
    sublistId: 'item',
    fieldId: 'custcol12',
    line: i
  );

var sublistFieldValue = objRecord.getSublistValue(
    sublistId: 'item',
    fieldId: 'custcol12',
    line: i,
    value: true
        );


          //SET checkbox false
   newRecord.setSublistValue(
          sublistId: 'recmachcustrecord250',
          fieldId: 'custrecord265',
          line: i,
          value: false);

      //SET Position#
   newRecord.setSublistValue(
          sublistId: 'recmachcustrecord250',
          fieldId: 'custrecord251',
          line: i,
          value: objRecord.getSublistValue(sublistId: 'item', fieldId: 'custcol12', line: i)
   );
        //SET Item
     newRecord.setSublistValue(
          sublistId: 'recmachcustrecord250',
          fieldId: 'custrecord252',
          line: i,
          value: objRecord.getSublistValue(
            sublistId: 'item',
            fieldId: 'item',
            line: i,
            value: true)
);
      //SET Description
       newRecord.setSublistValue(
          sublistId: 'recmachcustrecord250',
          fieldId: 'custrecord253',
          line: i,
          value: objRecord.getSublistValue(
            sublistId: 'item',
            fieldId: 'description',
            line: i,
            value: true)
);
    //SET QUANTITY
         newRecord.setSublistValue(
          sublistId: 'recmachcustrecord250',
          fieldId: 'custrecord257',
          line: i,
          value: objRecord.getSublistValue(
            sublistId: 'item',
            fieldId: 'quantity',
            line: i,
            value: true)
);




          //GET INVENTORY DETAILS
          objRecord.selectLine(
                sublistId: 'item',
                line: i
            );

          try 

var subrec = objRecord.getCurrentSublistSubrecord(
                sublistId: 'item',
                fieldId: 'inventorydetail',
            );



  //SET INVENTORY DETAILS
           newRecord.setSublistValue(
          sublistId: 'recmachcustrecord250',
          fieldId: 'custrecord254',
          line: i,
          value: subrec.getSublistValue(
            sublistId: 'inventoryassignment',
            fieldId: 'issueinventorynumber',
            line: 0
          ))




catch(err) 




    //SET Condition
           newRecord.setSublistValue(
          sublistId: 'recmachcustrecord250',
          fieldId: 'custrecord255',
          line: i,
          value: objRecord.getSublistValue(
            sublistId: 'item',
            fieldId: 'custcol29',
            line: i,
            value: true)

 );            
          //PLANNED CHECKBOX
                var planned = newRecord.getSublistValue(
                sublistId: 'recmachcustrecord250',
                fieldId: 'custrecord265',
                line: i); 

          // REPAIR TIME /H
            newRecord.setSublistValue(
          sublistId: 'recmachcustrecord250',
          fieldId: 'custrecord256',
          line: i,
          value: objRecord.getSublistValue(
            sublistId: 'item',
            fieldId: 'custcol37',
            line: i,
            value: true)
  );          




            function beforeSubmit(context) 
            if (context.type !== context.UserEventType.CREATE)
                return;
            var newRecord = context.newRecord;

                var numLines = newRecord.getLineCount(
                sublistId: 'recmachcustrecord250');

              for(var line = numLines; line> -1; line--) 

              var planned = newRecord.getSublistValue(
                sublistId: 'recmachcustrecord250',
                fieldId: 'custrecord265',
                line: line); 

               if (planned == false) 

                newRecord.removeLine(
                sublistId: 'recmachcustrecord250',
                line: line,
                ignoreRecalc: true)


              
                
        


return 
beforeLoad: beforeLoad,
beforeSubmit: beforeSubmit,
;

);

【讨论】:

以上是关于Netsuite - 加载前的 Suitescript 用户事件 - 获取子列表值加入 -> 设置子列表值自定义子记录的主要内容,如果未能解决你的问题,请参考以下文章

使用php soapclient工具包显示访问netsuite wsdl无法加载wsdl

是否有任何选项可以将 R 与 NetSuite 连接以定期向 NetSuite 用户提供分析结果?

Netsuite 的 Apple Pay 集成

获取 Netsuite 高级库存序列号的脚本

将 WooCommerce 订单发送到 NetSuite

Netsuite Web服务邮递员收藏在哪里?