Это старая версия документа!
В системе пользователям предоставляется возможность не только пользоваться имеющимися возможностями, но и создавать свои собственные инструменты для работы. Это реализуется путем создания скриптов на Java Script. Ведение самих скриптов выполняется при помощи инструментов справочника”Файлы”, а запуск их производится перетаскиванием из справочника на объекты в системе, или же через контекстное меню, вызываемого по правой кнопке мыши. Чтобы файл воспринимался именно как скрипт, у него должна быть установлена связь «Скрипт».
И конечно содержимое его должно быть именно скриптом. Ниже следует описание работы с ними.
Пользовательский скрипт Пользовательский скрипт должен быть реализован в виде процедуры с именем “userfunc”, которая ничего не возвращает, а на вход принимает переменную “reqData”, представляющую из себя объект, содержащий массив “reqArr”, который в свою очередь содержит объекты системы, состоящие из двух полей: “id” и “type”, где “id” – уникальный идентификатор позиции среди объектов своего типа, а “type” – тип объекта системы. Помимо указанного массива “reqData” содержит свойство “event”, которое изначально имеет значение null, а впоследствии устанавливается пользователем при передаче запроса серверу с целью выбора действия, которое сервер должен произвести над переданными объектами системы. Также “reqData” и каждый из элементов массива “reqArr”, имеют поле с именем “error”, содержащее код ошибки выполнения запроса сервером. Коды ошибок можно найти в приложении к данному руководству. Ниже приведён пример. function userfunc(reqData) { alert(JSON.stringify(reqData)); } Данный пользовательский скрипт выведет в браузере сообщение, содержащее объект “reqData”, для объекта(ов) системы, к которому(ым) данный пользовательский скрипт был применён. Ниже приведён пример выводимого таким скриптом сообщения: {«reqArr»:[{«id»:«21»,«type»:«nomenclature»,«error»:«0»}],«event»:null,«error»:0} Объект “reqData” предназначен для предоставления пользовательскому скрипту информации о объекте или объектах, к которым он должен быть применён. Также возможна последующая передача данного объекта серверу для выполнения каких-либо действий с объектами системы. Все необходимые проверки на соответствие/несоответствие входных данных алгоритму пользовательского скрипта должны быть произведены пользователем непосредственно в реализации скрипта. Запрос серверу Запрос серверу можно осуществить посредством функции “apiDoRequest”. Функция имеет один входной параметр “reqData”, формат которого аналогичен формату данных, передающихся пользовательскому скрипту системой, рассмотренному выше. Данная особенность позволяет без лишних сложностей передавать данные из системы на сервер, попутно внося в них необходимые изменения. Функция возвращает модифицированную переменную “reqData”, массив “reqArr” внутри которой содержит уже не только поля “id” и “type”, но и прочие поля, присущие для данного типа объекта системы. Запрос на чтение данных объекта системы: Для того, чтобы запросить у системы поля одного из объектов, необходимо вызвать функцию “apiDoRequest”, передав ей в виде параметра переменную “reqData” с полем “event” равным “get_data”. Ниже приведён пример переменной “reqData” для запроса полей объекта системы типа «номенклатура» с идентификатором «21». {«reqArr»:[{«id»:«21»,«type»:«nomenclature»,«error»:«0»}],«event»:«get_data»,«error»:0} Массив “reqArr” может содержать неограниченное количество объектов системы разного типа, для которых необходимо осуществить выдачу информации. Пример запроса для нескольких объектов системы указан ниже. {«reqArr»:[{«id»:«21»,«type»:«nomenclature»,«error»:«0»},{«id»:«106»,«type»:«collection»,«error»:«0»},{«id»:«49»,«type»:«nomenclature»,«error»:«0»},{«id»:«745»,«type»:«file»,«error»:«0»}],«event»:«get_data»,«error»:0} Поле “error” в отправляемых данных не играет роли и требует обработки лишь при получении ответа от сервера (сервер отвечает в этом же формате, но добавляет к содержимому элементов массива “reqArr”, помимо полей “id” и “type”, прочие поля, свойственные данному типу объекта системы). Далее приведён пример ответа от сервера на запрос, указанный выше. {«reqArr»:[{«id»:«21»,«type»:«nomenclature»,«name»:«TEST POSITON #1»,«notation»:«NOTATION OF TEST POSITION #1»,«created_date»:«2017-05-28 04:00:09»,«last_change_date»:«2017-05-28 04:00:09»,«error»:«0»}],«event»:«get_data»,«error»:«0»} Процедура пользовательского скрипта, осуществляющего вывод данной JSONстроки в виде сообщения браузера выглядит следующим образом: function userfunc(reqData) { reqData.event = «get_data»; alert(JSON.stringify(apiDoRequest(reqData))); } Запрос на чтение данных объекта системы может быть выполнен для следующих типов объектов системы:
Индикация ошибок На случай, если запрос сервера выполнился с некоторыми ошибками, либо не выполнился вовсе, присутствует система кодов ошибок. Если запрос не был выполнен полностью (например, было указано неверное значение поля “event”), сервер возвращает сообщение следующего формата: {«event»:«wrong_event»,«error»:«2»} Значение поля “event” в сообщении такого рода сохраняется от запроса, а поле “reqArr” отсутствует. Если же запрос производился для нескольких объектов системы и для ряда из них он прошёл успешно, а для других – с ошибкой (например, из-за отсутствия прав на чтение), в таком случае сервер возвращает сообщение следующего вида: {«reqArr»:[{«id»:«21»,«type»:«nomenclature»,«name»:«TEST NOMENCLATURE»,«notation»:«ANY NOTATION»,«created_date»:«2017-05-28 04:00:09»,«last_change_date»:«2017-05-28 04:00:09»,«error»:«0»},{«id»:«17»,«type»:«nomenclature»,«error»:«1»}],«event»:«get_data»} Объекты системы В системе присутствуют следующие типы объектов: · * Номенклатурная позиция;
Помимо объектов системы существует система зависимостей, позволяющих подключать к объектам системы ссылки на объекты системы. Возможны следующие типы зависимостей, которые можно создать: · * Компонент*;
* Данный тип зависимости также является объектом системы, но не может существовать сам по себе и обязательно подключается к объекту системы типа «Коллекция», идентификатор которой содержится в поле «parent_obj_id». Чтение объекта системы Параметр «event» запроса установлен в значение «get_data». Чтение объектов системы может осуществляться по idобъекта и по обозначению объекта в системе. Чтение по обозначению доступно для номенклатуры, параметров и коллекций, но недоступно для компонентов и файлов. Далее приведён запрос на чтение номенклатурной позиции по обозначению. {«reqArr»:[{«type»:«nomenclature»,«name»:«TEST_API_NAME»}],«event»:«get_data»} Сервер возвращает объекты системы в формате JSONстроки со следующей структурой полей: Номенклатурная позиция: · * id– уникальный идентификатор позиции среди объектов своего типа;
Коллекция: · * id– уникальный идентификатор позиции среди объектов своего типа;
Файл: · * id– уникальный идентификатор позиции среди объектов своего типа;
Параметр: · * id– уникальный идентификатор позиции среди объектов своего типа;
Компонент: · * id– уникальный идентификатор позиции среди объектов своего типа;
· Чтение содержимого блоков объекта Параметр «event» запроса установлен в значение «get_obj_blocks». Сервер возвращает содержимое блоков объекта системы в формате JSONстроки. Тело запроса для объекта состоит из двух полей * type– тип объекта;
Далее приведён запрос на чтение всех блоков коллекции. {«reqArr»:[{«id»:55092,«type»:«collection»}],«event»:«get_obj_blocks»} Далее приведён ответ сервера на на чтение всех блоков коллекции. {«reqArr»:[{«id»:55092,«type»:«collection»,«blocks»:{«linked_components»:[{«id»:«510724»,«nomenclature_id»:«102020»,«parent_id»:«0»,«link_type»:«68»,«status»:«11»,«amount»:«234»,«unit»:«27»,«comment»:«test1»,«price»:«55.00»,«start_date»:«2019-04-03»,«start_time»:«08:23:26»,«end_date»:«2019-04-03»,«end_time»:«08:23:26»,«nomenclature_name»:«TEST NOMENCLATURE»,«nomenclature_notation»:«NOTATION»,«link_type_name»:«Заказ»,«status_name»:«Завершено»,«unit_name»:«шт.»}],«linked_parameters»:[{«id»:«4750»,«param_id»:«291»,«parent_id»:«0»,«s_value»:«»,«d_value»:«34534»,«param_name»:«TEST PARAM 1»,«param_notation»:«TEST1»,«param_type»:«Float»}],«linked_files»:[{«id»:«52546»,«file_id»:«3029»,«file_name»:«test.jpg»,«file_type»:«jpg»,«file_size»:«15012»,«file_link_type»:«0»,«file_comment»:«»,«link_typy_name»:«»}],«linked_links»:[{«id»:«141»,«link»:«https://yandex.ru/»,«comment»:«88—-»}],«linked_collections»:[{«id»:«125932»,«collection_id»:«55096»,«collection_name»:«NEW_TEST_API_COLLECTION»,«collection_notation»:«NOTATION»,«collection_link_type»:«34»,«collection_status»:«11»,«collection_start_date»:«2019-05-09»,«collection_start_time»:«03:15:00»,«collection_end_date»:«2019-05-16»,«collection_end_time»:«04:15:00»,«link_type_name»:«Операция»,«status_name»:«Завершено»}],«linked_nomenclature»:[{«id»:«16249»,«nomenclature_id»:«102020»,«link_type»:«0»,«comment»:«»,«nomenclature_name»:«TEST NOMENCLATURE»,«nomenclature_notation»:«NOTATION»,«link_type_name»:«»}]}}],«event»:«get_obj_blocks»,«error»:0} Чтение содержимого блока компонентов коллекции с учётом фильтрации Параметр «event» запроса установлен в значение «get_components_filter». Сервер возвращает содержимое блока компонентов коллекции с учётом фильтрации в формате JSONстроки в формате аналогичном запросу «get_obj_blocks». Для осуществления фильтрации могут быть использованы следующие параметры: · * Номенклатура, на базе которой созданы компоненты;
Тело запроса для объекта состоит из двух полей · * type– тип объекта (должен быть установлен в «collection»);
· * unit_id – idединицы измерения для отбора компонентов;
Далее приведён запрос на чтение компонентов коллекции с учётом следующих фильтров: · * Родительская коллекция с обозначением «Тестовая коллекция»;
{«reqArr»:[{«type»:«collection», «name»:«Тестовая коллекция»,«nomenclature_name»:«Тестовая номенклатура», «unit_name»:«кг»,«params»:[{«Тестовый параметр 1»:«123»},{«Тестовый параметр 2»:«456»}]}],«event»:«get_components_filter»} Редактирование объекта системы Параметр «event» запроса установлен в значение «edit_data». Сервер осуществляет редактирование выбранного объекта системы Тело запроса для объекта состоит из трёх и более полей (в зависимости от количество реквизитов объекта, которые необходимо отредактировать) · * type– тип объекта;
Далее приведён запрос для редактирования поля количества у компонента с idравным «256486», количество для этого компонента будет установлено в «123». {«reqArr»:[{«type»:«component»,«id»:«256486»,«amount»:«123» }],«event»:«edit_data»} Удаление объекта системы Параметр «event» запроса установлен в значение «delete_data». Сервер осуществляет удаление выбранного объекта системы Тело запроса для объекта состоит из двух полей: · * type– тип объекта;
Далее приведён запрос для удаления номенклатурной позиции с idравным «21». {«reqArr»:[{«id»:«21»,«type»:«nomenclature»}],«event»:« delete_data» } Чтение доступных статусов Параметр «event» запроса установлен в значение «get_statuses». Чтение доступных единиц измерения Параметр «event» запроса установлен в значение «get_units». Чтение доступных типов связи Параметр «event» запроса установлен в значение «get_link_types». Запись данных Параметр «event» запроса установлен в значение «new_data». В ответ на запрос записи сервер отправляет JSON структуру с подтверждением, содержащую идентификаторы вновь созданных объектов. Далее приведён запрос на создание номенклатурной позиции. {«reqArr»:[{«type»:«nomenclature»,«name»:«TEST_API_NOM_NAME»,«notation»:«TEST_API_NOM_NOTATION»,«folder_name»:«test_api_folder»}],«event»:«new_data»} Далее приведён ответ сервера на создание номенклатурной позиции. {«reqArr»:[{«type»:«nomenclature»,«name»:«TEST_API_NOM_NAME»,«notation»:«TEST_API_NOM_NOTATION»,«folder_name»:«test_api_folder»,«error»:0,«id»:102024}],«event»:«new_data»,«error»:0} Для записи данных необходимо отправить данные в следующем формате: Номенклатурная позиция: · * name - обозначение новой позиции;
Коллекция: · * name – обозначение позиции;
Параметр: · * name - обозначение новой позиции
Файл: Запись файлов в систему посредством APIна текущий момент недоступна. Компонент: · * nomenclature_id – идентификатор номенклатурной позиции, на базе которой будет создан компонент;
Связанный параметр: · * parameter_id - id параметра в системе;
Связанная коллекция: · * collection_id - id коллекции в системе;
Связанная номенклатура: · * nomenclature_id - id номенклатуры в системе;
Связанная зависимость: · * component_id - id компонента в системе;
Связанная ссылка: · * link – текст ссылки;
Коды ошибок 0 – Ошибки отсутствуют; 1 – Ошибка прав; 2 – Ошибка получения данных; 3 – Ошибка данных запроса; 4 – Ошибка создания позиции; 5 – Ошибка авторизации; 6 – Ошибка подписки.