Установка встроенного поля HTML из сценария клиента в SuiteScript 2.0

Я не могу установить поле типа INLINEHTML с помощью SuiteScript 2.0. Однако одно и то же поле работает с SuiteScript 1.0. Вот фрагмент кода:

/**
 * @NApiVersion 2.x
 * @NScriptType ClientScript
 */
// In SuiteScript 2.0   
define(['N/search'], function(search) {
    return {
        pageInit: function(context) {
            var currentRecord = context.currentRecord;
            // Set Value (This does not set any data)
            currentRecord.setValue({ fieldId: 'inline_html_field', value: '<div>Test Value</div>' });
            // Get value (Returns undefined)
            currentRecord.getValue({ fieldId: 'inline_html_field'});
        }
    }
});

// In SuiteScript 1.0
nlapiGetFieldValue('inline_html_field'); // Returns the data in field

javascript,netsuite,suitescript2.0,

3

Ответов: 5


0

Я думаю, вам нужен модуль currentRecord.

/**
 * @NApiVersion 2.x
 * @NScriptType ClientScript
 */
// In SuiteScript 2.0   
define(['N/search', 'N/currentRecord'], function(search, currentRecord) {
    return {
        pageInit: function(context) {
            var currentRecord = context.currentRecord;
            // Set Value (This does not set any data)
            currentRecord.setValue({ fieldId: 'inline_html_field', value: '<div>Test Value</div>' });
            // Get value (Returns undefined)
            currentRecord.getValue({ fieldId: 'inline_html_field'});
        }
    }
});

0

К сожалению, это пример, когда логика, реализованная за record.getValue () или currentRecord.getValue () в SS 2.0, является ошибочной. В SS 1.0 nlapiGetFieldValue () пропускает меньше проверки, чем аналоги SS SS. Вот пример (надеюсь, достаточно изменилось, что NetSuite не бросает меня в тюрьму за нарушение их IP). Это то, что происходит, когда вы запрашиваете значение.

function getTheValue(options)
        {
            var fieldId;

            fieldId = '....';// Do a bunch of logic to validate the options parameter is correct

            return doGetTheValue(fieldId);
        }

        function doGetTheValue(fieldId)
        {
            var fieldObj = goodOlegetField(fieldId); // goodOle being our 1.0 api prefix....
            // the function call above returns null preventing your request from succeeding.
            var value;
            if (fieldObj == null)
                return undefined;


        }

Я надеюсь, что это имеет смысл, и хотя это не ответ, он даст представление о том, почему вы получаете ответ, который получаете. Его также твердая проверка того, что вы не сумасшедший. Я часто обнаружил, что мне нужна эта уверенность при работе с SS 2.0.


0

При работе с inline html-полями я рассматриваю их как обычный html на стороне клиента. Чтобы избежать проблем, я обычно имею значение по умолчанию

// User Event Before Load
nlapiSetFieldValue('custbody_inline_field', '<div id="myuniqueid">default content</div>');

или

var fld = form.addField('custpage_inline_field'...); // look up field creation in the help.
fld.setDefaultValue('<div id="myuniqueid">default content</div>');

а затем на клиенте просто манипулировать содержимым $ ("# myuniqueid"). Вам не нужно использовать jQuery, но теперь он включен в NS GUI.


0

У меня была аналогичная проблема, вам нужно использовать containscript 1.0 для управления встроенным html-полем в NetSuite. Однако вместо того, чтобы преобразовать весь код из namescript 2.0 в 1.0, вы можете использовать это:

window.nlapiSetFieldValue('YOUR_FIELDID', '<a>YOUR HTML CONTENT</a>');

Поместив окно. вы можете использовать любой ассемблер suitecript 1.0 api в список дескрипторов 2.0!


0

Используйте это, это может помочь:

var val = currentRecord.getValue({ fieldId: 'inline_html_field'});
log.debug({title:test,details:JSON.stringify(val);})
JavaScript, NetSuite, suitescript2.0,
Похожие вопросы