...

4.3. Взаимодействие клиентских и серверных сценариев

Тема в разделе "Руководство по настройке форм и сценариев", создана пользователем ELMA365, 16 авг 2023.

  1. ELMA365

    ELMA365 Moderator

    В виджетах и на формах приложений доступны два вида сценариев — клиентские и серверные.

    Клиентские сценарии выполняются на стороне клиента, то есть все операции выполняются в браузере пользователя и не нагружают сервер. В клиентских сценариях доступно всё, что находится в HTML-коде страницы.

    Серверные сценарии выполняются на сервере.

    Запросы к серверу через TS SDK можно отправлять как из клиентских, так и из серверных сценариев. Здесь нет существенных различий.

    Чтобы вызвать метод из серверных сценариев в клиентском сценарии, используйте конструкцию Server.rpc.серверная_функция():
    Код:
    
    // Серверный сценарий
    async function myServerFunc(): Promise<void> {
        const 
    res await fetch(Context.data.url)
        if (!
    res.ok) {
            return;
        }
        
    Context.data.json await res.json();
    }
    // Клиентский сценарий
    async function myClientFunc(): Promise<void> {
        
    await Server.rpc.myServerFunc();
    }
    Для передачи аргументов между клиентом и сервером нельзя напрямую использовать параметры функций. Чтобы передать параметры в серверный сценарий, необходимо использовать контекст. Серверный сценарий забирает текущее состояние контекста, производит обработку и возвращает весь контекст целиком. Если во время работы вы поменяете контекст локально, то по завершении работы серверного сценария установленные значения пропадут.

    Клиентский сценарий
    Код:
    
    async function myClientFunc(): Promise<void> {
        
    Context.data.input_str 'string';
        
    Context.data.input_number 123;
        
    Context.data.input_bool true;
        
    // Обязательно указывайте await, если нужно дальше работать с результатом выполнения
        
    await Server.rpc.myServerFunc()
        
    // Здесь уже можно обращаться к переменной с результатом
        
    if (Context.data.output_result) {
            
    // Полезный код
        
    }
    }
    Серверный сценарий
    Код:
    
    async function myServerFunc(): Promise<void> {
        
    let body = {"str":"""number":};
        if (
    Context.data.input_bool) {
            
    body.str Context.data.input_str;
            
    body.number Context.data.input_number;
        }
        const 
    res await fetch(url, {})
        if (!
    res.ok) {
            return;
        }
        const 
    json await res.json();
        
    Context.data.output_result json.Result;
    }
    Последнее редактирование: 24 авг 2023