Динамический поиск товаров в транзакциях в NetSuite - PullRequest
0 голосов
/ 05 сентября 2018

Создавая в новом Заказе на продажу в NetSuite, я хочу использовать значения в настраиваемых полях в записи позиции для извлечения и ввода позиций в раздел отдельной позиции транзакции. Можно ли эту функцию закодировать с помощью SuiteScript 2.0?

Ответы [ 3 ]

0 голосов
/ 10 сентября 2018

Исходя из вашего комментария к ответу Криптона, я думаю, что вы хотите сделать:

  1. Создание настраиваемого поля строки транзакции для ввода пользовательского ввода
  2. Создайте клиентский сценарий, который имеет метод для события fieldChanged, и проверьте, является ли поле вашим пользовательским
  3. Если это так, используйте введенное значение для поиска элемента по полю настраиваемого элемента и получения внутреннего идентификатора элемента
  4. Используя внутренний идентификатор, установите поле Item в строке

Надеюсь, это поможет!

0 голосов
/ 11 сентября 2018

Попробуйте следующее. Он неполон в том, что он не обрабатывает ошибки, множественные совпадения или частичные совпадения, но есть важные части скрипта.

Вы также можете использовать 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
        };
    });
0 голосов
/ 05 сентября 2018

Да, но для этого вам не нужны скрипты.

  1. Создайте настраиваемое поле элемента.
  2. Создание настраиваемого поля строки транзакции.
  3. В закладке «Применить к» выберите пункт «Продажа»
  4. На вкладке Sourcing and Filtering выберите Item для поля Source List, а затем выберите поле, созданное на первом этапе для поля Source From.

Теперь при вводе товара в заказ на продажу значение из настраиваемого поля товара будет скопировано в соответствующее поле в строке заказа на продажу.

...