cub-e.net

just coding...

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");

                            }

                        }

                    }

 

Dynamics CRM'e saatinizden erisin :)

Akilli saatler de akilli telefonlar kadar hizli bir sekilde hayatimiza girdi. Su anda sektördeki buyuk firmalar ve hatta kickstarter grisimleri bile akilli saat projeleriyle karsimiza cikmakta. Ben de bir Pebble kullanicisiyim ve ozellikle 1 hafta dayanan pili ile diğer akilli saatlerden ayrilmakta.

Bugun Dynamics CRM ile akilli saatlerin nasil birleştirileceğini inceleyeceğiz. Akilli saatler genel itibariyle telefon üzerindeki notificationlari gösterebilme yeteneğine sahipler. Telefon üzerinde notification oluşturmak için ben bugun Pushover sistemini kullanacagim.

Soyle bir senaryomuz olsun; sistem üzerinde oluşturduğumuz bir is akisi ile CRM uzerinde servis talepleri oluştuğu anda push notification isimli bir entity üzerinde bir kayit oluşturuyoruz. Bu kayit varsayilanda gönderilmeyi bekliyor durumunda olacak. Uygulamamiz bu kayitlari okuyacak ve Push Notification’in servisine gönderecek. Boylece notification telefonumuza orada da saatimize gelecek.

Sizin oluşturduğunuz sistemlerde farkli is akislari ile yine push notification isimli entity’e kayit oluşturabilir böylece degisik senaryolar içinde bu sistemi kullanabilirsiniz. Ornegin sistem üzerinde değeri 50.000 tl üzerinde bir firsat oluşturulduğunda bu sistemi tetikleyebilirsiniz.

Sisteme uye olmak için telefonunuza Pushover uygulamasini indirmeniz gerekmekte. Daha sonrasinda ise https://pushover.net sitesinden kendinize bir hesap oluşturuyorsunuz.

Bu sistem üzerinden notification gönderebilmek için 2 bilgiye ihtiyamiz bulunmakta

1.       Sizin User Key’iniz. Her bir kullanicinin bir key’i var sistemde.



2.       Create New Application linkine tıklayarak olusturacaginiz Application Key’i.



Bu sekilde elde ettiğimiz key’ler ile sistem üzerinden notification gönderebilir hale geldik. Bu bilgilerin CRM’de saklanacagi en uygun yer bence Kullanici Kartiydi ve bende bu nedenle kullanici nesnesi üzerine PushOverToken ve PushOverUserKey isimli iki alan actim ve bilgileri buraya girdim.



Daha sonra Push Notification isimli aktivite turunde bir entity oluşturdum ve asagidaki alanlari actim. Buradaki önemli nokta böyle bir entity’i nasil kullanacagimiz. Yazinin basinda da belirttiğim gibi cok farkli senaryolar için bu nesne üzerinde kayitlar oluşturabilirsiniz.


Olusturdugum alanlari incelersek;

Subject : Ekran görüntülenecek baslik bilgisi

To : Mesajlarin kimlere gönderileceği bilgisi

Regarding : Kaydin bagli bulunduğu ana entity. Burada bu bilgiyi telefon üzerinden kullanici bu kayda ulaşmak isterse tek tiklama ile bu bilgiye ulassin diye tutuyorum.

Status Reason : Varsayilanda “Waiting To Send” yani bekliyor konumunda oluşturuluyor kayitlar. Gondeme işlemi tamamlandiktan sonra bu alani “Sent” yani gönderildi olarak değiştiriyorum.

Description : Detayli bilgi vermek için bu alani kullaniyorum.

 

static string URL = "https://xxx.contoso.com";

        private static IOrganizationService ServiseBaglan()

        {

            try

            {

                Uri organizationUri = new Uri(String.Format("{0}/XRMServices/2011/Organization.svc", URL));

                ClientCredentials clientcred = new ClientCredentials();

                clientcred.UserName.UserName = "kullanici adi";

                clientcred.UserName.Password = "sifre";

                OrganizationServiceProxy _serviceproxy = new OrganizationServiceProxy(organizationUri, null, clientcred, null);

                IOrganizationService _service = (IOrganizationService)_serviceproxy;

                return _service; ;

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.Message);

                return null;

            }

        }

 

        private static void changeStatus(IOrganizationService service, Guid Id)

        {

            // Create the Request Object

            SetStateRequest state = new SetStateRequest();

 

            // Set the Request Object's Properties

            state.State = new OptionSetValue(0);

            state.Status = new OptionSetValue(100000000);

 

            // Point the Request to the case whose state is being changed

            state.EntityMoniker = new EntityReference("new_pushnotification", Id);

 

            // Execute the Request

            SetStateResponse stateSet = (SetStateResponse)service.Execute(state);

        }

        static void Main(string[] args)

        {

            try

            {

                string fetchXml = @"<fetch mapping='logical'>

                                 <entity name='new_pushnotification'>

                                    <attribute name='activityid' />

                                    <attribute name='subject' />

                                    <attribute name='description' /> 

                                     <filter type='and'>

                                        <condition attribute='statuscode' operator='eq' value='1'/>

                                     </filter>

                                    <link-entity name='activityparty' from='activityid' to='activityid' alias='ac'>

                                        <link-entity name='systemuser' from='systemuserid' to='partyid' alias='ad'>

                                            <attribute name='new_pushovertoken' />

                                            <attribute name='new_pushoveruserkey' />

                                        </link-entity>

                                    </link-entity>

                                 </entity>

                             </fetch>";

 

                IOrganizationService service = ServiseBaglan();

               

                if (service != null)

                {

                    Console.WriteLine("Servise Baglanildi");

 

                    EntityCollection entCollection = (EntityCollection)service.RetrieveMultiple(new FetchExpression(fetchXml));

                    foreach (var item in entCollection.Entities)

                    {

                        Console.WriteLine("Aktarilacak kayitlar bulundu");

 

                        if (item.Contains("ad.new_pushovertoken") && item.Contains("ad.new_pushoveruserkey") && item.Contains("subject") && item.Contains("description"))

                        {

                            string PushOverToken = ((AliasedValue)item["ad.new_pushovertoken"]).Value.ToString();

                            string PushOverUserKey = ((AliasedValue)item["ad.new_pushoveruserkey"]).Value.ToString();

                            string subject = item["subject"].ToString();

                            string description = item["description"].ToString();

                            Guid activityid = new Guid(item["activityid"].ToString());

                            string url = String.Format("{0}/main.aspx?etn=new_pushnotification&pagetype=entityrecord&id=%7B{1}%7D", URL, activityid.ToString());

 

                            dynamic Parameters = new NameValueCollection() {

                        {

                            "token",

                            PushOverToken

                        },

                        {

                            "user",

                            PushOverUserKey

                        },

                        {

                            "message",

                            description

                        },

                        {

                            "url",

                            url

                        },

                        {

                            "url_title",

                            "Open Record"

                        },

                        {

                            "title",

                            subject

                        }

                        };

 

                            WebClient client = new WebClient();

                            Console.WriteLine("Kayitlar gonderiliyor");

                            client.UploadValues("https://api.pushover.net/1/messages.json", Parameters);

                            Console.WriteLine("CRM guncelleniyor");

                            changeStatus(service, activityid);

                        }

                    }

                }

 

                Console.WriteLine("Tamamlandi");

                Console.ReadLine();

}

            catch (Exception ex)

            {

                Console.WriteLine(ex.Message);

                return null;

            }

        }

 

Kodda da görebileceğiniz uzere Ilk olarak CRM Servisine baglaniyoruz. Ben IFD enabled bir organizasyon kullandigim için benim servis baglantim bu sekilde Office 365 ya da on premise sistemlerde farkli sekillerde CRM servise bağlanma yöntemleri mevcut. Bu konuda sorun yasarsaniz benimle iletişime geçebilirsiniz.

 

Daha sonra ise fetchXML sorgumuz ile sistem üzerinde bekleyen notification’larin bilgisini aliyoruz ama bu işlemi yaparken ayni zamanda systemuser nesnesine de dallanarak ihtiyacim olan pushovertoken ve pushoveruserkey bilgilerini de aliyorum. Boylece her bir kullanici için teker teker veri sorgulayarak servisi meşgul etmiyorum.

 

@"<fetch mapping='logical'>

                                 <entity name='new_pushnotification'>

                                    <attribute name='activityid' />

                                    <attribute name='subject' />

                                    <attribute name='description' /> 

                                     <filter type='and'>

                                        <condition attribute='statuscode' operator='eq' value='1'/>

                                     </filter>

                                    <link-entity name='activityparty' from='activityid' to='activityid' alias='ac'>

                                        <link-entity name='systemuser' from='systemuserid' to='partyid' alias='ad'>

                                            <attribute name='new_pushovertoken' />

                                            <attribute name='new_pushoveruserkey' />

                                        </link-entity>

                                    </link-entity>

                                 </entity>

                             </fetch>";

 

 

Verileri aldiktan sonra ise bunlari istediğim gibi düzenleyip string veriler haline getiriyorum. Sonunda ise asagidaki bolum ile servise Push Notification servisine gönderiyorum;

 

                            dynamic Parameters = new NameValueCollection() {

                        {

                            "token",

                            PushOverToken

                        },

                        {

                            "user",

                            PushOverUserKey

                        },

                        {

                            "message",

                            description

                        },

                        {

                            "url",

                            url

                        },

                        {

                            "url_title",

                            "Open Record"

                        },

                        {

                            "title",

                            subject

                        }

                        };

 

                            WebClient client = new WebClient();

                            Console.WriteLine("Kayitlar gonderiliyor");

                            client.UploadValues("https://api.pushover.net/1/messages.json", Parameters);

                            Console.WriteLine("CRM guncelleniyor");

                            changeStatus(service, activityid);

 

 

Burada dikkat edilmesi gerekn nokta URL kisminda gerçekten sistemdeki nesnenin acilacagi URL’i buraya getiriyorum ki telefondan kullanici direkt kayda ulassin.

Gonderme işleminden sonra ise kayitlari gönderildi diye güncelliyorum ki tekrar tekrar ayni kayitlari göndermeyelim.

 

Sonuc olarak once telefonda sonra ise saatimde gelen verilere ulaşıyorum :)

PushOver'in ana ekraninda gelen notification.




Notification'i acinca detaylara ulasiyorum. 



Open Record isimli linke tiklayinca da direkt ilgili kayda ulasiyorum.



Ve sonuc Pebble ekraninda CRM'den gelen Notification'i goruyorum :) iste mutlu son...

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.

Dynamics CRM Tablet Uygulama Magazalari

Dynamics CRM Tablet uygulamasini kurmak icin elimizdeki cihaz ya da cihazlarin uygulama magazalarina gitmemiz gerekmekte.

Windows 8 : http://apps.microsoft.com/windows/en-us/app/93772212-7b72-4aee-bc4e-b1adb7712ebe



Windows 8.1 : http://apps.microsoft.com/windows/en-us/app/dec52fd4-dbc0-41b1-9cdd-cdc070051918



iPad : https://itunes.apple.com/us/app/microsoft-dynamics-crm/id678800460?mt=8


Android Tablet : https://play.google.com/store/apps/details?id=com.microsoft.crm.crmtablet

Dynamics CRM IFD (Windows server 2012 R2 ADFS 3.0) ile CRM for Outlook Baglanma Problemi

Eger sizde benim gibi Dynamics CRM kurulumunuz ile ADFS 3.0'i ayni server uzerinde kullaniyorsaniz Outlook Client Configuration Wizard ile yapilandirma sirasinda authentication probleminden dolayi bir hata alabilirsiniz.
Log dosyasini incelediginizde asagidaki gib bir hata mesaji olacaktir.

"Error connecting to URL: https://org.contoso.com/XRMServices/2011/Discovery.svc Exception: Microsoft.Crm.CrmException: Authentication failed"

Bu hata ile ilgili nette buldugun bircok cozeum yolunu denesem de sonuc vermedi. Bende Fiddler ile arka tarafatki iletisimde neler oldugunu izlemeye karar verdim. Fiddler ile gordum ki Configuration Wizard'in gitmeye calistigi bir adreste 503 hatasi almaktayim, Adres ise su formattaydi: 

"https://adfs.contoso.com/adfs/services/trust/mex"

Evet sorun ADFS'deydi. CRM web arabiriminde sorunsuzca gorevini yerine getiren ADFS Outlook Client'da ise hataya neden olmaktaydi. Bunun uzerine hemen ADFS Servera gittim ve arastirmalara basladim.
ADFS Serverda Event Viewer'da  sorunun kaynagini yakaladim:

Event ID:      102
Description:
There was an error in enabling endpoints of Federation Service. Fix configuration errors using PowerShell cmdlets and restart the Federation Service. 
 
Additional Data 
Exception details: 
System.ServiceModel.AddressAlreadyInUseException: There is already a listener on IP endpoint 0.0.0.0:808. This could happen if there is another application already listening on this endpoint or if you have multiple service endpoints in your service host with the same IP endpoint but with incompatible binding configurations. ---> System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted
 

Yani ADFS Server 808 nolu bir portu kullanmaktaydi. 808 Portu ayni zamanda Asynchronous Service tarafinda da kullanilmakta.
ProtocolPortDescriptionExplanation

TCP

808

CRM server role communication

The Asynchronous Service and Web Application Server services communicate to the Sandbox Processing Service through this channel. The default port is 808, but can be changed in the Windows registry by adding the DWORD registry value TcpPort in the key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM\.

Yeri gelmisken bahsedeyim CRM tarafindan kullanilan diger portalarin listesi de soyle:
ProtocolPortDescriptionExplanation

TCP

80

HTTP

Default web application port. This port may be different as it can be changed during Microsoft Dynamics CRM Server Setup. For new websites, the default port number is 5555.

TCP

135

MSRPC

RPC endpoint resolution.

TCP

139

NETBIOS-SSN

NETBIOS session service.

TCP

443

HTTPS

Default secure HTTP port. The port number may differ from the default port. This secure network transport must be manually configured. Although this port is not required to run Microsoft Dynamics CRM, we strongly recommend it. For information about how to configure HTTPS for CRM, see “Make Microsoft Dynamics CRM client-to-server network communications more secure” in Post-installation and configuration guidelines for Microsoft Dynamics CRM in the Installing Guide.

TCP

445

Microsoft-DS

Active Directory service required for Active Directory access and authentication.

UDP

123

NTP

Network Time Protocol.

UDP

137

NETBIOS-NS

NETBIOS name service.

UDP

138

NETBIOS-dgm

NETBIOS datagram service.

UDP

445

Microsoft-DS

Active Directory service required for Active Directory access and authentication.

UDP

1025

Blackjack

DCOM, used as an RPC listener.

Listenin tamamina bu adresten ulasabilirsiniz. https://technet.microsoft.com/en-us/library/hh699823.aspx

Sorunumuza geri donersek 808 nolu portu degistirmem gerekiyordu. Iste asagidaki komut da tam bu ise yariyor:
Set-ADFSProperties –nettcpport 809

ADFS portunu 809 olarak degistirdim ve servisi yeniden baslattim. 
Configuration Wizard'a geri dondum ve tekrar denedim sorun cozulmustu. Zaten Fiddler'da da ilgili bolumu sorunsuzca gectigini gordum. 

Umarim sizlere de faydali olur.

*************************
21/05/2015 tarihinde ek:
Yukaridaki durum update rollup 0.1 yukledikten sonra yine devam etti. Konuyu arastirinca bu sefer de 49443 portunda ayni sorunun oldugunu gordum. Konuyu inceleyince bu portu da ADFS TlsClientPort oldugunu ogrendim.
Bu portu da yukaridaki konutla baska bir porta yonlendirdim.
Set-ADFSProperties -tlsclientport 42223

firewall ve diger ayarlari yaptiktan sonra ADFS Servisi yeniden baslattim ve hersey yoluna girdi. 

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

Create web resources and IFRAME content for use with the CRM for tablets client

Although Microsoft Dynamics CRM for tablets does not support IFrames or web resources in this release, you can get started developing solutions that use these capabilities for a future release that will support them.

For Microsoft Dynamics CRM Online 2015 Update the capability to display IFrames or web resources in CRM for tablets is available as a preview feature for selected regions. This feature is only available for Android and iOS tablets and is not available for Microsoft Dynamics CRM (on-premises).

Enable this preview feature

Preview features are not meant for production use and are subject to separate Supplemental Terms of Use for Microsoft Dynamics CRM Online Previews.

The preview release of this feature is intended to facilitate early development and testing of touch-enabled controls for CRM for tablets. This preview also helps the product team to collect feedback from you.

Enable IFrames and web resources for CRM for tablets

When this preview feature is enabled you can configure IFrames and web resources in forms and dashboards in the Microsoft Dynamics CRM web app which can be configured to display in CRM for tablets. To enable this preview feature for your organization, you must be a CRM administrator.

  1. Go to Settings > Administration > System Settings and choose the Customization tab.

  2. Under Preview feature, choose agreement terms to review the terms of use.

  3. Under Preview feature, check both boxes to enable web resources and IFrames in CRM for tablets.

Configure a web resource to be displayed in CRM for tablets

After you have enabled this preview feature, you must also enable each web resource by selecting the CRM for tablets checkbox in the web resource form. The WebResource.IsEnabledForMobileClient attribute stores this data.

Configure a form or dashboard IFrame or web resource control to display in CRM for tablets

When you add an IFrame a web resource or to a form or dashboard you must select the CRM for tablets checkbox in the Add Web Resource dialog. This sets the<ShowOnMobileClient> (FormXml) parameter value for the control.

Known issues

  • You can’t use popups for authentication or other purposes from within IFrames and web resources on CRM for tablets.
  • Authentication for embedded O365 sites is not available.
  • Errors and memory leaks in IFrames and web resources can crash CRM for tablets and can cause client side data loss.
  • This preview feature can adversely affect application performance.
  • Microsoft Silverlight and image web resources are not available on CRM for tablets.