Вызов Suitelet из пользовательского события SS 2

Я осмотрелся и не могу найти пример того, как именно вызвать серверный Suitelet из пользовательского события в SS 2 и вернуть либо JSON, либо простой текст. У меня есть общий Suitelet, который я хочу прикрепить к ряду пользовательских событий, я могу передать необходимые значения просто в URL-адресе или как объект. Когда я пытаюсь получить данные, которые возвращаются, это HTML-страница, а в середине страницы указано: «Обратите внимание, вы должны войти в систему, прежде чем получить доступ к этой странице. Я уже передаю compid в URL-адресе, поэтому я не уверен, что Что делать. Я много раз без проблем использовал серверные Suitelets на стороне клиента. Любая помощь приветствуется.


person jk121960    schedule 11.07.2017    source источник


Ответы (2)


Использование модулей SS2.0 - наиболее оптимальное решение. Для SS1.0 вы можете рассмотреть возможность включения этого кода в качестве библиотеки, а затем использовать его для нескольких сценариев пользовательских событий.

Что касается пометки Suitelet как «Доступен без входа в систему», это плохая практика безопасности. Вы не хотите, чтобы ваш код был доступен любому, у кого может быть URL-адрес для вызова вашего Suitelet (может быть трудно угадать точный URL-адрес, но он может быть найден в журналах, например, в прокси-серверах), и, во-вторых, вы можете захотеть зарегистрировать пользователь, запустивший скрипт для аудита.

В идеале вы должны иметь возможность указать NetSuite повторно использовать текущий сеанс пользователя, но, к сожалению, на данный момент нет такого API, доступного на данный момент (он может отсутствовать по какой-либо причине).

Если по каким-то причинам вы не можете использовать модули SS2.0 или библиотеки SS1.0, лучшим подходом было бы получить файл cookie JSESSIONID в сценарии пользовательского события и добавить его в запрос в свой Suitelet. Таким образом, Suitelet будет вызываться в контексте текущего пользовательского сеанса. Но помните о потенциальных последствиях для производительности из-за задействованного сетевого вызова и связанных пользовательских событий (если ваш Suitelet выполняет какую-либо операцию записи, он запускает сценарии пользовательских событий для этой записи).

Вот пример сценария SS1.0, отображающего все файлы cookie.

/** 
* @param {nlobjRequest} nsRequest
* @param {nlobjResponse} nsResponse
*/
function kkzTestSuitelet(nsRequest, nsResponse) {
       nsResponse.writeLine('SUCCESS - Suitelet call okay, headers follow:');
       nsResponse.writeLine('');

       var allHdrs = nsRequest.getAllHeaders();
       for (var hdrName in allHdrs)
             nsResponse.writeLine(hdrName + ' = ' + JSON.stringify(allHdrs[hdrName]));
}
person Kikoz    schedule 21.10.2019

Я бы предложил использовать библиотеку сценариев настраиваемого модуля SS 2.0 вместо вызова Suitlet из сценария UE. В любом случае, если вы действительно хотите сделать это с помощью Suitlet, перейдите к развертыванию сценария Suitlet и установите флажок «Доступно без входа в систему». Код в вашем сценарии UE должен выглядеть так:

// in UE script, make sure you resolve properly the suitlet external URL:
var suitletURL = url.resolveScript({
        scriptId: 'customscript_your_suitlet_scriptid',
        deploymentId: 'customdeploy_your_suitlet_deploymentid',
        returnExternalUrl: true
});

var response = https.post({
        url : suitletURL,
        headers : myHeaders,
        body : myBody
});
person Slavi Slavov    schedule 11.07.2017
comment
Привет, спасибо за информацию, какие заголовки нужно отправить, еще раз спасибо - person jk121960; 12.07.2017
comment
Что ты хочешь делать? - person Slavi Slavov; 12.07.2017
comment
Я передаю набор (один или несколько) идентификаторов элементов и хочу вернуть информацию об успехе или неудаче. В этом методе я проверяю определенные аспекты и устанавливаю свойства элементов. спасибо за вашу помощь - person jk121960; 12.07.2017
comment
В этом случае вам не нужны заголовки. Вызовите https.post только с параметрами url и body. А тело должно содержать непосредственно массив идентификаторов элементов. В моем примере: var myBody = [itemid, itemid2, itemid3]; - person Slavi Slavov; 13.07.2017
comment
Привет и спасибо за идею использования настраиваемого модуля, который сработал намного лучше с первого раза. Намного меньше проблем, чем вызов других скриптов. Отличное спасибо - person jk121960; 13.07.2017