Похожая задача и похожая проблема ( https://community.terrasoft.ru/questions/zapros-ne-vozvrasaet-znacenie ). Используя запрос:
var vip = 0; var recordId = item.get("Id"); var esqCase = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "Case" }); esqCase.addColumn("UsrVIPobr"); esqCase.getEntity(recordId, function(result) { if (result.success) { vip = result.entity.get("UsrVIPobr"); } }, this);
Получаю корректный Id (по базе находится нужное обращение с нужным id и полем UsrVIPObr). В карточке обращения есть логическое поле UsrVIPobr (1 или 0), но почему-то переменная vip не меняется. Прошу помочь разобраться.
Нравится
Быстров Сергей,
Добро пожаловать в мир async вычислений, коллбеков и промисов)
Вам надо весь код(который за скриншотом) перенести в коллбек-функцию getEntity. грубо говоря:
var vip=null; esq.getEntity(id, function(p) { //тут vip будет не null var vip=...; if (vip) {....} }, this); //тут vip все ещё null, следующие строки кода отработают ДО результата функции getEntity var a = ...; ....
То, что у вас скриншот обрывается на esq.getEntity - уже подозрительно :)
Вы используете переменную vip после выполнения getEntity?
Варфоломеев Данила,
Да, используется для сравнения с константой
Там же асинхронное выполнение. В getEntity добавляется функция, которая запустится где-то потом, а код пошёл выполняться дальше.
Быстров Сергей,
Добро пожаловать в мир async вычислений, коллбеков и промисов)
Вам надо весь код(который за скриншотом) перенести в коллбек-функцию getEntity. грубо говоря:
var vip=null; esq.getEntity(id, function(p) { //тут vip будет не null var vip=...; if (vip) {....} }, this); //тут vip все ещё null, следующие строки кода отработают ДО результата функции getEntity var a = ...; ....
А есть какие-то безболезненные способы заставить работать код в синхронном режиме?
Быстров Сергей,
нет. только упаковать всё в Terrasoft.chain (те же коллбеки, только в более удобоваримом виде)