Перейти к основному содержимому

Получение и создание обсуждений

Для отправки и получения сообщений нужно получить обсуждения. Для этого используются следующие методы типа СистемаВзаимодействия:

  • ПолучитьНепрочитанныеОбсуждения() — возвращает список идентификаторов непрочитанных обсуждений. Количество можно выставить в параметре ЛимитОбсуждений. Максимальное число обсуждений, полученных за один раз, не может превышать 100 (даже если таких обсуждений больше).
  • ПолучитьОбсуждения() — возвращает список обсуждений, которые соответствуют указанным в параметрах идентификаторам.
  • НайтиОбсуждение() — возвращает обсуждение системы взаимодействия (ОбсуждениеСистемыВзаимодействия) по его идентификатору или ключу.
  • НайтиОбсуждения() — возвращает список обсуждений, которые соответствуют установленным фильтрам. Контекстные обсуждения доступны, только если у текущего пользователя взаимодействия есть права на чтение сущностей, указанных в контекстах обсуждений. Чтобы получить все обсуждения, а не только те, в которых участвует активный пользователь, необходимо вызвать метод в привилегированном режиме.
  • СоздатьОбсуждение() — создает новое групповое обсуждение с указанными в методе параметрами.
  • СоздатьЛичноеОбсуждение() — создает новое обсуждение между двумя пользователями.

Создание обсуждения и сообщений, получение непрочитанных сообщений

// Создание обсуждения между двумя пользователями.
пер ИдОбсуждения: Ууид
пер ИдСообщения: Ууид

попытка
знч НазваниеОбсуждения = "Название обсуждения"
знч КлючОбсуждения = "Ключ обсуждения"

// Создание обсуждения между двумя пользователями.
// Сохраните идентификатор обсуждения.
ИдОбсуждения = СистемаВзаимодействия.СоздатьОбсуждение([ИдПользователяСВ1, ИдПользователяСВ2],
НазваниеОбсуждения, КлючОбсуждения)
поймать Исключение : ИсключениеСистемыВзаимодействия
// Обработка исключения...
;

// Создание сообщения для второго пользователя.
попытка
пер МассивПолучателейСообщения: Массив<Ууид> = новый Массив<Ууид>()
МассивПолучателейСообщения.Добавить(ИдПользователяСВ2)

знч ТекстСообщения = "Привет, пользователь!"
// Сохраните идентификатор сообщения системы взаимодействия.
ИдСообщения = СистемаВзаимодействия.СоздатьСообщение(ИдОбсуждения,
МассивПолучателейСообщения, ТекстСообщения)

поймать Исключение : ИсключениеСистемыВзаимодействия
// Обработка исключения...
;

// Создание других сообщений.
// ...

// Получение непрочитанных сообщений.
попытка
пер МассивНовыхСообщений = СистемаВзаимодействия.ПолучитьНепрочитанныеСообщения(ИдОбсуждения)

// Обход массива непрочитанных сообщений.
для Сообщение из МассивНовыхСообщений
// Обработка непрочитанных сообщений...
;

поймать Исключение : ИсключениеСистемыВзаимодействия
// Обработка исключения...
;

Получение непрочитанных обсуждений и сообщений

попытка
// Получение непрочитанных обсуждений.
пер МассивИдНепрочитанныхОбсуждений = СистемаВзаимодействия.ПолучитьНепрочитанныеОбсуждения(ЛимитОбсуждений = 10)

// Получение непрочитанных сообщений из каждого непрочитанного обсуждения (выдаются в хронологическом порядке).
для ИдНепрочитанногоОбсуждения из МассивИдНепрочитанныхОбсуждений

пер МассивНовыхСообщений = СистемаВзаимодействия.ПолучитьНепрочитанныеСообщения(ИдНепрочитанногоОбсуждения)

для Сообщение из МассивНовыхСообщений
// Получение информации о сообщении.
знч ИдОбсуждения = Сообщение.ИдОбсуждения
знч ИдСообщения = Сообщение.Ид
знч ТекстСообщения = Сообщение.Текст

// Установка прочитанного сообщения как последнего прочитанного.
СистемаВзаимодействия.УстановитьПоследнееПрочитанноеСообщение(ИдНепрочитанногоОбсуждения, Сообщение.Ид)
;
;

поймать Исключение : ИсключениеСистемыВзаимодействия
// Обработка исключения...
;

Получение обсуждения по пользовательскому ключу

метод ПолучитьОбсуждениеДляУведомлений(КлючОбсужденияДляУведомлений: Строка): ОбсуждениеВзаимодействия
// Поиск обсуждения по ключу.
знч СписокОбсуждений = СистемаВзаимодействия.НайтиОбсуждения(Ключ = КлючОбсужденияДляУведомлений)

если СписокОбсуждений.Пусто()
возврат СоздатьОбсуждениеДляУведомленийПользователя(КлючОбсужденияДляУведомлений)
;

возврат СписокОбсуждений.Первый()
;

метод ПолучитьИдентификаторОбсужденияДляУведомлений(): Ууид
// В примере используется фиктивный ключ.
// В обычном случае он вычисляется по пользователю приложения.
знч КлючОбсужденияДляУведомлений = "Notification#105ea6f2-2e8f-11ed-a261-0242ac120002"

знч Обсуждение = ПолучитьОбсуждениеДляУведомлений(КлючОбсужденияДляУведомлений)
возврат Обсуждение.Ид
;

метод СоздатьОбсуждениеДляУведомленийПользователя(КлючОбсужденияДляУведомлений: Строка):
ОбсуждениеВзаимодействия

знч НазваниеОбсуждения: Строка = "" // Получение наименования обсуждения.
знч УчастникиОбсуждения: Массив<Ууид> = [] // Получение участников обсуждения.

знч ИдОбсуждения = СистемаВзаимодействия.СоздатьОбсуждение(
Название = НазваниеОбсуждения,
Участники = УчастникиОбсуждения,
Ключ = КлючОбсужденияДляУведомлений)
возврат СистемаВзаимодействия.НайтиОбсуждение(ИдОбсуждения)!
;

Добавление нового участника в существующее обсуждение

метод ДобавитьУчастникаВСуществующееОбсуждение(ИдОбсуждения: Ууид, Пользователь: Пользователи.Ссылка)
знч Обсуждение = СистемаВзаимодействия.НайтиОбсуждение(ИдОбсуждения)
если Обсуждение == Неопределено
возврат
;

пер ИдПользователя: Ууид? = СистемаВзаимодействия.ПолучитьИдПользователяВзаимодействия(Пользователь)
если ИдПользователя == Неопределено
возврат
;

пер СписокУчастников = новый Массив<Ууид>(Обсуждение.ИдУчастников)
СписокУчастников.Добавить(ИдПользователя)

СистемаВзаимодействия.РедактироватьОбсуждение(
ИдОбсуждения = ИдОбсуждения,
Участники = СписокУчастников,
Название = Обсуждение.Название)
;