Подключение обсуждений / Настройки сообщений из других приложений / Модуль формы

файл
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2024, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ТипыВнешнихСистем = ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем();
	ДоступныеИнтеграции = ОбсужденияСлужебный.ДоступныеИнтеграции();
	ДоступныеКомандыСоздания = Новый Соответствие;
		
	ТипВнешнейСистемы = ТипыВнешнихСистем.Telegram;
	ИнтеграцияДоступна = ДоступныеИнтеграции.Найти(ТипВнешнейСистемы) <> Неопределено;
	ДоступныеКомандыСоздания["СоздатьБотаTelegram"] = ИнтеграцияДоступна;
	Если ИнтеграцияДоступна Тогда
		Подключение = СписокПодключений.ПолучитьЭлементы().Добавить();
		Подключение.Наименование = НСтр("ru='Чаты Telegram'");
		Подключение.Активно = -1;
		Подключение.Тип = ТипВнешнейСистемы;
	КонецЕсли;

	ТипВнешнейСистемы = ТипыВнешнихСистем.ВКонтакте;
	ИнтеграцияДоступна = ДоступныеИнтеграции.Найти(ТипВнешнейСистемы) <> Неопределено;
	ДоступныеКомандыСоздания["СоздатьБотаВКонтакте"] = ИнтеграцияДоступна;
	Если ИнтеграцияДоступна Тогда
		Подключение = СписокПодключений.ПолучитьЭлементы().Добавить();
		Подключение.Наименование = НСтр("ru='Чаты ВКонтакте'");
		Подключение.Активно = -1;
		Подключение.Тип = ТипВнешнейСистемы;
	КонецЕсли;
	
	ТипВнешнейСистемы = ТипыВнешнихСистем.WhatsApp;
	ИнтеграцияДоступна = ДоступныеИнтеграции.Найти(ТипВнешнейСистемы) <> Неопределено;
	ДоступныеКомандыСоздания["СоздатьБотаWhatsApp"] = ИнтеграцияДоступна;
	Если ИнтеграцияДоступна Тогда
		Подключение = СписокПодключений.ПолучитьЭлементы().Добавить();
		Подключение.Наименование = НСтр("ru='Чаты WhatsApp'");
		Подключение.Активно = -1;
		Подключение.Тип = ТипВнешнейСистемы;
	КонецЕсли;
	
	ТипВнешнейСистемы = ТипыВнешнихСистем.ВебЧат;
	ИнтеграцияДоступна = ДоступныеИнтеграции.Найти(ТипВнешнейСистемы) <> Неопределено;
	ДоступныеКомандыСоздания["СоздатьВебЧат"] = ИнтеграцияДоступна;
	Если ИнтеграцияДоступна Тогда
		Подключение = СписокПодключений.ПолучитьЭлементы().Добавить();
		Подключение.Наименование = НСтр("ru='Чаты на сайте'");
		Подключение.Активно = -1;
		Подключение.Тип = ТипВнешнейСистемы;
	КонецЕсли;
	
	ТипВнешнейСистемы = ТипыВнешнихСистем.Webhook;
	ИнтеграцияДоступна = ДоступныеИнтеграции.Найти(ТипВнешнейСистемы) <> Неопределено;
	ДоступныеКомандыСоздания["СоздатьБотаWebhook"] = ИнтеграцияДоступна;
	Если ИнтеграцияДоступна Тогда
		Подключение = СписокПодключений.ПолучитьЭлементы().Добавить();
		Подключение.Наименование = НСтр("ru='Интеграция Webhook'");
		Подключение.Активно = -1;
		Подключение.Тип = ТипВнешнейСистемы;
	КонецЕсли;

	ОбновитьСписокИнтеграций(ДоступныеИнтеграции);
	УстановитьВидимостьКомандСоздания(ДоступныеКомандыСоздания);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура СоздатьБотаTelegram(Команда)
	Оповещение = Новый ОписаниеОповещения("ПослеИзмененияИнтеграции", ЭтотОбъект);
	ОбсужденияСлужебныйКлиент.ПоказатьИнформациюОбИнтеграции(ЭтотОбъект, 
		Новый Структура("Тип", ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().Telegram),
		Оповещение);
КонецПроцедуры

&НаКлиенте
Процедура СоздатьБотаВКонтакте(Команда)
	Оповещение = Новый ОписаниеОповещения("ПослеИзмененияИнтеграции", ЭтотОбъект);
	ОбсужденияСлужебныйКлиент.ПоказатьИнформациюОбИнтеграции(ЭтотОбъект, 
		Новый Структура("Тип", ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().ВКонтакте),
		Оповещение);
КонецПроцедуры

&НаКлиенте
Процедура СоздатьБотаWhatsApp(Команда)
	
	Оповещение = Новый ОписаниеОповещения("ПослеИзмененияИнтеграции", ЭтотОбъект);
	ОбсужденияСлужебныйКлиент.ПоказатьИнформациюОбИнтеграции(ЭтотОбъект, 
		Новый Структура("Тип", ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().WhatsApp),
		Оповещение);

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

&НаКлиенте
Процедура СоздатьВебЧат(Команда)
	
	Оповещение = Новый ОписаниеОповещения("ПослеИзмененияИнтеграции", ЭтотОбъект);
	ОбсужденияСлужебныйКлиент.ПоказатьИнформациюОбИнтеграции(ЭтотОбъект, 
		Новый Структура("Тип", ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().ВебЧат),
		Оповещение);
		
КонецПроцедуры

&НаКлиенте
Процедура СоздатьБотаWebhook(Команда)
	
	Оповещение = Новый ОписаниеОповещения("ПослеИзмененияИнтеграции", ЭтотОбъект);
	ОбсужденияСлужебныйКлиент.ПоказатьИнформациюОбИнтеграции(ЭтотОбъект, 
		Новый Структура("Тип", ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().Webhook),
		Оповещение);

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

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура УстановитьВидимостьКомандСоздания(ДоступныеКомандыСоздания)
	
	Для Каждого ЭлементСоздания Из Элементы.ПодменюСоздать.ПодчиненныеЭлементы Цикл
		ЭлементСоздания.Видимость = (ДоступныеКомандыСоздания[ЭлементСоздания.ИмяКоманды] = Истина);
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеИзмененияИнтеграции(Результат, ДополнительныеПараметры) Экспорт
	ОбновитьСписокИнтеграций();
КонецПроцедуры

&НаСервере
Процедура ОбновитьСписокИнтеграций(Знач ДоступныеИнтеграции = Неопределено)

	Если Не Обсуждения.ОбсужденияДоступны() Тогда
		Возврат;
	КонецЕсли;
	
	ТипыИнтеграции = Новый Соответствие;
	
	Для каждого ТипИнтеграции Из СписокПодключений.ПолучитьЭлементы() Цикл
		ТипИнтеграции.ПолучитьЭлементы().Очистить();
		ТипыИнтеграции.Вставить(ТипИнтеграции.Тип, ТипИнтеграции);
	КонецЦикла;
	
	ТаблицаИнтеграций = Новый ТаблицаЗначений;
	ТаблицаИнтеграций.Колонки.Добавить("Использование");
	ТаблицаИнтеграций.Колонки.Добавить("Представление");
	ТаблицаИнтеграций.Колонки.Добавить("Идентификатор");
	ТаблицаИнтеграций.Колонки.Добавить("ТипВнешнейСистемы");
	
	Интеграции = СистемаВзаимодействия.ПолучитьИнтеграции();
	Если ДоступныеИнтеграции = Неопределено Тогда
		ДоступныеИнтеграции = ОбсужденияСлужебный.ДоступныеИнтеграции();
	КонецЕсли;
	Для Каждого Интеграция Из Интеграции Цикл
		Если ДоступныеИнтеграции.Найти(Интеграция.ТипВнешнейСистемы) <> Неопределено Тогда
			ЗаполнитьЗначенияСвойств(ТаблицаИнтеграций.Добавить(), Интеграция);
		КонецЕсли;
	КонецЦикла;
	
	ТаблицаИнтеграций.Сортировать("Представление Возр");
	
	Для Каждого Интеграция Из ТаблицаИнтеграций Цикл
		
		Категория = ТипыИнтеграции[Интеграция.ТипВнешнейСистемы];
		Если Категория <> Неопределено Тогда
			НоваяИнтеграция = Категория.ПолучитьЭлементы().Добавить();
			ИнтеграцияВДанныеФормы(Интеграция, НоваяИнтеграция);	
		Иначе
			ЗаписьЖурналаРегистрации(ОбсужденияСлужебный.СобытиеЖурналаРегистрации(),
				УровеньЖурналаРегистрации.Ошибка,,,
				СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
					НСтр("ru='Неподдерживаемый тип внешней интеграции %1.'"), Интеграция.ТипВнешнейСистемы));
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

// Параметры:
//  Интеграция - ИнтеграцияСистемыВзаимодействия 
//  ДанныеФормы - ДанныеФормыЭлементДерева из см. Обработка.ПодключениеОбсуждений.Форма.НастройкиСообщенийИзДругихПриложений.СписокПодключений
//
&НаСервере
Процедура ИнтеграцияВДанныеФормы(Знач Интеграция, Знач ДанныеФормы)
	
	ДанныеФормы.Активно = ?(Интеграция.Использование, 0, 2);
	ДанныеФормы.Наименование = Интеграция.Представление;
	ДанныеФормы.Идентификатор = Интеграция.Идентификатор;
	ДанныеФормы.Тип = Интеграция.ТипВнешнейСистемы;

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

&НаКлиенте
Процедура СписокПодключенийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	
	Интеграция = СписокПодключений.НайтиПоИдентификатору(ВыбраннаяСтрока);
	Если Интеграция.Идентификатор = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Оповещение = Новый ОписаниеОповещения("ПослеИзмененияИнтеграции", ЭтотОбъект);
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("Тип", Интеграция.Тип);
	ПараметрыФормы.Вставить("Идентификатор", Интеграция.Идентификатор);
	ОбсужденияСлужебныйКлиент.ПоказатьИнформациюОбИнтеграции(ЭтотОбъект, ПараметрыФормы, Оповещение);
КонецПроцедуры

&НаКлиенте
Процедура Обновить(Команда)
	ОбновитьНаСервере();
КонецПроцедуры

&НаСервере
Процедура ОбновитьНаСервере()
	ОбновитьСписокИнтеграций();
КонецПроцедуры

#КонецОбласти

Связанные материалы