...

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

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

  1. Yarry

    Yarry Участник

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

    Yarry Участник

    Ниже код для решения.
    Код:
    
    // Функция получения данных из приложения объявленного в БП
    interface CursTableRow {
        
    chcodestring;
        
    cursnumber;
        
    namestring;
        
    codestring;
        
    nomnumber;
        
    unitratenumber;
    }

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

    async function SearchTable(): Promise<void> {
        const 
    data1any Context.data.data// Дата для поиска
       
        // Выполняем поиск записи по дате
        
    const tabu await Context.fields.exchange_rate.app.search()
            .
    where((fq) => 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((rowany) => {
            
    // Проверяем, если chcode равен "коду валюты"
            
    if (row.chcode === Context.data.kod_valyuty) {
                
    // Извлекаем значение curs в переменную q2
                
    const q2 row.unitrate;

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

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