2015-07-01 2 views
1

Моя задача - добавить поле в VendOpenTrans с определенным размером. Я добавил в свои DataSources таблицы VendOpenTrans DimensionAttributeValueSet, DimensionAttributeValueSetItem, DimensionAttributeValue и DimensionAttribute.Специфическое измерение на сетке VendOpenTrans

В их свойствах я создал соединения (join source) с InnerJoin LinkType (я попробовал все варианты здесь). Затем я добавлю поле в свою сетку из DimensionAttributeValueSetItem -> DisplayValue (имя поля).

И теперь в методе ExecuteQuery из VendOpenTrans добавить код:

public void executeQuery() 
{ 
    /*QueryBuildRange dimensionAttributeValueSetRange; 
    ; 
    dimensionAttributeValueSetRange = this.query().dataSourceTable(tableNum(DimensionAttribute)).addRange(fieldNum(DimensionAttribute, Name)); 
    dimensionAttributeValueSetRange.value('MyDimensionName'); 
    super(); 
} 

Конечным результатом этого является то, что у меня есть новый фильтр с моим измерением. Поэтому я не вижу в своих сетках записей, которые имеют пустое значение в этом измерении.

Дело в том, что я хочу добиться, чтобы показать значение «MyDimensionName», если он заполнен, но когда это не запись должна быть показана только с пустым значением ...

я трачу на это много много часов и я до сих пор не работает его ...

ответ

1

Выбор по конкретному аспекту в AX 2012 сложно без причины, но этот метод может быть полезен:

static void queryDimensionUpdate(LedgerDimensionAccount _dimension, Query _q, str _dataSourceName, FieldName _field = fieldStr(GeneralJournalAccountEntry,LedgerDimension)) 
{ 
    DimensionStorageSegment segment; 
    DimensionStorage  storage = DimensionStorage::findById(_dimension); 
    DimensionProvider  provider = new DimensionProvider(); 
    DimensionAttributeValue value; 
    Name name; 
    int segmentCount; 
    int s; 
    if (storage) 
    { 
     segmentCount = storage.segmentCount(); 
     for (s = 1; s <= segmentCount; s++) 
     { 
      segment = storage.getSegment(s); 
      if (segment.parmDimensionAttributeValueId()) 
      { 
       name = DimensionAttribute::find(DimensionAttributeValue::find(segment.parmDimensionAttributeValueId()).DimensionAttribute).Name; 
       //info(strFmt('%1: %2, %3', name, segment.parmDisplayValue(), segment.getName())); 
       provider.addAttributeRangeToQuery(_q, _dataSourceName, _field, DimensionComponent::DimensionAttribute, segment.parmDisplayValue(), name); 
      } 
     } 
    } 
} 

_dimension Учитывая набор с соответствующими значениями искать, скажем 011010-103-101--, это wil l обновить запрос _q, выбрав для указанных размеров (011010, 103 и 101 в примере), связанных с источником данных _datasourceName и полем _field.

Он делает это путем итерации _dimension сегментов для значений, а затем обновления запроса с использованием DimensionProvider. addAttributeRangeToQuery способ.

Смежные вопросы