在NetSuite中将项目动态采购到事务中

时间:2018-09-05 16:43:05

标签: transactions netsuite lookup sublist

在NetSuite中创建新的销售订单时,我想使用项目记录上自定义字段中的值来检索并在交易的行项目部分中输入项目。可以使用SuiteScript 2.0编码此功能吗?

3 个答案:

答案 0 :(得分:2)

是的,但是您不需要为此编写脚本。

  1. 创建您的商品自定义字段。
  2. 创建交易行自定义字段。
  3. 在“应用于”选项卡中,选中“销售商品”
  4. 在“采购和筛选”标签中,为“源列表”字段选择“项目”,然后为“来源自”字段选择在第一步中创建的字段。

现在,当您在销售订单中输入项目时,来自自定义项目字段的值将被复制到销售订单行中的相应字段。

答案 1 :(得分:1)

根据您对K的回答的评论,我认为您想做的是:

  1. 创建自定义交易行字段以接受用户输入
  2. 创建一个在fieldChanged事件上具有方法的客户端脚本,并检查该字段是否为您的自定义字段
  3. 如果是,请使用输入的值对自定义商品字段执行商品搜索,并获取商品的内部ID
  4. 使用内部ID设置行的“项目”字段

希望这会有所帮助!

答案 2 :(得分:0)

尝试以下方法。它不完整,无法处理错误,多个匹配项或部分匹配项,但是脚本的主要部分在那里。

您还可以使用validateField而不是fieldChanged(相同的源,但是添加return true;)。在这种情况下,如果发现用户输入了错误的数据,则可以返回false。

/**
 *@NApiVersion 2.x
 *@NScriptType ClientScript
 */
define(['N/search'],
    function(search) {
        function setItemFromTestValue(currentRecord) {
            var testValue = currentRecord.getCurrentSublistValue({
                sublistId: 'item',
                fieldId: 'custcol_test'
            });

            if (!testValue) {
                return;
            }

            var itemSearch = search.create({
                type: search.Type.ITEM,
                filters: [{
                    name: 'custitem_test',
                    operator: 'is',
                    values: [testValue]
                }]
            });

            var items = [];

            itemSearch.run().each(function(result) {
                items.push(result.id);
                return true;
            });

            // how to handle multiple items found and no items found are left to you
            if (items.length) {
                // don't reset current item
                var currentItem = currentRecord.getCurrentSublistValue({
                    sublistId: 'item',
                    fieldId: 'item'
                });

                if (items[0] != currentItem) {
                    currentRecord.setCurrentSublistValue({
                        sublistId: 'item',
                        fieldId: 'item',
                        value: items[0]
                    });
                }
            }
        }

        function fieldChanged(context) {
            var sublistName = context.sublistId;
            var sublistFieldName = context.fieldId;
            if (sublistName === 'item' && sublistFieldName === 'custcol_test') {
                console.log('fieldChanged');
                setItemFromTestValue(context.currentRecord);
            }
        }

        return {
            fieldChanged: fieldChanged
        };
    });