Posts Tagged ‘ Segmented Entry Control

How to modify MainAccount Lookup in Segmented Entry Control

Hi

One of my friend asked me  “How can i modify MainAccount lookup in Segmented entry control?”. I did not know how to do that. After some research i found LedgerDimensionAccountController class which controls Segmented Entry Control.  After some working i found a method named restrictQueryForMainAccounts() .


public static void restrictQueryForMainAccounts(QueryBuildDataSource
                                             _queryBuildDataSource)
{
    QueryBuildRange qbr;
    //--> FD
    QueryBuildRange qbrFD;
    // <-- FD

    str evalCriteria = strFmt('(%1.Type != %2)',
        _queryBuildDataSource.name(),
        queryValue(enum2int(DimensionLedgerAccountType::Reporting)));
    ;

    qbr = _queryBuildDataSource.addRange(fieldNum(DimAttributeMainAccount, Type));
    qbr.value(evalCriteria);
    qbr.status(RangeStatus::Hidden);

    //--> FD
    qbrFD = _queryBuildDataSource.addRange(fieldNum(DimAttributeMainAccount, value));
    qbrFD.value("3*");
    // <-- FD
}

If you open segmented entry control and lookup mainAccount before modification of this method you can see all MainAccounts .

If you modify the method you can see only data starts with “3″ as you can see blow image.

It may not be the correct way to do this but it works. I dont recommend to do such a modification at framework classes. If you have to, be very careful.

Until next time.

Dynamics AX 2012 Segmented Entry Control

Merhaba

Segmented Entry Control ax 2012 ile değişen finansal boyut yapısında hesap ve boyutları birlikte girebilme imkanı sağlayan bir yapıdır. Genel muhasebe günlüklerinde girişler bu şekilde yapılıyor. Bu yazımda yeni bir tablo ve form oluşturup bu kontrolün nasıl eklenebileceğini anlatacağım. Adım adım ilerleyelim.

  1. Öncelikle bir tablo yapalım ve EDT ‘si LedgerDimensionAccount olan  LedgerDimension isminde bir alan açalım. Bu işlemde EDT’yi tabloya sürüklediğinizde DimensionAttributeValueCombination tablosuyla ilişki kurmak için soru soracaktır. Bu ilişkinin kurulması şart. Eğer EDT ile ilgili bir sıkıntı çıkarsa elle de ekleyebilirsiniz.
  2. Bir form yapalım ve veri kaynağına oluşturduğumuz tabloyu ekleyelim.
  3. Tasarım kısmına bir Grid ekleyelim ve veri kaynağından LedgerDimension alanını sürükleyip Grid’e bırakalım. Otomatik olarak Segmented Entry Control oluşturulacaktır.
  4. Kontrolün çalışabilmesi için biraz kod yazmamız gerekiyor. Formun ClassDecleration ve init metodlarına aşağıdaki kodları ekleyelim.
  5. public class FormRun extends ObjectRun
    {
        LedgerDimensionAccountController ledgerDimensionAccountController;
    }
    
    public void init()
    {
        super();
        // hangi veri kaynağının hangi alanı için çalışacağını belirtiyoruz
        ledgerDimensionAccountController =  LedgerDimensionAccountController::construct(
                                            FDSegmentSEmple_ds,
                                            fieldStr(FDSegmentSEmple,LedgerDimension));
    }
    
  6. Veri kaynağındaki LedgerDimension alanına şu kodları ekleyelim
  7. public boolean validate()
    {
        boolean ret;
        ret = super();
        ret = ledgerDimensionAccountController.validate() && ret;
        return ret;
    }
    
    public void jumpRef()
    {
        super();
        ledgerDimensionAccountController.jumpRef();
    }
    
    public Common resolveReference(FormReferenceControl _formReferenceControl)
    {
        return ledgerDimensionAccountController.resolveReference();
    }
    
  8. Grid altında oluşan Segmented Entry Control’e de şu kodları ekleyelim.
  9. public void loadAutoCompleteData(LoadAutoCompleteDataEventArgs _e)
    {
        super(_e);
        ledgerDimensionAccountController.loadAutoCompleteData(_e);
    }
    
    public void loadSegments()
    {
        super();
        ledgerDimensionAccountController.parmControl(this);
        ledgerDimensionAccountController.loadSegments();
    }
    
    public void segmentValueChanged(SegmentValueChangedEventArgs _e)
    {
        super(_e);
        ledgerDimensionAccountController.segmentValueChanged(_e);
    }
    
  10. Şu anda kontrol hazır formu açtığınızda aşağıdaki gibi bir görüntü göreceksiniz.

Üsteki oka tıkladığınızda ana hesap ve boyut yapısını görebilirsiniz.

Ana hesabı ve boyutları bir arada girebileceğiniz bir yapı oluştu. Burada girdiğiniz verilerden DimensionAttributeValueCombination tablosunda bir kayıt oluşturulur ve o kaydın RecId si oluşturduğumuz tablodaki LedgerDimension alanına yazılır. Tablodan baktığınızda sadece RecId görürsünüz ancak formdan baktığınızda bu kontrol sayesinde bütün veriyi görebilirsiniz. Bütün bu işlemleri LedgerDimensionAccountConroller sınıfı sizin için yapar.

Eski alışkanlıklara biraz ters ancak yeni boyut yapısında veri girişini kolaylaştırması açısında bence kullanışlı bir yapı olmuş.

Selamlar.