cub-e.net

just coding...

Microsoft Dynamics CRM 2011 Scripting Cookbook

Bugün sizlere bir kitap tanıtacağım. Umarım sizler için faydalı olur.

"Microsoft Dynamics CRM 2011 Scripting Cookbook" okuyucuya özelleştirme mimarisi, en basit konulardan başlayarak özel alanların ve türlerin oluşturulması, formlar ile çalışma, ileri düzeyde script yazma konuları ve kodu debug etme, yeni formlar ve ribbonlar dizayn etme, script kütüphanlerinin kullanımı ve dış veri kaynakları ile entegrasyon dahil olmak üzere özelleştirme çerçevisinde her konuyu örnekleriyle açıklayacak anlatmaktadır.



Kitabı bitirdiğinizde kendi özelleştirmenizi nasıl yapacağınızı kavramış ve bunları artık nasıl bir çözüm(solution) haline getirebileceğiniz anlatılmaktadır.

Bu kitap iş analizcileri ve kod geliştiricileri için gerçekten yeterli bir kaynak. Konular gerçekten güzel bir mantık sırasında anlatılmış ve açıklanmış. Örnekler de gayet açıklayıcı ve doyurucu bir şekilde konuları pekiştirmiş.

Dynamics CRM konusunda piyasada gerçekten önemli bir yere geçecek faydalı bir eser olmuş. Nicolae Tarla'yı tebrik etmek gerekli.

Kitabın kağıt haricinde her türlü cihaz için dijital baskıları da mevcut.

Kitaba amazon.com üzerinden bu adresten ulaşabilirsiniz : http://www.amazon.com/Microsoft-Dynamics-2011-Scripting-Cookbook/dp/1849688826/ref=tmm_pap_title_0

Ayrıca yayınevi üzerinden de ulaşabilirsiniz : http://www.packtpub.com/microsoft-dynamics-crm-2011-scripting-cookbook/book

 

Dynamics CRM Web Servisinin Çağrılmasında Singleton Tasarım Desenin Kullanılması

Aslında bu makalenin büyük bir kısmını 2009 yılında yazdım ama hatırlayamadığım bir nedenden dolayı o dönemde yarım kaldı ve unutuldu gitti. Şimdi fırsat buldum ve makaleyi tamamladım. (O zamanlar CRM 4.0 vardı şimdi kodları 2011 ve 2011'den sonraki versiyonlar göre uyarladım)

Bu makalemizde, programımızın yaşam döngüsü boyunca sadece bir Dynamics CRM Web Servisi bağlantısının hafızada yer almasını garanti altına almamızı sağlayacak olan Singleton tasarım desenini tanıyacağız ve bu iş için gerekli olan kodu geliştireceğiz.

Bildiğiniz üzere Dynamics CRM 2011 diğer CRM sürümleri gibi bir web uygulaması ve CRM üzerinde kendi yazılımlarımızı geliştirmek istiyorsak onun web servislerini kullanmamız gerekmektedir. Bu durumda IIS'in performansını da düşünmek zorundayız ve uygulamalarımızı buna göre geliştirmeliyiz. Uygulamamızda her işlem sırasında CRM web servisini çağırmak hem uygulamamızın hem de IIS'in gereksiz yere şişmesine neden olmaktadır. Ayrıca CRM servisi IOrganizationService türünden bir nesne ve bizim temel amacımız bu nesnenin hafızanda birden fazla kere oluşturulmasını ve oluşturma zahmetine girilmesini engellemek. Çünkü ben bu örnekte kodların içerisine gömmüş olsam dahi gerçek dünyada projelerde bizler servise bağlanılacak kullanıcı adı ve şifre gibi bilgileri .xml dosyaları gibi dosyalarda tutup buradan okumaktayız. Bir application life cycle içerisinde bu bilgileri okumak için çok sık I/O yaptırmak çok doğru bir işlem değil.

İşte bu durumda uygulamamız çalıştığı sürece açık kalacak ve bizim komutlarımızı icra edecek bir web servisi nesnesine ihtiyacımız olacaktır. Bunu Singleton Tasarım Deseniyle (Singleton Design Pattern) bunu sağlayabiliriz.

Singleton Tasarım Desenine geçmeden önce Tasarım Desenleri'nin ne olduğunu bilmeyenler için açıklayayım. Yazılım Mühendisliğinde içerinde ele alınan Tasarım Deseni (Design Pattern) kavramı, yazılım geliştirilirken sık meydana gelen sorunlara genel ve tekrar kullanılabilir çözümler bütünü olarak tanımlanabilir. Tasarım desenleri size direkt olarak kod üretmez sadece belirli bir problemin çözümüne mimari düzeyde sınıf ve method tasarımlarınızı oluşturmanızı sağlar. Herhangi bir kod parçacığı içermediği için programlama dilinden bağımsızdırlar. Kısaca Design Pattern koda çevrilebilecek tamamlanmış bir tasarım değildir, sorunun nasıl çözüleceğine dair bir modeldir. Tasarım desenleri test edilmiş, onaylanmış modeller sağlayarak yazılım geliştirme sürecini hızlandırabilirler. Tasarım Desenleri 3 kola ayrılırlar.

  • Creational Patterns (Yaratımsal Desenler) : nesnelerin ve sınıfların oluşturulması ile ilgili tasarım desenlerini içerir
  • Behavioral Patterns (Davranışlar Desenler) : sınıfların yapısal özelliklerinin belirlenmesi ile ilgili tasarım desenlerini içerir
  • Structural Patterns (Yapısal Desenler) : nesnelerin davranışsal özelliklerini ve bu davranışlara göre durumlarını yöneten tasarım desenlerini içerir

 

Yazılım geliştiriciler bazen programlarında özel olarak tasarım desenlerini kullanmasalarda aslında onlarda benzer yapılar kurarlar. Zaten tasarım desenlerine baktıkları zaman, "ya zaten ben bunu kullanıyordum.." gibi cümleleri de duymak mümkündür. Eminim benim burada anlatmaya çalışacağım Singleton Tasarım Desenini ve bu desendeki gibi CRM Web Servisine bağlanmayı yapmış arkadaşlar mutlaka vardır.

Şimdi "Creatinal Patterns" grubunda bulunan "Singleton" desenini açıklamaya başlayabiliriz. Singleton deseni bir programın yaşam süresince belirli bir nesneden sadece bir örneğinin olmasını sağlar. Bir uygulamada, tek bir yerden bu nesneye ulaşımın olması isteniyorsa bu desen kullanılabilir. Hatırlayacağınız üzere bir sınıftan yeni bir nesne oluşturmak için varsayılan yapıcı metodu(default constructor) çağırmak gerekir. C# dilinde bu işlemi new sözcüğünü kullarak yapmaktayız.

SınıfAdı olustrulacakNesne = new SınıfAdı();  //Normalde olması gerekn çağırma şekli

Bu şekilde yeni bir nesne oluşturmak için new anahtar sözcüğünün temsil ettiği yapıcı metoduna dışarıdan erişimin olması gerekir. Yani yapıcı metodun public olarak bildirilmiş olması gerekir. Ancak "Singleton" desenine göre belirli bir anda sadece bir nesne olabileceği için new anahtar sözcüğünün ilgili sınıf için yasaklanması gerekir yani yapıcı metodun protected ya da private olarak bildirilmesi gerekir. Eğer bir metodun varsayılan yapıcı metodu(default constructor- parametresiz yapıcı metot) public olarak bildirilmemişse ilgili sınıf türünden herhangi bir nesnenin sınıfın dışında tanımlanması mümkün değildir. Ancak bizim isteğimiz yalnızca bir nesnenin yaratılması olduğuna göre ilgili sınıfın içinde bir yerde nesnenin oluşturulması gerekir. Bunu elbette statik bir özellik(property) ya da statik bir metotla yapacağız. Bu statik metot sınıfın kendi içinde yaratılan nesneyi geri dönüş değeri olarak bize gönderecektir. Peki, bu nesne nerede ve ne zaman yaratılacaktır? Bu nesne statik metodun ya da özelliğin içinde yaratılıp yine sınıfın private olan elemanına atanır. Tekil olarak yaratılan bu nesne her istendiğinde eğer nesne zaten yaratılmışsa bu private olan elemanın referasına geri dönmek ya da nesneyi yaratıp bu private değişkene atamak gerekmektedir.

Ama bizim yapacağımız şu şekilde olacaktır:
SınıfAdı olusturulacakNesne = SınıfAdı.MetodAdı(); //Standart bir static class çağırma şekli

Temel Uml görüntümüz ise şöyle olacaktır:

Ama ben bu yapıya ek birkaç şey daha ekleyerek aşağıdaki şekilde bir sınıf hazırladım.

Temelde ihtiyacım olan property’leri kod bloğunun üst kısmında aşağıda görüldüğü gibi oluşturuyorum.

private static Service _serviceInstance;
private IOrganizationService _organizationService;
private Guid _controlID;
private static object _lockObject = new object();

public IOrganizationService OrganizationService
{
    get { return _organizationService; }
}

public Guid ControlID
{
    get { return _controlID; }
}

Burada Service türünden oluşan _serviceInstance isimli property aslında bütün işi yapan arkadaş. Biz onun dolu ya da boş olduğuna yani null olup olmamasına bakarak hareket edeceğiz. IOrganizationService daha önce de ifade ettiğim gibi Dynamics CRM’in servis nesnesi. Amacımız onun oluşturulma aşamasının tekrar tekrar çağrılmasını engellemek. ControlID sistemde oluşan instance’ların aynı id’ye sahip olup olmadıklarına bakarak onların kaç kere oluşturulduklarını gözlemlediğimiz değişken. lockObject ise tamamen ilerisi için düşünülmüş ve multithread mantıkta sıkıntı yaşamamızı engellemek için konmuş bir değişken.

 

Temel ihtiyaçlar bölümünden sonra asıl işimi yapacak olan kod öbeğini doğru yere yerleştirme işlemi bulunmakta. Aşağıdaki blok benim her zaman için bir kere çalıştırmak isteyeceğim blok işte bu bloğu Singleton tasarım deseni içerisinde private olarak ayarlanmış Constructor metodumun içine yerleştiriyorum.

ClientCredentials clntCredentials = new ClientCredentials();
clntCredentials.Windows.ClientCredential = new System.Net.NetworkCredential("kullanıcı adı", "şifre", "domain");
Uri orgUri = new Uri("http://crm url/Organizasyon Adı/XRMServices/2011/Organization.svc");
OrganizationServiceProxy orgService = new OrganizationServiceProxy(orgUri, null, clntCredentials, null);
_organizationService = (IOrganizationService)orgService;

Daha sonra static olarak çağrılacak ve mevcut servisimin hafıza daha önceden oluşturulup oluşturulmadığını kontrol edecek yapıya geliyor sıra. Onun için de kodun üst kısmında tanımlamış olduğum property’ler vasıtasıyla kontrollerimi yapıyorum.

        public static Service GetService()
        {
            try
            {
                if (_serviceInstance == null)
                {
                    lock (_lockObject)
                    {
                        if (_serviceInstance == null)
                            _serviceInstance = new Service(Guid.NewGuid()); 
                    }
                }

                return _serviceInstance;
            }

 

Burada şunu belirtmeliyim ki lock bölümüne aslında normal şartlar altında ihtiyacım bulunmamakta o bölüm ileride bu sistemi multithread olarak kullanırsam servisinin ayrı instance’lar tarafından tekrar oluşturulmasını engellemek için konan bir kod bloğu.

Ve hepsini bir araya topladığımızda aşağıdaki kod bloğu karşımıza çıkmakta.

    class Service
    {
        private static Service _serviceInstance;
        private IOrganizationService _organizationService;
        private Guid _controlID;
        private static object _lockObject = new object();

        public IOrganizationService OrganizationService
        {
            get { return _organizationService; }
        }

        public Guid ControlID
        {
            get { return _controlID; }
        }
        
        private Service(Guid controlID)
        {
            ClientCredentials clntCredentials = new ClientCredentials();
            clntCredentials.Windows.ClientCredential = new System.Net.NetworkCredential("kullanıcı adı", "şifre", "domain");
            Uri orgUri = new Uri("http://crm url/Organizasyon Adı/XRMServices/2011/Organization.svc");
            OrganizationServiceProxy orgService = new OrganizationServiceProxy(orgUri, null, clntCredentials, null);
            _organizationService = (IOrganizationService)orgService;
            _controlID = controlID;
        }

        public static Service GetService()
        {
            try
            {
                if (_serviceInstance == null)
                {
                    lock (_lockObject)
                    {
                        if (_serviceInstance == null)
                            _serviceInstance = new Service(Guid.NewGuid()); 
                    }
                }

                return _serviceInstance;
            }
            catch (Exception ex)
            {
                string ErrorDetail = ExceptionHandler.HandleException(ex);
                DetailedLog.CreateLog(System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
                    + " : " + System.Reflection.MethodBase.GetCurrentMethod().ToString()
                    + " : " + ErrorDetail, System.Diagnostics.EventLogEntryType.Error);

                return null;
            }
        }
    } 

İşte bu kadar herşey hazırlandı. Şimdi bu kodu çağıracak olan kodu hazırlamaya geldi sıra. Bunun için de bir konsol uygulaması oluşturuyorum ve aşağıdaki kodları ekliyorum.

            Service service1 = Service.GetService();
            Console.WriteLine(service1.ControlID);

            Service service2 = Service.GetService();
            Console.WriteLine(service2.ControlID);

            Entity lead = new Entity("lead");
            lead.Attributes["subject"] = "Fuardan Gelenler";
            lead.Attributes["firstname"] = "Barış";
            lead.Attributes["lastname"] = "KANLICA";
            lead.Attributes["companyname"] = "Omerd Business Solutions";

            service1.OrganizationService.Create(lead);

            Console.WriteLine("Lead created!!");
            Console.ReadLine();

Burada yaptığımız temel işlem Service türünden oluşturduğumuz nesnenin içindeki CRM’in OrganizationService nesnesine ulaşmak. Aşağıdaki ekran çıktısında da göreceğiniz üzere servis sadece bir kere oluşmakta. (Nereden mi biliyorum bakın iki service nesnesi de aynı ControlID değerini Guid olarak döndürmekte)

Eğer isterseniz başka classlar içerisinde de service nesnelerinin çağırabilirsiniz her seferinde tek bir oluşturma işlemi olacak ve sistem kaynaklarını daha verimli kullanmış olacağız.

Microsoft Dynamics CRM 2011 Eğitimi

Bu sefer sizlere bir eğitim haberim var. Eğitim ile ilgili detaylı bilgiyi http://egitim.omerd.com adresinden detaylı bilgi alabilirsiniz.

Omerd ve Microsoft işbirliğiyle Microsoft Dynamics CRM’i daha yakından tanıma fırsatı!
Microsoft tarafından Türkiye’de 5 yıl boyunca CRM MVP seçilen Barış Kanlıca'nın eğitmenliğinde; Microsoft Dynamics CRM Uygulama, Özelleştirme, Entegre Yazılım Geliştirme konularının, laboratuvar ortamında interaktif bir şekilde ele alınacağı 7 günlük bir eğitim paketini sunuyoruz.
Eğitim, katılımcı ihtiyacına göre Uygulama, Özelleştirme, Entegre Yazılım Geliştirme paketlerinden bir ya da birkaçının seçilebilmesine olanak vermektedir.  Uygulama Eğitimi 2 gün, Özelleştirme Eğitimi 2 gün, Entegre Yazılım Geliştirme Eğitimi 3 gün olarak planlanmıştır.

Bahçeşehir Üniversitesi Dynamics CRM Semineri

15 Mayıs Çarşamba günü saat 10:30 - 12:30 arasında Bahçeşehir Üniversitesinde "CRM, XRM Kavramları ve Dynamics CRM" konulu bir seminer vereceğim. İçerik ise şu şekilde olacak; Dünya’da uzun yıllardır konuşulan CRM “Müşteri İlişkileri Yönetimi” kavramı müşterimizin neleri sevdiğini, neye para harcadığını ve neleri yapmaktan hoşlandığını kısacası bize müşterimizin kim olduğu gösteren temeller üzerine oturmuştur. XRM sadece müşteri değil onun haricinde dış dünyada yönettiğimiz varlıkların bize kim/ne olduğunu  göstermektedir. İşte bu seminerde Microsoft Dynamics CRM’in bu iki kavramın ortasına nasıl oturduğunu ve programatik olarak nasıl geliştirilebileceği anlatılacaktır.

Microsoft Dynamics CRM, adındaki CRM ibarisi nedeniyle sadece Müşteri İlişkileri departmanlarını ilgilendiren bir yazılım olarak anlaşılmaktadır. Aslında Dynamics CRM bir platfomdur ve üzerinde sizin şekillendirdiğimiz bir çok altyapıya destek verebilir. Örneğin aynı Dynamics CRM Ağaoğlu'nda gayrimenkul satış platformu olarak kullanılabilirken Levent'teki Sapphire İstanbul'daki evlerin yönetiminin merkezine oturtulmuştur. Yine aynı Dynamics CRM IKEA'nın Online Satış sisteminin yönetiminde kullanılırken Öztürkler için ise B2B Satış Portalı olarak da kullanılabilmektedir. Ele alınan örneklerde görüldüğü üzere Dynamics CRM tam bir iş platformudur ve esnek mimarisi sayesinde her türlü iş uygulamasının temelini oluşturabilme yeteneğine sahiptir.

Dynamics CRM ile İnşaat ve Gayrimenkul Satış Yönetimi

Yarın Microsoft'ta yapılacak olan etkinliğimize herkesi bekleriz. Özellikle Dynamics CRM'in bir XRM platformu olarak farklı sorunlara nasıl çözüm olduğunu görmek isteyen kişiler için çok önemli bir etkinlik olacak.
Yaptığımız çözüm genel hatları ile şu özellikleri kapsamakta; İnşaat firmalarının gayrimenkul havuzlarını ayrıntılı segmentasyon kriterleri ile birlikte tanımlamaları ve bu segmentler doğrultusunda filtreleyerek raporlayabildikleri, satış işlemlerini tüm aşamaları ve sözleşme, senet gibi finansal süreçlerini de tam entegre bir şekilde kulanabildikleri inşaat şirketleri için özelleştirilmiş tüm süreçlerini içeren konsolide bir CRM yazılımı olan Gayrımenkul satış platformunu bu etkinliğimizde detaylı olarak inceleyebilir, konunun uzmanlarından detaylı bilgi edinebilirsiniz.

Etkinliğe kayıt için lütfen linke tıklayınız : https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032547495&culture=tr-TR


Güncel Video Listesi

Dynamics CRM ile ilgili güncel video listem aşağıdaki gibidir. Bu videolar tamamen eğitim amaçlıdır ve yaptığım etkinliklerden alınmıştır.

 

Konu Versiyon İçerik İzlenebilecek Siteler
Raporlar 2011 Raporların nasıl yapıldığı bu videoda anlatılmıştır Facebook
Panolar 2011 Panoların ve Grafiklerin nasıl yapıldığı bu videoda anlatılmıştır Facebook
Gelişmiş Arama ve Görünümler 2011 Temel işlevlerden gelişmiş arama ve görünüm yapmanın temellerini öğreneceğiz. Facebook
Fırsat, Teklif ve Sipariş 2011 Bu videoda Satış Otomasyon sürecinin detaylarını incelemeteyiz. Facebook
Fırsatlar ve Ürünler 2011 Fırsat nesnesinin temeleri bu videoda ele alınmaktadır. Facebook
Ürünler ve Fiyat Listeleri 2011 Satış yapmanın temel nesnesi olan Fiyat Listeleri ve ürünlerin anlatımı. Facebook
Müşteri Adayı Kavramı 2011 Müşteri adaylarının detaylı bir şekilde incelendiği görsel ders. Facebook
CRM'e Genel Bakış Firma ve İlgili Kişi Kavramı 2011 CRM 2011 ile gelen yenilikler ve temel noktalar bu videoda anlatılmaktadır. Facebook
Kampanyalar ve Hızlı Kampanya 4.0 Bu görsel dersimizde CRM üzerinde kampanya ve hızlı kampanyanın nasıl yapıldığını öğreneceğiz. NedirTV
Gelişmiş Bul ve Raporlama 4.0 Bu görsel dersimizde dynamics crm 4.0 içerisinde gelişmiş bul aracını kullanma ve rapor yapma adımlarını inceleyeceğiz. NedirTV
Satış Yönetimi-2 4.0 Bu webinerde satışa yönelik aktivitelerin Dynamics CRM içerisinde nasıl yönetildiği bu webinerde ele alınacaktır. NedirTV
Satış Yönetimi-1 4.0 Dynamics CRM içerisinde CRM kavramına yönelik yapıların nasıl şekillendiği bu webinerde anlatılacaktır. NedirTV
Firmalar, İlgili Kişiler ve Outlook Client 4.0 Bu webinerde Dynamics CRM içerisinde kayıtların nasıl durduğu ve bunlara nasıl erişileceği anlatılacaktır. NedirTV
Genel Ayarlar, Sistemin Yetenekleri ve İş Akışları 4.0 Bu webinerde Dynamics CRM'in yetenekleri ve İş Akışları mimarileri anlatılacaktır. NedirTV
CRM, XRM Kavramları ve Dynamics CRM 4.0 Bu videoda CRM'in temelleri ve işleyişi kavramsal olarak anlatılacaktır. XRM Kavramı ve Dynamics CRM'in önemi vurgulanacaktır. NedirTV
Pazarlama Yapısı 4.0 Bu webinerde CRM ile ilgili temel kavramlara değinerek Dynamics CRM 4.0'ın pazarlama altyapısı üzerinde ne gibi işlemlerin yapılabileceğini inceleyeceğiz. NedirTV
CRM - eService Accelerator Kurulumu 4.0 Bu videoda Microsoft Dynamics CRM 4.0 müşterileri ve iş ortakları için geliştirilen eServices Accelerator'ın kurulumunu inceliyoruz. NedirTV
Satış Mimarisi 4.0 Bu webinerde Dynamics CRM 4.0 üzerinde satış mimarisinin nasıl işlediği incelenmektedir. NedirTV
       
Söyleşiler
Murat Özturan ile Microsoft  Seattle Kampüs'te Söyleşi Facebook'tan İzle
Gökhan Uluderya ile Microsoft  Seattle Kampüs'te Söyleşi Facebook'tan İzle
Microsoft Surface hakkında Bilişim Vizyon'dan İzle
Dynamics CRM hakkında Bilişim Vizyon'dan İzle

 

Metro Arabirimi İş Uygulamalarında da Yaratıcı

Windows 8'in çıkmasıyla beraber yazılım firmalrı uygulamalarını Metro arabirimiyle çalışacak şekilde uyarlamaya başladılar. Şu an için piyasada daha çok web sitelerinin daha kullanışlı olmasını isteyen firmalar ya da oyunlar için uygulama yapıldığını görüyoruz.
Peki iş uygulamalarında durum nedir? iş uygulamaları için çok birşey henüz göremedim ama Dynamics CRM'in metro arabirimi için ekran görüntüleri nette dolaşmaya başladı. Ben de 1-2 görüntüyü sizinle paylaşmak istedim. Bakalım beğenecek misiniz?

 

 

Şakacı Microsoft - Bu sefer de Update Rollup 9'u yediler

Bizim sektörde eski olanlar bilir CRM'in 1.2 versiyonundan sonra 2.0 versiyonu hiç çıkmadan 3.0 versiyonu çıkmıştır. Microsoft bunun için biz kendi içimizde internal olarak geliştirdik yeni özellikler daha katarak 3.0 olarak sunmayı daha uygun bulduk demişti. Bu durum şimdi de Update Rollup 9'un başına geldi. Bildiğiniz üzere Update Rollup 9 ile birlikte Microsoft, Cross Browser Support gibi çok önemli özellikleri getirecekti ama planlarda sarkma olmuş. Bu nedenle 9'u atlamışlar.

Update Rollup 10 ile birlikte Office 2013,SQL Server 2012, Windows 8 ve IE 10 desteği gelmekte. Bence siz siz olun test sistemine kurmadan live serverlara kurmayın :)

Daha detaylı bilgiyi aşağıdaki linkleri takip ederek bulabilirsiniz.

Update Rollup 10 for Microsoft Dynamics CRM 2011 is available. This article describes the hotfixes and updates that are included in this update rollup. This update rollup is available for all languages that are supported by Microsoft Dynamics CRM 2011.

Important note What happened to update Rollup 9 for Microsoft Dynamics CRM 2011? 

Update Rollup 9 for Microsoft Dynamics CRM 2011 will not be released because of a delay in the Q2 Service Update. Update Rollup 10 fixes all the issues that would have been included in Update Rollup 9. For more information, go to the following Microsoft Dynamics website: 

https://community.dynamics.com/product/crm/crmnontechnical/b/crmconnection/archive/2012/07/06/q2-2012-service-update-new-delivery-schedule.aspx

Additional Functionality:

Support with Microsoft Dynamics CRM 2011 and Microsoft Office 2013 
Support with Microsoft Dynamics CRM 2011 and Windows 8 
Support with Microsoft Dynamics CRM 2011 and Internet Explorer 10

Update Rollup 10 includes performance enhancements for retrieve multiple queries and Quick Find.  For more information refer to the sections titled “Optimizing the Performance of Queries against Large Datasets” and “Optimizing the Performance of Quick Find Queries” within the Optimizing and Maintaining the Performance of a Microsoft Dynamics CRM 2011 Server Infrastructure white paper.