Skip to content

Внешняя компонента Native Api для работы с JSON schema в 1С

License

Notifications You must be signed in to change notification settings

Toveal/jsonschema-1c

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Надстройка над крейтом jsonschema для 1С

Поддерживаются схемы:

  • Draft 7
  • Draft 6
  • Draft 4

Draft 2019-09 и Draft 2020-12 в библиотеке jsonschema поддерживаются не полностью, поэтому в компоненту они не включены. Будут включены в компоненту после полной реализации в библиотеке

В случае если может произойти исключение, в описании ставится знак ⚠️. Описание ошибки можно получить с помощью метода получить последнюю ошибку

Свойства

Схема (Schema)

Использование:
Только чтение.

Описание:
Тип: Строка
Хранит главную схему с помощью которой будет происходить валидация JSON с помощью методов компоненты

Формат (Format)

Использование:
Чтение и запись.

Описание:
Тип: Строка
Содержит формат ошибки проверки JSON с помощью метода проверить. Шаблон по умолчанию "{path}"

Доступные шаблоны для подстановки:

  • {error} - Описывает какое значение и по какой причине не прошло валидацию
  • {path} - Путь к значению, которое не прошло проверку
  • {instance} - Значение свойства, которое не прошло проверку
  • {schema_path} - Путь к ключевому слову JSON Schema, которое не прошло проверку

Пример:

ОбъектКомпоненты.Формат = "Тут вот такая ошибка: {error}";
// Элемент массива ошибок метода "проверить" будет:
// "Тут вот такая ошибка: "123" does not match "^[0-9]{4}$""

ИспользоватьДопФорматы (UseCustomFormats)

Использование:
Чтение и запись.

Описание:
Тип: Булево
Признак использования дополнительных форматов в ключевом слове "format"

Значение по умолчанию:
Истина

Доступны дополнительные форматы строки:

  • uuid - формат из спецификации JsonSchema 2019-09. Будет удален после включения в компоненту Draft 2019-09
  • ru-inn-individual - ИНН физ лица. Производит валидацию ИНН с проверкой контрольной суммы и т.д.
  • ru-inn-legal-entity - ИНН юр. лица. Производит валидацию ИНН с проверкой контрольной суммы и т.д.
  • kz-iin - ИИН физ. лица Казахстана. Производит валидацию ИИН с проверкой контрольной суммы и т.д.

Version/Версия

Использование:
Только чтение

Описание:
Тип: Строка
Содержит версию компоненты

ИгнорироватьНеизвестныеФорматы (IgnoreUnknownFormats)

Использование:
Чтение и запись.

Значение по умолчанию: Истина

Если установить значение Ложь, то при использовании метода УстановитьОсновнуюCхему будет произведена проверка на существование указанного формата в поле format. Если формат не существует, будет сгенерировано исключение

Методы

Действителен (IsValid)⚠️

Синтаксис:
Действителен(<JSON>)

Параметры:
<JSON> (обязательный)
Тип: Строка.
JSON для проверки.

Описание
Проверяет JSON на соответствие схеме без описания ошибки валидации

Возвращаемое значение:
Булево - Результат проверки

Причины исключений:

  • Не удалось преобразовать аргумент функции в строку
  • Не удалось преобразовать аргумент функции в JSON
  • Не установлена основная схема JSON

ДобавитьСхему (AddScheme)⚠️

Синтаксис:
ДобавитьСхему(<Схема>)

Параметры:
<Схема> (обязательный)
Тип: Строка.
Схема JSON

Описание
Добавляет дополнительную схему от которой зависит основная схема

Причины исключений:

  • Не удалось преобразовать аргумент функции в строку
  • Не удалось преобразовать аргумент функции в JSON
  • В схеме не найден ключ $id
  • Значение $id не является строкой
  • Значение $id не удалось преобразовать в URL

УдалитьСхему (DeleteScheme)⚠️

Синтаксис:
УдалитьСхему(<URL>)

Параметры:
<URL> (обязательный)
Тип: Строка.
URL дополнительной схемы

Описание
Процедура удаляет дополнительную схему из колллекции доп. схем по переданному URL. Если передан несуществующий URL, ничего не происходит

Причины исключений:

  • Не удалось преобразовать аргумент функции в строку
  • Не удалось преобразовать аргумент функции в URL

УдалитьВсеСхемы (DeleteAllSchemes)

Синтаксис:
УдалитьВсеСхемы()

Описание
Очищает коллекцию дополнительных схем

ПолучитьПоследнююОшибку (GetLastError)

Синтаксис:
ПолучитьПоследнююОшибку()

Возвращаемое значение:
Строка, Неопределено - Описание последней ошибки. Если ошибка не происходила, то возвращаемое значение Неопределено

Описание
Возвращает описание последней произошедшей ошибки. Функцию стоит вызывать сразу после возникновения исключение. Каждое исключение перезаписывает ошибку

Проверить (Validate)⚠️

Синтаксис:
Проверить(<JSON>, <БуферОшибок>)

Параметры:
<JSON> (обязательный)
Тип: Строка.
JSON для проверки

БуферОшибок (обязательный)
Тип: Строка.
Аргумент куда будут записаны ошибки валидации JSON в виде массива строк JSON. Каждый элемент массива будет в формате из свойства Формат

Возвращаемое значение:
Булево - Результат проверки

Описание:
Проверяет JSON на соответствие схеме с описанием ошибок валидации

Причины исключений:

  • Не удалось преобразовать первый аргумент функции в строку
  • Не удалось преобразовать первый аргумент функции в JSON
  • Не установлена схема

УстановитьОсновнуюСхему (SetMainScheme)⚠️

Синтаксис:
УстановитьОсновнуюСхему(<Схема>)

Параметры:
<Схема> (обязательный)
Тип: Строка.
JSON схема

Описание:
Устанавливает и компилирует JSON схему с помощью которой будет происходить валидация методами Проверить и Действителен.

Вызов этого метода учитывает установленные значения свойств ИгнорироватьНеизвестныеформаты и ИспользоватьДопФорматы и изменение значения этих свойств не повлияет на уже скомилированную схему. Для того чтобы схема учитвала эти свойства, необходимо повторно установить основную схему этим методом

Причины исключений:

  • Не удалось преобразовать первый аргумент функции в строку
  • Не удалось преобразовать первый аргумент функции в JSON
  • Не удалось скомпилировать схему

Пример использования

Процедура ПроверитьТелоЗапроса()

	КомпонентаПодключена = ПодключитьВнешнююКомпоненту(ПутьККомпоненте(), "JsonСхема",
		ТипВнешнейКомпоненты.Native, ТипПодключенияВнешнейКомпоненты.НеИзолированно);

	Если Не КомпонентаПодключена Тогда
		Возврат;
	КонецЕсли;

	КомпонентаОбъект = Новый ("AddIn.JsonСхема.JsonSchema1C");

	// Инициализация доп схемы
	Попытка
		КомпонентаОбъект.ДобавитьСхему(ДополнительнаяСхема());
	Исключение
		Сообщить(КомпонентаОбъект.ПолучитьПоследнююОшибку());
	КонецПопытки;

	// Информация о версии
	Сообщить(КомпонентаОбъект.Версия);
	// Отключение доп. форматов
	КомпонентаОбъект.ИспользоватьДопФорматы = Ложь;

	// Установка основной схемы
	Попытка
		КомпонентаОбъект.УстановитьОсновнуюСхему(ОсновнаяСхема());
	Исключение
	    Сообщить(КомпонентаОбъект.ПолучитьПоследнююОшибку());
		Возврат;
	КонецПопытки;

	// Установка формата вывода
	КомпонентаОбъект.Формат = "Вот такая вот ошибка {error} вот здесь: {path}";

	// Быстрая проверка
	Попытка
		Сообщить(КомпонентаОбъект.Действителен(JSONДляПроверки()));
	Исключение
		Сообщить(КомпонентаОбъект.ПолучитьПоследнююОшибку());
	КонецПопытки;

	// Подробная проверка
	// Буфер в любом случае будет преобразован в строку
	БуферОшибок = Неопределено;
	Попытка
		КомпонентаОбъект.Проверить(JSONДляПроверки(), БуферОшибок);
	Исключение
		Сообщить(КомпонентаОбъект.ПолучитьПоследнююОшибку());
	КонецПопытки;

	Сообщить(БуферОшибок);

КонецПроцедуры

Функция ОсновнаяСхема()
	Возврат "{
	|  ""type"": ""object"",
	|  ""properties"": {
	|    ""person"": {
	|      ""$ref"": ""https://example.com/person_schema""
	|    }
	|  },
	|  ""required"": [""person""]
	|}";
КонецФункции

Функция ДополнительнаяСхема()
	Возврат "{
	|  ""$id"": ""https://example.com/person_schema"",
	|  ""type"": ""object"",
	|  ""properties"": {
	|    ""name"": {
	|      ""type"": ""string""
	|    },
	|    ""age"": {
	|      ""type"": ""integer"",
	|      ""minimum"": 0
	|    }
	|  },
	|  ""required"": [""name"", ""age""]
	|}
	|";
КонецФункции

Функция JSONДляПроверки()
	Возврат "{ ""person"": { ""name"": 123, ""age"": 30 } }";
КонецФункции

Функция ПутьККомпоненте()
	Возврат "ПутьДоКомпоненты";
КонецФункции

Вывод:

0.1.0
Нет
["Вот такая вот ошибка 123 is not of type \"string\" вот здесь: /person/name"]

About

Внешняя компонента Native Api для работы с JSON schema в 1С

Topics

Resources

License

Stars

Watchers

Forks

Languages