1. Ana Sayfa
  2. Dynamics CRM
  3. Dynamic CRM ile Push Notification

Dynamic CRM ile Push Notification

Akıllı saatler de akıllı telefonlar kadar hızlı bir şekilde hayatımıza girdi. Su anda sektördeki büyük firmalar ve hatta Kick-Starter girişimleri bile akıllı saat projeleriyle karşımıza çıkmakta. Ben de bir Pebble kullanıcısıyım ve özellikle 1 hafta dayanan pili ile diğer akıllı saatlerden ayrılmakta.

Bugün Dynamics CRM ile akıllı saatlerin nasıl birleştirileceğini inceleyeceğiz. Akıllı saatler genel itibariyle telefon üzerindeki Notification’lari gösterebilme yeteneğine sahipler. Telefon üzerinde Notification oluşturmak için ben bugün Pushover sistemini kullanacağım.

Şöyle bir senaryomuz olsun; sistem üzerinde oluşturduğumuz bir is akışı ile CRM üzerinde servis talepleri oluştuğu anda Push Notification isimli bir Entity üzerinde bir kayıt oluşturuyoruz. Bu kayıt varsayılanda gönderilmeyi bekliyor durumunda olacak. Uygulamamız bu kayıtları okuyacak ve Push Notification’in servisine gönderecek. Böylece Notification telefonumuza orada da saatimize gelecek.

Sizin oluşturduğunuz sistemlerde farklı iş akışları ile yine Push Notification isimli Entity’e kayıt oluşturabilir böylece değişik senaryolar içinde bu sistemi kullanabilirsiniz. Örneğin sistem üzerinde değeri 50.000 TL üzerinde bir fırsat oluşturulduğunda bu sistemi tetikleyebilirsiniz.

Sisteme üye olmak için telefonunuza Pushover uygulamasını indirmeniz gerekmekte. Daha sonrasında ise https://pushover.net sitesinden kendinize bir hesap oluşturuyorsunuz.

Bu sistem üzerinden Notification gönderebilmek için 2 bilgiye ihtiyacımız bulunmakta

1. Sizin User Key’iniz. Her bir kullanıcının bir Key’i var sistemde.


Resim-1

2. Create New Application linkine tıklayarak oluşturacağınız Application Key’i.


Resim-2

Bu şekilde elde ettiğimiz Key’ler ile sistem üzerinden Notification gönderebilir hale geldik. Bu bilgilerin CRM’de saklanacağı en uygun yer bence Kullanıcı Kartı’ydi ve bende bu nedenle kullanıcı nesnesi üzerine PushOverToken ve PushOverUserKey isimli iki alan açtım ve bilgileri buraya girdim.


Resim-3

Daha sonra Push Notification isimli aktivite türünde bir entity oluşturdum ve aşağıdaki alanları açtım. Buradaki önemli nokta böyle bir Entity’i nasıl kullanacağımız. Yazının başında da belirttiğim gibi çok farklı senaryolar için bu nesne üzerinde kayıtlar oluşturabilirsiniz.


Resim-4

Oluşturduğum alanları incelersek;

Subject : Ekran görüntülenecek bşslık bilgisi

To : Mesajların kimlere gönderileceği bilgisi

Regarding : Kaydın bağlı bulunduğu ana entity. Burada bu bilgiyi telefon üzerinden kullanıcı bu kayda ulaşmak isterse tek tıklama ile bu bilgiye ulaşsın diye tutuyorum.

Status Reason : Varsayılanda “Waiting To Send” yani bekliyor konumunda oluşturuluyor kayıtlar. Gönderme işlemi tamamlandıktan sonra bu alanı “Sent” yani gönderildi olarak değiştiriyorum.

Description : Detaylı bilgi vermek için bu alanı kullanıyorum.

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 üzere ilk olarak CRM Servisine bağlanıyoruz. Ben IFD enabled bir organizasyon kullandığım için benim servis bağlantım bu şekilde Office 365 ya da On-premise sistemlerde farklı şekillerde CRM servise bağlanma yöntemleri mevcut. Bu konuda sorun yaşarsanız benimle iletişime geçebilirsiniz.

Daha sonra ise fetchXML sorgumuz ile sistem üzerinde bekleyen Notification’ların bilgisini alıyoruz ama bu işlemi yaparken ayni zamanda sSystemuser nesnesine de dallanarak ihtiyacım olan Pushovertoken ve PushoveruserKey bilgilerini de alıyorum. Böylece her bir kullanıcı 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 aldıktan sonra ise bunları istediğim gibi düzenleyip string veriler haline getiriyorum. Sonunda ise aşağıdaki 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 gereken nokta URL kısmında gerçekten sistemdeki nesnenin açılacağı URL’i buraya getiriyorum ki telefondan kullanıcı direkt kayda ulaşsın.


Resim-5

Gönderme işleminden sonra ise kayıtları gönderildi diye güncelliyorum ki tekrar tekrar ayni kayıtları göndermeyelim.

Sonuç olarak önce telefonda sonra ise saatimde gelen verilere ulaşıyorum 🙂


Resim-6


Resim-7


Resim-8


Resim-9


Resim-10


Resim-11

Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

Referanslar

https://www.mshowto.org

Yorum Yap

Yazar Hakkında

Barış Kanlıca firmalara CRM ve yazılım konusunda danışmanlık yapmaktadır ve yazılım eğitimleri vermektedir. Dynamics CRM alanında yaptığı çalışmalarından dolayı Microsoft kendisine bu alanda sadece 55 kişide olan MVP(Most Valuable Professional) unvanını ve ödülünü vermiştir. Barış Kanlıca birçok üniversite ve seminerde konuşmacı olmaktadır. Kendisi INETA topluluğunun bir konuşmacısıdır. Ayrıca www.yazgelistir.com, www.yazilimgunlugu.com ve www.nedirtv.com sitelerinde bölüm editörüdür.Uzunca bir süredir Londra'da yaşayan Barış Kanlıca ve kurucusu olduğu Mawens Business Solution'da danışmanlık hizmeti vermeye devam etmektedir.

Yorum Yap