Dynamics AX CSV ve Excel Aktarım Sınıfları

AX developerları olarak her projede çok fazla csv-excel aktarımları yazıyoruz. Bundan 6 yıl önce bir projede o kadar çok yazdım ki, en sonunda canıma tak etti ve aşağıda size tanıtacağım sınıfları yazdım. O günden beride bu sınıfları kullanıyorum, gerektikçe yeni özellikler ekleyerek geliştiriyorum.

Özellikleri

  • Bu sınıflar ile aşağıdaki örneklerde de görebileceğiniz gibi dosyadan aktarım yazmak çok kısa sürüyor.
  • Her seferinde dialog dan dosyanın path’ini al, formatını kontrol et,
    döngüde dön dosyayı satır satır oku gibi kodları tekrar tekrar yazmaktan ve kod karmaşasından kurtuluyorsunuz.
  • Yazdığınız aktarımı csv’den excel’e çevirmek yada tam tersini yapmak 2 saniyenizi alıyor.
  • Aktarım sırasında kayıt sayısını algılayıp, otomatik progress bar çıkararak işlenen / kalan kayıt sayısını gösteriyor.
  • Hata alındığında, hatanın alındığı satır bilgisini otomatik dönüyor.
  • Başlangıç-bitiş vererek dosyadan sadece istediğiniz satırları alabiliyorsunuz.

İndirme

Sınıfları buradan indirebilirsiniz. AX 2012 ve
D365 F&O için direkt çalışmaktadır. AX 2009’a ise ufak düzenlemelerle aktatıp kullanabilirsiniz.

XPO içinde aşağıdaki gibi 3 sınıf göreceksiniz.

  • GvnImport
  • GvnImport_Csv
  • GvnImport_Excel

Bu 3 sınıfı AX’da içeri almanız yeterli. Ben çalıştığım her projede bu sınıfların prefixlerini, çalıştığımız partner’a göre düzenleyip aktarıyorum
(ObsImport, PRGImport, ETG, DMR vs…).

Kullanımı

Örnek olarak SalesPool tablosuna dosyadan kayıt aktaralım. Aşağıdaki resimdeki gibi 2 kolonlu bir dosya hazırlayın. Bunu ister csv ister excel olarak kaydedin.

  • İndirdiğiniz yardımcı sınıfları ax’da içeri aldıktan sonra yeni bir sınıf oluşturuyoruz.
  • Aktarım yapmak istediğimiz formata göre ilgili sınıfı extend ediyoruz. GvnImport_Csv yada GvnImport_Excel.
  • main method’unu oluşturup sınıfı çağırıyoruz. Gerekli parametreleri burada tanımlayabiliriz.
  • doEveryRow method’unu override edip, dosyanın her bir satırında yapmasını istediğimiz işlemi buraya yazıyoruz.

CSV Aktarımı

// Güven Şahin
// guvensahin.com
class GvnIMPSalesPoolCsv extends GvnImport_Csv
{
}

public static void main(Args _args)
{
    GvnIMPSalesPoolCsv  GvnIMPSalesPoolCsv;
    ;

    GvnIMPSalesPoolCsv = new GvnIMPSalesPoolCsv();
    GvnIMPSalesPoolCsv.parmCaption("Sipariş havuzları aktarımı - CSV");

    if (GvnIMPSalesPoolCsv.prompt())
    {
        // 2. satırdan başla. kolon başlığını okuma
        GvnIMPSalesPoolCsv.run(2);
    }
}

protected void doEveryRow()
{
    SalesPool   SalesPool;
    ;

    SalesPool.SalesPoolId   = this.getCol(1);
    SalesPool.Name          = this.getCol(2);
    SalesPool.insert();
}

Excel Aktarımı

// Güven Şahin
// guvensahin.com
class GvnIMPSalesPoolExcel extends GvnImport_Excel
{
}

public static void main(Args _args)
{
    GvnIMPSalesPoolExcel  GvnIMPSalesPoolExcel;
    ;

    GvnIMPSalesPoolExcel = new GvnIMPSalesPoolExcel();
    GvnIMPSalesPoolExcel.parmCaption("Sipariş havuzları aktarımı - Excel");

    if (GvnIMPSalesPoolExcel.prompt())
    {
        // 2. satırdan başla. kolon başlığını okuma
        GvnIMPSalesPoolExcel.run(2);
    }
}

protected void doEveryRow()
{
    SalesPool   SalesPool;
    ;

    SalesPool.SalesPoolId   = this.getCol(1);
    SalesPool.Name          = this.getCol(2);
    SalesPool.insert();
}

Parametreler

getColString olarak ilgili kolondaki değeri döner
getColBooleanBoolean olarak ilgili kolondaki değeri döner
getColDateDate olarak ilgili kolondaki değeri döner
getColIntInteger olarak ilgili kolondaki değeri döner
getColInt64Int64 olarak ilgili kolondaki değeri döner
getColRealReal olarak ilgili kolondaki değeri döner
parmFilePathOkunacak dosya yolu. Prompt method’u çağrılırsa, dialog çıkararak kullanıcıdan alınır.
parmCaptionPrompt method’unun çağırdığı dialogda gözükecek başlık
parmDialogTextPrompt method’unun çağırdığı dialogda, caption’ın altındaki text. Genellikle kolon sıralaması bilgisi girilir.
setUserDefinedRowNumBu parametre işaretli ise run method’una verilen start, end parametreleri geçersiz kılınır. Dialog’a okumaya başlanacak ve bitirilecek satır adında parametreler eklenir.
setCsvSeperatorCsv dosyasında veriler arasındaki ayraç tanımlanır. Varsayılan olarak noktalı virgüldür.
parmSheetNumExcelde okunacak sheet (sayfa). Varsayılan olarak ilk sheet’e okur.
getRowNumHata alınması vb durumlarda hatanın alındığı satır bilgisini döner
isRowEmptyİlgili satırın ilk kolonunda değer olup olmadığını kontrol eder.

Aktarımları birbirine çevirmek

Bunun için tek yapmanız gereken extend ettiğiniz sınıfı değiştirmek. Bu kadar basit. Eğer run method’u gibi methodları override ettiyseniz yada
setCsvSeperator gibi csv’ye, parmSheetNum gibi excel’e özel methodları kullandıysanız, bunları düzenlemeniz gerekiyor.


Sınıfları buradan indirebilirsiniz.


One thought on “Dynamics AX CSV ve Excel Aktarım Sınıfları

Semih için bir cevap yazın Cevabı iptal et