Eyl 9, 2014 - X++    6 Yorumlar

CSV ile Veri Aktarımı

Bir önceki konumuzda kod ile Excelden Axapta tablolarına nasıl veri atabileceğimizden bahsetmiştik. Bu konumuzda ise veri aktarımını bir diğer yöntemi olan CSV ile axapta tablolarına nasıl veri atabileceğimiz göstereceğim. Bu iki konu yazım olarakta birbirine benzese de csv ye has bazı özellikler mevcut ihtiyaca göre hangisi ile işlem yapacağınızı siz belirleyebilirsiniz.

Önceki konuda olduğu gibi bu konuda da kendi oluşturduğumuz tabloya csv ile nasıl kayıt atabiliriz onu göreceğiniz.

CSV aktarım

CSV şablonu ekteki gibidir. Excelde oluşturup CSV yede çevirebilirsiniz.
Not: Real alanlar için csv formatın da virgül değil nokta ile ayrılması gerekmektedir. Eğer virgül ile ayırılırsa Axapta tabloya alırken virgülden sonraki işlemleri değerlendirmiyor.

CSV aktarım

static void Erkn_CSVileVeriAktarim(Args _args)
{
    Dialog              dialog  = new Dialog();
    dialogfield         dfile;
    AsciiIo             importFile;
    str                 filePath, fileNameOnly;
    filetype            type;
    container           record;
    str                 Delimiter = ";"; //CSV de alanların ayracı bu şekilde tanımlanır
    int                 totalRecords;

    ItemId              itemId;
    Name                name;
    Qty                 qty;
    SalesPrice          price;
    TransDate           transDate;

    TestCSVAktarim      testCSVAktarim;
    boolean             retValidate = true;
    str                 retMessage;
    str                 rel;

    dfile     = dialog.addField(extendedTypeStr(FileNameOpen), "Dosya seç", "Aktarılacak dosyayı seç");

    dialog.caption("Dosya seçimi");
    dialog.filenameLookupFilter(['csv','*.csv']); //Seçilecek dosyanın uzantıları ayarlanır

    if(!dialog.run())
    {
        return;
    }

    [filePath, fileNameOnly, type] = fileNameSplit(dfile.value());

    importFile = new AsciiIo(dfile.value(), 'R');

    if((!importFile) || (importFile.status() != IO_Status::Ok))
    {
        warning("Aktarılacak dosya açılamadı");
        throw(Exception::Error);
    }

    importFile.inFieldDelimiter(Delimiter); //CSV de alanların ayracı kullanımı

    if((!importFile) || (importFile.status() != IO_Status::Ok))
    {
        warning("Log dosyası açılamadı");
        throw(Exception::Error);
    }

    try
    {
        ttsbegin;

        record = importFile.read();

        while(importFile.status() ==  IO_Status::Ok)
        {
            record = importFile.read();
            if(!record)
                break;

            totalRecords = totalRecords + 1;

            itemId     = conPeek(record,1);
            name       = conPeek(record,2);
            qty        = conPeek(record,3);
            price      = conPeek(record,4);
            transDate  = str2Date(conPeek(record,5),2);

            testCSVAktarim.clear();
            testCSVAktarim.ItemId    = itemId;
            testCSVAktarim.Name      = name;
            testCSVAktarim.Qty       = qty;
            testCSVAktarim.Price     = price;
            testCSVAktarim.TransDate = transDate;
            testCSVAktarim.insert();
        }

        ttscommit;
    }
    catch(Exception::Error)
    {
        Throw(Exception::Error);
    }

    info(strFmt("Aktarılan kayıt sayısı: %1",totalRecords));
}

csv aktarım

Sonuçta gördüğünüz excelde olduğu gibi istediğimiz alanları tabloya yazdırmış olduk. Gelen alanları değişkene atamadan direk tablonun alanınada eşitleyebilirdik veya çeşitli manuel kontrollerden geçirebilirdik. Bu şekilde bu Jobu metoda veya classa ekleyerek istediğiniz yerde kullanabileceğiniz bir hale getirebilirsiniz.

Erkan OĞUZ

Önceki Konu->

<- Sonraki Konu

Benzer yazılar

6 Yorumlar

  • Eylül ayında paylaştığınız konuların hepsi çok işime yaradı kodların çalışır olması da uygulanabilmesini kolaylaştırıyor. Emeğiniz için teşekkürler.

    • Takip ettiğiniz ve yorumunuz için teşekkürler Filiz hanım. Size faydalı olduğuna çok sevindim. Konularımın takip edildiğini bildikçe ve fırsatım oldukça yeni konular paylaşmaya devam edeceğim.

  • Merhaba ,
    Bir sorum var :
    Formdaki alanda sağ click view detail seçimi yapıldığında ilgili detay formun açılması için ne yapmam gerekiyor?

    • Merhaba Filiz hanım,
      Kendi formunuzdan ilgili alana sağ tuş view detail yapabilmeniz için iki yöntem vardır.
      İlki ilgili alanınızın EDT sinde bir “Table Referans” belirlemeniz gereklidir ve bu tabloyla aynı isimde bir formunuz olması gerekmektedir.
      Diğer yöntem ise ilgili alanın metodlarından JumpRef metodunu override ederek daha önce koddan form çağırma yöntemleriyle kendi gideceğiniz formu açabilirsiniz.

      • teşekkür ederim.

  • Teşekkür ederim bu kodu çok aramıştım sayenizde buldum

Yorum Yazın...