18 Temmuz 2012 Çarşamba

Dynamics/CRM 4.0  Web Servisini Kullanmak

Dynamics CRM’in belki de en güçlü yönü ve ona bu kadar esneklik sağlayan özelliği SOAP mimarisi dediğimiz web servisler üzerine kurulu yapısıdır. Özellikle geliştiriciler açısından web servislerin kullanılmadığı bir CRM projesi çok azdır.
CRM sistemi 3 web servisle gelir. Birincisi ve en sık kullanılan ana web servisidir. Bunun özelliklerinden şimdi bahsedeceğiz. Diğeri CRM’in yapısı ile iligli metotların bulunduğu metadata web servistir. Bu servisi kullanarak CRM dışından CRM’a ait entityler ve alanlar açabilir ve bunları modifiye edebilirsiniz. Son web servisi Discovery servisidir. Bu servisin amacı CRM’in kuruluğu olduğu system ile ilgili bilgileri vermesidir. Mesela  hangi klasöre kuruldu gibi bilgiler bu web servis ile öğrenilebilir. CRM’in kurulum bilgileri şu sebeple önemlidir. Eğer 3. Parti bir yazılım hazırladıysanız ve bir setup dosyası ile bu geliştirmenizi dağıtıyorsunuz. İligli dosyalarınızın CRM’de nereye yazılacağını bilmeniz için bu tip bilgilere ihtiycınız olacaktır. Bu bir örnek, çoğaltabiliriz. Mesela bir program yazarak CRM sisteminin yedeğini almak istiyorsunuz. Nereye kurulduğu hangi veritabaını kullandığı gibi bilgiler gene önem kazanacaktır.
Şimdi asıl işlevimizi gören ana web servisinin detayına girebiliriz. CRM sisteminde gördüğünüz bütün ekranları-entityleri düşünün buralardaki her alandan tutun da yeni bir kayıt oluşturmak yada güncellemek için gereken kodlar, sorgular çekmek için kullanılan yapılar hepsi bu web servisin içinde vardır. Öyle ki Custom bir entity oluşturduğunuzda yada yeni bir alan eklediğinizde dahi ilgili bilgiler hemen bu Web servisi’in içine de yazılır ve kullanılmaya hazır olur.
Şimdi bu web servis ne işimize yarar sorusunun cevebını biraz irdeleyelim. Bu web servisi kullanarak CRM dışından aynı CRM’in yaptığı işlevleri yaptırabilirsiniz. İş hayatından bir kaç örnek vermek istiyorum. Mesela Internet üzerinden kullanıcıların çağrı isteklerini alıp bunu bir case olarak sisteme kaydetmek istiyorsunuz.Asp.Net’de bir form tasarladınız. Bir Case açılması için gerekli alanları koydunuz. Ve altına bir düğme yerleştirdiniz. İşte bu web sitesine dışardan giren biri ilgili alanları doldurup düğmeye tıkladığında bu web servis ile bilgileri bir çağrı şeklinde CRM sistemine kaydedebilir. Burada önemli olan konu dışarıdaki kullanıcının bir CRM kullanıcısı olmamasına rağmen direkt sistem içinde kayıt oluşturabilmesidir. Bunun ne kadar geniş bir kullanım alanı olabileceğini düşünün. Mesela dışarıdan müşteri adayları(lead) girilen bir yapı kurabilirsiniz.ve kullanıclar gene bir CRM kullanıcısı olmadan siteme kayıt girişi yapabilirler. Yada mesela o günkü servis kayıtlarınızı web’den yayınlayabilirsiniz. Böylece kullanıcılar internet üzerinden ve gene bir CRM kullanıcı olmamalarına rağmen o günkü servis yoğunluğunu görüp gelip gelmeme konusunda karar verebilirler. Bu örnekleri çoğaltmak mümkün.
Buraya kadar güzel hoş anlattık da hiç örnek göstermedik. Bu iş nasıl olur diye sorarsanız çok haklısınız. Şimdi bir örnek ile bu konuştuklarımızı gerçeğe dönüştürelim. Basit bir web formu hazırlayalım ve buradan aldığımız bilgileri CRM web servisini kullarak bir lead olarak sisteme girelim.
Lead ekranında bir çok alan vardır. Bunların hepsini formumuza koymamıza gerek yok sadece ihtiyacımız olanları eklesek yeterli olacaktır.


Bir Lead ekranında varsayılan durumda zorunlu olan 3 alan vardır Topic, Last Name ve Company Name. Bu alanların sistemde tutuldukları isimleri de benzer olarak sırasıyla subject,lastname ve companyname’dir bu isimleri bilmek önemlidir. Çünkü web serviste bu alanlara bu isimleriyle ulaşacağız. Farklı bir tipte alan olması açısından bir de Rating isimli alanı da formumuza koyalım bu alanın CRM sistemindeki ismi ise leadqualitycode’dur. Bu alanların gerçek isimlerini Settings-- > Customizations -- > Customize Entities yolunu kunnarak buradan Lead entity’sini seçerek öğrenebilirsiniz.
Forms and Views alanında Form’u seçtikten sonra aşağıdaki gibi bir ekran gelecektir.



Adını öğrenmek istediğiniz alana çift tıklayarak gelen özellikleri penceresinin Name sekmesinde görebilirsiniz.



Visual Studio 2008’de bir ASP.NET uygulaması açın. ASP.NET seçmeniz şart değildir. Bir windows form uygulması yada konsol uygulaması da seçebilirsiniz. Benzer şekilde ASP.NET’in 2008 verisyonunu kullanmak da zorunda değilsiniz.2005 yada başka bir sürümde olabilir ve hatta Visual Studio yerine Microsoft’un Express Edition yazılım geliştirme araçlarından birni de pek ala kullanabilirsiniz. Forma aşağıdaki gibi 4 alanı ekleyin. HTML kodu ve görünümü aşağıdaki gibi olacaktır.

<table class="style1">
  <tr>
    <td>
       Konu:</td>
     <td>
     <asp:TextBox ID="txtSubject" runat="server"></asp:TextBox>
       </td>
        </tr>
        <tr>
          <td>
            Soyad:</td>
          <td>
       <asp:TextBox ID="txtLastName" runat="server"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td>
                    Firma:</td>
                <td>
                    <asp:TextBox ID="txtCompanyName" runat="server"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td>
                    Önem Derecesi</td>
                <td>
        <asp:DropDownList ID="ddlLeadQualityCode" runat="server">
                        <asp:ListItem Value="1">Hot</asp:ListItem>
                        <asp:ListItem Value="2">Warm</asp:ListItem>
                        <asp:ListItem Value="3">Cold</asp:ListItem>
        </asp:DropDownList>
                </td>
            </tr>
            <tr>
                <td>
     <asp:Button ID="btnSave" runat="server" Text="Kaydet" />
                </td>
             
            </tr>

</table> 


Sıradaki aşama CRM web servisini projemize dahil etmektir. Solution Exploer üzerinde References üzerine sağ tıklayın ve Add Web Reference… komutunu verin.


Çıkan kutuya  http://<sunucu_adi>/mscrmservices/2007/CrmServiceWsdl.aspx yazın. Biraz bekledikten sonra servis ile ilgilii tanım dosyaları gelecektir. Buradaki CRM’in kurulduğu sunucuyu belirtirken 5555 portuna kurulum yaptıysanız ki varsayılan durumda bu porta kurulacaktır bunu belirtmeyi unutmayın. Örnek bir adres şöyle verilebilir. http://Bizimsunucu:5555/mscrmservices/2007/CrmServiceWsdl.aspx Bu noktada dikkatinizi 2007 ifadesine çekmek istiyorum. Bu web servisi’in CRM 4.0 sürümüne ait olduğunu gösterir. CRM 3.0 kullnıyorsanız o zaman 2007 yerine 2006 kullanmanız gerekirdi. CRM 4.0 sürümünde 2006’li olan halini de kullanmanız mümkündür.
Web Reference name: alanında servisniz için crmservice ismini verdikten sonra Add Reference komutunu vererek servisi projenize dahil edin.



Default.aspx.cs içine using crmservis.crmservice; referansını ekleyin. Buradaki crmservis projemizin adıdır. Eğer uygulamayı açarken farklı bir ad belirtmişseniz burada onu yazmalısınız. Ikinci crmservice ise az önce ismini verdiğimiz servisin adıdır.
Şimdi Default.aspx.cs içine yazılacak tam kodu veriyorum. Daha sonra açıklamasını yapacağız.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using crmservis.crmservice;
using System.Net;

namespace crmservis
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
       }
        protected void btnSave_Click(object sender, EventArgs e)
        {
            CrmService srv = GetCrmService();
            lead l = new lead();
            l.subject = txtSubject.Text;
            l.lastname = txtLastName.Text;
            l.companyname = txtCompanyName.Text;
            l.leadqualitycode = new Picklist();
            l.leadqualitycode.Value = Convert.ToInt32(ddlLeadQualityCode.SelectedValue);
            srv.Create(l);
        }

        private static CrmService GetCrmService()
        {
            CrmService service = new CrmService();
            service.Url = "http://<sunucu:5555>//mscrmservices/2007/crmservice.asmx";
            service.Credentials =
                   System.Net.CredentialCache.DefaultCredentials;
            service.Timeout = 1000 * 1000;
            return service;
         }
    }
}

GetCRMService Metodu ile servisi çağırmış olursunuz. Yeni bir lead sınıfı örneği oluşturuktan sonra yukarıda olduğu gibi formadan okuduğunuz değerleri iligli alanlara yazabilirsiniz. Metinsel alanlarda direkt yazabilir ama picklist,lookup gibi özel alanlarda yazacağınız alanın tipini de belirtmeniz gerekir. Mesela Picklist alan için l.leadqualitycode = new Picklist(); diye belirtmeniz gerekir.daha sonra DataValue özelliğini kullanarak picklist’e de değer atayabilirsiniz.
Burada dikket çekmek isteiğim bir konu da
service.Credentials = System.Net.CredentialCache.DefaultCredentials;

satırıdır. Böylece web servisin uygulamayı çalıştıran kullanıcının hakları ile web servise bağlanmasını sağlamış olursunuz. Eğer kullanıcının hakları yeterli değilse bağlanma gerçekleşmez. Bunun önüne geçmek ve her daim bağlanmayı sağlanmak açısından yetkileri olan özel bir kullanıcıyı bağlamak isteyebilirsiniz. O zaman yukarıdaki satırı aşağıdaki gibi değiştirmeniz gerekir.

ICredentials myCredentials = new NetworkCredential("kullanici""sifre""domain");
 service.Credentials = myCredentials;
service.PreAuthenticate = true;

Uygulamayı çalıştırıp Formu doldurun ve Düğmeye Tıklayın lead kaydının sistemde oluşturulduğunu göreceksiniz.



Bu noktada önemli bir hatırlatma yapmak istiyorum. CRM’in web serivisini, kullanmak uygulamayı bir nevi herkese açmak olduğu için ek bir lisans bedeli ister.  connector Lisansı diye tabir ettiğimiz bu lisansın fiyatlamasıyla ilgili Microsoft'dan detaylı bilgi alabilirsiniz.


Hiç yorum yok:

Yorum Gönder