...

Получить id шалона процесса через экземпляр.

Тема в разделе "Примеры сценариев", создана пользователем Valentin Lysenko, 14 май 2025.

  1. Valentin Lysenko

    Valentin Lysenko Активный участник

    При разработке одного решения мне понадобилось получить id процессов в цикле.
    В свойствах самого процесса такого параметра нет, поэтому пришлось изобрести способ его получения.
    Способ работает только если у процесса есть экземпляры.
    Делюсь решением:
    Код:
    
    //Получаем экземпляр процесса. Должны быть запущенные экземпляры. Если таких нет - то в выборку нам включать его не надо
    let example await Imports!.ns_name!.app.app_name.processes.process_name._searchInstances().first()
     if (!
    example){
        return
     }
    let instance_id example?.__id
    //Получаем по API экземпляр
        
    const myHeaders = {
            
    Authorization: `Bearer ${token}`,
        }
        const 
    requestOptions = {
            
    method"GET",
            
    headersmyHeaders,
            
    redirect"follow"
            
    };
    const 
    response await fetch(`${Context.data.baseUrl}/pub/v1/bpm/instance/${instance_id}/get`, requestOptions).then((response) => response.json())
    let json await response.json()
        
    console.log(json)
        
    console.log(json.data.__template.id//id процесса, по которому известен код
        
    console.log(json.data.__template.code)
        
    console.log(json.data.__template.name)
  2. fokin

    fokin Новичок

    Можно также использовать вместо API-метода `GET /pub/v1/bpm/instance/{id}/get)` встроенный метод TSSDK – `_searchInstances()`. Это позволит получить данные экземпляра процесса без HTTP-запросов и без токена авторизации. Например, чтобы получить ID шаблона процесса (__templateId):

    ```
    // Запускаем БП и получаем ID экземпляра (instanceId/historyId)
    const historyId = await path.processes.bp_test.run({
    app_test: app
    });
    // Ищем этот экземпляр, чтобы достать значения полей
    const templateId = (await path.processes.bp_test._searchInstances().where(i => i.__id.eq(historyId)).first())?.data?.__templateId;
    if (!templateId) throw Error('❌ Шаблон процесса не найден');
    // Логи (опционально)
    logs = '';
    logs += `ℹ️ ID шаблона процесса: ${templateId}\n`;
    logs += `ℹ️ Запущен экземпляр БП: ${historyId}\n`;
    Context.data.str_logs += logs;
    ```