Kamis, 13 November 2014

Financial Dimension AX 2012

Selama ini ane dibuat bingung dengan behavior nya Financial Dimension AX 12...
Ada beberapa table yang saling berkaitan.

Tapi akhirnya Alhamdulillah ane dah nemu code yang bisa membaca komponen Financial Dimension di AX 12.

berikut Kodenya ;

static void ShowVendDefaultDimensions(Args _args)
{
    VendTable                       vendTable;
    DimensionAttributeValueSet      dimAttrValueSet;
    DimensionAttributeValueSetItem  dimAttrValueSetItem;
    DimensionAttributeValue         dimAttrValue;
    DimensionAttribute              dimAttr;
    Common                          dimensionValueEntity;
    ;
    
    // Find our supplier
    vendTable = VendTable::find('3008');
    
    // Find the dimension value set that the vendor points to (for specifying the 
    // 'default' dimensions). This table is used as a sort of 'header' that the 
    // value set items (DimensionAttributeValueSetItem) records belong to.
    dimAttrValueSet = DimensionAttributeValueSet::find(vendTable.DefaultDimension);

    // Find all of the 'value set items' linked against the 'value set'  
    while select dimAttrValueSetItem
        where   dimAttrValueSetItem.DimensionAttributeValueSet   == dimAttrValueSet.RecId
    {
        // Find the dimension 'value' (DimensionAttributeValue) that the set item points to.        
        dimAttrValue        = DimensionAttributeValue::find(dimAttrValueSetItem.DimensionAttributeValue);
        
        // Find the underlying attribute.
        dimAttr             = DimensionAttribute::find(dimAttrValue.DimensionAttribute);

        // Use the helper class to obtain a reference to the underlying entity (can be anything)              
        dimensionValueEntity = DimensionDefaultingControllerBase::findBackingEntityInstance(
            curext(),
            dimAttr,
            dimAttrValue.EntityInstance);
        
        info(dimAttr.Name + ' ' + dimAttrValue.getValue());               
    }
}
 
lebih lengkapnya ada disini :
http://axinternals.blogspot.com/2011/09/default-dimension-storage-in-ax-2012.html 

Minggu, 09 November 2014

Melempar value dari form ke report

2 Cara berikut bisa dipakai untuk melempar nilai dari form ke report.
Cara 1 :
Dengan membuat object Query di AOT.

Pastikan kita mempunyai form dengan datasource yang sama dengan report.

Misalkan :
Form Employee, Datasource : EmplTable.
Report Employee, Datasource : EmplTable.

buat object Query dengan nama ex: Emplquery
Definisikan DataSource = EmplTable.
Definisikan Range = field2 yang akan menjadi parameter.
Save

Di Reportnya,
Buat Report dengan EmplReport.
Datasource EmplTable tadi delete dan ganti dengan object query EmplQuery.
di Method init
tambahkan code berikut

public void init()
{
    EmplTable empltable;
    super();

     if (element.args().dataset() == tablenum(EmplTable))
    {
        empltable = element.args().record();
    
        this.query().dataSourceName("[nama query kamu di report]").addRange(fieldnum(EmplTable , EmplId)).value(queryValue(empltable.emplid));
    }
}

Done untuk cara satu.

Cara 2 :

Kita bisa menambahkan method initfromcaller atau kamu bisa pakai nama method kamu sendiri.
(cara ini kita tidak perlu membuat object Query)
tambahkan code berikut di method initfromcaller
public void initFromCaller(Args _args)

{
EmplTable empltable;

QueryBuildDataSource qbds;

;

if (_args.caller())

{

    if (! _args.record().recId)

    throw error(strfmt("@SYS22338",funcname()));

    switch (_args.dataset())

    {

        case tablenum(EmplTable ):

        empltable= _args.record();

        //if (projmtotable.MTODocumentNo != ProjMTOTableAXS.MTODocumentNo)

        //throw error(strfmt("@SYS23396",funcname()));

        //break;

        //default:

        //throw error(strfmt("@SYS23396",funcname()));

    }

}



if (true || empltable.emplid)

{

qbds = element.query().dataSourceTable(tablenum(EmplTable));
SysQuery::findOrCreateRange(qbds, fieldnum(EmplTable, emplid)).value(empltable.emplid);
SysQuery::findOrCreateRange(qbds, fieldnum(EmplTable, Name)).value(empltable.name);
}

}

Done cara 2
bisa lihat lebih lengkap disini http://theaxapta.blogspot.com/2013/01/how-to-pass-values-from-form-to-report.html

Erorr CS1963 - An expression tree may not contain a dynamic operation.

Kali ini saya mendapatkan erorr dengan code CS1963, padahal sebelumnya saya sudah mendefinisikan 'var item in Model' di @foreach(var...