Добрый день!
Подскажите, можно ли получить в сценарии 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);
});
}
Нравится
Если речь про карточку или реестр (на основе базовых), то есть способы). А в общем случае, как я понимаю, нельзя - т.к. запрос-ответ, асинхронность и все такое.
Но если можно, тоже было бы интересно узнать, как.
"Андросов Дмитрий" написал:Если речь про карточку или реестр (на основе базовых), то есть способы). А в общем случае, как я понимаю, нельзя - т.к. запрос-ответ, асинхронность и все такое.
Но если можно, тоже было бы интересно узнать, как.
А если о карточке, то какие есть способы?
Если это поле из текущего объекта (в карточке Контакта - Контакт)
[javascript]
this.get("КодПоля");
[/javascript]
Если это справочное поле (в карточке Контакта - Контрагент)
[javascript]
//в атрибутах добавить/изменить атрибут этого справочника
"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;
}
[/javascript]
Если контрагент никак не связан с текущей карточкой, то на 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 можно получить результат). Вариант синхронного запроса у нас не используется из-за того, что это замедляет работу приложения.
Понятно. Спасибо за информацию.