На клиенте нужно вставить запись в некоторую таблицу, одним из значений параметров есть Id записи контакта, его нужно получить из таблицы Contact запросом.
Например, вот так:
setLoggerActivatorParameter: function(clinic) {
var loggerActivatedById;
if (this.Ext.isEmpty(clinic)) {
return loggerActivatedById;
}
var esqContact = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "Contact"
});
var esqAccountFilter = esqContact.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
"Account", clinic.value);
var esqDataLoggerActivatorFilter =
esqContact.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
"DataLoggerActivator", true);
esqContact.filters.add("esqAccountFilter", esqAccountFilter);
esqContact.filters.add("esqDataLoggerActivatorFilter", esqDataLoggerActivatorFilter);
esqContact.getEntityCollection(function(result) {
if (result.success && result.collection.getCount()) {
loggerActivatedById = result.collection.first().get("Id");
return loggerActivatedById;
}
}, this);
}
Но из-за ассинхроности, пока отработает функция setLoggerActivatorParameter, то запись уже добавится в таблицу без значения поля loggerActivatedById.
Вопрос в том, каким образом можно реализовать такую функциональность, чтобы получать значение поля loggerActivatedById до того, как будет добавлена новая запись в таблицу.
Интересно также, есть ли другие варианты решения данной задачи, кроме запуска процесса, в котором будет реализована данная функциональность.
Нравится
Из других вариантов:
1) сервис
2) использовать chain на клиенте (реализация гуглится по форуму или тут)
3) кривой, но рабочий (более-менее) способ — делать тот же самый esq только при загрузке страницы, где-нибудь в init-е. Ну и складировать результат в переменную. Потом в обработчике уже к переменной обращаться.