Posts Tagged ‘ Boyut

Dynamics Ax 2012′de bir boyut nasıl zorunlu hale getirilir.

Merhaba

Ax 2012 ile değişen mali boyut yapısında herhangi bir boyutun nasıl zorunlu hale getirilebileceğine değineceğim.  Öncelikle General Ledger / Seturp /Configure account structures formunu açtığınızda aşağıda resimde göründüğü gibi alanın boş bırakılmasıyla ilgi parametre mevcut.

Bu parametre sadece deftere nakil işleminde çalışıyor. Örneğin yeni bir müşteri tanımlıyorsunuz ve departman boyutunun zorunlu olmasını istiyorsanız bu tanım bu işlemi yapmıyor.  Standartta böyle bir tanım yapılabiliyor mu diye araştırdım bulamadım. Validasyon yazmaktan başka bir çözüm bulamadım. Alanlarında boyut (DefaultDimension ) olan herhangi bir tablonun ValidateWrite() metodunu aşağıdaki gibi değiştirelim.

public boolean validateWrite()
{
    boolean ret;
    ;
    ret = super();

    if(!this.checkDimValue(5637144850)) // Must be parametric
    {
        ret =  checkFailed("Departman boyutu boş bırakılamaz.") && ret;
    }
    return ret;
}

Tabloya gerekli metodu ekleyelim.

Boolean checkDimValue(RefRecId _refRecId)
{
    DimensionAttributeValue             dimAttrValue;
    DimensionAttributeValueSetItem      dimAttrValueSetItem;

    ;

    select firstonly dimAttrValueSetItem
    where dimAttrValueSetItem.DimensionAttributeValueSet == this.DimensionDefault
    join dimAttrValue
        where dimAttrValue.RecId == dimAttrValueSetItem.DimensionAttributeValue
        &&    dimAttrValue.DimensionAttribute   == _refRecId ;

    if(dimAttrValueSetItem.DisplayValue)
        return true;
    else
        return false;

}

Selamlar.

Dynamics Ax 2012′de bir müşterinin boyutlarını listelemek

Merhaba

Bu örnekte bir müşteri üzerinde tanımlanmış boyutları ve değerlerini listeleyen bir select cümleciği yazdım. Burada değer girilmemiş boyutlar gelmeyecektir. Hangi boyutların aktif olduğunu gösteren bir select ifadesini gelecek yazımda paylaşacağım.

static void FD_AddCustDefaultDim(Args _args)
{
    CustTable                           custTable;
    DimensionAttribute                  dimAttr;
    DimensionAttributeValue             dimAttrValue;
    DimensionAttributeValueSetItem      dimAttrValueSetItem;
    ;

    while select custTable
    where  custTable.AccountNum  == "1101"
    join dimAttrValueSetItem
    where dimAttrValueSetItem.DimensionAttributeValueSet ==custTable.DefaultDimension
    join dimAttrValue
         where dimAttrValue.RecId  == dimAttrValueSetItem.DimensionAttributeValue
         join dimAttr
         where dimAttr.RecId   == dimAttrValue.DimensionAttribute
    {
        info(strFmt("%1 ; %2 ; %3 ; %4", CustTable.AccountNum , CustTable.name(),
                        dimAttr.Name , dimAttrValueSetItem.DisplayValue));
    }
}

Çıktısı benim boyut kurulumuma göre şöyle oluyor.

Selamlar.

Dynamics Ax 2012′de DefaultDimension sorgu örnekleri

Merhaba

Şu yazımda BusinessUnit boyutunun değeri “20″ olan müşterileri listeleyen bir query yazmıştım. Bu query örneğinin select ifadesiyle yazılmış şeklini iki örnekle anlatacağım.

Bu örnekte gerekli bütün tabloları join’leyip istediğimiz sonuca ulaşıyoruz.

static void FD_AddCustDimensionRangeSelectAll(Args _args)
{
CustTable                           custTable;
DimensionAttribute                  dimAttr;
DimensionAttributeValue             dimAttrValue;
DimensionAttributeValueSetItem      dimAttrValueSetItem;
;

while select custTable
join dimAttrValueSetItem
where dimAttrValueSetItem.DimensionAttributeValueSet == custTable.DefaultDimension
&&    dimAttrValueSetItem.DisplayValue               == "20"
join dimAttrValue
where dimAttrValue.RecId == dimAttrValueSetItem.DimensionAttributeValue
join dimAttr
where dimAttr.RecId             == dimAttrValue.DimensionAttribute
&&    dimAttr.BackingEntityType == tableNum(DimAttributeOMBusinessUnit)

{
info(strFmt("%1 ; %2 ; %3 ; %4", CustTable.AccountNum ,
dimAttr.Name , dimAttrValueSetItem.DisplayValue , CustTable.name()));
}
}

Bu örnekte ise DimensionAttributeValue ve DimensionAttributeValueSetItem yerine Bir view kullanıyoruz.

static void FD_AddCustDimensionRangeSelect(Args _args)
{
CustTable                           custTable;
DimensionAttribute                  dimAttr;
DimensionAttributeValueSetItemView  dimAttrValueSetItemView;
;

while select custTable
join dimAttrValueSetItemView
where dimAttrValueSetItemView.DimensionAttributeValueSet == custTable.DefaultDimension
&&    dimAttrValueSetItemView.DisplayValue               == "20"
join dimAttr
where dimAttr.RecId       == dimAttrValueSetItemView.DimensionAttribute
&&    dimAttr.BackingEntityType == tableNum(DimAttributeOMBusinessUnit)

{
info(strFmt("%1 ; %2 ; %3 ; %4", CustTable.AccountNum ,
dimAttr.Name , dimAttrValueSetItemView.DisplayValue , CustTable.name()));
}
}

İki kodu da çalıştırdığınızda aynı çıktıyı alacaksınız.

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.