Author Archive

AX 2012 addQueryFilter ile addRange arasındaki fark

Merhaba

addQueryFilter ax 2012 ile gelen bir yenilik.

addQueryFilter ile addRange arasındaki farkı anlamak için öncelikle SQL’de bir kaç örnek yapalım.

Sql’de basit bir join .

SELECT * FROM CUSTTABLE
            OUTER JOIN CUSTTRANS ON CUSTTRANS.CUSTACCOUNT = CUSTTABLE.ACCOUNTNUM

Bu join’e hareketlerin para birimi EUR olanlar diye bir kriter vermek istersen 2 seçeneğimiz var.

SELECT * FROM CUSTTABLE
            OUTER JOIN CUSTTRANS ON CUSTTRANS.CUSTACCOUNT = CUSTTABLE.ACCOUNTNUM
                   AND CUSTTRANS.CURRENCYCODE = 'EUR'

veya

SELECT * FROM CUSTTABLE
            OUTER JOIN CUSTTRANS ON CUSTTRANS.CUSTACCOUNT = CUSTTABLE.ACCOUNTNUM
                WHERE  CUSTTRANS.CURRENCYCODE = 'EUR'

Birinci sql ifadesi öncelikle CustTable da bulunan bütün kayıtları getirir. Hareketlerden de sadece EUR olanları alır.

İkinci ifade ise aslında inner joinin yaptığı işi yapar ve sadece EUR tipinde hareketi olan müşterileri ve hareketlerini getirir.

İşte addQueryFilter ile addRange arasındaki fark bu iki sql ifadesi arasındaki farkla birebir aynıdır.

addQueryFilter where ifadesini , addRange ise and ifadesine karşılık gelir.

Ax ta bir örnekle inceleyelim,

static void Query_addQueryFilter (Args _args)
{
    Query                   query;
    QueryBuildDataSource    qbdsCustTable , qbdsCustTrans;
    QueryBuildRange         range;
    QueryFilter             filter;
    QueryRun                qRun;    

    custTable               CustTable;
    custTrans               custTrans;
    ;

    query = new Query();
    qbdsCustTable = query.addDataSource(tableNum(CustTable));
    qbdsCustTrans = qbdsCustTable.addDataSource(tableNum(CustTrans));
    qbdsCustTrans.joinMode(JoinMode::OuterJoin);
    qbdsCustTrans.relations(true);       

    query.addQueryFilter(qbdsCustTrans,  fieldStr(CustTrans, CurrencyCode)).value(SysQuery::value('EUR'));

   // qbdsCustTrans.addRange(fieldNum(CustTrans, CurrencyCode)).value(SysQuery::value('EUR'));  

    qRun = new QueryRun(query);
    while (qRun.next())
    {
        CustTable = qRun.get(TableNum(CustTable));
        custTrans = qRun.get(TableNum(custTrans));        

        info(strfmt("%1 : %2: %3: %4", CustTable.AccountNum ,
                                                CustTable.name(),
                                                custTrans.AmountMST,
                                                custTrans.CurrencyCode
                                                ));
    }

}

addQueryFilter koddan çok formalarda kullanılmak üzere geliştirilmiş bir özellik. Formlardaki veri süzme işleminde artık varsayılan olarak addQueryFilter kullanılıyor.

Selamlar.

AX 2012′de muhasebe günlüğü oluşturmak

Merhaba

Ax 2012′de muhasebe günlüğü oluşturmak için iki tane sınıf var. AxLedgerJournalTable ve AxLedgerJournalTrans.

Bu sınıflar kullanılarak kolayca günlük oluşturulabilir.

Örneğin:

static void createLedgerJournal(Args _args)
{
AxLedgerJournalTable   ledgerJournalTable = new AxLedgerJournalTable();
AxLedgerJournalTrans   ledgerJournalTrans= new AxLedgerJournalTrans();
container                   ledgerDimensions, offsetDimensions;
;
ledgerJournalTable.parmJournalName("GenJrn");
ledgerJournalTable.save(); // LedgerJournalTable oluştu.

ledgerJournalTrans.parmAccountType(LedgerJournalACType::Ledger);
ledgerJournalTrans.parmJournalNum(ledgerJournalTable.ledgerJournalTable().JournalNum);
ledgerDimensions = ["Şirket Hesabı","110.100.10"];
ledgerJournalTrans.parmLedgerDimension(AxdDimensionUtil::getLedgerAccountId(ledgerDimensions));
ledgerJournalTrans.parmAmountCurDebit(1000);
offsetDimensions = ["Şirket Hesabı","632.100.20"];
ledgerJournalTrans.parmOffsetLedgerDimension(AxdDimensionUtil::getLedgerAccountId(offsetDimensions));
ledgerJournalTrans.save(); // LedgerJournalTrans oluştu
}

Genel muhasebe boyut yapısı Ax 2012′ tamamen değişmiş durumda. Burada ana hesapları da boyutla birlikte veriyoruz.
Aslında ana hesaplarda boyut gibi çalışıyor denebilir.
Başka bir makalede boyutlarla ilgili bazı konuları da anlatacağım.
Selamlar.

AX 2012 ‘de lookup’ta çoklu kayıt seçimi nasıl yapılır

Merhaba

Ax 2012 ‘yi  incelerken  SysLookupMultiSelectCtrl isminde bir sınıfla karşılaştım . Bu sınıf sayesinde lookuplarda  çoklu kayıt seçilebiliyor.

Öncelikle lookupta görmek istediğiniz veri için bir query hazırlamalısınız. AOT de ki query düğümünü kullanarak yapabileceğiniz gibi kodla da oluşturabilirsiniz.

Biz CustTable için bir query hazırlayalım. Ayrıca tasarımında sadece stringEdit (adı CustAccount olsun ) bir alan olan form yapalım.

Bu aşamadan sonra forma kod yazmamız gerekiyor. Eklememiz gereken kodlar :

Read more

Dynamics AX 2012

Merhaba

Ax 2012 ile tanıştım. Yakın zamanda geliştirmelere başlamam gerekiyor. Bu yüzden yenilikleri öğrenmeye çalışıyorum.

Ax 2012 deki karşılaştığım yenilikleri fırsat buldukça paylaşacağım.

Bir kaçı şöyle:

Ax 2012 de geliştirme ortamı farklı bir ortam. CTR-Shift-W kısa yoluyla ulaşılan farklı bir ortamda geliştirmeleri yapacağız. Ax 2009 daki geliştirme modunun yeni bir pencerede açılmış haline benziyor. Tabi bir çok yenilik var.

Model yapısı gelmiş  güzel bir yapı. Versiyon kontrölu gibi çalışıyor. Biraz daha farklı.

EDT yapısında ufak değişiklikler var . İlişki tanımlama değişmiş. Bütün ilişkiler tablo üzerinden görünebilecek.

Full Text Index gelmiş.

Raporlar SSRS olmuş normal rapor düğümü var  ancak içinde hiç rapor yok. Bütün raporlar SSRS e taşınmış.

Güvenlik yapısı tamamen değişmiş.

Şimdilik gördüklerim bunlar. İlerleyen zamanlarda bu konuların ayrıntılarını da sizinle paylaşacağım.

Selamlar.

Kızım Zehra Betül 4 mayıs 2012 saat 11:35 te doğdu

Merhaba

İkinci kızım zehra betül 4 mayıs 2012  cuma günü saat 11:35 te dünyaya geldi.

İlk kızım hatice kübra sezeryan ile doğduğu için bu seferde sezeryan olması zorunluydu. Doktorumuz Hatice hanım ile 4 mayıs gününe karar verdik.

4 mayıs günü sabah erken kalktık. Hatice kübrayı kadriye teyzesine bıraktık. Annesinin sezeryandan hemen sonraki hallerini görmesini istemedik. Saat 8: 30 gibi hastaneye ulaştık. 503 numaralı odamıza yerleştik. Yanımızda eşimin ennesi ve babası vardı. Evrak işlerini hallettikten sonra eşimi doğum haneye alıp hazırlamaya başladılar.Üzerini Değiştirip ameliyat önlüğü giydi daha sonra bir süre bekledik acil başka bir sezeryan vardı o bitince bizimki başlayacaktı odamızda bir süre bekledikten sonra eşimi almaya hemşire geldi birlikte doğumhaneye indik. Cesaret vermeye çalıştım anlından öptüm ve doğumhaneye girdi. Hemşire odamızda beklememiz gerektiğini doğum olduğunda bebek odasında aranacağımızı ve ilk elbiselerini bebek odasına götürmemiz gerektiğini söyledi. Ben bir süre daha doğumhanenin kapısında bekledim sonra odaya çıktım.

Saar 12 ‘ye yaklaşırken bebek odasından aradılar önceden hazırladığımız elbise torbasıyla aşağıya indim. Hemşire demirci bebek diyerek kızımı bana gösterdi iki gözüde açıktı burnu çok belirgindi o heyecanla aklımda kalanlar bunlar. Hemşire elbiseleri aldı biz  onu giydireceğiz sonra sizde pencereden izleyebilirsiniz dedi.  Hemşire burda bir süre kalacak anne emeliyattan çıkıp kendine gelince telefon edin hemen bebeği getireceğiz dediler.


Ben odaya çıkıp eşimi beklemeye başladım 12:30 gibi eşimi getirdiler uyanıktı. Biraz konuştuk sonra bebek odasını aradım ve kızımı getirdiler. Annesini üsütüne bıraktı hemşire anne kokusunu alsın sakınleşsin diye.Saat 17 de büyük kızım hatice kübra kadriye teyzesi ve mehmet amcasıyla geldi elince çok güzel bir çiçek annesine koştu ve ilk sorusu kardeşim doğdumu ? Annesi evet kızım bak beşikte dedi ben aldım haticeyi kucağıma kardeşini gösterdim.  Hatice kübra biraz çekingen bir kız gelenler hemşiler birde annesini yatakta görünce biraz  üzüldü bizde kısa sürede kadriye teyzesi ve annemlerle eve gönderdik.

Cuma gecesi nispeten daha kolay geçti. Anenin henüz sütü gelmediği için bebek odasında beslediler bu arada  ilk kakasını ve çişini yaptı. İşitme testi , topuktan kan alma gibi işlemleri yaptılar. Cumartesi gününü hastenede gecirdik pazar öğlen hasteneden çıktık.

Bu arada hasteneye ziyaretimize gelen, telefon ve mesajla tebriklerini bildiren bütün sevdilerimize çok teşekkür ederiz.

İşte kısaca küçük kızım Zehra Betül ‘ ün doğum hikayesi.

İnşallah hayırlı bir evlat hayırlı bir insan olur.

Dynamics AX uygulama dosya uzantıları (Application file extensions)

Dynamics AX için bir çok dosya uzantısı mevcut. Bu uzantı isimlerinin belli bir mantığı vardır.

Dosyaların çoğu Ax 2009 için uygulama kalsöründedir. Yolu şöyle:

C:\Program Files\Microsoft Dynamics AX\50\Application\Appl\[your_application]

Uzantılar  3 karakterdir:

Birinci karakter dosyanın sahibini belirtir:

a: application (Uygulama)

k: kernel (Çekirdek)

İkinci karakter dosya içeriğini belirtir:

l: label

o: object

t: text

d: developer documentation

h: help

Üçüncü karakter dosya tipini belirtir:

d: data

i: index

c: cache

t: temporary

Bu mantiği kullarak dosyaları kolayca tanıyabiliriz.

Uygulama klasöründe:

Read more

Microsoft Dynamics AX 2009 Development Academy Eğitimi

Süre: 9-10-16-17-23-24-30-31 Mart/ 6-7-13-14-20-21 Nisan

Kurs Hakkında: Bu eğitim, katılımcıları en temel düzeyden başlayarak Dynamics Ax içinde geliştirme yapabilecek seviyeye getirmeyi amaçlamaktadır. Eğitim süresince Dynamics AX geliştirici adayının gerçek ortamda karşılaşabileceği örnekler incelenerek hedefe yönelik çalışmalar yapılmaktadır.

Katılımcı Profili: Dynamics AX geliştirici adayları.

Bu kursu bitirdiğinizde: Katılımcılar eğitim sonunda, Dynamics AX 2009’da temel düzeyde kod geliştirme özelliklerini ve geliştirme ortamı yeteneklerini öğrenmiş olacaklardır. Bu seviye katılımcılardan yapması beklenen geliştirmelerin büyük kısmının yapılabilmesi için yeterlidir.

Ön Gereksinim

  • Temel Microsoft Windows kullanım bilgisi
  • Programlama metodolojisi ve entegre geliştirme ortamları ile ilgili temel bilgiler (.net platformuna aşinalık)
  • Genel Microsoft Dynamics AX bilgi birikimi faydalı olmakla birlikte şart değildir.

Ek olarak tavsiye edilen ancak şart olmayan 280020 Introduction to Microsoft Dynamics AX 2009 eğitimi tamamlanabilir.

Eğitim İçeriği:

  • MorphX’e giriş
  • Dynamics AX’ın mimarisi ve temel kavramları
  • Kullanıcı yetkilendirme, Kullanıcı ara yüzleri (Formlar)
  • DataDictionary, Rapor düzenlemeleri
  • X++’a giriş, X++ kontrol cümlecikleri
  • Sınıflar ve nesneler
  • Veri tabanına erişim, İstisna yönetimi
  • Geliştirme araçları
  • Veri işleme (IO, FileIO, XML, Microsoft® Excel® )
  • Sınıflar, raporlar ve formlar, Numara serileri

Ücrete dahil olanlar: Eğitimin son günü (14.gün) her bir kişi için bir defalık sınav hakkı.

Eğitime katılacak her bir katılımcı için 10 TL değerinde yemek kuponu.

Her bir katılımcı için (pdf formatında) kitap.

Ücret: 1800 USD + KDV

Yer: Datatraining (ETG), İnönü cad. Çetinkaya İş Merkezi No: 92 Kat:5 Kozyatağı / İstanbul

Tel: 0(216) 380 60 00

Dil: Oturum Türkçe olarak sunulacaktır.

Eğitmen: Fatih Demirci

Kayıt için: Banu Tozanoğlu (banu.tozanoglu@datatraining.net)

Dynamics Ax’ ta Jobs

Merhaba

Jobslar tek başına çalışabilen kod parçaçıklarıdır.  Genelde biz axcılar joblarda kod testlerini ve veri güncellemelerini yaparız. Jobları uygulamanın içinde pek kullanmayız. Doğrusuda budur. Eğer uygulamada kullanılacak bir işse sınıf yazmak daha mantıklı olacaktır.

Joblar genelde açıldıktan sonra çalıştır denilerek kullanılır.  AOT den jobın üzerine gelip Aç derseniz  job çalışacaktır. Bu bazen tehlikeli olabilir. Örneğin bir seferlik  veri güncellemesi yapması gerekn  bir job yazdınız. Başka birisi joba sağ tıklayıp Aç dediğinde tekrar çalışacak ve verinizi bozacaktır. Bu durum için yapılması gereken işiniz bittikten sonra job içindeki update yapan kodlarınızı yorum satırı halıne getirmektir. Jobın kodunu görmek için üzerine çıft tıklamak veye sağ tıklayıp düzenle demek gerekir.

Eğer istersek jobları kod içinden de çalıştırabiliriz.

Örneğin  mesaj veren aşağıdaki gibi bir  job olsun ve bunu koddan çağırıp mesajı görelim;

Read more

Dynamics ax’ta problem çözme yöntemleri

Merhaba

Bu gün sizlerle ax’ta karşılaştığım problemleri çözmek için başvurduğum temel bazı adımları paylaşacağım. Bazı durumlarda tek bir adım da sorunu çözebilir bazen bu adımlardan oluşan bir kombinasyonla kullanmak gerekebilir. Belli bir tecrübeden sonra  sonun nerden kaynaklandığını genelde kestirebilirsiniz.

Maddelerimiz şöyle:

  1. Uygulamayı derleyin.
  2. Kodu tekrar gözden gecirin. Basit hatalar olabilir.
  3. Yeniden deneyin. Çalışıyorsa sorun yok. :)
  4. Bir arkadaşınızdan yardım isteyin. Farklı bir bakış açısı işe yarayabilir.
  5. Türetilmiş  sınıfar varsa ileriye doğru derleyin. Read more

setRFix() ve setLFix() metodları

Merhaba

setRFix() ve setLFix() metodlarını belli bir formatta string oluşturmak istediğimizde kullanırız. Bu metodlar sayesinde belli sayıdaki karakteri bir tekstin ister sağına  ister soluna ekleyebilirsiniz. Bir job ile nasıl kullanıldığını görelim.


static void strRLFix(Args _args)
{
int     i = 1;
str     padded;
str     finalResult;
;
padded = strRFix(int2str(i), 5, "0");
finalResult = strFmt("NUM-%1", padded);
info(finalResult);
padded = strLFix(int2str(i), 5, "0");
finalResult = strFmt("NUM-%1", padded);
info(finalResult);
}

Çıktısı :

NUM-00001
NUM-10000

Selamlar.