Я осмотрелся и не могу найти пример того, как именно вызвать серверный Suitelet из пользовательского события в SS 2 и вернуть либо JSON, либо простой текст. У меня есть общий Suitelet, который я хочу прикрепить к ряду пользовательских событий, я могу передать необходимые значения просто в URL-адресе или как объект. Когда я пытаюсь получить данные, которые возвращаются, это HTML-страница, а в середине страницы указано: «Обратите внимание, вы должны войти в систему, прежде чем получить доступ к этой странице. Я уже передаю compid в URL-адресе, поэтому я не уверен, что Что делать. Я много раз без проблем использовал серверные Suitelets на стороне клиента. Любая помощь приветствуется.
Вызов Suitelet из пользовательского события SS 2
Ответы (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]));
}
Я бы предложил использовать библиотеку сценариев настраиваемого модуля 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
});