Пользовательский модуль в SuiteScript 2.0 - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть файл библиотеки JavaScript, который я использую в своих скриптах при создании SuiteScripts для NetSuite. Я пытаюсь подготовить себя к работе над 2.0, начать загружать новые проекты и отказаться от SuiteScript 1.0. Итак, я расшифровал мой библиотечный файл в 2.0. Однако всякий раз, когда я создаю новый сценарий и ссылаюсь на мою библиотеку, я всегда получаю следующее сообщение:

SuiteScript 2.0 entry point scripts must implement one script type function.

Но если я удаляю ссылку из сценария, она позволяет мне загрузить его и создать запись сценария. Затем я могу вернуть ссылку и загрузить исправленный файл сценария без проблем. Я не могу на всю жизнь понять, почему это происходит. Если это имеет значение, вот заголовок JSDo c в файле:

/** 
 * my.library.v2.js
 * @NApiVersion 2.x
 * @NModuleScope Public 
 */

Сценарий также будет запускаться следующим образом после собственного заголовка JSDo c:

define(['N/error', 'N/record', 'N/runtime', 'N/search', './my.library.v2'],
function(error, record, runtime, search, myLib) {
    function doStuff(context) { /* do a bunch of stuff */ }
    return { pageInit : doStuff };
});

По той же проблеме у меня также есть проблемы с запуском некоторых скриптов. Все отлично работает при применении этого модуля к клиентским сценариям, как только я выйду за рамки вышеупомянутой проблемы. Тем не менее, я не могу успешно получить сценарий на стороне сервера для запуска с библиотекой. Я постоянно получаю эту ошибку:

com.netsuite.suitescript.exception.NLServerSideScriptException: TypeError: Cannot call method "split" of undefined

Что меня отталкивает, так это то, что в библиотеке нет вызова String.split () внутри. И у меня нет возможности записать, откуда может происходить ошибка, как это происходит при загрузке модуля в сценарий сервера. И я знаю, что это происходит, потому что это происходит независимо от типа операции, и создаваемые мной сценарии всегда имеют условие для проверки конкретных c типов операций, прежде чем приступить к мелочам. Например, если у меня есть проверка для операции «печать», но запись открывается для «редактирования». У меня даже есть вся функция, заключенная в блок try / catch.

У меня не было особой удачи в поиске причины этих проблем, поэтому я надеюсь, что оба isues происходят от одной и той же причины. .

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Хорошо, были ошибки от моего имени. В одном из моих определений функций отсутствовала «функция». Поскольку функции добавляются в качестве свойств объекта, я могу понять, почему он по-прежнему игнорировался, если вы недостаточно осторожны, вы просто скользите взглядом по проблеме. Есть также проблема с прототипом массива, но я не думаю, что прототип необходим для SuiteScript 2.0. Он был разработан для использования с SuiteScript 1.0 из-за большого количества удобных объектных функций, которые еще не были реализованы до более поздней версии JS, чем та, которая используется для механизма на стороне сервера в NetSuite.

0 голосов
/ 28 февраля 2020

Если бы вы могли опубликовать / предоставить свой пользовательский модуль, это помогло бы сузить проблему, но, насколько я могу судить, вы включаете какой-то модуль, который недоступен в серверных сценариях, таких как N/currentRecord. Этот модуль доступен только для клиентских сценариев и не позволяет загружать / создавать серверные сценарии, как вы упомянули. Таким образом, если вы удалите эти модули и попытаетесь обновить / создать сценарии на стороне сервера, он должен работать.

Аналогично, есть некоторые модули, которые могут использоваться только на сценариях на стороне сервера, такие как модуль N/task и могут вернуть ошибку, если вы попытаетесь загрузить / потребовать их в клиентских скриптах.

...