2017-02-18 17 views
0

Я построил форму с люкслетом, у которой есть подсписок, выпадающий список и кнопка. После того, как пользователь будет отмечать некоторые выборы в подсписке, нажимается кнопка, и выбранные элементы отправляются через остальные в другом месте.Передать переменные из набора пакетов в clientcript в API 2.x?

Suitelet:

@NApiVersion 2.x 
    *@NScriptType Suitelet 
    */ 
define(['N/ui/serverWidget', 'N/search', 'N/https', 'N/record'], 
    function(serverWidget, search, https, record) { 
    function onRequest(context) { 
    if (context.request.method === 'GET') { 
     var form = serverWidget.createForm({ ... }); 
     form.clientScriptModulePath = 'path/to/client/script'; 
     // code to build a sublist, add a button and write page 
     } return { 
     onRequest: onRequest 
     }; 
     }); 

Тогда мой ClientScript что-то вроде:

* @NApiVersion 2.x 
* @NScriptType ClientScript 
*/ 
define(
    [ 'N/currentRecord', 'N/https' ], 
    function(currentRecord, https) { 
     functionSendRequest(sublist //the sublist that I want to get from the suitelet) 
     { 
     //code to build json string and send http request 
     } return { 
     saveRecord: test 
     } 
    }); 

Теперь, проведя несколько часов на это, N/currentRecord пришло мое внимание (я m noobie с netsuite), и это казалось бы решателем проблем для меня, поскольку он извлекает записи, которые в настоящее время активны в контексте на стороне клиента. Он отлично подходит для выпадающего меню и имеет метод getSublist (параметры), хотя он возвращает record.Sublist, который имеет только метод getColumn(). Таким образом, это не будет работать для меня. Итак, есть ли способ передать параметр sublist для clientcript из набора пакетов после нажатия кнопки?

ответ

1

Чтобы решить вашу проблему, вы можете использовать getSublistValue из currentRecord так:

var currentRec = currentRecord.get(); 
var numLines = objRecord.getLineCount({ 
    sublistId: 'item' 
}); 
var sublistFieldValue = currentRec.getSublistValue({ 
    sublistId: 'item', 
    fieldId: 'item', 
    line: 3 
}); 

Если вы действительно хотите передать что-то из Suitelet в клиентскую функцию ты должен установить вашу кнопку так:

var someTextToPassToTheClientscript = 'The Suitelet send its regards'; 
form.addButton({ 
    id : 'custpage_some_button', 
    label : 'MyButton', 
    functionName : 'functionSendRequest("' + someTextToPassToTheClientscript + '")' 
}); 

А затем ваш ClientScript получить так:

/* 
* @NApiVersion 2.x 
* @NScriptType ClientScript 
*/ 
define(
    ['N/currentRecord', 'N/https'], 
    function (currentRecord, https) { 
    functionSendRequest(textReceivedFromSuitelet) { 
     //code to build json string and send http request 
    } 
    return { 
     functionSendRequest : functionSendRequest 
    } 
}); 
+0

Эй, спасибо йо u очень много для ответа! Цените это, я попробую. Любопытно, есть ли способ для вызова другой функции внутри пакета suite с опцией functionName на кнопке? Я не мог заставить его работать, а другой парень из stackoverflow предложил использовать скрипт на стороне клиента. Однако отправка исходящих вызовов с клиентской стороны не кажется хорошим подходом. – user2187935

+0

Передайте данные из вашего клиентского листа в свой пакет приложений через POST, используйте одну из переменных в теле POST, чтобы определить тип операции и попросите своего Suitelet вызвать Restlet. –

+0

Удивительный, спасибо, это сработало для меня! – user2187935