Recently I got a chance to work on AX7 development and design an SSRS report to provide specific default dimension as a parameter and display its details in report. Microsoft made few changes in dimension framework and depreciated some objects with new classes.
First, we have to add/modify development model to “Dimensions”package reference. Next create contract class and create parm methods for the dimensions to display as a parameter in report, in my case i have to show two dimensions (Cost center and Company).
Global variables:
DimensionValue costCenterDimensionValue; DimensionValue companyDimensionValue;
parm methods:
[ DataMemberAttribute('CostCenterDimensionValue'), SysOperationLabelAttribute('Cost center'), SysOperationDisplayOrderAttribute('1') ] public DimensionValue parmCostCenterDimensionValue(DimensionValue _costCenterDimensionValue = costCenterDimensionValue) { costCenterDimensionValue = _costCenterDimensionValue; return costCenterDimensionValue; } [ DataMemberAttribute('CompanyDimensionValue'), SysOperationLabelAttribute('Company'), SysOperationDisplayOrderAttribute('2') ] public DimensionValue parmCompanyDimensionValue(DimensionValue _companyDimensionValue = companyDimensionValue) { companyDimensionValue = _companyDimensionValue; return companyDimensionValue; }
Next Create UIBuilder class and add following code:
DialogField dialogFieldCostCenterDimension; DialogField dialogFieldCompanyDimension; /// <summary> /// Provides a look-up interaction for the cost center dimension attribute lookup controls. /// </summary> /// <param name="_dimensionValueControl"> /// The <c>FormStringControl</c> enumeration value that triggers this event. /// </param> public void costCenterDimensionValueLookup(FormStringControl _dimensionValueControl) { if (_dimensionValueControl != null) { DimensionValueLookupHelper::lookupDimensionValues(DimensionAttribute::findByLocalizedName('Cost_Center', false, SystemParameters::find().SystemLanguageId), _dimensionValueControl); } } /// <summary> /// Provides a look-up interaction for the Company dimension attribute lookup controls. /// </summary> /// <param name="_dimensionValueControl"> /// The <c>FormStringControl</c> enumeration value that triggers this event. /// </param> public void companyDimensionValueLookup(FormStringControl _dimensionValueControl) { if (_dimensionValueControl != null) { DimensionValueLookupHelper::lookupDimensionValues(DimensionAttribute::findByLocalizedName('Company', false, SystemParameters::find().SystemLanguageId), _dimensionValueControl); } } /// <summary> /// Modifies a property of field control. /// </summary> protected void modifyProperty() { this.overrideDialogFieldAlwaysShowLookup(dialogFieldCostCenterDimension); this.overrideDialogFieldAlwaysShowLookup(dialogFieldCompanyDimension); } /// <summary> /// Override this method in order to initialize the dialog fields after the fields have been built. /// </summary> public void postBuild() { dialogFieldCostCenterDimension = this.bindInfo().getDialogField(this.dataContractObject(), methodStr(ssyPurchOrderLineContract, parmCostCenterDimensionValue)); dialogFieldCompanyDimension = this.bindInfo().getDialogField(this.dataContractObject(), methodStr(ssyPurchOrderLineContract, parmCompanyDimensionValue)); super(); } protected void modifyOverrideMethod() { this.overrideDialogFieldLookup(dialogFieldCostCenterDimension, methodStr(ssyPurchOrderLineUIBuilder, costCenterDimensionValueLookup)); this.overrideDialogFieldLookup(dialogFieldCompanyDimension, methodStr(ssyPurchOrderLineUIBuilder, companyDimensionValueLookup)); }
Next, I have to display dimension value with tag description in report, so i write following code in DP class to display this thing (may be there is other good alternative to display this value)
if (costCenterDimensionValue) { qbdsDimensionAttributeValueSetItemViewCostCenter = qbdPurchLine.addDataSource(tableNum(DimensionAttributeValueSetItemView)); qbdsDimensionAttributeValueSetItemViewCostCenter.relations(true); qbdsDimensionAttributeValueSetItemViewCostCenter.joinMode(JoinMode::ExistsJoin); qbdsDimensionAttributeValueSetItemViewCostCenter.addLink(fieldNum(DimensionAttributeValueSetItemView, DimensionAttributeValueSet), fieldNum(PurchLine, DefaultDimension)); qbrCostCenter = qbdsDimensionAttributeValueSetItemViewCostCenter.addRange(fieldNum(DimensionAttributeValueSetItemView, DisplayValue)); qbrCostCenter.value(SysQuery::value(costCenterDimensionValue)); } if (companyDimensionValue) { qbdsDimensionAttributeValueSetItemViewCompany = qbdPurchLine.addDataSource(tableNum(DimensionAttributeValueSetItemView)); qbdsDimensionAttributeValueSetItemViewCompany.relations(true); qbdsDimensionAttributeValueSetItemViewCompany.joinMode(JoinMode::ExistsJoin); qbdsDimensionAttributeValueSetItemViewCompany.addLink(fieldNum(DimensionAttributeValueSetItemView, DimensionAttributeValueSet), fieldNum(PurchLine, DefaultDimension)); qbrCompany = qbdsDimensionAttributeValueSetItemViewCompany.addRange(fieldNum(DimensionAttributeValueSetItemView, DisplayValue)); qbrCompany.value(SysQuery::value(companyDimensionValue)); }
Happy DAXing !!!!
