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

Клиент-серверное взаимодействие в приложении

В приложениях на базе Платформы взаимодействие экранных форм с данными, хранящимися на сервере, реализуется с помощью источников данных. Альтернативой этого способа является использование метода executeAction() библиотеки FrontendCore.

Следующий пример демонстрирует вызов действия AddFile с параметром fileData с помощью метода executeAction().

const res = await executeAction('AddFile', fileData);

Обычно результат выполнения такой операции записывают в переменную состояния. Следующий пример демонстрирует присвоение значения переменной состояния с помощью метода setState().

setState({insertedFileId: res.add_contractsmanagement_file.insertedId});

Для обработки ошибки, которая может возникать при обращении к серверу, можно обернуть вызов метода executeAction() в конструкцию try..catch.

Следующий пример демонстрирует перехват ошибки, которая может возникать при вызове метода executeAction(), и анализ кода ошибки с последующим отображением текста для ошибки с кодом 501. Для ошибок с другими кодами отображается текст по умолчанию, определенный в коде экранной формы error.mdcontainer.

try {
const res = await executeAction('AddFile', fileData);
setState({insertedFileId: res.add_contractsmanagement_file.insertedId});
} catch (e) {
if (e.code === 'CMSService.S501') throw new Error('Нет прав на загрузку файла!');
throw e;
}

Подобные блоки кода могут использоваться в файле описания экранной формы, а именно:

  • в коде описания обработчиков событий, например, обработчика события нажатия кнопки OnClick() или обработчика события отправки данных на сервер OnSubmit();

  • в секции Scripts, например, в скрипте, который выполняется при загрузке экранной формы.

    Следующий пример демонстрирует описание секции Scripts с вызовом метода executeAction().

    Scripts={[
    async () => {
    try {
    const res = await executeAction('GetViewModel', {id: History.params.id});
    setState({MODEL: res.model});
    } catch (e) {
    if (e.code === 'CMSService.S501') throw new Error('Нет прав на просмотр карточки товара!');
    throw e;
    }
    },
    ]}