Порой может появиться необходимость найти значение поля типа «Категория», когда код этого поля находится в переменной.
Например, у нас есть модуль с Методом API, который принимает в качестве параметра строку с кодом валюты. В данном методе нужно осуществить поиск по элементам приложения «Договоры», у которого поле «Валюта» типа «Категория» с таким же кодом, как указанном в запросе.
Однако если мы попробуем найти в коде объект, у которого variants равен указанному коду из запроса, то компилятор будет отдавать ошибку типа как на скриншоте ниже:
Поэтому сперва нужно привести поле к нужному типу следующим способом:
Код:
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(req: FetchRequest): 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 => 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-запрос для поиска количества Договоров с валютой «Рубль»:
В ответе действительно получили информацию, что на стенде находится три Договора с валютой «Рубль».
Последнее редактирование: 31 авг 2023