Перейти к содержанию

Импорт и публикации — паттерны

1. Импорт данных

Функционал импорта загружает в 1Форму данные из CSV, XLS или таблиц SQL. Типичные сценарии: справочники контрагентов, списки подразделений, классификаторы. Поддерживается импорт из другого приложения 1Формы.

Импортируемые сущности: задачи, значения ДП, учётные записи пользователей, орг. единицы.

Создание импорта

Администрирование - Общая бизнес-логика - Импорт данных - Создать.

Параметры: - Название -- описательное имя - Тип данных -- что импортируем (задачи, пользователи и т.д.) - Модуль чтения -- формат файла (CSV, XLS) - Отступ строк -- сколько строк пропустить в начале файла

Маппинг полей

Для каждого поля указать: - Внешний идентификатор -- обозначение столбца в файле (для Excel -- буква столбца) - Идентификатор в Первой Форме -- ID соответствующего ДП

Запуск импорта

Импорт запускается вручную или автоматически. Для ручного запуска через smart-кнопку:

  1. Создать ДП типа "Файл" в категории (для загрузки файла импорта)
  2. Создать smart-кнопку с пакетом действий
  3. В пакете: действие "Выполнить импорт данных" - выбрать импорт - в поле "Файл" через smart указать ID файла из ДП

2. Публикации

Публикация объектов позволяет использовать их вне 1Формы. Создаются URL для внешнего доступа.

Типы публикуемых объектов

Тип Назначение
SQL View Наборы данных по SQL-запросу. Выгрузка в XML/Excel. Поддержка XSLT-преобразований
Пакеты действий Обработка POST/GET запросов от внешних систем. Создание задач, изменение параметров

Создание публикации (пакет действий)

Администрирование - Общая бизнес-логика - Публикации - Добавить публикацию.

Параметры: - Описание -- свободная форма - Алиас -- уникальное имя (для URL) - Тип публикации -- пакет действий - Тип содержимого -- application/json - URL -- формируется автоматически - Активность -- галочка "активна"

Входящие параметры

Добавить параметр - выбрать тип: - QueryString -- для GET, PUT, DELETE - RequestBody -- для POST (может содержать любые входящие/исходящие параметры)

Lua-скрипт для обработки JSON

Пакет действий использует действие "Выполнить смарт-скрипт" с Lua.

Парсинг входящего JSON

local JsonParameters = UTILS:json_decode(EVENTPARAMS["PublishedObjectParameters"])
local rb = (JsonParameters or {}).requestBody or {}

Функция создания задачи

function createTask(subcat, params)
  res = SMART:execute_action('CreateTask', taskid, "task", {
    Owner = 3,
    Subcat = subcat,
    TaskText = nil,
    CreateLink = false,
    CreateSubtask = false,
    ExtParams = params,
    NewTaskCopySubscribers = false,
    CreateCopyFiles = false,
    CopyParentText = false,
    Priority = 1,
    CreateCopiesForEachPerformer = false
  })
  return res
end

Таблица ДП для создания задачи

local extparams = {
  {ExtParamId = 156, FixedValue = rb.type},
  {ExtParamId = 157, FixedValue = rb.inn},
  {ExtParamId = 139, FixedValue = rb.c_name},
}

HTTP-ответ

function HTTPresponse(content, code)
  local res = SMART:execute_action('Response', CONTEXT_ID, 'task', {
    ResponseType = 'Json',
    Content  = content,
    StatusCode = code,
    ListOfHeaders = "[{'ParameterName': 'Content-Type', 'FixedValue': 'application/json'}]",
  })
  return res
end

Валидация и роутинг

if (not rb.type or tostring(rb.type):match("^%s*$"))
   or (not rb.inn or tostring(rb.inn):match("^%s*$"))
   or (not rb.c_name or tostring(rb.c_name):match("^%s*$"))
then
  cod = '400'
  otv = 'Внимание: переданы не все обязательные параметры.'
else
  cod = '200'
  otv = 'Контрагент успешно создан.'
  createTask(50, extparams)
end
RESULT = HTTPresponse(otv, cod)

Доступ к публикации

Варианты: - Анонимный доступ -- если данные не конфиденциальны - Встроенная авторизация: /app/v1.0/api/auth/token?login=...&password=...&isPersistent=true - Кастомная проверка -- проверка ключей в заголовке запроса

Ссылки