Несколько источников данных на странице....

Несколько источников данных на странице....

1. Можно ли использовать несколько источников данных?
2. Как система определяет кто из них кто? Я так понимаю из настроек раздела в рабочем месте?
3. Как с источниками данных работать? То есть я хочу понять какие данные туда грузится будут, как этим управлять и т.д.

Нравится

1 комментарий

Здравствуйте, Александр!

"Шамуилов Александр" написал:1. Можно ли использовать несколько источников данных?

Несколько источников данных на одной странице использовать можно, для этого нужно инициализировать датасорс, то есть установить для него обработчики событий и прописать его в скрипте Init и PageLoadComplete. Пример можно найти в BaseEditPage или BaseGridPage.


2. Как система определяет кто из них кто? Я так понимаю из настроек раздела в рабочем месте?

Для датасорса раздела - действительно по настройке рабочих мест, но там он используется для групп раздела и деталей. Для реестра и карточки редактирования - в зависимости от того, какой источник данных выбран в невизуальном элементе DataSource на странице:


3. Как с источниками данных работать? То есть я хочу понять какие данные туда грузится будут, как этим управлять и т.д.

Список колонок, которые грузятся, определяется там же, на странице. При выборе источника данных автоматически подтягиваются все колонки. В случае необходимости ненужные можно удалить, за исключением колонки Id - она обязательно должна быть в реестре и для нее обязательно должен быть установлен признак "Всегда загружать данные", т. к. по ней фильтруется содержимое деталей.

Использование нескольких датасорсов на странице не рекомендуется - entity устроен таким образом, что через обратные связи можно вытянуть любую связанную информацию. То есть, Вы можете в основной датасорс добавить связанную информацию:


В случае, если информация не связана на прямую на уровне ключей СУБД, тогда можно обратиться к объекту из кода:

var entitySchemaManager = Page.Schema.SchemaManagerProvider.GetManager("EntitySchemaManager") as EntitySchemaManager;
var DocumentSchemaQuery = new EntitySchemaQuery(entitySchemaManager, "Document"); //название схемы объекта
DocumentSchemaQuery.AddColumn(DocumentSchemaQuery.RootSchema.GetPrimaryColumnName());
DocumentSchemaQuery.AddColumn("Account.Id"); // определяем каждую из колонок, с которыми мы будем работать
DocumentSchemaQuery.AddColumn("Type.Id");
DocumentSchemaQuery.AddColumn("Status.Id");
DocumentSchemaQuery.Filters.Add(DocumentSchemaQuery.CreateFilterWithParameters(FilterComparisonType.Equal, "Account.Id", new Guid(AccountId))); //фильтр запроса
DocumentSchemaQuery.Filters.Add(DocumentSchemaQuery.CreateFilterWithParameters(FilterComparisonType.Equal, "Type.Id", new Guid(TypeId)));
DocumentSchemaQuery.Filters.Add(DocumentSchemaQuery.CreateFilterWithParameters(FilterComparisonType.Equal, "Status.Id", new Guid(StatusId)));
var DocumentEntity = DocumentSchemaQuery.GetEntityCollection(UserConnection);
if (DocumentEntity.Count > 0)
{
	//делаем что-то с содержимым
}
else
{
	return false;	
}
 
return true;

В результате в Entity мы получаем необходимый объект, и можем с ним работать точно так же, как с объектом раздела.

Показать все комментарии