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

Создание GraphQL-подписки

Формулировка задачи

Отображать обновленные данных на экранной форме приложения для всех пользователей приложения при изменении данных одним из пользователей.

Предварительные требования

Создан проект ProjWithSubscription. Настроена модель безопасности.

В разрабатываемом проекте создан класс Class.

Разработана экранная форма ClassPage с компонентом DataGrid для отображения данных класса Class. Для экранной формы ClassPage настроены сущности:

  • действие getClass для получения данных класса Class;
  • источник данных на основе действия getClass;
  • параметры маршрутизации /SomeApp, SomeApp.

Проект опубликован. В базу данных добавлены данные.

Рекомендуемое решение задачи

Рекомендуемый подход к решению описанной задачи включает следующие шаги:

  1. Включение подписки на класс, изменение данных которого нужно отслеживать.

    Откройте окно настройки класса Class и установите флажок Формировать подписки GraphQL.

  2. Создание действия для обработки события изменения данных класса.

    В то время, когда файл описания экранной формы ClassPage открыт, создайте действие типа GraphQL с именем Subscribe_to_Class и в окне настройки действия установите флажок GraphQL-подписка.

    Откройте окно Конструктор GraphQL и введите следующий текст GraphQL-запроса:

    subscription sub1 {
    ProjWithSubscription_class {
    operationType
    idType
    projectName
    className
    }
    }

    Каждое сообщение об изменении данных класса Class будет содержать информацию о типе операции operationType (INSERT, UPDATE, DELETE), типе уникального идентификатора класса idType, имени проекта projectName и имени класса className.

  3. Вызов метода, реализующего подписку GraphQL на созданное действие.

    В то время, когда файл описания экранной формы открыт, перейдите в кодовый режим Редактора Форм и в секции Scripts добавьте следующий блок кода:

    Scripts={[
    () => {
    const handleReq = async (param) => {
    console.log('handle req', param); // вывод уведомления об изменении данных класса
    const dataSourceTest = getDataSource("getClass");
    await dataSourceTest.load(); // вызов действия для обновления данных в таблице с данными
    }
    const handleClose = (message) => {
    console.log('handle close', message); // вывод сообщения о разрыве соединения
    }
    const extraParams = {
    onMessage: handleReq,
    onClose: handleClose
    }
    executeAction('Subscribe_to_Class', extraParams);
    }
    ]}