Posts Tagged ‘ DimensionDefault

Dynamics Ax 2012 DimensionProvider sınıfı

Merhaba

Ax 2012 ile finansal boyut yapısındaki bir çok değişiklikten eski yazılarımda bahsetmiştim. Boyut yapısındaki bu değişiklikler üzerine kodlarımızda boyutla işlem yapmamız gerektiğinde çok zorlanacağımız düşünmüştüm. Microsoft’taki arkadaşlarda aynı düşünceyi paylaşmışlar ki DimensionProvider sınıfını yazmışlar. Bu sınıf Query yapısında boyutla ilgili işlemleri yapmamızı kolaylaştırıyor ve bizi gereksiz bir çok Join ifadesinden kurtarıyor. Aşağıdaki örneği inceleyelim.

static void FD_AddDimensionRangeToCust(Args _args)
{
    Query                       query = new Query();
    QueryRun                    queryRun;
    QueryBuildDataSource        qbds;
    DimensionProvider           dimProvider = new DimensionProvider();
    CustTable                   custTable;
    ;

    qbds = query.addDataSource(tableNum(CustTable));

    dimProvider.addAttributeRangeToQuery(query, qbds.name(),
                        fieldStr(CustTable,DefaultDimension ),
                        DimensionComponent::DimensionAttribute,
                        "20",
                        "BusinessUnit", true );

    queryRun = new QueryRun(query);
    queryRun.prompt();

    while(queryRun.next())
    {
        CustTable = queryRun.get(tableNum(CustTable));
        info(strFmt("%1 ; %2 ; %3", CustTable.AccountNum ,
                    CustTable.name() , CustTable.DefaultDimension));
    }
}

Bu örnekte BusinessUnit boyutu 20 olan müşterileri listeleyen bir Query yazdım. DimensionProvider sınıfının bir çok metodu mevcut. İhtiyaç oldukça incelemek lazım.

Eski versiyonlarda bunu yazmak gayet  kolaydı çünkü boyut müşteri tablosunda dizi tipinde bir alan olarak bulunuyordu. Ax 2012′de ise tamamen farklı tablolarda tutulan bir veri artık. Bu yüzden 3-4 tablolu bir Join ifadesi yazmaktansa bu sınıfı kullanmak çok daha kolay.

Bu Query ifadesinin Select ile nasıl yazılabileceğini bir sonraki yazımda  ele alacağım.

Selamlar.

Dynamics Ax 2012′de diyaloğa boyut eklemek

Merhaba

Ax 2012′ de bir diyaloğa boyut ekleyip geri dönüşünü alabilmek için şöyle bir kod yazdım.

static void FD_AddDimToDialog(Args _args)
{
    DialogFieldDimensionDefaultingController    dfDialogFieldDim;
    DimensionDefaultingFieldSet                 dimensions;
    Dialog                                      dialog;
    ;

    dialog = new dialog();

    dialog.caption("Diyaloğa boyut eklemek");
    dfDialogFieldDim = dialog.addDimensionDefaultingController();
    dfDialogFieldDim.initWithValues(false,false,true,0,"Boyutlar");

    if(dialog.run())
    {
        dfDialogFieldDim.save();
        dimensions = dfDialogFieldDim.value();

        info(strfmt("DimensionAttributeValueSet RecId = %1 ",dimensions[1]));
    }
}

DialogFieldDimensionDefaultingController sınıfında farklı metotlar mevcut. Bunlar incelenip ihtiyaca göre kullanılabilir. DimensionDefaultingFieldSet dizi tipinde bir EDT 3 elemanı var. diğer 2 elemanı sizin sınıfta kullandığınız metoda göre doluyor. Birinci elemanında DimensionAttributeValueSet tablosunun RecId ‘si var.

Selamlar.

Dynamics Ax 2012′de formlara boyut eklemek ( Default dimension)

Merhaba

Bu yazımda eksi versiyonda çok kalay yaptığımız bir işlemi Ax 2012 nasıl yapabileceğimizi anlatacağım. Ax 2009′da bir tabloya boyut açmak ve onu formda göstermek gayet basit bir işlemdi. Dimensions EDT dizi olduğu için tabloya bu alanı açtığınızda dizinin boyutu kadar tabloda sütun oluşuyordu. Siz bu sütunları istediğiniz gibi formunuzda kullanıyordunuz.

Ax 2012 bu işlemin nasıl yapılabileceğini adım adım anlatmaya çalışacağım.

  1. Bir tabloya EDT’si DimensionDefault olan, ismide DimensionDefault olacak bir alan açın. Eğer EDT’yi sürükleyip bırakırsanız DimensionAttributeValueSet tablosuyla ilişki kurmak için onay sorusu çıkacaktır. Burayı onaylayıp ilişkiyi kurmalısınız. Eğer otomatik ilişkide bir sorun olursa elle de ekleyebilirsiniz. Kombinasyonlar DimensionAttributeValueSet tablosunda tutulacak.
  2. Bir form yapalım ve Veri kaynağına tablomuzu ekleyelim.
  3. Boyutları TabPage ile göstermek istiyorum. Group’ta kullanabilirsiniz. İki tane TabPage oluşturup, birincisine bir isim verip, veri kaynağından bazı alanları buraya ekleyelim.
  4. İkinci TabPage’e TabFinancialDimensions ismini verelim ve ekteki özellikleri tanımlayalım.
    • AutoDecleration     : Yes
    • NeedPermision        : Manual
    • Width                           : Column width
    • Height                          : Column height
    • HideIfEmpty             :  No
    • Caption                        : Boyutlar
  5. Kontrolün çalışabilmesi için biraz kod yazmamız gerekiyor. Formun ClassDecleration ve init metodlarına aşağıdaki kodları ekleyelim.
  6. public class FormRun extends ObjectRun
    {
        DimensionDefaultingController dimDefaultingController;
    }
    
    public void init()
    {
        super();
    dimDefaultingController = DimensionDefaultingController::constructInTabWithValues(
                                                              true,
                                                              true,
                                                              true,
                                                              0,
                                                              this,
                                                              tabFinancialDimensions,
                                                              "@SYS138487");
    
        dimDefaultingController.parmAttributeValueSetDataSource(FDSEmple_ds,
                                    fieldstr(FDSemple, DimensionDefault));
    }
    
  7. Veri kaynağına şu kodları ekleyelim
  8. 
    public void delete()
    {
        super();
        dimDefaultingController.deleted();
    }
    
    public void write()
    {
        dimDefaultingController.writing();
        super();
    }
    
    public int active()
    {
        int ret;
        ret = super();
        dimDefaultingController.activated();
        return ret;
    }
    
  9. tabFinancialDimensions alanına şu kodu ekleyelim.
  10. 
    public void pageActivated()
    {
        dimDefaultingController.pageActivated();
    
        super();
    }
    

Bu aşamalardan sonra işlem bitmiş oldu. Formu açtığınızda aşağıdaki gibi bir görüntüyü görebileceksiniz.

Selamlar.