Похожая задача и похожая проблема ( 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 (те же коллбеки, только в более удобоваримом виде)