cub-e.net

just coding...

Microsoft Dynamics CRM 2013 'de FetchXML ile Aggregate(Toplama Sorguları) İşlemleri

Bir önceki makalede FetchXML ile neler yapabileceğimize değindik. (Buraya tıklayarak o makaleye ulaşabilirsiniz) Eğer istersek FetchXML ile grouping ve aggregate işlemlerini de yapabilmekteyiz. FetchXML ile aşağıdaki işlemler desteklenmektedir;

·         sum

·         avg

·         min

·         max

·         count(*)

·         count(attribute name)

 

Aggregate yapabileceğimiz sorgu örneği standart olarak bildiğimiz fetchXML kurgusundan farklı değil burada sadece attribute kısmında aggregate ile ilgili keyword yer almakta. Aggregate=true diyerek bu şekilde bir sorgulama yapacağımızı sisteme söylüyoruz. Sonrasında ise sırasıyla hangi alan üzerinden işlem yapılacağını, alias yani etiketin ne olacağını ve aggregate türümüzün ne olacağını sisteme söylüyoruz.

<fetch distinct='false' mapping='logical' aggregate='true'>

  <entity name='opportunity'>

    <attribute name='name' alias='opportunity_count' aggregate='count'/>

  </entity>

</fetch>

Bu şekilde oluşturduğumuz bir sorgu ile aslında şunu demek istiyoruz : “select count('name') as opportunity_count from opportunity” yani standart bir count işleminden fazlası değil yaptığımız.

 

Bu fetchXML’i çalıştırmak için ise aşağıdaki gibi bir kod hazırladım;

 

string opportunity_count = @" <fetch distinct='false' mapping='logical' aggregate='true'>

                                                <entity name='opportunity'>

                                                    <attribute name='name' alias='opportunity_count' aggregate='count'/>

                                                </entity>

                                              </fetch>";

 

                EntityCollection opportunity_count_result = ServiseBaglan().RetrieveMultiple(new FetchExpression(opportunity_count));

 

                foreach (var c in opportunity_count_result.Entities)

                {

                    Int32 aggregate2 = (Int32)((AliasedValue)c["opportunity_count"]).Value;

                    System.Console.WriteLine("Count of all opportunities: " + aggregate2);

                }

 

Burada dikkat edilmesi gereken nokta geriye EntityCollection döndürmesi. Bir önceki makalemden hatırlarsanız normalde bu tarz sorgulama ile biz geriye account, contact gibi sitem içerisindeki nesnelerden oluşmuş bir dizi alıyoruz. FetchXML yapısı gereği tek bir metod kullanıyoruz ve bu metod sonucunda yukarıdaki örnekte olduğu gibi tek bir satır dahi dönecek olsa bile yine sonucu bir collection içerisinde almaktayız. Bu nedenle mecbur foreach içerisinde dönüyoruz ya da collection’un 0. üyesini alıyoruz. Ben örneğimde foreach ile collection içinde döndüm ve gördüğünüz gibi değeri aldım.

 

Yine bir önceki makalemde ileri düzey sorgular bölümünde anlattığım gibi eğer nesne üzerinden direkt bir değer döndürmeyeceksek sonuç her zaman AliasedValue olarak gelmekte. işte bu nedenden dolayı şu şekilde bir convert işlemi yapıyoruz;

 

Int32 aggregate2 = (Int32)((AliasedValue)c["opportunity_count"]).Value

 

Bu işlem sonucunda bu koddan aşağıdaki gibi çıktımızı alabiliyoruz.

 

 

Eğer distinct yapmak istersek de fetchXML içerisine yerleştireceğimiz bir distinct=”true” ifadesiyle ile sisteme bunu beliretebiliriz.

Aşağıda ise distinct yapılmış bir kod örneği bulunmakta;

 

<fetch distinct='false' mapping='logical' aggregate='true'>

  <entity name='opportunity'>

    <attribute name='name' alias='opportunity_distcount' aggregate='countcolumn' distinct='true'/>

  </entity>

</fetch>

 

Bu FetxhXML’i de aşağıdaki kodla çalıştırabiliriz.

 

                string opportunity_distcount = @"

                                           <fetch distinct='false' mapping='logical' aggregate='true'>

                                               <entity name='opportunity'>

                                                  <attribute name='name' alias='opportunity_distcount' aggregate='countcolumn' distinct='true'/>

                                               </entity>

                                           </fetch>";

 

                EntityCollection opportunity_distcount_result = ServiseBaglan().RetrieveMultiple(new FetchExpression(opportunity_distcount));

 

                foreach (var c in opportunity_distcount_result.Entities)

                {

                    Int32 aggregate4 = (Int32)((AliasedValue)c["opportunity_distcount"]).Value;

                    System.Console.WriteLine("Distinct name count of all opportunities: " + aggregate4);

                }

 

                Console.ReadLine();

 

Bu kod sonucunda da aşağıdaki gibi bir cevap alabiliriz sistemden;


 

Gelin olayı biraz renklendirelim. Bu sefer de bir sorgu içerisinde birden fazla aggregate seçeneğinin cevabını isteyelim. Böyle bir işlem için standart fetchXML’in içerisinde sırasıyla hangi özelliklerin bize geri döneceğini belirtiyoruz tabii unutulmaması gereken nokta ise hepsi için ayrı birer alias olması gerektiğidir.

 

<fetch distinct='false' mapping='logical' aggregate='true'>

  <entity name='opportunity'>

    <attribute name='opportunityid' alias='opportunity_count' aggregate='count'/>

    <attribute name='estimatedvalue' alias='estimatedvalue_sum' aggregate='sum'/>

    <attribute name='estimatedvalue' alias='estimatedvalue_avg' aggregate='avg'/>

  </entity>

</fetch>

 

Bu sorgu için ise aşağıdaki kodu hazırladım;

 

                string estimatedvalue_avg2 = @"

                                    <fetch distinct='false' mapping='logical' aggregate='true'>

                                        <entity name='opportunity'>

                                           <attribute name='opportunityid' alias='opportunity_count' aggregate='count'/>

                                           <attribute name='estimatedvalue' alias='estimatedvalue_sum' aggregate='sum'/>

                                           <attribute name='estimatedvalue' alias='estimatedvalue_avg' aggregate='avg'/>

                                        </entity>

                                    </fetch>";

 

                EntityCollection estimatedvalue_avg2_result = ServiseBaglan().RetrieveMultiple(new FetchExpression(estimatedvalue_avg2));

 

                foreach (var c in estimatedvalue_avg2_result.Entities)

                {

                    Int32 aggregate8a = (Int32)((AliasedValue)c["opportunity_count"]).Value;

                    System.Console.WriteLine("Count of all opportunities: " + aggregate8a);

                    decimal aggregate8b = ((Money)((AliasedValue)c["estimatedvalue_sum"]).Value).Value;

                    System.Console.WriteLine("Sum of estimated value of all opportunities: " + aggregate8b);

                    decimal aggregate8c = ((Money)((AliasedValue)c["estimatedvalue_avg"]).Value).Value;

                    System.Console.WriteLine("Average of estimated value of all opportunities: " + aggregate8c);

 

                }

 

                Console.ReadLine();

 

İşte bu şekilde aynı anda count, sum ve avg işlemlerini yapabilmekteyim. Sonuç ise aşağıdaki gibi;

 

 

Bu iki makalede FetchXML’ler üzerinde konuştuk. Umarım faydalı olmuştur.

Dynamics Zirve 2012

18 Aralık 2012 Microsoft Dynamics Zirve

18 Aralık 2012 tarihinde yapılacak olan Microsoft Dynamics Zirvesi ile, şirketlerinde kurumsal bilgi sistemlerini yenileme  niyetinde olan firmalar, mevcut müşterilerimiz ve bilgi teknolojileri sektöründe hizmet veren firmalara, Microsoft Dynamics ürünlerinin son sürümleri, iş ortaklarımızın sektörel çözümleri ve mevcut müşterilerimizin gerçekleştirdikleri projelerin kapsamı ve  elde ettikleri faydalar aktarılacak. Sabah ana seansında,  yeni ürün sürümlerimiz Microsoft Dynamics AX 2012 ve Microsoft Dynamics NAV 2013 hakkında detaylı bilgiler aktarıldıktan sonra, Microsoft Dynamics CRM 2011 R9 tanıtımı da yapılacak. Ana seansımız doğada hayatta kalma uzmanı Sn. Serdar Kılıç’ın sunumu ile bitecek.  Sn. Serdar Kılıç,  doğada hayatta kalmak ile iş hayatında firmaları rekabette öne çıkartacak kurallar arasındaki benzerliklere odaklanan bir konuşma yapacak. Doğada hayatta kalmak için kullanılabilecek araç ve malzemelerin, benzer bir düşünce ile şirket ve çalışanlarına da bilgi teknolojileri aracılığı ile sunulması gerektiği ortaya konacak. Microsoft Dynamics ERP ve CRM ürünlerinin güçlü altyapısı, hızlı ve kapsamlı uyarlama imkanları ve kullanıcılara kolay kullanım için sağladığı imkanlar ile, rekabette kullanabileceğiniz en iyi araçlar olduğu, örnekler ile gösterilecek.

Zirvede Odaklanacağımız Ürünlerimiz:

ERP: Kurumsal Kaynak Planlaması

CRM : Müşteri İlişkileri Yönetimi

Firmaların muhasebe, satınalma, stok yönetimi, satış, maliyet muhasebesi ve müşteri ilşikileri yönetimi için kullandıkları entegre yazılımlardır. Firmaların müşterilerine en kaliteli, en düşük maliyetli ürün ve hizmet sunmalarına yardımcı olmak için tüm iş süreçlerini entegre biçimde koordine etmelerini ,gerekli bilgileri oluştukları yerde tek seferde girmelerini ve verinin sorunsuz biçinmde paylaşılarak, tüm süreçlerin hatasız ve  yüksek verimli  çalışmalarını sağlar. 

Firmaların en az kaynakla, en fazla çıktı elde etmelerini , süreçleri işlerken en az hata yapmalarını ve alacakları kararlar için maksimum bilgi/analize ulaşmalarını  sağlar.

Çoğu firma kendi içlerinde bir ürünü ne kadar kaynakla ürettiklerini, ne kadar stokladıklarını, ne kadar sürede sattıklarını, satarken ne gibi taviz verdiklerini ölçemezler. Ya ölçmek için gerekli ek kaynakları sağlayamayacaklarını düşünürler  ya da ölçmenin mümkün olamadığını, hislerine güvenmenin daha doğru olduğunu düşünürler. Bazı firmalar ise denemişler ama ya ürünün sıkıntılarından ya da kendi süreçlerini iyi yönetemediklerinden, belli bir bütçe harcamalarına rağmen, istedikleri geri dönüşümü alamadıkları için temkinli yaklaşırlar.

Zirvemizde her firmanın tek bir uygulama ve tek bir veritabanında bilgi ve süreçlerini toplayarak, rekabet güçlerini arttırmalarını tavsiye ederken, bu iş için en uygun ürünün toplam sahip olma maliyeti ve elde edilecek faydaların boyutu göz önüne alındığında  Microsoft Dynamics olduğunu anlatacağız. Şu an Dynamics ürünleri kullanan müşterimiz, paralel sunumlarda kendi projelerini ve kazanımlarını anlatacaklar. Paralel sunumlarımızda Nissan, Collezione, Colin’s, Eroğlu Gayrimenkul, Albayrak Holding, Turkcell, Coca Cola, Karaca Züccaciye, Sunar Mısır ve diğer 30 farklı ölçek ve sektörden müşterilerimiz, yapacakları sunumlar ile, kendi tecrübe ve tavsiyelerini katılımcılar ile paylaşacaklar.

Microsoft Dynamics ürünlerinin öne çıkan ve pazardaki diğer ürünlerden ayırt edici en önemli özelliklerini ise şöyle sıralayabiliriz.

1.      Esnek : Yazılımlar genelde firmaların geliştirme departmanlarının yapmış olduğu analizler sonucu geliştirilir ve parametreler ile müşterinin özel ihtiyaçlarına uygun hale getirilmeye çalışılır. Microsof ise müşterilerin sadece analistlerin yapmış olduğu tasarıma uymaya zorlanmalarını istenmez.Firma ve çalışanların, kendi tercih ve iş yapış biçimlerini sisteme hızlı ve kolay bir şekilde tanıtabilmeleri amaç edilmiştir. 

2.      Güçlü: Microsoft ERP ve CRM ürünleri Pazar payı yüksek rakipleri tarafından büyük kurulumlar ve büyük veri üreten firmaları için uygun olmadığını yayarlar. Oysa SQL Server’ın artan gücü ile birlikte dünya üzerinde çok büyük veritabanlarını ve işlem hacimlerini desteklemektedir. Yüksek veri oluşturan işletmelerden WallMart, Carrefour, Microsoft X-Box üretimi gibi yurt dışı referansları gibi, Türkiye’de yüksek dataya ulaşmış Assan Aliminyum, Sarten Ambalaj, Nestle Erikli, Garanti Emeklilik, Aegon Emeklilik vb referanslarımız ile çok güçlü bir yapı sunmaktadır.

3.      Kolay: Genelde rakiplerimizin ürünlerini kurmak ve çalışmaya hazır hale getirmek uzun zaman ve emek gerektirir.  Kurulumu gerçekleştiren kadroların içinde değişiklikler yaşandıkça sistemi bilen ve nasıl kullanılması gerektiğini bilen kişiler değiştikçe, sistem eskir, güncel ihtiyaçlara cevap veremez hale gelir. Kullanıclar kullanmakta zorlanınca, kendilerine özel yazılımlar istemeye başlarlar.  Bu durum ilk başlarken firmanın  hedefi olan, tüm firmayı tek bir sistem ve veritabanında çalıştırma idealinden uzaklaştırır.  Ortada sadece muhasebe ve stok yönetimini yapan ama diğer tüm süreçlerin dışarıdan yönetildiği, dışarıda oluşan verilerin  sisteme sonradan girildiği ya da entegre edildiği masraflı ve hantal yapılar ortaya çıkar. Bu da ilk yola çıkılan noktadan çok az bir ilerleme demektir ve maliyeti çok yüksektir. Oysa Microsoft Dynamics ile kullanıcılar zaten yıllardır kullanmakta oldukları ürünlere çok benzer mantık ve görünümdeki ekranlar ile  sisteme çok kolay adapte olurlar. Microsoft Dynamics’in değişiklik ve geliştirmeye açık yapısı, tüm ihtiyaçların sistem içinde kolay ve hızlı geliştirilmesine imkan tanır. Böylece sistem, anlık ve orta vadeli değişimlere hızlı adapte olarak,  sürekli güncel kalır. Ayrıca sistemin kolay ve yeni gelenler tarafından kolay anlaşılır olması, kullanıcılar değişse bile sistemin herkes tarafından kullanılmasına ve  firmanın tüm bilgi ihtiyacına tek başına cevap verebilmesine olanak sağlar. 

18 Aralık’da  sizleri aramızda görmek bize onur verecektir. 

http://www.microsoftdynamicszirve.com adresinden kayıt olabilirsiniz.

 

Murat Özturan ile Dynamics CRM hakkında söyleşi

Bildiğiniz üzere geçen ay Microsoft MVP Summit için yine Seattle yollarındaydım. Yine çok güzel ve dolu dolu geçen bir etkinlik sonrasında size küçük bir süpriz de yapayım dedim. Microsoft'ta çalışan Türk'lerden Murat Özturan'la da söyleşi yapma fırsatı buldum. Murat Dynamics CRM ekibinde Product Manager olarak çok önemli bir görevi yerine getirmede. hadi izleyin bakalım.

link : http://www.facebook.com/photo.php?v=10150711277996880

 

MVP Summit 2011

20 Şubat- 3 Mart tarihleri arasında Amerika'daydım. Hem tatil hem iş için gitmiştim. Microsoft takipçileri bilirler her sene Şubat aynının sonunda Seattle'da MVP Summit yapılır. Dünya üzerindeki bütün MVP ve RD'ler bu etkinlikler ve eğitimler için Microsoft'a giderler. Ben de 2 yıldır bu etkinliklere katılıyorum. Bu sene biraz da gezebilmek amacıyla 1 hafta erken Amerika'ya gittim. 1 hafta boyunca New York'ta gezdim. New York çok çolgın bir şehir ve inanın bir Türk New York'ta çok rahat yaşayabilir. New York fotoğraflarına bu adresten ulaşabilirsiniz.

New York fotoğraflarına bu adresten ulaşabilirsiniz : http://www.facebook.com/album.php?id=626951879&aid=296766

New York'ta gezip görülebilecek yerleri ise şu şekilde sıralayabilirim;

 

  • Central Park
  • Time Square
  • Madame Tussauds Müzesi
  • China Town-Little Italy 
  • Metropolitan Museum of Art
  • Museum of Natural History (Doğa Tarih Müzesi)
  • Statue of Liberty (Özgürlük Anıtı)
  • Broadway
  • Wall Street
  • Empire State Building
  • The Flatiron Building

 

New York bu şekilde; Seattle ise geçen seneden bu yana hiç değişmemiş doğal olarak ama bu sene MVP Summit'te Steve Ballmer'ın konuşma yapması unutulmayacak bir olaydı Seattle fotoları ise bu adreste;

http://www.facebook.com/album.php?id=626951879&aid=305769

 

MVP Summit 2010

Geçen hafta Seattle'da MVP Summit'teydim. 13 Türk MVP'si olarak gittiğimiz etkinlikte herkes kendi uzmanlık grubuna göre çeşitli seminerlere katıldı.

MVP Summit tüm dünyadaki MVP ve RD'lerin bir araya geldiği bir organizasyon. Bu orgranizyonun en güzel yanı ise tamamının Microsoft Campus'te geçiyor olması ve ürün grubu yöneticileri ve ürünleri yazan ekiplerle direkt temasta olabilmeniz. Ürünlerle ilgili geri bildirimleri, gelecek versiyonlardaki talepleri bu sayede en doğru kişiye iletebilme şansına sahip oluyorsunuz.

Tabii Seattle'ı da 2 gün boyunca gezdim. Çok güzel planlanmış bir şehir. Çok temiz ve düzenli. Trafik neredeyse hiç yok. Eğer yolunuz bir gün Seattle'a düşerse aşağıdaki yerleri mutlaka gezin :

  1. Space Needle
  2. Havacılık Müzesi
  3. Woodland Hayvanat Bahçesi
  4. Akvaryum
  5. Science Fiction Müzesi
  6. Polis Müzesi - Vakit kalırsa
  7. Underground Tour - Vakit kalırsa

Çok gizli... seminerlerin başında gizlilik prensipleri kapsamında gördüğünüz slayt yayınlandı.

Çektiğim fotoğrafların bir kısmı burada 450 küsür foto çekmişim sadece benim fotoğraf makinasından :)
http://www.facebook.com/home.php#!/album.php?aid=153459&id=626951879&ref=nf