Скрипты

В системе UpexPro Пользователям предоставлется возможность не только пользоваться имеющимися возможностями, но и создавать свои собственные инструменты для работы.  Это релизуется путем создания скриптов на 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)));

}

 

Запрос на чтение данных объекта системы может быть выполнен для следующих типов объектов системы:

  • Номенклатурная позиция – значение поля “type”:“nomenclature”;
  • Коллекция – значение поля “type”:“collection”;
  • Файл – значение поля “type”:“file”;
  • Параметр – значение поля “type”:“parameter”;
  • Компонент – значение поля “type”:“component”;

Индикация ошибок

На случай, если запрос сервера выполнился с некоторыми ошибками, либо не выполнился вовсе, присутствует система кодов ошибок.

Если запрос не был выполнен полностью (например, было указано неверное значение поля “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»}

Объекты системы

В системе присутствуют следующие типы объектов:

  • Номенклатурная позиция;
  • Коллекция;
  • Файл;
  • Параметр;
  • Компонент;

Сервер возвращает объекты системы в формате JSON строки со следующей структурой полей:

Номенклатурная позиция:

  • id – уникальный идентификатор позиции среди объектов своего типа;
  • type – тип объекта (“nomenclature”);
  • name – обозначение позиции;
  • notation – наименование позиции;
  • created_date – дата создания позиции;
  • change_date – дата изменения позиции;

Коллекция:

  • id – уникальный идентификатор позиции среди объектов своего типа;
  • type – тип объекта (“collection”);
  • name – обозначение позиции;
  • notation – наименование позиции;
  • link_type – тип связи позиции;
  • status – статус позиции;
  • start_date – дата начала;
  • start_time – время начала;
  • end_date – дата начала;
  • end_time – время начала;
  • created_date – дата создания позиции;
  • change_date – дата изменения позиции;

Файл:

  • id – уникальный идентификатор позиции среди объектов своего типа;
  • type – тип объекта (“file”);
  • name – имя файла;
  • file_type – расширение файла;
  • link_type – тип связи позиции;
  • comment – тип связи позиции;
  • size – размер файла в байтах;
  • created_date – дата создания позиции;
  • change_date – дата изменения позиции;

Параметр:

  • id – уникальный идентификатор позиции среди объектов своего типа;
  • type – тип объекта (parameter);
  • name – обозначение позиции;
  • notation – наименование позиции;
  • parameter_type – тип параметра;
  • created_date – дата создания позиции;
  • change_date – дата изменения позиции;

Компонент:

  • id – уникальный идентификатор позиции среди объектов своего типа;
  • type – тип объекта (“component”);
  • nomenclature_id – идентификатор номенклатурной позиции, на базе которой был создан компонент;
  • parent_obj_id – идентификатор коллекции в которой содержится данный компонент;
  • parent_id – идентификатор родительского объекта типа «компонент» в дереве компонентов;
  • link_type – тип связи позиции;
  • status – статус позиции;
  • amount – количество;
  • unit – единица измерения;
  • comment – комментарий;
  • price – цена;
  • start_date – дата начала;
  • start_time – время начала;
  • end_date – дата начала;
  • end_time – время начала;
  • created_date – дата создания позиции;
  • change_date – дата изменения позиции;

 

Коды ошибок

0 – Ошибки отсутствуют;

1 – Ошибка прав;

2 – Ошибка получения данных;

3 – Ошибка данных запроса.

 

Добавить комментарий