...

Как сценарием в Бизнес-процессе получить данные из контекста приложения

Тема в разделе "Вопросы по ELMA365 Platform", создана пользователем Yarry, 23 окт 2024.

  1. Yarry

    Yarry Участник

    Здравствуйте, есть приложение Курс валют. Оно обновляется ежедневно через бизнес-процесс.
    Как в бизнес-процесс этого приложения получить контекст приложения без ручного выбора элемента приложения, просто из самого последнего элемента подтянуть контекст.
    В бизнес-процесс приходят входящие данные по какой валюте нужен курс (код валюты, например USD), надо сценарием в этот бизнес-процесс запросить данные из приложения (таблицу) для последующей автоматической выборки нужного курса. Автоматически не получается сделать запрос, только через ручной выбор элемента приложения. Выручайте, весь мозг сломал.
    Присвоение самого курса из таблицы в переменную сделал для выходных данных бизнес-процесса, а автоматический выбор элемента приложения никак.
  2. Yarry

    Yarry Участник

    Ниже код для решения.
    Код:
    
    // Функция получения данных из приложения объявленного в БП
    interface CursTableRow {
        
    chcode: string;
        
    curs: number;
        
    name: string;
        
    code: string;
        
    nom: number;
        
    unitrate: number;
    }

    interface 
    ExchangeRateTab {
        
    curs_table?: CursTableRow[]; // Массив строк таблицы
    }

    async function SearchTable(): Promise<void> {
        const 
    data1: any = Context.data.data; // Дата для поиска
       
        // Выполняем поиск записи по дате
        
    const tabu = await Context.fields.exchange_rate.app.search()
            .
    where((f, q) => q.and(
                
    f.__deletedAt.eq(null),
                
    f.data_zaprosa.eq(data1)  // Предполагаем, что это поле соответствует дате
            
    ))
            .
    first();  // Получаем первую запись, соответствующую дате
       
        // Проверяем, нашли ли мы запись
        
    if (tabu && tabu.data && tabu.data.curs_table) {
            const 
    curs_table = Context.data.curs_table; // Берём существующую таблицу из контекста

            
    if (!curs_table) {
                throw new 
    Error("Таблица Context.data.curs_table не инициализирована");
            }

            
    // Вставляем данные из найденной записи в Context.data.curs_table
            
    for (const item of tabu.data.curs_table) {
                const 
    newRow = curs_table.insert(); // Создаём новую строку в таблице
                
    newRow.chcode = item.chcode;       // Присваиваем код валюты
                
    newRow.curs = item.curs;           // Присваиваем курс
                
    newRow.name = item.name;           // Присваиваем название валюты
                
    newRow.code = item.code;           // Присваиваем код валюты
                
    newRow.nom = item.nom;             // Присваиваем номинал
                
    newRow.unitrate = item.unitrate;   // Присваиваем единичный курс
            
    }

            
    // Сохраняем обновлённую таблицу в контексте
            
    Context.data.curs_table = curs_table;
        } else {
            throw new 
    Error("Не найдены записи по дате или данные не содержат таблицу curs_table");
        }
    }

    // Функция для присваивания значения из таблицы в строковую переменную контекста БП
    async function SearchAndExtractData():  Promise<void> {
        
    // Получаем таблицу данных
        
    const cursTable = Context.data.curs_table;

        if (!
    cursTable || cursTable.length === 0) {
            throw new 
    Error("Таблица данных пуста или не определена");
        }

        
    // Проходим по каждой строке таблицы
        
    cursTable.forEach((row: any) => {
            
    // Проверяем, если chcode равен "коду валюты"
            
    if (row.chcode === Context.data.kod_valyuty) {
                
    // Извлекаем значение curs в переменную q2
                
    const q2 = row.unitrate;

                
    // Выводим или используем значение q2
                
    Context.data.kurs_valyuty= q2

                
    // Здесь можно добавить логику работы с q2, если требуется
            
    }
        });
    }
    Последнее редактирование: 24 окт 2024
  3. a.mironov

    a.mironov Техническая поддержка

    Добрый день!

    Для получения последнего созданного элемента приложения, используйте, пожалуйста, следующий код:

    Код:
    
     let app = await Context.fields.exchange_rate.app.search().sort("__createdAt", false).where(f => f.__deletedAt.eq(null)).first();