Добрый день!
Подскажите, можно ли получить в сценарии javascript город контрагента без использования функции callback?
Сейчас знаю только реализацию через callback, например:
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName : "Account"});
esq.addColumn("Id");
esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Id", account.value));
esq.getEntityCollection(function (result) {
if (result.success) {
var items = result.collection.getItems();
var City = [];
this.Terrasoft.each(items, function (item) {
City.push(item.get("Id"));
}, this);
callback.call(this, City);
}
}, this);
},
showCity : function () {
this.qetCity("ASP; C++; C#", function (City) {
var City = this.getIds("ASP; C++; C#", function (City);
});
}
Нравится
Если речь про карточку или реестр (на основе базовых), то есть способы). А в общем случае, как я понимаю, нельзя - т.к. запрос-ответ, асинхронность и все такое.
Но если можно, тоже было бы интересно узнать, как.
"Андросов Дмитрий" написал:Если речь про карточку или реестр (на основе базовых), то есть способы). А в общем случае, как я понимаю, нельзя - т.к. запрос-ответ, асинхронность и все такое.
Но если можно, тоже было бы интересно узнать, как.
А если о карточке, то какие есть способы?
Если это поле из текущего объекта (в карточке Контакта - Контакт)
this.get("КодПоля");
Если это справочное поле (в карточке Контакта - Контрагент)
//в атрибутах добавить/изменить атрибут этого справочника "Account": { lookupListConfig:{ //вроде бы влияет на данные, подтягиваемые из справочника при выборе columns: ["Country", "Owner"] }, //вроде бы влияет на данные, подтягиваемые из справочника при открытии ранее сохраненной записи columns: ["Country", "Owner"] } // в методах получить можно будет так var Account = this.get("Account"); if (Account && Account.value) { var Country = Account.Country; var Owner = Account.Owner; }
Если контрагент никак не связан с текущей карточкой, то на init, записать нужные города в переменные (все равно колбэками), но зато абстрагированно от остального кода) и использовать далее уже эти переменные.
Но, может, лучше разобраться с колбэками?
"Андросов Дмитрий" написал:Если контрагент никак не связан с текущей карточкой, то на init, записать нужные города в переменные (все равно колбэками), но зато абстрагированно от остального кода) и использовать далее уже эти переменные.
Но, может, лучше разобраться с колбэками?
У меня итак уже один callback вложенный в другой. Еще одно вложение делать делать пока не очень хотелось бы...
Вариант с атрибутами тоже не подходит.
Возможно вам подойдет вариант через Entity
var AccountId = "..."; //GUID контрагента
var select = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "Account"
});
select.addColumn('City.Name', 'CityName');
select.filters.add(select.createColumnFilterWithParameter(
Terrasoft.ComparisonType.EQUAL, "Id", AccountId, Terrasoft.DataValueType.TEXT));
select.getEntityCollection(function(result) {
if (result.success) {
var collection = result.collection;
collection.each(function(item) {
console.log(item.get("CityName")); !!! Ваши города
}, this);
}
}, this);
"Вильшанский Дмитрий" написал:вариант через Entity
хаха точно
"Вильшанский Дмитрий" написал:Возможно вам подойдет вариант через Entity
var AccountId = "..."; //GUID контрагента
var select = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "Account"
});
select.addColumn('City.Name', 'CityName');
select.filters.add(select.createColumnFilterWithParameter(
Terrasoft.ComparisonType.EQUAL, "Id", AccountId, Terrasoft.DataValueType.TEXT));
select.getEntityCollection(function(result) {
if (result.success) {
var collection = result.collection;
collection.each(function(item) {
console.log(item.get("CityName")); !!! Ваши города
}, this);
}
}, this);
Дмитрий, но в этом случае select.getEntityCollection(function(result) разве не является callback?
Александра, у нас запросы к базе данных происходит в асинхронном режиме (через callback можно получить результат). Вариант синхронного запроса у нас не используется из-за того, что это замедляет работу приложения.
"Вильшанский Дмитрий" написал:Александра, у нас запросы к базе данных происходит в асинхронном режиме (через callback можно получить результат). Вариант синхронного запроса у нас не используется из-за того, что это замедляет работу приложения.
Понятно. Спасибо за информацию.