Etiketler ‘ axapta

X++, .NET Framework alt yapısını mı kullanacak?

Şubat 13, 12 Yazan: akın

Microsoft’un ERP sektörü için yatırım yaptığı Axapta, bildiğiniz üzere X++ dilini kullanıyor fakat Microsoft, Dynamics Ax 2009 ve 2012′de (giderek artan oranda) bazı işlemleri önce Visual Studio’da geliştirtiyor daha sonra geliştirilen kodları Axapta’ya aldırıyor. Bu durumda akla bazı sorular geliyor. “Acaba Microsoft ileride X++’ı .NET çatısı altına mı alacak?”

Bu sorunun üzerine gidip bazı araştırmalar yaptığımda ise yakın gelecekte Axapta’nın development kısmının Visual Studio’ya gömüleceğini öğrendim fakat bu bilgi şu an için sadece söylentiden ibaret.

Biraz daha araştırdığımda ise aslında bunun bir söylenti olmadığını, muhtemelen bir kaç sene içerisinde X++’ı .NET tabanlı olarak Visual Stuio’da geliştireceğimizi anladım. Nereden bu kanıya vardığımı merak ederseniz, şöyle söyleyeyim, elbette bunlar benim bazı bilgileri yorumlamama dayanıyor.

Yalnız,

Bu bilgiler hakkında birşeyler söylemek istiyorum. Bu yorumuma neden olan bilgiler X++’ın bir sonraki sürümünü geliştiren kişilerin röportajlarına dayanıyor. Örneğin progamın başı Peter Villadsen, X++’ı MSIL’e çevirmek için uğraştıklarını belirtti.

MSIL (Microsoft Intermediate Language) bildiğiniz gibi .NET Framework’ü ile yazılan kodların derlenmesi sonucu çevrildiği dildir. Kısaca .Net Framework ile çevrilen diller makina diline değil de MSIL’e çevrilir. Bu sayede .NET Framework alt yapısı kullanan tüm diller ortak bir platform üzerinde birleşmiş oluyor. Birbirlerine çevrimleri mümkün kılınıyor.

Fazla uzatmadan,

X++’ın MSIL diline çevrilmesi, onun .NET Framework altyapısını kullanacağı anlamına geliyor fakat belirtilene göre bu işlemin gerçekleşmesi sonucu ciddi performans sıkıntıları ortaya çıkıyormuş. Bu durumda x++’ın hemen geçemeyeceğini ama zamanla .NET altyapısı üzerine oturacağını söyleyebiliriz.

[del.icio.us] [Facebook] [Fark] [Faves] [Furl] [Google] [MySpace] [MyWeb] [Newsvine] [Reddit] [Slashdot] [StumbleUpon] [Windows Live] [Yahoo!] [Email] 

Axapta Action Menu Item kullanarak Enterprise Portal’de yönlendirme sağlamak

Şubat 08, 12 Yazan: akın

Enterprise Portal’de bir işlevi geliştirmeye çalışırken Axapta’da yazdığınız class’ları çağırmanız gerekebilir. Bu işlevi gerçekleştirmek için birden fazla yönteminiz var. Direk Bussiness Connector ile çağırabileceğiniz gibi, Proxy kullanarak da çağırabilirsiniz. Bu yazıda ise Action Url Menu Item ile bir işlevi gerçekleştirdikten sonra yönlendirmenin nasıl yapılacağını göstereceğim.

Aşağıdaki kodu kullanarak, Axgridview’den seçmiş olduğunuz satırın ActionMenuItem’a parametre olarak gitmesini sağlayabilirsiniz.

 protected void Button1_Click(object sender, EventArgs e)
    {
        DataSetViewRow dsvr;

        AxActionMenuItem projMenuItem = new AxActionMenuItem("PMProjTimesheetView");
        Proxy.Args args = new Proxy.Args(this.AxSession.AxaptaAdapter);
        
        dsvr =this.AxDataSourceProjListTmp.GetDataSet().DataSetViews["ProjTable"].GetCurrent();
        IAxaptaRecordAdapter projTable = dsvr.GetRecord();

        
        args.record = projTable;
        projMenuItem.Run(args);
    }

ActionMenuItem’a ProjTable’da seçili kaydı gönderdik. Aşağıdaki kodu ise ActionMenuItem’ın ilişkili olduğu class’ta kullanabilirsiniz.

static void main(Args args)
{
    ProjTable           projTable;
    Weblink             link;
      ;
    if (args.dataset() == tablenum(ProjTable))
    {
        projTable = args.record();
        link = new Weblink();
        link.record(projTable);
        link.menufunction(new WebUrlMenuFunction(weburlitemstr(EPProjTableInfo)));
        webSession().redirect(link);
    }
}

[del.icio.us] [Facebook] [Fark] [Faves] [Furl] [Google] [MySpace] [MyWeb] [Newsvine] [Reddit] [Slashdot] [StumbleUpon] [Windows Live] [Yahoo!] [Email] 

Enterprise Portal’dan Axapta Datasource’a Veri Göndermek

Şubat 01, 12 Yazan: akın

Enterprise portal’da proje geliştirirken bildiğiniz gibi gerekli datasource ları Axapta tarafında oluşturuyorsunuz. Tabloya kayıt edilirken bazı başka tablolara da kayıt atmanız gerekebilir. Bu durum da datasource’a codebehind’tan context ile ilgisi olmayan bir veri göndermek isteyebilirsiniz. Aşağıdaki kod parçacıkları sizin ihtiyacınızı karşılayacaktır.

 protected void Page_Init(object sender, EventArgs e)
    {
        

        // Event Handler olusturulur.
        this.AxDataSource1.CreatingDataSetRun +=new EventHandler<CreatingDataSetRunEventArgs>(AxDataSource1_CreatingDataSetRun);
    }

    void AxDataSource1_CreatingDataSetRun(object sender, CreatingDataSetRunEventArgs e)
    {
         
        string book = "ISBN-00034454";

        // book degiskeni dataset parametresi olarak gönderilir.
        e.DataSetRunArgs.parm = book;

    }

Yukarıda gönderdiğiniz değişkeni kullanmak için ise Axapta’da ilgili datasource’da aşağıdaki gibi bir kod kullanabilirsiniz.

public void initValue()
{
    super();

    CustomerDetails.ISBN=element.args().parm();
}

Benzer yöntemle enum veya gerekli herhangi bir veriyi de gönderebilirsiniz.

[del.icio.us] [Facebook] [Fark] [Faves] [Furl] [Google] [MySpace] [MyWeb] [Newsvine] [Reddit] [Slashdot] [StumbleUpon] [Windows Live] [Yahoo!] [Email] 

Enterprise Portal’da AxGroup Lookup’ını Filtreleme

Ocak 28, 12 Yazan: akın

Enterprise Portal’da bildiğiniz gibi formları oluşturmak için sayfaya öncelikle Datasource daha sonra Axform ve o Axform’un içine Axgroup eklersiniz.

Daha sonra Axgroup’ın alanlarını seçerek bu formun güncelleme için mi yoksa yeni kayıt için mi kullanılacağını belirlersiniz.

Belirlediğiniz alanlarda bir Lookup var ise, sayfayı publish ettiğinizde bu lookup değeri dropdownlist olarak gözükecek ve siz değer seçmek için tıkladığınızda ise postback olup ajax ile gerçek değerleri getirecektir.

Bu gelen değerler aslında o EDT’deki tüm satırlardır. Bir noktada bu değerleri filtrelemek ve sayfaya göre getirmek isterseniz aşağıdaki adımları ve kodları kullanabilirsiniz..

Önce, Axform’un OnLookup özelliğine yazacağımız methodun ismini veriyoruz: OnLookup=”MainContact_Lookup”>

Daha sonra codebehind’a ise aşağıdaki kodu eklemeniz yeterli.

    protected void MainContact_Lookup(object sender, AxLookupEventArgs e)
    {

        try
        {
            AxLookup lookup = e.LookupControl;
            int _OBSRBOEPIncomeExpenseRequestTableNum = TableMetadata.TableNum(this.AxSession, "EmplTable");

            using (Proxy.SysDataSetBuilder sysDataSetBuilder = Microsoft.Dynamics.Framework.BusinessConnector.Proxy.SysDataSetBuilder.constructLookupDataSet(this.AxSession.AxaptaAdapter, TableMetadata.TableNum(this.AxSession, "EmplTable")))
            {
                lookup.LookupDataSet = new DataSet(this.AxSession, sysDataSetBuilder.toDataSet());
            }

            lookup.LookupDataSet.Init();

            using (Proxy.Query query = lookup.LookupDataSet.DataSetViews[0].MasterDataSource.query())
            {
                using (Proxy.QueryBuildDataSource datasource = query.dataSourceName("EmplTable"))
                {
                    TableMetadata handHeldMetaData = MetadataCache.GetTableMetadata(this.AxSession, _OBSRBOEPIncomeExpenseRequestTableNum);
                    TableDataFieldMetadata handHeldField = (TableDataFieldMetadata)handHeldMetaData.Fields.GetByName("EmplId");


                    using (Proxy.QueryBuildRange range = datasource.addRange(handHeldField.FieldId))
                    {
                        range.status = (int)Proxy.RangeStatus.Hidden;
                        range.value = "0000"; // filtrelenmek istenen deger
                    }

                }
            }
        }
        catch (Exception ex)
        {
            InfoWrite("Lookup olusturulurken hata olustu: " + ex.Message);
        }

    }

[del.icio.us] [Facebook] [Fark] [Faves] [Furl] [Google] [MySpace] [MyWeb] [Newsvine] [Reddit] [Slashdot] [StumbleUpon] [Windows Live] [Yahoo!] [Email] 

Axapta Date Null Kontrolü

Ocak 23, 12 Yazan: akın

Axapta’da tarih alanlarında null değerler için sabit bir değer atanır. Bu alanın null olup olmadığını Global class’taki methodu kullanarak kontrol edebilirsiniz.

if (date == Global::datenull())

[del.icio.us] [Facebook] [Fark] [Faves] [Furl] [Google] [MySpace] [MyWeb] [Newsvine] [Reddit] [Slashdot] [StumbleUpon] [Windows Live] [Yahoo!] [Email] 

Retail Pos’tan Müşteri Kayıt ve Transaction Service

Kasım 24, 11 Yazan: akın

Axapta ERP’sinde müşteriler bildiğiniz gibi CRM modülü içerisinde kaydedilir ve düzenlenir. Axapta tarafında düzenlenen müşteriler daha sonra Retail Pos tarafına N-1010 job’u ile transfer edilir.

Bu akış aslında tek yönlü bir akış değildir. Şöyle bir iş modeli düşünün. Bir şirket hizmet sektörüne dahil ve “perakende hizmet” vermektedir. Bu durumda müşteriler o şirketin mağazalarına gidip bireysel hizmet alacaklardır. Daha somut örnekle hoteller, spor merkezleri veya kulüpler düşünülebilir.

Bu sektördeki şirketlerin birden fazla yerde şubeleri bulunur ve müşterilerine hizmet sunarlar. Bu modelde müşteri kayıt işlemi Axapta tarafında olacağı gibi mağazalarda ve şubelerde de olacağı için akış çift yönlüdür.

Normalde Retail Pos’lardan müşteri açılabiliyor. Müşteri kaydı yaptığınız zaman eş zamanlı olarak Axapta’da da kayıt açılır. Yani müşteri kayıt işlemi anlık bir işlem olmak zorunda.

Anlık ve eş zamanlı dediğimiz için Transaction Profile Service’in düzgün çalışması gerekiyor. Axapta Retail Headquarter tarafında Transaction Service Profile’ı düzgün ayarlamadıysanız, mağazadan müşteri kaydetmek istediğiniz de hata alacaksınızdır.

Tüm bilgileri nizami girdiğiniz halde Pos tarafında müşteri kayıt hatası alıyorsanız ilk kontrol etmeniz gereken yer Axapta tarafındaki Transaction Servisin düzgün çalışıp çalışmadığı, ayarların düzgün yapılıp yapılmadığı ve mağaza ile Axapta’nın birbirleriyle sorunsuz veri alışverişinde bulunup bulunmadığıdır.

Hazır Transaction Service’ten bahsetmişken bir sonraki yazımda Transaction Service’in kolay kurulum ve ayarlarına değinmeyi düşünüyorum.

 

[del.icio.us] [Facebook] [Fark] [Faves] [Furl] [Google] [MySpace] [MyWeb] [Newsvine] [Reddit] [Slashdot] [StumbleUpon] [Windows Live] [Yahoo!] [Email] 

Retail Store Connect Gereksinimleri ve Kurulumu

Kasım 11, 11 Yazan: akın

Retail Pos ve Ax For Retail arasındaki veri alışverişinin bu servisler üzerinden yapıldığını söylemiştim.  Microsoft Dynamics’in sunduğu Retail sürecinde aslında dört modül işlemektedir. RSC ise bu ayaklardan bir tanesini temsil ediyor.

Retail Modüllerinin kurulumu aslında oldukça basittir. Bir kaç NEXT tuşuna basarak bu işi tamamlayabiliyorsunuz. Biraz zahmetli olan kısım ise kurulum sonrası ayarlarda ve sorunsuz bir şekilde veri alışverişlerinin gerçekleşmesinde.

Özellikle perakende sektöründe her akşam Merkez ve Kasalar arasında veri alışverişi yapılır. İşlemler merkeze, personel, ürün stok bilgileri ise kasalara gönderilir. Alış verişi sağlayan ise RSC servisidir.

Tanım kısmını geçip asıl yazının amacı olan noktalara geleyim. RSC kurulumu 1-2 dakika civarı süren çok küçük bir dosyadır fakat bu kurulumu yapmadan önce aşağıda listesini verdiğim kütüphaneleri bilgisayara kurmuş olmanız gerekir.

* Microsoft SQL Server 2005, 2008 Standard, Enterprise veya Express Edition (normal veya R2)

* Windows Installer 4.5

* Microsoft .NET Framework Version 3.5

* Microsoft Visual C++ 2008

* OPOS Comon Control Objects

Bu gereklilikleri bilgisayarınıza kurduktan sonra tek yapmanız gereken RSC kurulumunu başlatmanız.

Bu noktaya kadar yukarıdakileri eksiksiz yapmış olmanız gerekiyor. Şimdiki adımda RSC servisinin jobları takip edebileceği ve loglayabileceği veritabanını kurmamız gerekiyor.

Retatil Store Connect kurulum klasörüne gidip DATA dizininde yer alan AXRETAILMSG scriptini Sql Server da çalıştırmamız gerekiyor.

AXRETAILMSG Dizin

Scripti çalıştırırken bazı hatalarla karşılaşabilirsiniz. Önemli hatalar olmamakla birlikte çabucak düzeltip scriptin düzgün çalışmasını sağlayabilirsiniz.

Şimdiki adımda ise RSC servisini kurmamız. Burada öncelikle Retail veritabanlarına yetkisi olan bir kullanıcıya ihtiyacımız var. Size tavsiyem servislerin çalışmasını sağlayacak Local Admin yetkisine sahip bir kullanıcı tanımlayıp, hepsinde aynı kullanıcıyı kullanmanız.

retail store connect service

Retail Store Connect Settings’i çalıştırıp,  servis ismini yazarak Add diyoruz ve servis kurulumuna başlıyoruz.

retail store connect kurulumu

İlk ekranda Logların tutulacağı database bilgilerini yazıyoruz. Server ismini ve verdiğimiz database ismini yazıyoruz. RSC’nin daha önceki sürümlerinde veritabanı ismi sabitti ama şimdi değiştirebildiğimiz için bu ekran karşımıza çıkıyor.

retail store Connect Account Tanımı

Veritabanı tanımından sonra karşımıza çıkan ekran RSC servisinin hangi kullanıcı ile başlatılacağını belirtiyor. Kuruluma başlamadan önce Local admin yetkisi ile tanımladığımız kullanıcıyı bu ekranda kullanıyoruz. Bu ekranı da geçtikten sonra RSC ayarları tamamlanmış oluyor.

Son adım ise RSC servisini çalıştırmadan Servisler ekranını açıp kullanıcı ayarlarını güncellemek. Servisler ekranı için Start  > Run > services.msc yazabilirsiniz. Açılan ekranda Retail Store Connect servisini bulup sağ tıklayarak özellikler ekranını açıyoruz.

Açılan ekranda LogOn sekmesinde kullanıcı bilgilerini tekrar yazarak APPLY diyoruz. Şimdi servisimizi tekrar çalıştırabiliriz. RSC ayarları için yapılması gerekenleri tamamladık.

Daha önceki şu yazımda veri iletişimi yapılacak her noktaya RSC servisi kurulması gerektiğinden bahsetmiştim. Bu durumda diğer noktalara da bu servisi kurup yukarıda bahsettiğim ayarları gerçekleştirmeniz gerekiyor.

[del.icio.us] [Facebook] [Fark] [Faves] [Furl] [Google] [MySpace] [MyWeb] [Newsvine] [Reddit] [Slashdot] [StumbleUpon] [Windows Live] [Yahoo!] [Email] 

Axapta’da Tablo’ya Find Methodu Eklemek

Kasım 03, 11 Yazan: akın

Axapta’da geliştirme yaparken genel bir tavsiye olarak orjinal tablolaları ve formları değiştirmemenizi isterler. Ek işlevsellik eklemek için Axapta’da bulunan tablolara ve formalara dokunmak yerine kendi tablolarınızı ve formlarını oluşturmanız ve bunları Extended Data Types lar ile Axapta’ya bağlamanız beklenir.

Axapta’nın orjinal halini bozmadan yapacağınız her özelleştirme, güncellemelerde işinizi oldukça kolaylaştırarak zamandan tasarruf etmenizi sağlayacaktır.

Lafı fazla uzatmadan hemen bahsetmek istediğim noktaya geliyorum. Tabloyu oluşturduğunuz zaman bu kendiliğinden oluşmayacaktır, sizin bu methodu oluşturarak kullanımınıza yönelik kodlar eklemeniz gerekir.

Elbetteki farklı kullanımlar için daha spesifik kodlar yazmanız mümkün fakat ben en temel haliyle bir kod paylaşıyorum sizinle. Bu kod Primary Key alanına göre arama işlemi yaparak ilgili satırı getiriyor.

public static Tablo find(TabloId tabloId, boolean update=false)
{
    Tablo tablo;
    ;

    tablo.selectForUpdate(update);

    if(tabloId)
    {
        select firstonly tablo
        where tablo.CarId==carId;
    }

    return tablo;
}

Kısa bir hatırlatma da yapmak istiyorum. Bu methodu formlarda oluşturma şansınız var fakat direk tablo nesnesinde oluşturmanız tavsiye edilir.

[del.icio.us] [Facebook] [Fark] [Faves] [Furl] [Google] [MySpace] [MyWeb] [Newsvine] [Reddit] [Slashdot] [StumbleUpon] [Windows Live] [Yahoo!] [Email] 

Retail Scheduler’da Toplu İş Tanımalama

Ekim 27, 11 Yazan: akın

Axapta’dan Pos’lara veya Poslardan Axapta’ya düzenli aralıklarla verilerin gidip gelmesi gerektiğini biliyoruz. Gerek raporlama olsun, gerek güncelleme olsun mutlaka arada belirli servisler ve onların rutin çalışmalarını sağlamak zorundasınızdır.

Axapta Retail Headquarter’da bu işi yapan modülün ismi Retail Scheduler’dır. Retail Scheduler, mağaza tümleştirme/birleştirme işlemleri, dağıtım listeleri ve planlayıcı işleri gibi bir takım hayati işlemleri yapmanızı sağlayan bir yapı sunar size. Bu yazıda ise belirli periyotlarla belirli jobları çalıştırması için “batch job” ayarlayacağız.

retail scheduler batch job oluşturma

Öncelikle Retail Scheduler > Scheduler Job formunu açarak resimdeki gibi toplu halde çalıştırmak istediğimiz işleri ctrl veya shift yardımıyla seçiyoruz. Daha sonra sağda yer alan Batch Job butonuna tıklayarak Create batch Job u seçiyoruz.

retail scheduler batch job toplu iş ayarları

Açılan pencereden ise batch job için başlangıç, bitiş tarihi; yineleme sayısı ve ismi gibi bilgileri giriyoruz. Günde bir kere çalıştırmak için başlangıç saatini ve tarihini ayarlıyorsunuz, bitiş tarihinin olmadığını belirten seçeneği seçiyorsunuz, günlük olduğunu belirten ayarları yapıyorsunuz. En son adımda ise isim veriyorsunuz. Resimde kırmızı kare içindekilere göz gezdirin. Kaydediyoruz.

basic batch job monitor toplu iş görüntüleme

Oluşturduğumuz toplu işi inceleyip, işlemler yapmak için ise Basic > Batch Job formunu kullanmalısınız. İşi çalıştırmak için sağ butonlardan Functions > Change Status formunu açarak Waiting hale getirmelisiniz. İşlerin son durumunu görmek için ise Functions > Refresh seçeneğini kullanmalısınız.

[del.icio.us] [Facebook] [Fark] [Faves] [Furl] [Google] [MySpace] [MyWeb] [Newsvine] [Reddit] [Slashdot] [StumbleUpon] [Windows Live] [Yahoo!] [Email] 

Retail Pos Epson OPOS ADK Problemi

Ekim 26, 11 Yazan: akın

Pos makinasına gerekli yazılımları sırasıyla yükledikten, ayarları yaptıktan ve Retail Pos’ da sıkıntısız açtıktan sonra hala printerdan fatura veya makbuz alamıyorsanız sorunu kendinizde aramayın. Microsoft’a göre hiçbir neden yokken baskı alınamıyorsa, Epson OPOS ADK’nın eski sürümlerini yükleyip deneyin. Geçenlerde bu tarz bir olayı tecrübe etmiştim. Bir problem yaşıyorsanız en azından denemenizde fayda var.

[del.icio.us] [Facebook] [Fark] [Faves] [Furl] [Google] [MySpace] [MyWeb] [Newsvine] [Reddit] [Slashdot] [StumbleUpon] [Windows Live] [Yahoo!] [Email]