cub-e.net

just coding...

Veri Turleri Hakkinda

Microsoft Dynamics CRM 2011 ve Microsoft Dynamics CRM Online'da programlama modeli .NET'in temel türlerini kullanacak şekilde değiştirildi.

Bu tabloda beni en çok şaşırtan ise Customer, Lookup, Owner nesnelerinin artık EntityReference türünden sadece bir değer almaları. CRM'i yeni öğrenler için işler gerçekten kolaylaştırılmış. Artık kod yazarken CRM ile başlayan nesnelerimiz yok.

Aşağıdaki tablo bize Microsoft Dynamics CRM 4.0 ile CRM 2011, 2013 ve 2015 arasındaki tür dönüşümünü göstermektedir.

Özellik Adı

Microsoft Dynamics CRM 2011, 2013, 2015 Türü

Microsoft Dynamics CRM 4.0 Türü

AttributeTypeCode.Boolean

bool ya da System.Boolean

CrmBoolean

AttributeType.CalendarRules

EntityCollection

DynamicEntity[] or calendarrule[]

AttributeType.Customer

EntityReference

Customer

AttributeType.DateTime

System.DateTime

CrmDateTime

AttributeType.Decimal

decimal ya da System.Decimal

CrmDecimal

AttributeType.Double

double ya da System.Double

CrmFloat

AttributeType.Integer

int ya da System.Integer

CrmNumber

AttributeType.Internal

System.Object

Kayıtlarda Kullanılmaz

Kayıtlarda Kullanılmaz.

AttributeType.Lookup

EntityReference

Lookup

AttributeType.Memo

string ya da System.String

System.String

AttributeType.Money

Money

CrmMoney

AttributeType.Owner

EntityReference

Owner

AttributeType.PartyList

EntityCollection or ActivityParty[]

activityparty[] or DynamicEntity []

AttributeType.Picklist

OptionSetValue

Picklist

AttributeType.PrimaryKey

System.Guid

Key

AttributeType.String

System.String

System.String

AttributeType.State

OptionSetValue yada oluşturulan enumeration kullanılmalı

EntityNameStateInfo

AttributeType.Status

OptionSetValue ya da int

Status

AttributeType.Uniqueidentifier

System.Guid

UniqueIdentifier

AttributeType.Virtual

System.Object

Kayıtlarda Kullanılmaz

Kayıtlarda Kullanılmaz

Eski Tür

Yeni Tür

CrmAttributeType Class (MetadataService)

Microsoft.Xrm.Sdk.Metadata.AttributeTypeCode

Moniker Class (CrmService)

Microsoft.Xrm.Sdk.EntityReference

SecurityPrincipal Class (CrmService)

Microsoft.Xrm.Sdk.EntityReference

 

OptionSetValue

OptionSetValue’a değer atamak için ilk önce OptionSetValue türünden bir nesne oluşturmanız gerekmektedir.  Burada dikkat çekmek istediğim konu ise eğer state alanı ile çalışacaksanız (yani firma için aktif/pasif, teklif için açık/kazanıldı/kaybedildi gibi) early-bound sınıflarda bunlar için mutlaka bir enumaration oluşturulmakta. Ama late bound sınıflarda bu durumu programcı yönetmektedir.

Örnek olarak adres üzerindeki bir optionset alana değer atama aşağıdaki şekilde olmaktadır;

OptionSetValue osv = new OptionSetValue(1);

contact.Attributes["address1_freighttermscode"] = osv;

 

EntityReference

CRM sisteminde iki entity’yi birbirine bağlamak için lookup nesnesini kullanmak zorundayız. Lookup’lar üzerinde programatik işlem yapabilmek için EntityReference nesnesini kullanmaktayız. Bu nesneye Lookup alana reference vermek istemiz nesnenin türü ve Id’sini vermemiz gerekmektedir.

Aşağıdaki örnekte parentAccountId atama yapılacak nesnenin guid cinsinden Id’si olmalı;

EntityReference parentaccountid = new EntityReference("account", parentAccountId));

accountEntity.Attributes["parentaccountid"] = parentaccountid;

ioService.Update(accountEntity);

Null Değer Atama

CRM 4.0’dan farklı olarak .Net Type türleri kullanıldığı için null değer atama işlemi artık sadece alana değer vermekten ibaret oldu. İşte birkaç örnek;

EntityAdi.IndustryCode = null;

EntityAdi.AccountId = Guid.Empty;

EntityAdi.AccountNumber ="";

EntityAdi.Address1_Country = String.Empty;

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;

            }

        }

    }

}

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'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.

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.

Microsoft Dynamics CRM 2015, Microsoft Dynamics CRM Online 2015 Update, Microsoft Dynamics Marketing 2015 Update, and Parature, from Microsoft.

Microsoft Dynamics CRM 2015, Microsoft Dynamics CRM Online 2015 Update, Microsoft Dynamics Marketing 2015 Update, and Parature, from Microsoft.

The 2015 updates for Microsoft Dynamics CRM and Microsoft Dynamics Marketing have arrived! Updates to Parature, from Microsoft are soon to follow in early 2015. These updates add enhancements to sales, marketing, and customer service functionality, and will also add features to facilitate marketing and sales team collaboration.

Products updated

These products will be affected by the 2015 update:

  • Microsoft Dynamics CRM online and on-premises versions

  • Microsoft Dynamics CRM for Outlook

  • Microsoft Dynamics CRM for tablets

  • Microsoft Dynamics CRM for phones

  • Microsoft Dynamics Marketing

  • Parature, from Microsoft

New features

These are just a few of the highlights in the 2015 update:

Microsoft Dynamics CRM

  • Create product families: Boost selling effectiveness with the ability to bundle products and recommend related products for cross-selling/up-selling opportunities.

  • Use sales hierarchies:  Manage and report on your sales data in a way that maps to your business. New hierarchical visualizations and roll-ups bring real-time territory and forecasting data to your fingertips.

  • Mobile sales improvements: Increase field sales productivity with flexible, role tailored dashboards and analytics, personalized home pages and the ability to navigate by hierarchy. This version of the tablet app also includes improved support for disconnected scenarios.

  • Access CRM records on the go via voice commands: Cortana is now part of Microsoft Dynamics CRM! For customers with Windows Phone 8.1, you can now use conversational voice commands to seamlessly create follow-up appointments, tasks, and phone calls; quickly find information; view your customer lists; and more. Note: This feature will be available in English only in markets where Cortana is available. Read about Cortana voice commands for CRM in the topic Take a tour of CRM for phones.

  • Enhanced sales processes: Guide sellers toward desired outcomes with enhanced branching logic within your sales processes. Increase impact via automation of business processes and enforcement of business rules across all devices.

  • Expanded case management functionality: Enable agents to provide differentiated levels of support with flexible Service Level Agreements (SLAs). Gain insight into service effectiveness with the ability to track and analyze key metrics like SLAs and thresholds.

  • Microsoft Social Listening availability: Microsoft Dynamics CRM Online customers with a minimum of 10 Professional users automatically have access to Social Listening as part of their subscription at no additional charge. Customers who have an Enterprise subscription also have access to Social Listening but with no minimum user requirement. You can add Microsoft Social Listening subscriptions from the Office 365 Administrative Portal.

  • Microsoft Social Listening for on-premises CRM customers: You can now access Social Listening directly from within Microsoft Dynamics CRM 2015 - even as an on-premises customer - and may also be eligible for a discounted rate. Contact your Microsoft Dynamics partner for more information.

  • Improvements in CRM for Outlook: Set up CRM for Outlook quickly and easily with the completely redesigned Configuration Wizard. With Microsoft Dynamics CRM 2015 for Outlook, users can sync assigned tasks and appointment attachments. Admins can control synchronization between pairs of fields, which provides confidence about where data is coming from and how it's shared. For more information, see Set up CRM for Outlook.

  • Customizable help: Personalize the user assistance by tailoring the in-product Help content to match the specifics of your Dynamics CRM implementation. You can modify what displays under the Help question-mark icon at either an entity-specific or organization-wide level. Please read Customize the Help experience.

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

Microsoft Dynamics Marketing

  • Sales and marketing collaboration: Strengthen your marketing and sales synergies with the new Sales Collaboration Panel, which allows sellers to provide input into campaigns and targeting.

  • Manage multi-channel campaigns: Streamline campaign creation and improve segmentation with graphical email editing, A/B and split testing, integrated offers, and approval workflows.

  • Improve B2B marketing: Deepen your lead management capabilities with webinar integration and improved lead scoring, including the ability to introduce multiple lead scoring models. 

  • Enhanced marketing resource management: Gain unprecedented visibility into your marketing plan with the new Interactive Marketing Calendar and improve collaborative marketing with Lync click-to-call and webinars.

  • Gain social insights within Microsoft Dynamics Marketing: Display social information collected with Microsoft Social Listening about your brand, campaigns, and more, all within Microsoft Dynamics Marketing.

  • Additional language & geographic availability:  Microsoft Dynamics Marketing is now available in Japanese and Russian, bringing the total to 12 languages and 37 countries currently supported. Find more information in the Microsoft Dynamics Marketing Translation Guide.

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

Parature, from Microsoft

There are many exciting new things coming in Parature, from Microsoft in early 2015, including:

  • Knowledgebase management and reporting improvements

  • Comprehensive service desk configurations

  • Support ticketing enhancements

  • Insights into customer self-service/portal usage

  • Mobile service desk enhancements

  • New social channel monitoring

  • Real-time chat translation

  • Further integration with Microsoft Dynamics CRM

  • And more

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

Technical changes

Not only do we want to keep you apprised of new features in the 2015 release, but you also need to know about technical changes that could have an impact on your organization as well as additional resources available to you.  For example, as with previous releases of Microsoft Dynamics CRM, we add and remove items from our supported configurations list to keep current with technology and allow us to provide you the best product possible.

For more information, please read:

Release timing

The 2015 updates for Microsoft Dynamics CRM and Microsoft Dynamics Marketing are available now. Stay tuned for Parature, from Microsoft updates in early 2015. Please visit this page periodically to get the most current information about the upcoming versions.

How to get the updates

Microsoft Dynamics CRM:

  • Updates for online customers: You'll be able to schedule the specific date when your update occurs. We call this a customer-driven update since you “drive” the timing of the update to be the most suitable for your organization. It will be necessary for the CRM administrator to formally approve the update before the update can occur. If you haven't yet updated to the Spring '14 version, features that were added then will also be enabled during this update.  For more information about how this works for Microsoft Dynamics CRM, read Manage Microsoft Dynamics CRM Online updates or watch a short video about the Update process enhancements with Microsoft Dynamics CRM Online 2015 Update (3:33).

  • Updates for on-premises customers: Customers who are current on their Microsoft Software Assurance Plan or Business Ready Enhancement Plan will be able to get updates after the final product release. Learn more about Microsoft Dynamics Service Plans.

Microsoft Dynamics Marketing:

  • 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.

  • 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.

Parature, from Microsoft:

  • 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.

Manage customizations for Dynamics CRM. Three deprecated form scripting methods have been removed; you'll want to make sure your code isn't using those methods before you update. There's also a tool that a developer can run before an update to identify scripts that should be evaluated. For specifics, see Deprecated form script methods removed (part of What's new for Developers).

Browser support for Parature, from Microsoft. Parature, from Microsoft 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 Microsoft Dynamics Marketing. We have designed the upgrade process to be as quick, easy, and trouble-free as possible, but you should still be aware of the process and some possible issues. If you are upgrading from a previous version of Microsoft Dynamics Marketing, find out what to expect by reading Upgrading from an earlier version.

How to stay informed

Have questions?

Connect with Support Resources or browse questions/answers in the Microsoft Dynamics CRM Forum—or you can always contact your partner.

For questions about Parature, from Microsoft, please contact Parature Support.

Microsoft Dynamics CRM 2015 Coklu Arama (Multi-Entity Quick Find)

Bugune kadar CRM ile ilgilenen pek cok kisi ve firma projeler icerisinde (ki bunlara bende dahilim ozellikle cagri merkezi projelerinde) CRM icin coklu arama ozelligi uygulamasi yazdi. Yani bir tane kutuya CRM icerisinde aramak istediginiz kisi, kurum ya da herhangi birsey yaziyorsunuz ve bu otomatik olarak daha onceden belirlediginiz nesneler icerisinde araniyor ve ekrana getiriliyor. Bugun Dynamics CRM 2015 ile birlikte bu ozellik CRM icersinde gomulu olarak geliyor ve sistem menusunde her zaman ulasilabilir bir yerde duruyor.


Bu ekrani acabilmek icin yukaridaki resimde de godugunuz uzere buyutec simgesine tiklamak gerekiyor. Cikan ekrandaki metin kutusuna birseyler yazip enter'a bastiginizda ise yazdiginiz kelime daha onceden ayarlarlar bolumunde ayarlanan butun nesneler icerisinde aranmakta ve sonuclar karsiniza gelmekte. 

Dilerseniz bu ekrana gecmeden once ayarlar bolumunde nasil ayarlar yapabilecegimize bakalim. Bu ekran ile ilgili ayarlari acmak icin Ayarlar>Yonetim bolumu altinda bulunan Sistem Ayarlari dugmesine tiklamamiz gerekmekte. Acilan ayarlar ekraninda asagiya dogru ilerledigimizde "Hizli Bulmayi Ayarla" yazisi altindaki 2 secenek iste aradigimiz ayarlar.


Hizli bul kayit sinirlarini etkinlestir: Bu ayar arama performansini arttirmak için arama kayitlarini 10.000 kayitla sinirli tutan ozellik.
Arama icin varliklari secin: Bu dugmeye tikladiginizda ise bir pencere acilacak ve bu arama ozelliginin hangi varliklar uzerinde etkili olacagini ayarlamanizi saglayacaktir.


Burada sitediginiz nesneleri ekleyebilir ve cikartabilirsiniz ama unutmamamiz gereken bir sinirimiz mevcut o da max. 10 tane nesne secebiliyoruz. 10'dan fazla nesne sectiginizde su sekilde bir uyari karsiniza cikacaktir.


Iste bu ekran vasitasiyla ayarlamalarimizi yaptiktan sonra gecek arama ekranimiza donebiliriz. Bu ekran uzerinde istedigimizi yazip entrer'a bastigimizda sonuclar ekrana gelecektir.


Bu ekranda bazi onemli ozellikler bulunmakta;
  • her bir nesne uzerindeki + dugmesine tiklayarak yeni kayit ekleyebilirsiniz.
  • herhangi bir kayda tikladiginizda o kayit acilir.
  • arama yapilacak alanlari arama hizli gorunumu uzerinden ayarlayabilirsiniz.
  • O nesne icin arama hizli gorunumunde ayarlanmis ilk uc alan goruntulenir.
  • ekranin sag tarafinda bulunan filtre olcutunu kullanarak kayitlari filtreleyebilirsiniz.
Bu sayede CRM 2015'de yillardir soze edilen ve beklenen bir ozelligi de Dynamics CRM platformu icerisinde gormus olduk.