Показать сообщение отдельно
Старый 09.11.2017, 06:57   #1  
trud is offline
trud
Участник
Лучший по профессии 2017
 
550 / 428 (16) +++++++
Регистрация: 07.06.2003
Как правильно ссылаться на атрибут(аналитику)
Навеяло предыдущей темой. А как правильно ссылаться на конкретный атрибут(допустим BusinessUnit).
я наверное сходу назову несколько виденных мной вариантов
  1. ссылка из параметров как новое поле в LedgerParameters (LedgerParameters. BusinessUnitRecId атрибут в виде RecId)
  2. табличка в виде тип аналитики(как енум) и код атрибута
  3. ссылка по имени DimensionAttribute::findByName("BusinessUnit"); и различные варианты – 3.1 имя вынесено в макрос или или тупо прописано. 3.2 вынесено в статический метод на DimensionAttribute возвращающий string
  4. поиск используя BackingEntityType == tableNum(DimAttributeOMBusinessUnit)
X++:
select firstonly dimensionAttribute             where dimensionAttribute.Type == DimensionAttributeType::ExistingList
            &&    dimensionAttribute.BackingEntityType == tableNum(DimAttributeOMBusinessUnit);
Каждый имеет следующие недостатки:
  • 1 -требует настройки, кроме того, каждая новая аналитика приводит к добавлению нового поля(но так сделан в стандарте Сайт)
  • 2 - не требует изменения схемы данных при добавлении новой аналитики, но все равно надо настраивать
  • 3.1-нет перекрестных ссылок.
  • 3.2-это мой фаворит в 2012, но в D365 непонятно где создавать этот метод чтобы другие о нем знали и использовали
  • Кроме того по всему п.3, запрос по имени не будет кешироваться аксаптой, т.е. в крупных загрузках такой способ может приводить к множеству мелких запросов к SQL
  • 4 - вообще неправильно, ибо можно создать несколько аналитик с одним BackingEntityType
Что вообще лучше использовать?
За это сообщение автора поблагодарили: S.Kuskov (2).