在 NetSuite 中将项目动态采购到交易中

Dynamically Sourcing Items into Transactions in NetSuite

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

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

  1. 创建您的项目自定义字段。
  2. 创建交易行自定义字段。
  3. 在“适用于”选项卡中选中“促销商品”
  4. 在来源和过滤选项卡中,select 来源列表字段的项目,然后 select 您在第一步中为来源字段创建的字段。

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

根据你对氪星回答的评论,我认为你想做的是:

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

希望对您有所帮助!

尝试以下操作。它不完整,因为它不处理错误、多重匹配或部分匹配,但脚本的基本部分都在那里。

您也可以使用 validateField 而不是 fieldChanged(来源相同,但添加 return true;)。在那种情况下,如果您发现用户输入了错误数据,您可以 return 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
        };
    });