Библиотеки
В SP-XML существует два вида библиотек: старые (V1) и новые (V2).
Библиотеки V1
Библиотеки V1 представляют из себя XML-документы, как правило с INLINE-FORM, поскольку не содержат никаких данных помимо формы. Роль функций выполняют методы с параметрами, роль глобальных переменных – поля с данными.
Сам код библиотеки может располагаться как inline, в XML-атрибуте EXPR, так и быть вынесен в отдельный .js файл при помощи атрибутов формы CODE-LIB и CODE-LIB-URL. Библиотека может состоять только из одного .js файла, без использования начального файла .xml.
Если библиотека V1 состоит только из одного .js файла, то ее имя определяется по “старой” нотации именовании файла в модуле: от имени файла отрезается расширение .js и префикс имени модуля. Например файл “base1_lib_base.js” дает имя библиотеки “lib_base”.
Библиотека может быть загружена одним из следующих способов:
На старте через раздел shared_docs модуля.
На старте через директиву SHARE в форме корневого документа (устаревший способ).
Динамически через вызов функции RegisterSharedDoc()
Динамически через вызов функции OpenCodeLib() или OpenCodeLibDoc(). При этом способе библиотека не регистрируется глобально.
Примеры библиотек V1: lib_base (E-Staff), wtv_tools (WebSoft HCM).
Библиотеки V2
Библиотеки V2 представляют из себя отдельные объекты - библиотеки. Библиотека V2 может состоять из одного .xmi файла (опционально) и одного либо нескольких .js или .bs файлов. Каждый файл задает namespace (имя библиотеки). Все файлы с одним namespace при регистрации объединяются в одну библиотеку. Таким образом функции библиотеки могут быть распределены между разными файлами для удобства разработки.
Если файл с библиотекой загружается без глобально регистрации (для использования непосредственно на месте), то объединения не происходит.
Библиотека V2 может содержать также описания классов.
Различия между библиотеками V1 и V2.
Функции библиотеки V2 могут располагаться в разных файлах.
Библиотека V2 поддерживает описания классов. При этом классы, описанные в библиотеке V2 можно использовать в любом коде, в том числе в библиотеке V1.
Библиотека V2 поддерживает типизированные параметры функций и типизированные глобальные переменные (как в TypeScript).
Библиотека V2 поддерживает явное указание необязательных аргументов через “?” (как в TypeScript).
Если функция библиотеки вызывается с меньшим числом аргументов, чем нужно, то в библиотеке V1 они будут переданы как undefined, а в библиотеке V2 то же самое произойдет только для аргументов, явно заданных как необязательные, в остальных случаях возникнет ошибка.
Если функция библиотеки вызывается с большим числом аргументов, чем нужно, то в библиотеке V1 они будут проигнорированы, а в библиотеке V2 сработает ошибка.