...

Поиск объекта категории

Тема в разделе "Примеры сценариев", создана пользователем vyimova, 31 авг 2023.

  1. vyimova

    vyimova Участник

    Порой может появиться необходимость найти значение поля типа «Категория», когда код этого поля находится в переменной.

    Например, у нас есть модуль с Методом API, который принимает в качестве параметра строку с кодом валюты. В данном методе нужно осуществить поиск по элементам приложения «Договоры», у которого поле «Валюта» типа «Категория» с таким же кодом, как указанном в запросе.

    Однако если мы попробуем найти в коде объект, у которого variants равен указанному коду из запроса, то компилятор будет отдавать ошибку типа как на скриншоте ниже:

    [​IMG]

    Поэтому сперва нужно привести поле к нужному типу следующим способом:
    Код:
    
    let currency = Global.ns.all_documents.app.all_contracts.fields.currency.variants[input_currency as keyof typeof Global.ns.all_documents.app.all_contracts.fields.currency.variants].code;
    
    
    Итоговый код Метода API:
    Код:
    
    async function searchCurrency(reqFetchRequest): Promise<HttpResponse void> {
        const 
    response = new HttpResponse();
        try {
            if (
    req.query) {
                const 
    input_currency req.query?.['currency'] as string;
                
    let currency = Global.ns.all_documents.app.all_contracts.fields.currency.variants[input_currency as keyof typeof Global.ns.all_documents.app.all_contracts.fields.currency.variants].code;
                
    let contracts await Global.ns.all_documents.app.all_contracts.search().where(=> f.currency.eq(currency)).all();

                
    response
                    
    .status(200)
                    .
    json({
                        
    msg: `${contracts.length.toString()}`
                    })
                    .
    set('Content-Type''application/json');
            }
            else {
                
    // в случае отсутствия query
                
    response
                    
    .status(400)
                    .
    json({
                        
    msg: `Ошибка в синтаксисе запроса`
                    })
                    .
    set('Content-Type''application/json');
            }
        }
        catch (
    err) {
            
    // в случае возникновения какой-либо ошибки
            
    response
                
    .status(500)
                .
    json({
                    
    msg: `Внутренняя ошибка сервера: ${err}`
                })
                .
    set('Content-Type''application/json');
        }
        return 
    response;
    }
    В этом коде мы получаем код валюты из параметров запроса, находим соответствующий данному коду объект в системе, а затем находим Договоры с кодом, равному указанному. Далее в ответе возвращаем количество Договоров с указанной валютой.

    Создадим на стенде три Договора с валютой «Рубль» (код «rub») и два Договора с другими валютами.

    Протестируем в Postman и сделаем GET-запрос для поиска количества Договоров с валютой «Рубль»:

    [​IMG]

    В ответе действительно получили информацию, что на стенде находится три Договора с валютой «Рубль».
    Последнее редактирование: 31 авг 2023