VendOpenTrans网格上的特定维度

时间:2015-07-01 08:50:12

标签: axapta dynamics-ax-2012 dimensions

我的任务是在VendOpenTrans中添加一个具有特定Dimension的字段。我在VendOpenTrans表中添加了我的DataSources DimensionAttributeValueSet,DimensionAttributeValueSetItem,DimensionAttributeValue和DimensionAttribute。

在他们的属性中,我使用InnerJoin LinkType进行了连接(连接源)(我在这里尝试了所有选项)。然后我在DimensionAttributeValueSetItem - >的网格上添加了一个字段。 DisplayValue(字段名称)。

现在在VendOpenTrans的ExecuteQuery方法中,我添加了一个代码:

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

最后的结果是我有一个带维度的新过滤器。因此,我在网格记录中看不到此维度中的空值。

我想要实现的目的是显示" MyDimensionName"的价值。如果它已经填满但是当它没有记录时应该只显示一个空值......

我花了这么多个小时,但我仍然没有解决这个问题......

1 个答案:

答案 0 :(得分: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--,则会更新查询_q,选择给定的尺寸(011010,103和101)示例)与数据源_datasourceName和字段_field相关。

通过对值_dimension段进行迭代,然后使用DimensionProvideraddAttributeRangeToQuery方法更新查询来实现此目的。