cub-e.net

just coding...

Plug-in Registration Tool’u Kullanmak

Ilk plug-in’imizi yazdıktan sonra geldi onu CRM içerisine eklemeye. Bu işlem için Plugin Registration Tool dediğimiz CRM SDK içerisinden cikan bir uygulamayi kullanacagiz. Bu uygulama sayesinde hem plug-in hem de custom workflow’lari CRM içerisine ekleyebilmekteyiz.

 

SDK\Tools\PluginRegistration\PluginRegistration.exe yolu ile ulaşabileceğiniz uygulamayi calistirdiginizda sizden bağlanmak istediğiniz server ile ilgili bilgileri isteyecektir.

 

Dynamics CRM Online için Online’i seçebilirsiniz ama unutmayin ki Office 365 hesabi kullaniyorsaniz Office 365’i seçmeniz gerekmekte. Ikisi de Online ama yetki mekanizmaları farkli.

 

Eger On-Premises yani Microsoft disinda host edilen bir CRM’e erişmek istiyorsaniz o zaman On-Premises seçeneğini seçmeniz gerekmekte. IFD’ler için de bu seçeneği kullanabilirsiniz.


 

Eger “Always display list of available orgs” seçeneğiniz seçerseniz bağlanmak istediğiniz kullanici ile erişebileceğiniz organizasyonlarin listesini görüntüleyebilirsiniz.

Basarili bir sekilde giriş yaptiginizda asagidaki gibi bir ekran karsiniza gelecektir.


 

1.       Plug-in’i sisteme kayit edebilmek için yukarıdaki “Register” düğmesine tikliyoruz ve ardindan “Register New Assembly” ‘ ye tikliyoruz.

2.       Step#1 bolumundeki … düğmesine tikliyarak kayit ettirmek istediğimiz .dll’i seçiyoruz.


          


3.       Step#2 bolumunde kaydetmek istediğimiz plug-in class’ini seçiyoruz.

4.       Step#3 bolumunde 2 tane seçeneğimiz bulunmakta;

a.       Sandbox : Bu seçeneği seçer isek plug-in bir Sandbox içerisinde calisacak yani dis ortamdan izole edilecek. Boylece bu plugin sistem içerisinde calisacak ama sisteme zarar veremeyecek ve izlenebilir olacak. Kisacasi yazdiginiz bir plug-in production ortamina tasimadan once test etmek için bu senecegi kullaniyoruz.

b.      None : hiçbir kisitlama olmadan .dll içerisindeki kodlar icra edilir.

5.       Step#4 bolumunde ise plug-in nerede duracagini seçmemizi istemekte.

a.       Database: tavsiye edilen yöntem budur. Boylece dll işletim sistemi kaynakli sorunlardan izole edilir. Veritabani yedeklendikçe dll de içinde olduğundan yedeklenecektir ve herhangi bir durumda geriye dönmenizi sağlar.

b.      Disk: Sistemin varsayilan dll yerleştirme yeri olan CRM Kurulum Yolu\Server\bin\assembly klasörü içerisinden dll’i okur.

c.       GAC: Global Assembly Cache üzerinden dll’leri okur.


Bu noktada bir not ileteyim eger server üzerinde calisan kodu debug etmek isterseniz yine server\bin\assembly klasörüne .pdb uzantili debug symbol’lerinizi yerleştirmeniz gerekmekte.

 

Ikinci bir not da eger serverda custom code execution kapaliysa açmak için server üzerinde powershell ile su kodlari calistirmaniz gerekmekte:

 

Add-PSSnapin Microsoft.Crm.PowerShell

$setting = get-crmsetting customcodesettings

$setting.AllowExternalCode="True"

 

Degerleri kontrol etmek için bu komutlari calistirabilirsiniz :

set-crmsetting $setting

get-crmsetting customcodesettings

 

Ayarlari tersine çevirmek için “AllowExternalCode”’a “False” değerini vermeniz yeterli.


Butun bu adimlari tamamladıktan sonra “Register Selected Plugin” düğmesine tikliyoruz. Plug-in kaydetmediki ilk adimi gerçekleştirmiş olduk sira diğer adimlarda :)

 

Bu noktada plug-in’i hangi event(ler) için yazdiysak onun için adim(lar) eklememiz gerekiyor. Plug-in anlatirken hep bir olay olduğunda yani veritabanina bir kayit eklendiğinde, silindiğinde ya da bir alani güncellendiğinde tetiklenebilir gibi orneklerle anlatıyoruz ama aslinda olay bundan daha derin gelin simdi custom entity’ler için yani bizim oluşturduğunuz varliklar için sistem üzerinde nasil olaylarin tetiklenmelerini yakalayabiliyoruz. Literaturde bu konu message olarak geçmekte yani CRM eventlarina mesaj adi verilmekte.

 

Message Name

Ownership Type

Message Availability

Entity Supported Deployment

Assign

User-owned entities only

Server

Server

Create

User-owned and organization-owned entities

Both

Server

Delete

User-owned and organization-owned entities

Both

Server

GrantAccess

User-owned entities only

Server

Server

ModifyAccess

User-owned entities only

Server

Server

Retrieve

User-owned and organization-owned entities

Both

Server

RetrieveMultiple

User-owned and organization-owned entities

Both

Server

RetrievePrincipalAccess

User-owned entities only

Both

Server

RetrieveSharedPrincipalsAndAccess

User-owned entities only

Both

Server

RevokeAccess

User-owned entities only

Server

Server

SetState

User-owned and organization-owned entities

Both

Server

SetStateDynamicEntity

User-owned and organization-owned entities

Both

Server

Update

User-owned and organization-owned entities

Both

Server

 

Listede de yer aldigi gibi Retrieve, RetrieveMultiple yani veritababindna sorgulama ya da SetState yani bir kaydin durumun değişmesi gibi birçok farkli mesaj için plug-in’i tetikletebilmekteyiz.

 

Lutfen sunu unutmayin yukarıdaki liste sadece custom entity’ler için campaign, campaignactivity, list gibi entity’ler için farkli mesajlar da mevcut tum listeye SDK içindeki “Message-entity support for plug-ins.xlsx” isimli dosyadan ulaşabilirsiniz.

 

Simdi yeni bir adim ekleyerek bir mesaj için plug-in’imizin tetiklenmesini saglayalim. Bunun için plug-in üzerinde sag tuşa tıklayarak ya da yukarıdaki “Register” düğmesine tıklayarak acilan menüden “Register New Step”’e tikliyoruz. Karsimiza asagidaki gibi bir pencere cikacak:


 

Message:  Yukarida bahsettigim mesajlardan birini buraya yazabilirsiniz. Hangi mesaji yazarsaniz plug-in bu olay icin calisacak. Create/Update gibi mesaj isimleri yazarken otomatik olarak tamamlamaya calistigini göreceksiniz. Her bir mesaj icin ayri step’ler tanimlaniz gerekmektedir.

Primary Entity: Bu plug-in hangi entity yani varlik üzerinde calisacak. Buraya account, contact gibi bir varlik adi yazabilirsiniz.

Secondary Entity: Bu plug-in’i ikinci bir varlik icin tanıtacaksak buraya yazabiliriz.

Event Pipeline Stage of Execution: Bu kisimda plug-in’i pre yani veri veritabanina gitmeden mi calistiracagiz yoksa post yani kaydedildikten sonra mi calistiracagiz bunu seçiyoruz.

Execution Mode: (sadece post da ikisinden birini seçebilmekteyiz) kod senkron yani sistemde kullanici ile etkileşimli ayni anda mi hareket etsin yoksa asenkron yani kullanicidan bagimsiz arka tarafta sessizce mi calissin bunu seciyoruz.

Deployment: Bu kod server da mı calissin yoksa Outlook client gibi offline modda da calissin seçeneğidir.

 

Bu yukarida acikladigim bolumler standart ayarlar. Yani her plug-in step’i tanimladigimizda mutlaka bakmamiz gereken ayarlar. Ekranda bir de farkli ayarlar var onlara da bakalim.


Event Handler: Bu kodun calismaya baslayacagi class’in seçildiği yerdir. Cok değişik bir hareket yapmadiginiz surece zaten plugin registration tool otomatik bir sekilde “Execute” metodunu görecek ve orayi seçecektir.

Name: Sistem bu step icin otomatik bir atamakta ama değiştirmek isterseniz buradan yapabilirsiniz.

Run in User’s Context: Belki dokunmaniz gereken noktalardan biri olabilir. Bu kodu hangi kullanici yetkileriyle calistirmak istiyorsaniz onu seçebilirsiniz. Standartta ayari “Calling User” yani hangi kullanici bu işlemi yaparsa seçilidir.

ExecutionOrder: eger ayni varlik içinde ve ayni mesaj icin başka bir plug-in daha varsa buraya sira numaralari vererek hangisini once-sonra calisacagini belirleyebilirsiniz.

 

Unsecure ve Secure Configuration’larin ne ise yaradigina zaten “Plug-in Yapici Metodlari” basligi altinda değinmiştim.

 

Butun gerekli ayarlamalari yaptıktan sonra en allta bulunan “Register New Step” düğmesine tıklayarak işlemi tamamlıyoruz.  Artik plug-in’i test edebilirsiniz.

Plug-in Yapici Metodlari

Bir plug-in için Microsoft Dynamics CRM’de opsiyonel olarak kullanabileceğiniz yapici metod(constructor) türleri mevcuttur. Hic parametre vermeden yapici metod cagirabileceginiz gibi bir ya da iki parametre vererek de cagirabilirsiniz.

SamplePlugin isimli plug-in için 3 cesit yapici metod ornegi asagidaki gibidir.

public SamplePlugin()

public SamplePlugin(string unsecure)


public SamplePlugin(string unsecure, string secure)


Yapici metodun ilk parametresi public yani unsecure bilgi yigini içermelidir. Ikinci parametre ise non-public (secure) bilgi yigini içermelidir. Buradan da anlayabileceğiniz uzere secure string encrypted yani sifrelenmis veri unsecure ise unencrypted yani sifrelenmemis değer içermelidir. Office Outlook client da calisan bir plug-in yazdiysaniz bilmelisiniz ki secure string offline yani cevrimdisi modda calismayacaktir.

Bu bilgileri bir plug-in’e Plugin Registration Tool vasitasiyla bir step’in kaydi sirasinda sisteme iletiyoruz. Bu mesajlar için ayrilmis 2 alan bulanmaktadır.

Step içerisinde bu ayarlamalari yaptıktan sonra yazmis olduğumuz degerlere kod içerisinden asagidaki gibi ulaşabilirsiniz.

private readonly string _unsecureString;

private readonly string _secureString;

 

public AdvancedPlugin(string unsecureString, string secureString)

{

    if (String.IsNullOrWhiteSpace(unsecureString) ||

          String.IsNullOrWhiteSpace(secureString))

    {

        throw new InvalidOperationException

             ("Unsecure and secure strings are required
               by the Advanced Plug-in, but not provided."
);

    }

 

    _unsecureString = unsecureString;

    _secureString = secureString;

}

Müşterinin Kalbine Giden Yol Teknolojiden Geçer - Bolum 2

Çözüm nedir peki…

Amacımız basit aslında “Müşterilerin tercih ettiği markaları yaratan ve vazgeçilmez olabilmek.” Bu durumda ne yapmak gerekiyor? İşte bu soruya iki yönden bakarak farklı cevaplar vermek gerekiyor.

1. İnternet’ten doğru müşteri kitlesine ulaşın : Websiteniz eğer arama motorlarında (google, yandex vb.) üst sıralarda yer almıyorsa size ulaşamayacaklardır. O zaman siteniz için SEO(Search Engine Optimization) çalışmaları yapmak gerekmektedir. SEO çalışmaları ile siteniz uygun kelimeler için üst sıralarda yer alacaktır. Bunun haricinde sitenizin facebook ve twitter’da yer alması ve mümkünse buralarda  doğru kitleye uygun reklam vermeniz çok önemli olacaktır.

Ek olarak yazımın başında artan mobil cihaz ve tablet kullanıma örnekler vermiştim. Bu durumda websitemizin bütün cihaz ve browserlardan(internet explorer, chrome vb..) düzgün görüntülenecek şekilde ayarlanması gerekmektedir.

 

Eğer işiniz için uygun ise iOS, Android ve Windows Phone gibi tablet ve cep telefonlarında çalışan işletim sistemlerine uygun birer uygulama yazdırmanız da gerekebilir. Yine yapılan araştırmalarda mobil uygulamaların web sitelerinden daha fazla kullanıldığı ve bağımlılık yaptığı da bir gerçek.

 

2. İşinizi yönetmek için bütünleşik sistemler kullanın : Müşteriler cep telefonları, tabletler vb.. cihazlar ve yazılımları kullanıyorlar da siz bundan farklı mısınız? Hangi ürün ya da hizmeti ürettiğiniz önemsiz sonuçta siz de işinizi yönetmek için bunlara mecbursunuz. Bu durumda sizin işinizi yönetmek için kullandığınız yazılımın da iş yapmak için kullandığınız bütün enstrümanlara erişmesi ve en önemlisi bunu cihaz, zaman ve mekan fark etmeksizin sizin kullanımıza sunmalı.

 

Bu noktada size tam da bütün bunları sunabilen bir yazılımı size tanıtacağım;

Microsoft Dynamics CRM. Yazılım 3 temel modül üzerine oturmuş bulanmaktadır.

Sales Automation : Bütün satış süreçlerinizi en temel ihtiyaçlarınızdan başlayarak karmaşık yatay ve dikey satış stratejilerine varana kadar kolay ve hızlı bir biçimde yönetmenizi sağlar. Bu bölümde müşteri kavramı üzerine oturtulmuş 360 derecelik görünüm müşterinizin sizinle olan bütün temas noktalarını göz önüne serecek ve doğru zamanda doğru hamleyi yapmanız için size yol gösterecektir.

 

Marketing : Potansiyel ve mevcut müşterilerinizi elde tutmak için hazırlanmış bu modülde pazarlama kampanyalarınızı, fuarları, pazarlama aktivitelerinizi yönetebilir bunları karşılaştırabilirsiniz. Böylece size en faydalı sonucu üreten pazarlama sürecinizi bulup bunun üzerine yoğunlaşabilirsiniz. Pazarda ürünüzün konumunu ve rakiplerle olan durumlarınızı da gözlemleyip buna göre bir sonraki hamlenizi planlayabilirsniz.

 

Customer Service : Müşterilerinize verdiğiniz servis ve hizmetleri kolayca yönetip ölçeklendirebileceğiniz bu bölüm Dynamics CRM içerisindeki birlikte çalışma özelliğini de ön plana çıkarmaktadır. Sahada gezen yada yerleşik servis hizmeti veren bütün firmaların ihtiyaçlarını karşılayacak şekilde dizayn edilmiştir. Böylece hızlı ve seri bir şekilde müşterinize hizmet sunmayı kolaylaştırabilirsiniz.

 

Extend : Bu bölümler haricinde bir de CRM Extended özelliğinden söz etmek gerekir. Dynamics CRM'i diğer yazılımlardan ayıran en büyük özelliği genişleyebilir bir mimariye sahip olmasıdır. Kısacası bizler CRM üzerinde iş gereksinimlerinize uygun nesneleri ya da alanları açıp bunu CRM içinde gelen bir parçaymış gibi kullanmanızı sağlayabiliyoruz. Bu özellik sayesinde CRM sadece yukarıda bahsettiğimiz işlevleri yerine getirmenin yanısıra sizin tam işinize uygun bir şekilde şekil değiştirebilmektedir. Bu özellik sayesinde Dynamics CRM'in kullanıldığı bütün firmalarda benzersiz bir hale bürünmekte ve o firmanın ihtiyaçlarına cevap verecek bir hale gelmektedir.

Harvard Business School’dan Prof.Dr. Rajiv Lal diyor ki: “CRM programları uygulanırken, yalnızca sistemler değil, şirket içi akışlar, müşteriye dair süreçler ve teşvik politikaları da değişmeli; çünkü müşteri merkezlilik şirketin yalnızca teknolojik ya da satış odaklı gücü değil, kültürel olgusudur. Kültürel değişimi sağlamadan müşteri bağlılığını garanti edemezsiniz.”

 

İşte bu özellikleri sayesinde Dynamics CRM firmanızın ihtiyaçlarına göre şekillenir ve işinizi yönetmede size yardımcı olur ve birlikte çalışmayı arttırarak Prof.Dr. Rajiv Lal’ın dediği gibi kültürel değişimi sağlar.

 

 

grafik ve rakamlar için kaynak http://www.webrazzi.com

Müşterinin Kalbine Giden Yol Teknolojiden Geçer - Bolum 1

Bizde meşhur bir atasözü vardır “erkeğin kalbine giden yol midesinden geçer” derler. Günümüzde bu sözü iş dünyasına odakladığımızda müşterinin kalbine giden yolda teknolojisinin olması bizi hiç de şaşırtmamalı aslında.

Rakamlar yalan söylemez…

Apple’ın 10 Eylül’de tatnıttığı  iPhone 5c ve iPhone 5s  bir haftada şimdiye kadar bütün iPhone’ların ilk hafta satışlarını geçti. Apple yaptığı açıklama ile bir haftada 9 milyon iPhone 5C ve iPhone 5S satıldığını duyurdu. iPhone 5 ile karşılaştırdığımızda geçen sene yine Eylül ayında tanıtılan iPhone 5 ilk haftasında 5 milyon rakamına ulaşmıştı.

Geçen sene tek ürünle 5 milyonu yakalamasına karşılık 2 ürünle toplamda 9 milyon satışa ulaşmış oldu.

Mobil kullanım oranları her geçen gün artıyor ve yapılan araştırmalar daha uzun süre bu büyümenin devam edeceğini öngörüyor. IDC‘nin yayınladığı rapora göre tablet bilgisayarlar, kişisel bilgisayarların yıllık üretimini 2015 sonu itibariyle geçecek.

Akıllı telefonlar ve tabletlerin bulunduğu mobil cihazlarda geçen yıl %30.3 büyüme yakalamasına göre bu yıl hafif bir gerileme ile %27.8 büyüme bekleniyor. Buna karşın PC üretiminin 2013 yılı itibari ile %10 düşeceği tahmin ediliyor. Akıllı telefonların anormal büyümesini sürdüreceği ve 1.4 milyar akıllı telefonun üretiminin gerçekleşeceği de beklentiler arasında. Dikkat çeken bilgilerden birisi de tabletlerin en büyük rakibinin yine mobil bir cihaz olan akıllı telefonların büyüyen ekranları olması.

Şirket websitesini yaptık herşey bitti…

Hal böyle olunca oturup düşünmek gerekiyor, peki biz işimizi teknolojiye uyarlayabildik mi? ya da internet ve sosyal medyanın gücünü doğru kullanabiliyor muyuz? İşte bu noktada en çok yapılan hata şirket web sitemizi yaptık herşey bitti şeklindeki yanlış düşüncede yatmakta. Türkiye’den örnek verecek olursak IAB Türkiye’nin sunduğu rapora göre ‘display’, arama raporu, mobil reklam, ilan, e-posta, oyun içi reklam gibi oluşan internet reklam yatırımları toplamına göre 2013’ün ilk 6 ayında internet reklam pazarı hacmi yarım milyar TL’yi aşarak 541.8 milyon TL olarak gerçekleşti.

Execute Metodu

Dynamics CRM plug-in mimarisi isimli makalede InputParameters ve Output Parameters konularindan bahsederken Request ve Response konularina değinmeden geçtim konu havada kalmasin diye ayri bir baslik altinda incelemenin daha doğru olacagini duşundum. (Ilgili makaleye buradan ulasabilirsiniz)

CRM Servisi içerisindeki Execute Metodu Request ve Response yani Talep ve Yanit seklinde calismaktadir. Sistem üzerinde yapacaginiz butun hareketleri bu sekilde yaopabilirsiniz ki buna ayri metodlari bulunan Create, Update, Delete bile dahildir.

Konu aslinda basit olduğundan çokça açıklanacak bir tarafi da yok gibi ama calisma yapisina bakacak olursak siz bir talepte bulunursunuz o da size yanit verir diye kisaca özetleyebiliriz.



Execute metodunun alabileceği Request’lere makalenin sonunda yer vereceğim. Ama oncelikle sunu da belirteyim ki Request nesnesi opsiyonel parametrelere de sahiptir. Bu parametreler sunlardir.


Parameter

Description

Messages

SolutionUniqueName

Islemin yapilacagi Cozumun Adi

AddPrivilegesRoleRequest

CreateRequest

DeleteRequest

MakeAvailableToOrganizationTemplateRequest

UpdateRequest

SuppressDuplicateDetection

Eslenen kayitlar bulunsun mu bulunmasin mi

CreateRequest

UpdateRequest

 

Kullanima dair ornek kod ise su sekilde;

Account target = new Account();

target.Name = "Fabrikam";

CreateRequest req = new CreateRequest();

req.Target = target;

req["SuppressDuplicateDetection"] = true;

req["SolutionUniqueName"] = "MySolutionName";

CreateResponse response = (CreateResponse)_service.Execute(req);


Eger isterseniz Execute Metodunu asenkron olarka da calistirabilirsiniz. Bu ekranda donmalari ve kullanicilarin ekrandan işlem bitmeden cikmalarini önleyecektir. Bunun için yapmaniz gereken ExecuteAsyncRequest mesajini geçmek olacaktır.

ExecuteMultipleRequest ile de toplu daha aktarimlarinda kullanabileceğiniz mesajdir.

xRM Mesajlarinin tamamina bu adresten ulaşabilirsiniz : https://msdn.microsoft.com/en-us/library/gg334698.aspx

CRM mesajlarina da bu adresten ulaşabilirsiniz : https://msdn.microsoft.com/en-us/library/gg309482.aspx

Dynamics CRM 2015 Plug-in Mimarisi

Sizlere bugun Dynamics CRM icerisindeki Plug-in Mimarisinden soz etmek isitiyorum. Plug-in’ler IPlugin arayuzunden turetilmis kod parcaciklaridir ve CRM’in icerisinde belli bir sira icerisinde calisirlar. Kabaca tariff edersek bunlar birer .dll dosyalaridir ve CRM’e bu dosyaya ne zaman bakmasi gerektigini biz soyleriz. Plug-in’ler olay bazli olarak calisirlar. Yani herhangi bir kayit olusturuldugunda, guncellendiginde, silindiginde vb.. olaylar oldukca biz ilgili ayari yapmissak calisirlar.

Plug-in’lerin en güzel yani pre ve post olarak calismaya ayarlanabilmeleridir. Plug-in’ler olay bazli calisirlar demiştim iste bu olay olmadan önceki kaydin son hali üzerinden ve olay olduktan sonraki hali üzerinden işlem yapmaniza olanak sağlarlar.

Plug-in’lerin calismasi icin Microsoft.Xrm.Sdk.dll ve Microsoft.Crm.Sdk.Proxy.dll dosyalarinin referanslara eklenmis olmasi gerekmektedir. Tam yeri gelmisken bahsedeyim eger siz ucuncu parti bir .dll kullaniyorsaniz (yani kendi yazdiginiz siniflarin oldugu ya da diger uygulamalardan aldiginiz) bu .dll’lerin ilgili serverin assembly klasöründe olduğundan emin olun yoksa plug-in calismayabilir.

public class MyPlugin: IPlugin

{

    public void Execute(IServiceProvider serviceProvider)

    {}

}

 

Detaya inecek olursak IPlugin arayuzunden turerilmis bir sinif içerisinde Execute metodu yer almalidir. Bu metod parametre olarak IServiceProvider arayuzunden türetilmiş bir bilgi yiginini içerir. Yani CRM kod içerisinde yapacagimiz işlemlerde bize CRM içerisinde olan olaylardan bize bilgi tasir ki biz de bu bilgileri kodun içerisinde kullanalim. Ne gibi veriler içinde tasimakta derseniz cok fazla detay verebilirim mesela su anda hangi kullanicinin işlem yaptigi, tasidigi nesnenin turunu, eger pre-plugin ise değerlerin değişmeden önceki halini vb… bir cok veri içermekte.

Simdi sirasiyla gelen veri yiginlarini inceleyelim.

Plug-in Execution Context

Calisma zamaninda oluşan veriler bu yapi içerisinde yer almaktadır. Bunlara kodun calisma hiyerarşisi ve entity bilgileri de dahildir.

IPluginExecutionContext context = (IPluginExecutionContext)

    serviceProvider.GetService(typeof(IPluginExecutionContext));

Bir olay olduğunda kayit edilmiş bir plug-in’e bu veriler aktarılır aslinda o anda calisan butun plug-in’lere bu veriler aktarılır ama execution pipeline denen sralamaya uyarak aktarılır once pre sonra post pluginlere veri aktarılır. Hatta siz pre-plugin ile bir veriyi değiştirirseniz post-plugin’e o veri aktarılır.

Tabii burada yeri gelmişken bahsedeyim burada sozu edilen kodlarin sonsuz döngüye girmemeleri için sistem içerisinde Depth denen bir anahtar yer almaktadır. Varsayilanda bu bir plugin’i arda arda 8 kere calistirir ve durdurur. Boylece sistemin bir kod yanlisigi ile çökmesi engellenmiştir. Bu değer değiştirebilir bir değerdir.

Sistemin calismasi da aslinda su mantiga dayanmakta;



Yani Event Execution Pipeline’a bir mesaj girdiginde Pre-Event -> Platform Islemleri (Yani CRM’in kendi ic isleyisi) -> Post-Event seklinde islenmekte. Bu dongu senkron ve asenkron yapilar için böyle ilerlemekte.

Organization Servise Erisme

CRM içerisinde işlem yapabilmek her zaman bir servis nesnesine ihtiyaç duymaktayız. Iste kullanicinin hareketi neticesinde acilmiş bu servisi bize kullanmamiz için geçirmekte serviceProvider nesnesi.

IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));

IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

Notification Servise Erisme

Senkron olarak işaretlenmiş plug-in’ler Microsoft Azure Service Bus’a veri mesaj gondebilirler. IServiceEndpointNotificationService turunden olan bu bilgi Azure Service Bus’a gönderilir. Bu sayede Azure Service Bus içerisinde endpoint oluşturulmuş ve endpoint’i dinleyen 3. Parti bir servis ile iletişime geçebilmektedir.

Input ve Output Parametreleri

InputParameters nesnesi su anda yapilan hareketin yani su anda tetiklenmiş olayin bilgisini ve su anda üzerinde işlem görülen entity’nin bilgisini içerir. Bu bilgiye erişmek için “Target” nesnesine bakmamiz gerekmektedir ve bu nesneyi alip Entity class’ina çevirebiliriz. Input nesneleri Request message yapisindadir.

if (context.InputParameters.Contains("Target") &&

    context.InputParameters["Target"] is Entity)

{

    // Obtain the target entity from the input parameters.

    Entity entity = (Entity)context.InputParameters["Target"];

}

Fakat unutmaniz gereken bir nokta var her mesaj Entity nesnesini içermeyebilir. Ornegin DeleteRequest; Entity değil EntityReference dondurur.

if (context.InputParameters.Contains("Target") &&    context.InputParameters["Target"] is EntityReference)

{

    // Obtain the target entity from the input parameters.

    EntityReference entity = (EntityReference)context.InputParameters["Target"];

}

Benzer sekilde OutputParameters da Response message içerir. Ama sunu unutmayin ki senkron post-event ve asenkron plug-in’ler OutputParameters turunden nesneler içerirler.

Pre ve Post Entity Imajlari

Bu konuyu okurken sakin Ingilizce Images kelimesinin resim anlamiyla karistirmayin buradaki anlami verinin  o anki goruntusu seklinde ifade etmek daha doğru olur. Aslinda tam Ingilizce tabiriyle snapshot. PreEntityImages ve PostEntityImages verileri sistem tarafından size gönderilir ama siz ozellikle beklediğiniz alanlari plug-in’in kayit işlemi sirasinda sisteme soyleyebilrsiniz.

Burada tabii ki bir mantik çerçevesi olduğunu da unutmayin Create aninda bir nesnenin preImage’i olamayacagi gibi Delete işleminden sonra da bir postImage beklemeyin.

Simdi bu bilgileri verdikten sonra butun bunlari birleştirerek bir plug-in temel goruntusune bakalim.

Aciklamalar kodun içinde.

using System;

using System.ServiceModel;

using Microsoft.Xrm.Sdk;

 

public class MyPlugin: IPlugin

{

    public void Execute(IServiceProvider serviceProvider)

    {

        // Sandbox içerisinde calisan plug-in’ler TracingService’den yararlanabilirler.

        ITracingService tracingService =

            (ITracingService)serviceProvider.GetService(typeof(ITracingService));

 

        //Context’i elde ediyoruz.

        IPluginExecutionContext context = (IPluginExecutionContext)

            serviceProvider.GetService(typeof(IPluginExecutionContext));

 

        // InputParameters’dan gelen verileri aliyoruz

        if (context.InputParameters.Contains("Target") &&

            context.InputParameters["Target"] is Entity)

        {

            // Target ile entity’e erisiyoruz.

            Entity entity = (Entity)context.InputParameters["Target"];

 

            // Beklediginiz entity geldi mi diye kontrol ediyoruz.

            if (entity.LogicalName != "account")

                return;

 

            // CRM Servisi elde ediyoruz

            IOrganizationServiceFactory serviceFactory =

                (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));

            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

 

            try

            {

                / Iste buradan sonrasi size kalmis istediğiniz kodu yazabilirsiniz.

            }

 

            catch (FaultException<OrganizationServiceFault> ex)

            {

                throw new InvalidPluginExecutionException("An error occurred in MyPlug-in.", ex);

            }

 

            catch (Exception ex)

            {

                tracingService.Trace("MyPlugin: {0}", ex.ToString());

                throw;

            }

        }

    }

}

Plug-in’ler Icerisindeki Hatalari Yakalamak

Bu makalede plug-in hata yakalama mekanizmasina deginecegim. Senkron calisan plug-in’ler sandbox’da olsun ya da olmasin herhangi bir hata ile karsilastiklarinda geriye kullaniciya uyari gösterecek bir yapiya sahiptirler ve bu durumu Dynamics CRM yönetir. Yani siz sadece hatayi geriye dondurursunuz.

Asenkron calisan yapilar için CRM içerisinde System Job(AsyncOperation) isimli bir bolum yer almaktadır. Iste asenkron hatalari da buradan takip edebilirsiniz.

Senkron calisan plug-in’lerde ise hata mesajlarini InvalidPluginException turunden bir hata göndererek kontrol edebilirsiniz. Message ozelligine herhangi bir değer gönderirseniz sistem onu gösterir aksi takdirde varsayilan hata mesaji görüntülenir.

Ayrica sunu da belirteyim Sandbox içinde calismayan plug-in’ler için hata mesajlari sistemin calistigi serverdaki Olay Goruntuleyici içerisinde Uygulama hatalari bolumu içerisine de kaydedilir.

Plug-in içerisinde uygun gordugunuz yerde su sekilde hata fırlatabilirsiniz:

throw new InvalidPluginExecutionException("The account number can only be set by the system.");

Bir plug-in hata firlattiginda CRM su sekilde bir uyari vermektedir.



Log dosyasini incelediğimizde de detaylari almaktayız. Bizim gönderdiğimiz mesaja dikkat edin lütfen;

Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: The account number can only be set by the system.

Detail: <OrganizationServiceFault xmlns="http://schemas.microsoft.com/xrm/2011/Contracts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">

  <ErrorCode>-2147220970</ErrorCode>

  <ErrorDetails xmlns:a="http://schemas.datacontract.org/2004/07/System.Collections.Generic">

    <KeyValuePairOfstringanyType>

      <a:key>CallStack</a:key>

      <a:value i:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">

        at Microsoft.Crm.Sdk.Samples.AccountNumberPlugin.Execute(IServiceProvider serviceProvider)

        at PluginProfiler.Library.PluginAppDomainProxy.ExecuteCore(Stopwatch watch, ProfilerExecutionReport report, Object instance, Object executionParameter)

        at PluginProfiler.Library.AppDomainProxy.Execute(ProfilerExecutionConfiguration configuration, ProfilerExecutionReport report)

      </a:value>

    </KeyValuePairOfstringanyType>

  </ErrorDetails>

  <Message>The account number can only be set by the system.</Message>

  <Timestamp>2015-04-08T15:29:50.7437667Z</Timestamp>

  <InnerFault i:nil="true" />

  <TraceText i:nil="true" />

</OrganizationServiceFault>

Ama siz temel bir hata yönetim sinifina sahip olmak ve yazdiginiz butun kodlarda kullanmak isterseniz su sekilde bir Exception mimarisini yazdiginiz kodda kullanabilirsiniz. Fakat burada unutmamaniz gereken nokta siz hata fırlatmaz hatalari kendiniz Handle ederseniz CRM kullaniciya hata mesaji göndermeyecektir. Bunun için InvalidPluginException’i siz firlatmalisiniz.

Asagidaki kodu Plug-in’ler içerisinde kullanmanizi pek tavsiye etmem cunku sistem gayet detayli bir geri bildirim yapmakta ama bir hata aliyor ve isin içinden cikamiyorsaniz bu kodu denemenizde fayda olabilir. Hatayi serverda ya da CRM içinde bir yerlere yazdırıp incelebilrisiniz. Yine uygun gordugunuz bir yerde kullaniciya hata göstermek istiyorsaniz “InvalidPluginExecutionException” firlatmayi unutmayin.

catch (FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault> ex)

                    {

                        Console.WriteLine("The application terminated with an error.");

                        Console.WriteLine("Timestamp: {0}", ex.Detail.Timestamp);

                        Console.WriteLine("Code: {0}", ex.Detail.ErrorCode);

                        Console.WriteLine("Message: {0}", ex.Detail.Message);

                        Console.WriteLine("Inner Fault: {0}",

                            null == ex.Detail.InnerFault ? "No Inner Fault" : "Has Inner Fault");

                    }

                    catch (System.TimeoutException ex)

                    {

                        Console.WriteLine("The application terminated with an error.");

                        Console.WriteLine("Message: {0}", ex.Message);

                        Console.WriteLine("Stack Trace: {0}", ex.StackTrace);

                        Console.WriteLine("Inner Fault: {0}",

                            null == ex.InnerException.Message ? "No Inner Fault" : ex.InnerException.Message);

                    }

                    catch (System.Exception ex)

                    {

                        Console.WriteLine("The application terminated with an error.");

                        Console.WriteLine(ex.Message);

 

                        // Display the details of the inner exception.

                        if (ex.InnerException != null)

                        {

                            Console.WriteLine(ex.InnerException.Message);

 

                            FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault> fe = ex.InnerException

                                as FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault>;

                            if (fe != null)

                            {

                                Console.WriteLine("Timestamp: {0}", fe.Detail.Timestamp);

                                Console.WriteLine("Code: {0}", fe.Detail.ErrorCode);

                                Console.WriteLine("Message: {0}", fe.Detail.Message);

                                Console.WriteLine("Trace: {0}", fe.Detail.TraceText);

                                Console.WriteLine("Inner Fault: {0}",

                                    null == fe.Detail.InnerFault ? "No Inner Fault" : "Has Inner Fault");

                            }

                        }

                    }

 

Microsoft Dynamics CRM Online 2015 Update 1

Microsoft Dynamics CRM Online 2015 Update 1Microsoft Dynamics Marketing 2015 Update 1,  Microsoft Social Engagement 2015 Update 1 (formerly Microsoft Social Listening)and Parature, from Microsoft 15.2.

Updates are in the works for 2015! Read on for changes coming soon.

On this page:

 New features

 Technical Changes

 Release Timing

 How to get the updates

 How to prepare for updates

 Pricing and licensing

 How to stay informed

 Support

New features

These are just a few of the highlights coming:

Dynamics CRM Online

  • Improved navigation and user interface options: Increase adoption with improved user experience, including new UI themes and faster navigation to records.

  • Immersive Excel experience: Now you can use Microsoft Excel Online to do quick analysis right from CRM Online.

  • Excel export completely redesigned. With a single click, you can export to Excel anywhere, including the desktop version of Excel (2007 and later), Excel Online, and other Excel clients.

  • Embedded OneNote: Capture photos, take voice notes, do free-form drawings, and more. Everything is automatically linked with the record in CRM Online.

  • Track email by folder: Folder tracking provides a new and intuitive way to track incoming email activities on any device that supports Exchange. Now you can track your email directly from virtually any device.

  • Social sales: Define rules for creating or updating CRM records from incoming activities. For example, you can now generate leads or opportunities from social posts.

  • Mobile sales: With the new CRM for Phones app, enjoy the same great mobile experience on your phone as you do on your tablet. Nurture your leads and opportunities through the sales process with the new intuitive interface.

  • Integrated Parature knowledge base: Empower agents with knowledge base integrated into daily service interactions, including the ability to both search and receive automated suggestions.

  • Create Office Groups: Collaborate with team members who don't have access to CRM Online with Office Groups. For example, create a group for your sales team, invite other Office 365 users to join the group, and then share documents, email, OneNote notes, and more.

For more details, see What's new for administrators and customizers and What's New in Microsoft Dynamics CRM.

Dynamics Marketing

  • Separation of service bus namespace for SDK and Connector: You can now configure Microsoft Dynamics Marketing SDK and Microsoft Dynamics Marketing Connector for Microsoft Dynamics CRM with different service bus namespaces.

  • Microsoft-owned queues for CRM Online integration: Microsoft Dynamics Marketing now provides managed service buses for CRM Online integration. You don't need to have a Microsoft Azure account and service bus namespace for CRM Online integration.

  • Double opt-in for email marketing: Send an opt-in link to incoming contacts to verify them. Double opt-in helps you to maintain lead quality and remain compliant with regional regulations.

  • Duplicate detection in email messages: Configure your instance so that email messages are delivered only once per email inbox and avoid sending multiple emails to duplicate contact records.

  • CRM integration enhancements: Set up the Microsoft Dynamics Marketing Connector for Microsoft Dynamics CRM with ease. Avoid the hassle of creating a Microsoft Azure namespace and simply leverage the Microsoft managed service bus for integrations with Microsoft Dynamics CRM Online.

  • Assets & media improvements: Tag your assets using multiple keywords and use the improved keyword based search to filter them.

  • Enhancements in analytics using Power BI: Build up your analytics capabilities with the all-new, role-specific Microsoft Dynamics Marketing Connector for Microsoft Dynamics CRM dashboard widgets. Utilize a range of newly exposed OData feeds related to budgeting, lead management, and settings.

For more information about the update, see What's New in Microsoft Dynamics Marketing.

Social Engagement

  • User Interface: Completely redesigned UI throughout the application for an even more intuitive and simplified user experience with visual contextual filtering capabilities.

  • Social Center: User-specific configurable and shareable streams display social posts as they come in and allow you to proactively engage with both your fans and critics from Facebook and Twitter.

  • Social Analytics: Richer data with new visualizations, such as cloud tags, top hashtags, and geo-location for greater insights.

  • Language & Geographic Availability:  Microsoft Social Engagement is available in 110 markets and 19 languages.

Parature

  • Omni-portal: Enterprise organizations with a single public-facing brand presence can now easily deliver online support and self-service knowledge for a variety of departments or product lines, all while using a single service desk to consistently manage the brand's customer support.

  • Enhanced knowledge search capabilities: Advanced search capabilities in the Parature knowledge base deliver more relevant results, with added search filters to search for knowledge based on highest feedback ratings, document type, date added or updated, etc.

  • Multi-lingual service and globalization:  Enable assisted service in local languages with routing based on customer language preference and real-time chat translation.  Provide translations for Knowledgebase articles and portal strings to empower customers with self-service in local languages.

  • Portal specific metrics for reports: Create more accurate reports with metrics provided for each Portal Alias. Capture Key Point Indicators to help identify the efficacy of each Portal Alias.

For more information, download the Parature Spring '15 Release Preview Guide.

Technical Changes

From time to time, we must add and remove items from our supported configurations list to keep current with technology and allow us to provide you the best product possible. Stay tuned for important information about any changes to supported configurations.

Release Timing

The upcoming releases for Dynamics CRM Online, Dynamics Marketing, Social Engagement, and Parature will be available in the second quarter of 2015. Please visit this page periodically to get the most current information about the upcoming versions.

How to get the updates

Dynamics CRM Online

Dynamics Marketing

  • The listed administrator within your organization will be notified by email about the specific timing of your update to the next version. Microsoft will send several reminder communications as the scheduled update approaches.

  • Should this scheduled date not be suitable for your organization, you will have an opportunity to reschedule the date through a service request.

  • Keep looking for emails with more specific instructions for updating Microsoft Dynamics Marketing.

Social Engagement

  • The listed administrator within your organization will be notified by email about the specific timing of your update to the next version. These updates will happen automatically and Microsoft will send several reminder communications, with the details, as the scheduled update approaches.  

Parature

  • The listed administrator within your organization will be notified by email about the specific timing of the update to the next version. Microsoft will send several reminder communications as the scheduled update approaches.

How to prepare for updates

Test the updates in a sandbox environment. We always advise that you preview and test new versions in a non-production environment before you update your live production instances. This will give you the opportunity to verify the compatibility of any customizations that you may have made, or any third-party customizations that are installed. Additionally, testing will also allow you to assess the impact of the upcoming changes on your organization and your users. If you haven't already done so, we strongly advise obtaining a non-production instance.

Browser support for Parature. Parature supports all major browsers and their latest versions, including Internet Explorer, Google Chrome, and Mozilla Firefox. To make sure that you can take advantage of all the enhancements to the Service Desk and Support Portal, make sure that you update your browser to the latest version.

Upgrading to a new version of Dynamics Marketing. We have designed the upgrade process to be as quick, easy, and trouble-free as possible. When there are major version updates, you have some flexibility in choosing when your Microsoft Dynamics Marketing instance should be updated and avoid unexpected feature changes, unavailability, or downtime.

CRM Tablet Uygulamasini Calistirmak

a) Dynamics CRM’I kurdurktan sonra ilgili icon’a basip calistiriyoruz.

 

1.     Let's get set up! ekranindaki kutucuga Dynamics CRM’e girerken kullandiginiz adresi yazmaniz gerekmekte.

 

2.     Sag alt kosedeki ok seklindeki dugmeye tiklanizda siradaki ekran gelecektir.

b)    Kullanici adi ve sifre bilgilerinizi bu ekrana girdikten sonra “Sign In – Oturum Ac” dugmesine basiniz.

1.     Kullanici Adi

2.     Sifre.

3.     Oturumun surekli acik tutulmasi icin isaretleyiniz

4.     Sign in – Oturum Ac dugmesine basiniz.

c)     c) Bu bolumleri gectikten sonra asagidaki ekran gelecek. Bu ekranda baglanti hiziniza bagli olarak bir sure kalabilirsiniz.

d)      d) Iste bu ekrandan sonra Dynamics CRM tablet versiyonu acilacak ve kullanima hazir olacaktir.

Update Rollup 1 (UR1) for Microsoft Dynamics CRM 2015

Update Rollup 1 (UR1) for Microsoft Dynamics CRM 2015 is planned to solve the following 187 issues:

  • Appointment tile only shows the end time of appointment in the CRM for Tablets.
  • Cannot use backspace key to delete value from fields with iOS7 in Safari on iPad.
  • 1: N lookup fields are not populated when using mobile devices.
  • A JavaScript error occurs switching between forms for Facilities/Equipment.
  • A script error occurs when closing a DateTime control in CRM for Tablets.
  • Using the OrgDbOrgSetting tool to set the boolean value SkipGettingRecordCountForPaging to True causes paging to be removed from subgrids.
  • After upgrading to CRM 2015 the fields DeliveryPriorityCode and DeliveryLastAttemptedOn do not appear on all Out of Box Activity Entities.
  • Business Process Flows are not displayed on the Account entity for the System Administrator role.
  • Business Rules do not fire when comparing a decimal field value equal to 0.
  • Cannot Save or Delete Connections when Team Templates are removed.
  • Charts containing option sets ignore the order that is specified.
  • Command bar Enable rules do not work when detecting if an attribute exists in the CRM Client for Outlook.
  • Dependency calculation error occurs when importing a queue item view with an attribute from a custom relationship.
  • The Activities tab in the Social Pane will not display Email Activities containing an invalid HTML format.
  • Ellipses are disappearing when the command bar labels have long names.
  • Extra white space appears between form controls when scrolling in Safari on iOS7.
  • When assigning Team membership via a custom plugin, users receive an error message when attempting to open records owned by the assigned Team.
  • Executing a ApplyRoutingRuleRequest message in code will execute without error but the rule is not applied.
  • Removing or inserting line breaks in response to an HTML email using the web client will cause email font to be lost in some parts of the email body.
  • Incorrect messaging for Marketing Campaigns when using Russian language pack.
  • Incorrect time is displayed when using custom time formats on Activity entities.
  • Loading a child record from a parent can cause parent activities to load on child activity wall.
  • Merging records with same Team as the owner creates unnecessary POA records.
  • CRM for Tablets will not configure for some time zones.
  • On Quote, Order, and Invoice the associated entity navigation bar is not updating with the correct navigation tiles.
  • Outlook crashes when viewing another users items in the calendar, contacts folder, or task folder.
  • Outlook hangs after startup when CRM for Outlook is configured.
  • Parent Account is not populated for Phone Call activites if creating the activity from a subgrid on the Account entity Information form.
  • Quick Find does not work on Articles when added to a Dashboard as a subgrid.
  • Quick View form shows incorrect status reason values when displaying the data on a different entity form.
  • Rendering issues with SharePoint integration when using managed metadata columns in SharePoint.
  • A script error occurs when deactivating a CRM record after viewing the Documents area for SharePoint integration.
  • Resizing a chart pane that contains multiple X Axis categories, one of which is a Boolean field, causes category values to be removed.
  • Resolved Case settings in Case Creation rules are not processing as expected.
  • Resources tile is not present under related navigation for the Site entity.
  • Using the Save and Close button when creating multiple Appointments on the Sales Calendar causes an error to occur.
  • Scroll bar does not appear on Edit Properties and View Properties dialog windows for SharePoint documents.
  • Scrolling appears jittery and does not react to touch in Safari on iOS7 on iPad3.
  • Sent Emails are not promoted to CRM when using Track all Email messages and Server Side Sync.
  • Using Xrm.Page.ui.setFormNotification to set a notification does not work when triggered from a Quick Create form.
  • Solution import fails with error that the LocalizedLabel is required by another solution.
  • Error messages generated when working with Appointment activities appear in a language different than the default selected for the CRM organization.
  • Related navigation tiles are missing from entity forms.
  • Tiles for sub-menu items are missing from horizontal navigation bars.
  • Updating an email address value for a recipient that contains multiple email addresses in CRM causes replies to a previously received email to be sent to the newly updated email address instead of the original email address.
  • The DisplayRules for command bar buttons are not reevaluated after a case record has been reassigned.
  • Regarding information is missing for email activities when going offline.
  • The Reading Pane for Phone Call records are not displayed in CRM for Outlook.
  • The sample currency format that is displayed in the Personal Settings Format tab is displayed incorrectly.
  • Users with Administrative Access Mode are unable to import a solution containing Reports.
  • Attempting to update a Connection entity record that does not have a Connection Role defined results in an error.
  • Asynchronous Plugins that generate a COM Exception enter a failed state instead of being temporarily suspended and cannot be retried.
  • Custom web resources inserted in an iframe on an entity form are not rendered correctly when viewed in the Safari browser on iPad.
  • When adding data to the CRM Fields form in the Microsoft Dynamics CRM 2013 Client for Outlook, that data is not being persisted to the record if the user does not click away from the field to lose focus.
  • When Creating Custom System Views, users may notice that if they leave the Primary Name Attribute on the view, it may not display in the CRM for Outlook Client.
  • Exporting a solutiong containing an SLA record will add a new SLA workflow process to the customizations.xml file each time the solution is exported.
  • Datetime fields with a format setting of Date Only will continue to display time values when viewed in CRM for Tablets.
  • Attempting to filter a lookup using a 1:N relationship results in an error when clicking on the lookup icon if the related field is not already populated.
  • When inserting a template into the body of an email using Internet Explorer, the template is inserted at the top of the email body instead of at the expected cursor location.
  • Trace logging for the CRM Unzip Service refers to the SharePoint Async Service when it should instead mention the CRM Unzip Service.
  • Poor performance is observed when attempting to use the Find Available Times feature for Resource Scheduling for the first time.
  • Microsoft Dynamics CRM SDK calls will not work as expected if the Security Token Service used for Claims Based Authentication does not produce an Asymetric Security Token response.
  • You are unable to create records for custom Activity entities when the RegardingObjectId is set.
  • Clicking the dropdown arrow to the right of the Activities menu does not display Recently Viewed Items.
  • An error occurs when creating a new E-mail template: "An error has occurred, please return to the home page and try again."
  • Email fields do not resolve properly even after manually resolving to a Contact.
  • Phone Call activity created from a contact record does not auto populate the field Call To.
  • An error occurs when creating a second Appointment record from the Dashboard Navigation: "Try again."
  • When an .exe file is attached to a Note in a Case, it throws an error and the Note is not saved.
  • Script error occurs when clicking front and back arrows in the Help dialog.
  • Duplicate sequence numbers occur for Opportunity, Quote, Order and Invoice details.
  • A script error occurs when opening an entity on an Android 4.4 device.
  • Forms are not refreshed when assigning Accounts to other users.
  • ClientGlobalContext.js.aspx changes causing Silverlight controls to fail.
  • Tabbing does not work in Safari 8 on OS X 10.10.
  • Using the Stage.getCategory() function for the Process Flow API does not work properly.
  • Branch fields are not being reset when changing stage in the Process Flow in Safari 8 on OS X 10.10.
  • A blank page is added when exporting a report created from Report Wizard.
  • A script error occurs when removing all branches from a branching Business Process Flow.
  • An error occurs when trying to set dynamic fields in a workflow for the Account entity.
  • Saving a Business Process Flow without providing details in the "value" field throws an Invalid Argument error.
  • Opening an activated Business Process Flow and closing without making changes asks if user is sure they want to leave the page.
  • Business Rules do not execute after meeting conditions in CRM for Tablets.
  • Process Rules are not triggered when setting custom Two Option field with an existing field.
  • Required fields in CRM for Tablets are set and uneditable for Opportunities.
  • Stages in Business Process Flows are missing when using nested branches.
  • Going backwards in a Business Process Flow marks all items as Complete instead of clearing them.
  • Clicking on the Audit History tab of a workflow causes an "Unexpected Error" to occur.
  • Script errors occur when using Business Process Flow APIs such as setActiveStage.
  • Unable to import a managed solution containing Business Process Flows from Microsoft Dynamics CRM 2013.
  • Marketplace solutions links do not function.
  • Unable to create a Competitor and an error occurs when saving the Competitor form.
  • A script error occurs when closing a record from Bulk Deletion window.
  • Clicking Save and Close in the Hierarchy Security Configuration window without any changes throw an "Invalid Argument" error.
  • Daylight Savings Time changes for Chile and Mexico.
  • Hierarchy Security Configuration window does not appear in Chrome.
  • When adding users through Multiple Users window, it does not find valid Active Directory users.
  • Removing a security role from a team takes a very long time.
  • Performance on the Product entity has decreased.
  • Hierarchy rules are broken when a User's Business Unit is changed that is part of a user-manager hierarchy.
  • Error deleting Connections when using Azure plugins or Workflows.
  • Solution Imports fail when Workflows containing dynamic URLs are included.
  • Complex calculated fields on related entities cannot be defined.
  • Activity Feeds are not working in an Internet Facing Deployment upgraded to Microsoft Dynamics CRM 2015.
  • CRM for Outlook Pivot Table and dynamic export to Excel options fail to export.
  • Incorrect text is displayed when clicking on Add Condition for Calculated fields with the System Customizer role.
  • Unable to connect to an organization with more than 1000 users.
  • Event campaigns with "Publish to Web" checked are not being listed in the Event Calendar page.
  • When you have a plugin registered on Create of a Contact, the Contact fails to be created.
  • Actual revenue field, when edited with alphanumeric values, is getting reset with the previous numeric value present when using the CRM for Tablets.
  • Blank space displayed when scrolling through the associated records on Android 4.4 devices.
  • Script error occurs when a user navigates to an entity grid from a record after reconnecting a CRM for Tablets device to a network.
  • Unable to configure the Microsoft Dynamics CRM 2015 CRM for Tablets application with OAuth while on an internal LAN.
  • Black background is seen when scrolling records in 'Opportunity Product Inline' associated simple list of the Opportunity form in iOS8.
  • Notes quick create form is not dismissed on clicking System back button and application is closed on Android 4.4.
  • "All Day Event" within Appointment is not functioning as expected on Android 4.4.
  • Lookup bar leaves white space at right end while scrolling on Android 4.4.
  • List controls in search results are not populated with additional records on Android devices.
  • Tiles disappear when navigating to and from the dashboard on Android devices.
  • Dropdown values are not displaying properly the first time opened on Android devices.
  • A horizontal gray line appears on users lookup bar when using Android 4.4.
  • When "Prevent click-to-call" is unchecked under Policy set. Control policy error is displayed when user clicks on contact card when using CRM for Tablets.
  • Script error occurs when opening any record from an activity grid after using record set navigation on the CRM for Tablets.
  • Fields that are meant to be Date only should not show Date and Time controls in CRM for Tablets.
  • Receiving Invalid Parameter Error in CRM for Tablets for sub-grid views with Related Entity columns.
  • Changes made to the Email Server Profile record during the loading period persists.
  • A confusing error message occurs when the CRM for Outlook client cannot logon to the MAPI store in Outlook.
  • CRM 2015 Client for Outlook ADAL library is not FIPS compliant.
  • Appointment record is not created in CRM when tracked by invitee from the CRM for Outlook client.
  • An OAuth Error occurs when selecting CRM Online and "Connect automatically with my current credentials" is left checked when configuring the CRM for Outlook client.
  • Not able to send the direct mail for selected account record in outlook offline mode of CRM for Outlook client.
  • Unable to change the settings of Address Book, for the "Entity record type being Synced to Address Book" in the CRM for Outlook client.
  • Outlook crashes when configured with the CRM for Outlook client if it loses network connectivity.
  • Icons are not displaying for Opportunity Products and Opportunity relationships in the navigation bar.
  • Opportunity Product list does not show name for Write-In products.
  • Suggested Product is added more than once if we click on ADD button on the suggestion fly out more than once.
  • Business Closure URL allows for XSS security vulnerability.
  • Resolve stage in Case form is empty when using CRM for Tablets.
  • Incorrect solution customization for ContractTemplate and KbArticleTemplate.
  • Action Calls to navigate to a webpage is appending the org url when called through routing rule during session creation.
  • Show Tab functionality from a sub-button does not work properly.
  • Unable to set a timer on the Task Editor form.
  • Email a link option is not functioning on KB Article template.
  • Unable to use custom Views in Products subgrids.
  • Stakeholders and Competitors cannot be added in the Lead or Opportunity forms using a subgrid.
  • Incorrect dialog is displayed when selecting "Set Work hours" from the Customer Service Schedule.
  • When a custom entity has a primary name attribute set as optional and a record is created without a value for the primary name field, you are unable to select this record through a lookup to this entity.
  • Unable to create a new View using Chrome because of dialog stating "You must provide basic information about this view before using this form."
  • If a user does not have the Read permission for the Campaign entity an error will occur while reading, or creating an Account, Contact, or Lead.
  • After opening an Account record from the hierarchy view into a new window using left arrow pop up button the Account form appears. When that Account form is closed the home page is displayed instead of displaying hierarchy view.
  • Multi-line field headers are not a tab stop.
  • Script errors occur when changing Start Times on Service Restrictions.
  • Clicking On Associate child Cases and SetParent Relationship Dialog causes a JavaScript error.
  • Unable to open the Quick Find entities selection when in System Settings using Chrome.
  • Unable to use Lookup Field that will be filtered by N:1 relationship.
  • A JavaScript error occurs when clicking the OK button after checking checkboxes for Global Audit Settings.
  • Users are unable to select elements from a dropdown list using the keyboard.
  • Icons do not load properly on Safari 8 browser for OS X 10.10.
  • An error message occurs when trying to edit filter criteria of a System View.
  • Users are unable to unfollow or follow multiple records from an entity grid.
  • Duplicate tabs appear for Work Hours and Service Restrictions.
  • Unable to add columns in Reports wizard page for Sales reports.
  • Users are unable to enter First Name and Last Name in the Lead form on iOS8 devices.
  • Users are unable to enter First Name and Last Name in the Lead form on Android 4.4.2 devices.
  • Email Templates and Email tabs are not visible in Settings menu.
  • Buttons are hidden behind scroll bar and are not displayed appropriately on ribbon for Connection roles.
  • Form Assistant on Scheduling dialog does not show the Resources tree for the selected Service.
  • Double Click does not open properties dialog in Chrome.
  • Clicking OK or Cancel in the Recurring Appointment fly out does not work in Chrome.
  • A script error occurs when clicking delete on a Service Restriction.
  • The "OK" button does not respond in the Email Configuration form from the CRM for Outlook client.
  • Navigation arrows and item numbers disappear when browsing subgrid items.
  • You are unable to add components to an existing solution.
  • An error occurs when adding a custom filter in the CRM Client for Outlook.
  • The "OK" button does not respond in the Service Configuration Settings.
  • An error occurs when editing the Bing Map control.
  • Adding a step to a workflow causes a script error in Internet Explorer and causes Chrome to stop responding.
  • Service Schedule Work Hours are not being saved for "Are the same each day" and "var by day" options.
  • Activity status is truncated in the Activity record.
  • Field Security Profiles do not save.
  • The Save As dialog throws a script error when clicking the OK button.
  • Unable to see menu controls on the Menu Bar in Safari 8 on Mini Mac OS.
  • The Entitlements subgrid moves when scrolling and overlaps column names.
  • A script error occurs when clicking the "X" on the Service Scheduling dialog.
  • Unable to add multiple components to a Solution at one time.
  • Unable to share an Account record from the Advanced Find window.
  • Field Security permissions changes are not automatically reflected on forms.

Please see this support article for more: https://support.microsoft.com/en-us/kb/3010990