Каталог решений - Внешняя компонента для работы с MYSQL в формате JSON

Внешняя компонента для работы с MYSQL в формате JSON

Внешняя компонента для работы с MYSQL в формате JSON

В наличии

В этой статье я хочу познакомить вас с собственным инструментом для получения данных из базы данных MYSQL, который я активно использовал для своих проектов.

Категория:

Описание

В первую очередь у многих может возникнуть вопрос, зачем вдруг может понабиться «лезть» в базу MYSQL, читать и писать туда данные. Ответ на самом делал довольно простой, дело в том, что MYSQL — это самая популярная база данных, которую используют большинство движков сайтов, да и в целом веб разработчиков, при создании своих проектов. Бывает так, что других способов забрать данные с сайта, кроме как на прямую из базы данных нет. Так как мне приходилось делать интеграции с большим количеством разных сайтов, я пришел к тому, что для этих целей необходимо сделать свое решение для чтения / записи в MYSQL. При этом, хотелось работать с данными в привычном и удобно формате. Поэтому в качестве формата возвращаемых данных я выбрал JSON.

В прошлой статье //sale.itcity.ru/1c/tools/1675452/ я описывал, как с помощью этой компоненты делал загрузку данных из WooCommerce (WordPress), сейчас хочу поделиться самой компонентой, а так же примерами кода для получения и записи данных.

 

Шаг №1. Установка компоненты

 

Компонента c использованием технологии Native API, работает как в 32-х, так и 64-х битной версии платформы. Компонента представляет из себя zip архив MYSQL2JSON.zip, внутри которого лежат следующие файлы:

Самый простой способ установки – это создание общего макета и загрузка данных в него:

  1. Нажимаем кнопку создать
  2. Пишем любое имя макета, например MYSQL2JSON
  3. Загружаем zip архив с компонентой

После того как мы поместили компоненту в макет, нам необходимо ее установить,  для того, чтобы ее уже можно было использовать при написании кода в нашей конфигурации.

Существуют разные способы установки внешних компонент, не хотелось бы спорить про правильность того или иного способа. Пример:

УстановитьВнешнююКомпоненту("ОбщийМакет.MYSQL2JSON");

Если мы откроем справку по этой процедуре, то там будет следующий текст:

Примечание:

Метод работает только с компонентами, хранящимися в архиве.

Если для конфигурации свойство РежимИспользованияМодальности установлено в НеИспользовать, следует использовать метод НачатьУстановкуВнешнейКомпоненты.

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

 

Шаг №2. Работа с компонентой на встроенном языке

 

Подключаем нашу компоненту

Результат = ПодключитьВнешнююКомпоненту("ОбщийМакет.MYSQL2JSON", "AddInNative", ТипВнешнейКомпоненты.Native);
AddInStarter = Новый("AddIn.AddInNative.AddInStarter");

Передаем все необходимые параметры в компоненту для получения данных из MYSQL:

	ЗаписьJson = Новый ЗаписьJson;
	ЗаписьJson.УстановитьСтроку();  
	
	ПараметрыЗапроса = Новый Структура;
	ПараметрыЗапроса.Вставить("Server", ДанныеИнтеграции.Server);
	ПараметрыЗапроса.Вставить("Database",ДанныеИнтеграции.Database);
	ПараметрыЗапроса.Вставить("Username",ДанныеИнтеграции.Username);
	ПараметрыЗапроса.Вставить("Password",ДанныеИнтеграции.Password);
	ПараметрыЗапроса.Вставить("Port",ДанныеИнтеграции.Port); 

	МакетТекстЗапросаЗаказы = ПолучитьМакет("ЗапросЗаказы");
	ТексЗапросаПоЗаказам    = МакетТекстЗапросаЗаказы.ПолучитьТекст();		
	ТексЗапросаПоЗаказам 	= СтрЗаменить(ТексЗапросаПоЗаказам, "XX.XX.XXXX", Формат(ДатаНачала, "ДФ=dd.MM.yyyy"));
	ТексЗапросаПоЗаказам 	= СтрЗаменить(ТексЗапросаПоЗаказам, "YY.YY.YYYY", Формат(ДатаОкончания, "ДФ=dd.MM.yyyy"));
	
	ПараметрыЗапроса.Вставить("SQL", ТексЗапросаПоЗаказам);
	
	ЗаписатьJson(ЗаписьJson,ПараметрыЗапроса); 
	JSONЗаказы = AddInStarter.ЗапуститьФункцию(ЗаписьJson.Закрыть());

ДанныеИнтеграции это структура, куда в ключи «Server», «Database», «Username», «Password», «Port» мы пишем параметры подключения к MYSQL. Это все просто строковые данные. Такой подход позволяет менять параметры подключения к базе в одном месте. Пример: 

	ДанныеИнтеграции = Новый Структура;
	ДанныеИнтеграции.Вставить("Server", "193.107.333.121");
	ДанныеИнтеграции.Вставить("Database", "demo1");
	ДанныеИнтеграции.Вставить("Username", "demo1");
	ДанныеИнтеграции.Вставить("Password", "demo123");
	ДанныеИнтеграции.Вставить("Port", "3306");

 

Все тексты запросов я обычно храню в макетах, запросы написаны на языке SQL, в примере видно, что не которые данные в тексте запроса, типа «XX.XX.XXXX» я заменяю на дату, чтобы в запросе делать отборов заказов с определенной даты. Про тексты запросов я подробно говорил вот в этой статье: //sale.itcity.ru/1c/tools/1675452/

Ну самое главное, в переменную «JSONЗаказы» мы получаем JSON со всеми данными, которые мы получили с помощь SQL запроса.

Ну вот таким не хитрым способом мы преобразовываем JSON в соответствие, которым будет очень удобно работать:

	Попытка
		ЧтениеJSONЗаказы = Новый ЧтениеJSON;
		ЧтениеJSONЗаказы.УстановитьСтроку(JSONЗаказы);
		ТаблицаЗаказов = ПрочитатьJSON(ЧтениеJSONЗаказы,Истина);
		ЧтениеJSONЗаказы.Закрыть();
	Исключение		
		Возврат Неопределено;
	КонецПопытки;

Напоследок, приведу пример кода, по работе со структурой данных по заказу:

	Если ТаблицаЗаказов.Получить("error") = "Нет данных" Тогда 
		Возврат Неопределено;
	ИначеЕсли ТипЗнч(ТаблицаЗаказов.Получить("data")) = Тип("Массив") Тогда 
		Для Каждого СтрокаЗаказа Из ТаблицаЗаказов["data"] Цикл 
			СтруктураЗаказа = Новый Структура;
			
			НомерЗаказа = СтрокаЗаказа["order_id"];
			РезультатПоиска = Документы.ЗаказПокупателя.НайтиПоРеквизиту("НомерНаСайте", НомерЗаказа);
			
			Если Не ЗначениеЗаполнено(РезультатПоиска) Тогда 
				Клиент1С = "";
				
				СтруктураЗаказа.Вставить("ИД", НомерЗаказа);
				СтруктураЗаказа.Вставить("ДатаЗаказа", СтрокаЗаказа["date_created"]);
				//Код по созданию струкруты заказа, перечислять все поля не имеет смысла
				//Добавление структуры в массив заказов
				МассивЗаказов.Добавить(СтруктураЗаказа);		
			КонецЕсли;
		КонецЦикла;	
	КонецЕсли;	

Если нет данных, то в ключ «error» будет записано значение «нет данных», ну а если все хорошо и действительно есть что загружать, в ключ «data» попадет массив данными о заказах, которых мы хотим получить из базы данных.

 

Шаг №3. Запись данных в MYSQL

 

В прошлом разделе мы подробно рассмотрели, как «читать» данные из MYSQL. Но помимо команды SELECT, внешняя компонента позволяет еще и записывать данные в базу:

	Результат = ПодключитьВнешнююКомпоненту("ОбщийМакет.MYSQL2JSON", "AddInNative", ТипВнешнейКомпоненты.Native);
	AddInStarter = Новый("AddIn.AddInNative.AddInStarter");

	ЗаписьJson = Новый ЗаписьJson;
	ЗаписьJson.УстановитьСтроку();

	ПараметрыЗапроса = Новый Структура;
	ПараметрыЗапроса.Вставить("Server", ДанныеИнтеграции.Server);
	ПараметрыЗапроса.Вставить("Database",ДанныеИнтеграции.Database);
	ПараметрыЗапроса.Вставить("Username",ДанныеИнтеграции.Username);
	ПараметрыЗапроса.Вставить("Password",ДанныеИнтеграции.Password);
	ПараметрыЗапроса.Вставить("Port",ДанныеИнтеграции.Port); 
	ПараметрыЗапроса.Вставить("Mode","2"); // не обязательный, 1-Select, 2-Update,Insert,Delete

	МакетТекстЗапросаОстаток = ПолучитьМакет("ЗапросОстаток");
	ТексЗапросаПоОстаткам 	 = МакетТекстЗапросаОстаток.ПолучитьТекст();		
	ТексЗапросаПоОстаткам 	 = СтрЗаменить(ТексЗапросаПоОстаткам, "значение2", Формат(Остаток, "ЧРД=.; ЧГ="));
	ТексЗапросаПоОстаткам 	 = СтрЗаменить(ТексЗапросаПоОстаткам, "МОЙ_КОД_1С", КодТовара);
	
	ПараметрыЗапроса.Вставить("SQL", ТексЗапросаПоОстаткам);
	
	ЗаписатьJson(ЗаписьJson,ПараметрыЗапроса); 
	JSONОстатки = AddInStarter.ЗапуститьФункцию(ЗаписьJson.Закрыть());

 

Как мы видим, для записи данных в структуру, которую мы передаем во внешнюю компонент добавить ключ «Mode». При это для команд изменения данных в БД значение ключа должно быть «2».

 

Ответы на вопросы:

 

1) На каком языке программирования был «написана» внешняя компонента?

Ответ: Внешняя компонента написана на Delphi

2) На каких релизах проводилось тестирование? 

Ответ: Тестирование проводилось на релизах: 8.3.17.2306 (X32/x64), 8.3.21.1302 (X32/x64) 

has been added to your cart:
Оформление заказа