cub-e.net

just coding...

Müşterinin Kalbine Giden Yol Teknolojiden Geçer - Bolum 1

Bizde meşhur bir atasözü vardır “erkeğin kalbine giden yol midesinden geçer” derler. Günümüzde bu sözü iş dünyasına odakladığımızda müşterinin kalbine giden yolda teknolojisinin olması bizi hiç de şaşırtmamalı aslında.

Rakamlar yalan söylemez…

Apple’ın 10 Eylül’de tatnıttığı  iPhone 5c ve iPhone 5s  bir haftada şimdiye kadar bütün iPhone’ların ilk hafta satışlarını geçti. Apple yaptığı açıklama ile bir haftada 9 milyon iPhone 5C ve iPhone 5S satıldığını duyurdu. iPhone 5 ile karşılaştırdığımızda geçen sene yine Eylül ayında tanıtılan iPhone 5 ilk haftasında 5 milyon rakamına ulaşmıştı.

Geçen sene tek ürünle 5 milyonu yakalamasına karşılık 2 ürünle toplamda 9 milyon satışa ulaşmış oldu.

Mobil kullanım oranları her geçen gün artıyor ve yapılan araştırmalar daha uzun süre bu büyümenin devam edeceğini öngörüyor. IDC‘nin yayınladığı rapora göre tablet bilgisayarlar, kişisel bilgisayarların yıllık üretimini 2015 sonu itibariyle geçecek.

Akıllı telefonlar ve tabletlerin bulunduğu mobil cihazlarda geçen yıl %30.3 büyüme yakalamasına göre bu yıl hafif bir gerileme ile %27.8 büyüme bekleniyor. Buna karşın PC üretiminin 2013 yılı itibari ile %10 düşeceği tahmin ediliyor. Akıllı telefonların anormal büyümesini sürdüreceği ve 1.4 milyar akıllı telefonun üretiminin gerçekleşeceği de beklentiler arasında. Dikkat çeken bilgilerden birisi de tabletlerin en büyük rakibinin yine mobil bir cihaz olan akıllı telefonların büyüyen ekranları olması.

Şirket websitesini yaptık herşey bitti…

Hal böyle olunca oturup düşünmek gerekiyor, peki biz işimizi teknolojiye uyarlayabildik mi? ya da internet ve sosyal medyanın gücünü doğru kullanabiliyor muyuz? İşte bu noktada en çok yapılan hata şirket web sitemizi yaptık herşey bitti şeklindeki yanlış düşüncede yatmakta. Türkiye’den örnek verecek olursak IAB Türkiye’nin sunduğu rapora göre ‘display’, arama raporu, mobil reklam, ilan, e-posta, oyun içi reklam gibi oluşan internet reklam yatırımları toplamına göre 2013’ün ilk 6 ayında internet reklam pazarı hacmi yarım milyar TL’yi aşarak 541.8 milyon TL olarak gerçekleşti.

İş İlanı

Omerd Business Solutions kurulduğu günden bugüne Türkiye’nin öncü ve lider firmalarına yazılım ve sistem danışmanlığı yapan firmadır. Omerd Business Solutions; sahip olduğu uzman ekibi, gerçekleştirdiği yüksek ölçekli projeler ile sürekli gelişmekte olan bilişim teknolojilerinde Microsoft Dynamics CRM, Web Optimizasyonu, Bilgi Güvenliği, Sistem tasarımı, implementasyonu ve entegrasyonu konularında çözümler sağlamaktadır. Omerd Business Solutions; sahip olduğu vizyon, nitelik, deneyim ve değerlerle, Bilişim Teknolojilerinde yaşanan dinamik süreçleri, müşterilerinin gereksinimlerine entegre ederek, kuruma özel çözümler sunmaktadır.  

Firmamızın geliştirmekte olduğu projelere çabuk adapte olarak yazılım geliştirecek analitik düşünce yapısına sahip takım arkadaşı aramaktayız.

Aranan Nitelikler

  • Kurumsal projelerde minimum 2 yıl deneyimli
  • Analitik algılama ve analiz yeteneklerine sahip
  • Çok katmanlı mimaride sistem geliştirme ve nesneye yönelik yazılım geliştirme konusunda deneyimli
  • C#,ASP.NET,XML Web Servisleri, SQL Server konularında deneyimli
  • Javascript, HTML, CSS gibi web tabanlı yazılım geliştirme teknolojilerinde deneyimli
  • Tercihen Windows Server Mimarisi (Active Directory, IIS, DNS...) konusunda bilgili
  • Erkek adaylar için askerliğini yapmış veya en az 2 yıl tecilli
  • Dökümantasyonları takip edebilecek kadar İngilizce bilgisine sahip.

 Not : Şirketimiz Söğütlüçeşme Metrobüs hattına çok yakındır.

Dynamics CRM Webinerleri

İşte size büyük süpriz. 8 gece CRM konuşacağız. Detaylar aşağıda :)

 “İş stresinden ve günün yorgunluğundan kurtulun. Microsoft Dynamics CRM MVP’si Barış KANLICA sizi CRM’li 8 geceye davet ediyor.
Microsoft Dynamics CRM’in yeteneklerini, iş gücünü, her firmaya yaptığı işe göre uyarlanabilen esnek mimarisini keşfetme zamanı; şimdi CRM zamanı.
Siz rahatlayın ve arkanıza yaslanın bırakın o sizin yerinize çalışsın. İş akışları sayesinde sizin yerinize otomatik görevler oluştursun, mailler atsın. Dahası her yerden CRM’e ulaşın.
21:00-22:00 saatleri arasında yapılacak olan web seminerimize hepiniz davetlisiniz. ” 
Tarihi Konusu İçerik Link Başlangıç Saati Bitiş Saati
(Duyuruda kullanılacak başlık)
20.01.2010 CRM,XRM Kavramları ve MS Dynamics CRM CRM'in temelleri ve işleyişi anlatılacaktır. http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032440131&Culture=TR-TR 21:00 22:00
22.01.2010 Dynamics CRM Genel Ayarlar, Sistemin Yetenekleri ve İş Akışları Dynamics CRM'in yetenekleri ve İş Akışları mimarisi anlatılacaktır. http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032440133&Culture=TR-TR 21:00 22:00
27.01.2010 Dynamics CRM Firmalar, İlgili Kişiler ve Outlook Client Dynamics CRM içerisinde kayıtların nasıl durduğu ve bunlara nasıl erişileceği bu webinerde anlatılacaktır. http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032440135&Culture=TR-TR 21:00 22:00
29.01.2010 Dynamics CRM Satış Yönetimi I - Ürün Yönetimi, Fırsat Kavramı ve Müşteri Adayları Dynamics CRM içerisinde CRM kavramına yönelik yapıların nasıl şekillendiği bu webinerde anlatılacaktır. http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032440138&Culture=TR-TR 21:00 22:00
03.02.2010 Dynamics CRM Satış Yönetimi II - Teklif, Sipariş ve Fatura Satışa yönelik aktivitelerin Dynamics CRM içerisinde nasıl yönetildiği bu webinerde ele alınacaktır. http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032440140&Culture=TR-TR 21:00 22:00
05.02.2010 Dynamics CRM Pazarlama - Kampanya ve Kampanya Raporları Kampanyaları yönetmenin Dynamics CRM ile ne kadar olduğu bu webinerde anlatılacaktır. http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032440142&Culture=TR-TR 21:00 22:00
10.02.2010 Dynamics CRM Servis - Sözleşme, Servis Talepleri ve Servis Planlama Dynamics CRM içerisinde servis planları oluşturmanın, Servis ekibi ve ekipmanlarının yönetimi bu webinerde anlatılacaktır. http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032440144&Culture=TR-TR 21:00 22:00
12.02.2010 Dynamics CRM Gelişmiş Bul ile Herşeyi Bulalım ve Kendi Raporlarımızı Yapalım Dynamics CRM ile bütün alanlarda sorgulama yapın, görünümler oluşturun, Excel ve Word'e aktarın hatta kendi raporunuzu birkaç tıklama ile yapın. http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032440146&Culture=TR-TR 21:00 22:00

Microsoft Dynamics CRM Hatalarını Yakalamak

CRM web servisi bir web servisinin doğası gereği soap ile iletişim kurmakta ve işlenen hataları da soap içinde xml ile döndürmektedir.


Microsoft Dynamics CRM Web Servisi'nde Request parametresi kullanılarak bir çağrı yaptığınızda hata olarak System.Web.Services.Protocols.SoapException sınıfından ortak bir hata mesaj yapısı döner.

SoapException'ın Message property'si her zaman için "Server was unable to process request." hatasını döndürür.

SoapException içerisinde Detail property'si oluşmuş olan hata hakkında daha fazla bilgi verecektir. Detail property bir XmlNode türündendir ve InnerXml property aşağıdaki formatta hatayı sunmaktadır.

<error>
<description>Error description goes here.</description>
<code>0xABCD1234</code>
<type>Platform</type>
</error>
 

ErrorCode yani xml içerisindeki Number hexadecimal türündedir. Örnek verecek olursak; eğer veritabanında olmayan bir fax'ı çağırmaya kalkalsanır hata aşağıdaki şekilde olacaktır:

<error>
<code>0x80041103</code>
<description>'Lead' entity doesn't contain attribute with Name = 'name'.</description>
<type>Platform</type>
</error>

Standart bir kodlama mantığında catch bloğunda bu hatayı aşağıdaki şekilde yakalabiliriz.

catch (System.Web.Services.Protocols.SoapException ex)
{
   
Message = ex.Message;
   
Detail = ex.Detail.InnerText;
}

Bu şekilde hatayı öğrenebiliriz ama detaylı ve güzel bir hata mesajı olmaz son kullanıcı için. Tabii burada bu hataları loglayacak bir yapı oluşturabiliriz bu tercihinize kalmış ama her durumda detaya ihtiyacımız var.

CRM'in detaylı hata kod listesine buraya tıklayarak ulaşabilirsiniz.

Hata yapısı ve içeriği hakkında bu bilgileri verdikten sonra bu hataları yakalayacak kodu vermek güzel olacak sanırım :) Aşağıda kodu ve açıklamasını bulabilirsiniz.

 

/// <summary>
///
Hatalari yakaliyoruz.
/// </summary>
/// <param name="ex">System Exception</param>
/// <returns>hatanin detayli aciklamasi</returns>
private string HandleException(Exception ex)
{
   
string Error = "Uygulama bir hata ile karsilasti." + System.Environment.NewLine;
    Error +=
"Message : " + ex.Message + System.Environment.NewLine;
   
if (ex.InnerException != null)
        Error += ex.InnerException.Message + System.
Environment.NewLine;
   

    SoapException
se = ex as SoapException;
   
if (se != null)
    {
        Error +=
"Code : " + GetError(se.Detail, "//code") + System.Environment.NewLine;
        Error +=
"Desription : " + GetError(se.Detail, "//description") + System.Environment.NewLine;
        Error +=
"Type : " + GetError(se.Detail, "//type") + System.Environment.NewLine;
    }
   
return Error;
}

/// <summary>
/// SoapException.Detail icerisindeki hatayi dondurur
/// </summary>
/// <param name="errorInfo">hatayi iceren XmlNode'u.</param>
/// <param name="item">geri dondurulecek hata.</param>
/// <returns>hata detayi ya da bos icerik.</returns>
private string GetError(XmlNode errorInfo,string item)
{
   
XmlNode code = errorInfo.SelectSingleNode(item);
   
if (code != null)
   
    return code.InnerText;
   
else
        return
"";
}
  1. Burada dikkat edilmesi gereken şey hatanın SoapException sınıfı türünden olup olmadığını kontrol ettiğimiz kısım;

        SoapException se = ex as SoapException;

    eğer içerik SoapException türünden ise detayını öğrenmek isityoruz. ( "as" ifadesi hakkında daha fazla bilgi almak için buraya tıklayınız.)
  2. Yukarıda hata durumunda dönecek Xml içeriğini verdim. Bu bir Xml olduğu için XmlNode'larına erişerek istediğimiz bilgiyi alalım. İşte GetError bu işe yarıyor. Soap Exception'ın Detail'ını ve istediğimiz node'u söylüyoruz bize geri dönüyor.

        GetError(se.Detail, "//code")

Bu kod sonucunda elde ettiğimiz hata mesajı;

 

Uygulama bir hata ile karsilasti.
Message : Server was unable to process request.
Code : 0x80041103
Desription : 'Lead' entity doesn't contain attribute with Name = 'name'.
Type : Platform

 

Bir makalemizin daha sonuna geldik umarım faydalı olmuştur.


Barış KANLICA

Yazılım Uzmanı – Software Specialist
brsk@e-kolay.net
www.cub-e.net
forum.cub-e.net

Microsoft Dynamics CRM Web Servisi ve Performans

Benim yazılarımı takip edenler hatırlayacaklardır. Daha önce CRM üzerinde veri sorgulama yöntemleri isimli yazı dizimin 1. bölümü web servislerini kullanarak veri sorgulama yöntemleriydi. O makalede web servisleri hakkında bilgi vermiştim ama şimdi CRM 4.0 çıkınca, CRM 4.0'ın web servisinin ek özelliklerini anlatmak ve performans konularına değinmek istedim.

CRM Web Servisi performans düşüklüğü nedeniyle programcılar tarafından pek sevilmemektedir. Bu makalede sizlere web servisin yapısını ve performans attırıcı bir yöntemlerden bahsedeceğim. Ayrıca CRM 3.0 ve 4.0 arasındaki servis yapısındaki değişikliklere göz atacağız.

WebServis’leri ise bize özellikle veri yazarken büyük kolaylıklar sağlasa da veri okurken bazen karışık olabiliyor. Web Servisleri class(sınıf) mimarisinde olduğundan nesne paylaşımına dayalı bir altyapı sunuyor. Bu doğru kullanıldığında, bize, program yazarken uzun uzun attribute ve property hazırlamak derdinden kurtarıyor.

Microsoft CRM’in 2 adet temel Web Servisi bulunmakta;

  1. CRM Service : istediğiniz entity üzerinde Create(Oluşturma),Update(Güncelleme) , Delete(Silme) gibi işlemleri yapmanızı sağlıyor. Adresi;
    CRM 3.0 : http://<yourservername(:port)>/mscrmservices/2006/crmservice.asmx
    CRM 4.0 : http://<yourservername(:port)>/mscrmservices/2007/crmservice.asmx
    alternatif olarak http://<yourservername(:port)>/MSCRMServices/2007/CrmServiceWsdl.aspx
  2. Metadata Service : CRM’in entity ve picklist mimarisi gibi metadata veritabanında bulunan veriler üzerinde yine Create(Oluşturma),Update(Güncelleme) ,Delete(Silme) gibi işlemleri yapmanızı sağlıyor. Metadata verisi içerisinde bir picklist(yani combobox-dropdownbox)’in içeriği, bir alanın türü gibi sistem üzerinde kullandığımız nesnelere yönelik bilgileri tutmaktadır. Adresi;
    CRM 3.0 : http://<yourservername(:port)>/mscrmservices/2006/metadataservice.asmx
    CRM 4.0 : http://<yourservername(:port)>/mscrmservices/2007/metadataservice.asmx

Web Servisini Projemize Eklemek :



Visual Studio’da açtığımız uygulamamızın adı üzerinde sağ tuşa tıklayarak getirdiğimiz menüde aşağıdaki gibi “Add Web Reference”’a tıklıyoruz.


Açılan pencereye eklemek istediğimiz servisin url’ini yazıyoruz ve “go” düğmesine tıklıyoruz.

Servis credential yani kimlik doğrulamak için bizden kullanıcı adı ve şifre isteyecek. Bunu geçtikten sonra “Web reference name”’e servise verecegimiz ismi yazıyoruz. Burada ben “MyService” ismini veriyorum. “Add Reference” düğmesine tıklıyoruz.Artık servisimizi projemize eklemiş durumdayız.

  1. CRM servisimizin oluşturuyoruz.

            CrmService MyService = new CrmService();

  2. Servise network'te kim olduğumuzu söyleyelim eğer CRM serverın bulunduğu domainde oturum açmadıysak bunu yapmak zorundayız.

            System.Net.
    NetworkCredential MyCredential = new System.Net.NetworkCredential();
            MyCredential.UserName =
    ""
            MyCredential.Password = "";
            MyCredential.Domain =
    "";
            MyService.Url =
    "http:// i p : port/MSCrmServices/2007/CrmService.asmx";
            MyService.Credentials = MyCredential;

    Bu kod ile servise bağlandığımız zaman sistem üzerinde yaptığımız bütün hareketlerde yani güncelleme ve kayıt işlemlerinde burada vereceğiniz kullanıcı adı ve şifrenin ait olduğu kullanıcı created ve modified user olarak gözükecektir. Yani sistemde bizim uygulamamzı kullanan bütün kullanıcıları teke indirmiş olacağız.
    Bunun olmasını istemiyorsak aşağıdaki kodu kullanmamız gerekir;

        MyService.Credentials = System.Net.CredentialCache.DefaultCredentials;

    Bu kod sayesinde IIS üzerinde Integrated Windows Authentication ile oturum açmış olan kullanıcıyı yani CRM'e girmiş olan kullanıcının yetkileri ile işlem yapmış oluruz. Burada hatırlanması gereken en önemli şey uygulamamızın işlem yaptığı entityler üzerinde kullanıcının yetkilerine göre web servisin bize cevap vereceğidir.
  3. işte burası servisi hızlandırdığımız nokta. Nasıl mı oluyor adı üzerinde aslında güvensiz bağlantı paylaşımı yani yukarıda bahsettiğimiz güvenlik yöntemlerinden biri ile IIS üzerinde oturum açan bir kullanıcı olduğu zaman IIS talepte bulunan diğer kullanıcılar için doğrulama yapmıyor yani Kerberos devreye girmiyor Active Directory'e gidilmiyor. Bunlar sonucunda performansta gözle görülür bir artış oluyor.

            MyService.UnsafeAuthenticatedConnectionSharing = true;

    Ama işte burası önemli aması var :) sisteme ilk kim giriş yaparsa IIS o kullanıcı ile devam ettiğinden her işi sanki birinci kullanıcı yapmış gibi görünüyor. CRM'in performansını arttırmakla ilgili daha detaylı makalelere bu linkten ulaşabilirsiniz : Performans Arttırmak
  4. CRM 4.0 bildiğiniz gibi farklı hosting modelleri ile birlikte geliyor. Tabii bu hosting modellerini programatik olarak da kontrol etmek gerek. Artık crm serverine bağlanırken bir AuthenticationToken'a ihtiyacımız var bu olmadan servis bağlantı yapmanıza izin vermeyecektir.
    Token nesnesi içerisinde bulunan AuthenticationType isimli Property 0,1,2 değerlerinden birini almaktadır. Bunların anlamları ise;

    Alan Değer Tanım
    AD 0 Standart Active Directory authentication.
    Passport 1 Passport authentication. Şu an için Amerika ve Kanada'da kullanılacak olan windows live id ile Microsoft tarafından yapılacak olan hostinglerde geçerli olacak.
    Spla 2 Specifies Internet Facing Deployment authentication (formerly known as SPLA). Firmanızının CRM hosting yapacağı zaman kullanacağınız doğrulama biçimi.

    Bütün bunların yanında hosting yapsanız da yapmasanız da kullanmanız gereken bir property var adı OrganizationName. Hangi CRM organization için sisteme giriş yaptığınızın bilgisidir.

            CrmAuthenticationToken token = new CrmAuthenticationToken();
            token.AuthenticationType = 0;
            token.OrganizationName = "CRMVPC";
            MyService.CrmAuthenticationTokenValue = token;

private
CrmService service(bool isUnsafe)
{
   
try
    {
       
CrmService MyService = new CrmService();
       
// servise network'te kim oldugumuzu soyluyoruz. (Eger CRM Server'i ile ayni domainde degilseniz
        // bunu yapmak zorundasiniz yoksa "The request failed with HTTP status 401: Unauthorized." hatasini alirsiniz)
        System.Net.NetworkCredential MyCredential = new System.Net.NetworkCredential();
        MyCredential.UserName =
""
        MyCredential.Password =
"";
        MyCredential.Domain =
"";
        MyService.Url =
"http:// i p : port/MSCrmServices/2007/CrmService.asmx";
        MyService.Credentials = MyCredential;
       
// Eger crm server ile ayni domainde iseniz ve sizin crm'de bir rolunuz varsa asagida parantezler icerisinde
        // belirttigim komutu yukaridaki 5 satir yerine kullanabilirsiniz
        // ( MyService.Credentials = System.Net.CredentialCache.DefaultCredentials; )
       
        // servisi hizlandirmak icin true degerini atiyabiliriz.
        MyService.UnsafeAuthenticatedConnectionSharing = isUnsafe;
       
        ///
CRM 4.0 ile gelenler

        CrmAuthenticationToken token = new CrmAuthenticationToken();
        token.AuthenticationType = 0;

        token.OrganizationName = "CRMVPC";
        MyService.CrmAuthenticationTokenValue = token;

        return
MyService;
    }
    catch (Exception ex)
    {
        HandleException(ex);
        return null;
    }
}

Bir makalemizin daha sonuna geldik.


Barış KANLICA
Yazılım Uzmanı – Software Specialist
brsk@e-kolay.net
www.cub-e.net
forum.cub-e.net