Merhaba, Bu yazımda son zamanlarda üzerinde uğraştığım bir konu olan MS CRM ve MS CRM ile uygulama geliştirmekten bahsedeceğim. İlk yazım olan Java Executors ile zerre alakalı olmasa da CRM ile uğraşmanın da ayrı bir tadı var tabi. Bu makalede uzun uzadıya CRM’den bahsetmek yerine direk uygulama üzerinden bir şeyler anlatarak daha faydalı olacağıma inanıyorum. Örnek uygulamada herhangi bir pazarlama listesindeki müşterilerin(Contacts) bilgilerini çekeceğiz. Bu esnada CRM’e bağlantı kuracak, pazarlama listesindeki müşterilerimizin bilgilerine ulaşacağız. Bu arada uygulamayı CRM 2011 için geliştiriyoruz bunu da belirtmekte yarar var, zira CRM 4 için biraz daha farklı şekilde kod yazmamız gerekiyor. [c] public OrganizationServiceProxy connectToCrm() { ClientCredentials credentials = new ClientCredentials(); credentials.Windows.ClientCredential = new System.Net.NetworkCredential("userName", "password", "organizationName"); Uri organizationUri = new Uri("http://URL/orgName/XRMServices/2011/Organization.svc"); Uri homeRealmUri = null; //IServiceManagement orgServiceManagement = ServiceConfigurationFactory.CreateManagement(organizationUri); OrganizationServiceProxy orgService = new OrganizationServiceProxy(organizationUri, homeRealmUri, credentials, null); OrganizationServiceContext orgContext = new OrganizationServiceContext(orgService); orgService.EnableProxyTypes(); return orgService; } [/c] Yukarıda görüldüğü gibi metodumuzun amacı CRM ile bağlantı oluşturmak ve bu çağırıldığı yere ServiceProxy objesi döndürmektir. orgService objesi önemlidir zira CRM için yazacağımız sorguyu bu objenin Execute metodu ile çalıştıracağız ve CRM veritabanına erişmiş olacağız. [c] public RetrieveMultipleResponse getMarketingList(String listId) { Guid guid = new Guid(listId); OrganizationServiceProxy orgService = connectToCrm(); QueryExpression qe = new QueryExpression(); qe.EntityName = Contact.EntityLogicalName; //ColumnSet cs = new ColumnSet(); //qe.ColumnSet.AddColumn("firstname"); //qe.ColumnSet.AddColumn("lastname"); //qe.ColumnSet.AddColumn("emailaddress1"); qe.ColumnSet.AddColumn("mobilephone"); qe.ColumnSet.AddColumn("contactid"); allColumn = qe.ColumnSet.Columns; LinkEntity le = new LinkEntity(); le.LinkFromEntityName = Contact.EntityLogicalName; le.LinkFromAttributeName = "contactid"; le.LinkToEntityName = ListMember.EntityLogicalName; le.LinkToAttributeName = "entityid"; //link from listmember to list LinkEntity le2 = new LinkEntity(); le2.LinkFromEntityName = ListMember.EntityLogicalName; le2.LinkFromAttributeName = "listid"; le2.LinkToEntityName = List.EntityLogicalName; le2.LinkToAttributeName = "listid"; // add condition for listid ConditionExpression ce = new ConditionExpression(); ce.AttributeName = "listid"; ce.Operator = ConditionOperator.Equal; ce.Values.Add(listId); //add condition to linkentity le2.LinkCriteria = new FilterExpression(); le2.LinkCriteria.Conditions.Add(ce); //add linkentity2 to linkentity le.LinkEntities.Add(le2); //add linkentities to Query Expression which is passed for getting collection of accounts qe.LinkEntities.Add(le); RetrieveMultipleRequest request = new RetrieveMultipleRequest(); request.Query = qe; response = (RetrieveMultipleResponse)orgService.Execute(request); return response; } [/c] Bu metodumuzda ise pazarlama listemizin id’sini, ki buna CRM dünyasında guid deniyormuş, ve ServiceProxy objemizi alıyor ve sorgumuzu yazmaya başlıyoruz. QueryExpression qe = new QueryExpression(); ile sorgumuzun girizgahını yaptıktan sonra CRM’den hangi tipteki nesneleri çekeceğimizi belirtiyoruz ki bu uygulamada istediğimiz Contacts tipi nesnelerdir. qe.EntityName = Contact.EntityLogicalName; ColumnSet ile Contacts tablosunun hangi kolonlarını istediğimizi belirtiyoruz.Tavsiyem yalnızca lazım olanları çekmeniz. [c] int theCounter = getMarketingList(guid).EntityCollection.Entities.Count; [/c] ile pazarlama listemizdeki toplam müşteri sayısını elde edebiliriz. Müşteriler elimizde,bundan sonra sorguda belirttiğimiz herhangi bir kolondan veri çekebiliriz; [c] string selectedColumnName = "mobilephone"; List attributeList = new List(); foreach (Contact contact in response.EntityCollection.Entities) { if (contact.Attributes.Contains(selectedColumnName)) { string data = contact[selectedColumnName].ToString(); attributeList.Add(data); } } [/c] Telefon numaraları artık elimizde :) Bundan sonra bu veriyi dilediğimiz şekilde kullanabilir. Örnek olarak DataList adında bir DropDownList oluşturarak ekrana bastırabiliriz. [c] DataList.DataSource = attributeList; DataList.DataBind(); [/c] Oldukça basit bir uygulamacıkla MS CRM ile uğraşmaya başlamış olduk. Bundan sonra vakit buldukça Plug-in geliştirmekten ve Ribbon oluşturmaktan bahsedip öğrendikçe paylaşıp, paylaştıkça öğrendiğimi unutmamaya çalışacağım :)


Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.