Получение и создание обсуждений
Для отправки и получения сообщений нужно получить обсуждения. Для этого СистемаВзаимодействия имеет несколько методов:
- ПолучитьНепрочитанныеОбсуждения() — возвращает список идентификаторов непрочитанных обсуждений. Количество можно выставить в параметре ЛимитОбсуждений. Максимальное число обсуждений, полученных за один раз, не может превышать 100 (даже если таких обсуждений больше).
- ПолучитьОбсуждения() — возвращает список обсуждений, которые соответствуют указанным в параметрах идентификаторам.
- НайтиОбсуждение() — возвращает обсуждение системы взаимодействия (ОбсуждениеСистемыВзаимодействия) по его идентификатору или ключу.
- НайтиОбсуждения() — возвращает список обсуждений, которые соответствуют установленным отборам. Важно отметить, что контекстные обсуждения доступны, если у текущего пользователя взаимодействия есть права на чтение сущностей, которые указаны в контекстах обсуждений. Для того чтобы получить все обсуждения, а не только те, в которых участвует активный пользователь, необходимо вызов метода осуществлять в привилегированном режиме.
- СоздатьОбсуждение () — создает новое групповое обсуждение с указанными в методе параметрами.
- СоздатьЛичноеОбсуждение() — создает новое обсуждение между двумя пользователями.
Создание обсуждения, сообщения, получение непрочитанных сообщений
// создание обсуждения (пользователь1 с пользователем2)
попытка
пер НазваниеОбсуждения = "Название обсуждения"
пер КлючОбсуждения = "Ключ обсуждения"
ИдОбсуждения = СистемаВзаимодействия.СоздатьОбсуждение([ИдПользователяСВ1, ИдПользователяСВ2], НазваниеОбсуждения, КлючОбсуждения)
// Сохраните идентификатор обсуждения системы взаимодействия ИдОбсуждения
поймать Исключение : ИсключениеСистемыВзаимодействия
// Обработка исключения
;
// создание сообщения (от пользователя1 к пользователю2)
попытка
пер МассивПолучателейСообщения : Массив<Ууид> = новый Массив<Ууид>()
МассивПолучателейСообщения.Добавить(ИдПользователяСВ2)
пер ТекстСообщения : Строка = "Привет, пользователь!"
ИдСообщения = СистемаВзаимодействия.СоздатьСообщение(ИдОбсуждения, МассивПолучателейСообщения, ТекстСообщения)
// Сохраните идентификатор сообщения системы взаимодействия ИдСообщения
поймать Исключение : ИсключениеСистемыВзаимодействия
// Обработка исключения
;
//
// ... можно создать еще сообщения ...
//
// получение непрочитанных сообщений
попытка
пер МассивНовыхСообщений = СистемаВзаимодействия.ПолучитьНепрочитанныеСообщения(ИдОбсуждения)
//Непрочитанные сообщения
для Сообщение из МассивНовыхСообщений
// Обработка непрочитанных сообщений
;
поймать Исключение : ИсключениеСистемыВзаимодействия
// Обработка исключения
;
Получение непрочитанных обсуждений и сообщений
// подключение, инициализация, создание сообщения и т.д.
// ...
попытка
// получаем непрочитанные обсуждения
пер МассивИдентификаторовНепрочитанныхОбсуждений = СистемаВзаимодействия.ПолучитьНепрочитанныеОбсуждения(10)
// получаем непрочитанные сообщения каждого непрочитанного обсуждения (выдаются в хронологическом порядке)
для ИдентификаторНепрочитанногоОбсуждения из МассивИдентификаторовНепрочитанныхОбсуждений
//Консоль.Записать("Обсуждение # " + ИдентификаторНепрочитанногоОбсуждения)
пер МассивНовыхСообщений = СистемаВзаимодействия.ПолучитьНепрочитанныеСообщения(ИдентификаторНепрочитанногоОбсуждения)
для Сообщение из МассивНовыхСообщений
//Консоль.Записать("Сообщение # " + Сообщение.Ид + " : " + Сообщение.Текст)
// устанавливаем прочитанное сообщение как последнее прочитанное
СистемаВзаимодействия.УстановитьПоследнееПрочитанноеСообщение(ИдентификаторНепрочитанногоОбсуждения, Сообщение.Ид)
;
;
поймать Исключение : ИсключениеСистемыВзаимодействия
// Обработка исключения
;
Получение обсуждения по пользовательскому ключу
метод ПолучитьОбсуждениеДляУведомлений(КлючОбсужденияДляУведомлений: Строка): Обсуждение
// Поиск обсуждения по ключу
знч СписокОбсуждений = СистемаВзаимодействия.НайтиОбсуждения(Ключ = КлючОбсужденияДляУведомлений)
если СписокОбсуждений.Пусто()
возврат СоздатьОбсуждениеДляУведомленийПользователя(КлючОбсужденияДляУведомлений)
;
возврат СписокОбсуждений.Первый()
;
метод ПолучитьИдентификаторОбсужденияДляУведомлений(): Ууид
// фиктивый ключ для примера, на самом деле он вычисляется по пользователю приложения
знч КлючОбсужденияДляУведомлений = "Notification#105ea6f2-2e8f-11ed-a261-0242ac120002"
знч Обсуждение = ПолучитьОбсуждениеДляУведомлений(КлючОбсужденияДляУведомлений)
возврат Обсуждение.Ид
;
метод СоздатьОбсуждениеДляУведомленийПользователя(КлючОбсужденияДляУведомлений: Строка): Обсуждение
знч НазваниеОбсуждения: Строка = "" // Получение наименования обсуждения
знч УчастникиОбсуждения: Массив<Ууид> = [] // Получение участников обсуждения
знч ИдОбсуждения = СистемаВзаимодействия.СоздатьОбсуждение(
Название = НазваниеОбсуждения,
Участники = УчастникиОбсуждения,
Ключ = КлючОбсужденияДляУведомлений)
возврат СистемаВзаимодействия.НайтиОбсуждение(ИдОбсуждения)!
;
Добавление нового участника в существующее обсуждение
метод ДобавитьУчастникаВСуществующееОбсуждение(ИдОбсуждения: Ууид, Пользователь: Пользователи.Ссылка)
знч Обсуждение = СистемаВзаимодействия.НайтиОбсуждение(ИдОбсуждения)
если Обсуждение == Неопределено
возврат
;
пер ИдПользователя: Ууид? = СистемаВзаимодействия.ПолучитьИдПользователяВзаимодействия(Пользователь)
если ИдПользователя == Неопределено
возврат
;
пер СписокУчастников = новый Массив<Ууид>(Обсуждение.ИдУчастников)
СписокУчастников.Добавить(ИдПользователя)
СистемаВзаимодействия.РедактироватьОбсуждение(
ИдОбсуждения = ИдОбсуждения,
Участники = СписокУчастников,
Название = Обсуждение.Название)
;