Xml Dosyasından Veri Okuma --JQuery


.xml uzantılı verilerimizi okuyacagımız dosyanın içeriği aşağıdaki gibidir.

<?xml version="1.0" encoding="utf-8"?>
<iller>
 <il >
   <telefonkodu>
     0 212
   </telefonkodu>
   <sehir>
     Istanbul
   </sehir>
 
       </il>
 
 <il >
 
   <telefonkodu>
     0 442
   </telefonkodu>
   <sehir>
     Erzurum
   </sehir>
       </il>
</iller>


Evet xml tanımladık ve şimdi ajax metodu ile bu xml dosyamıza ulaşalım ve içeriğini alalım

<script type="text/javascript">
$.ajax({
  url:'veri.xml',
  type:'POST',
  dataType:'xml',
  success:function(xml){
                //Eğer işlem başarılı ise burada ki kodlar çalışacak.
                alert('Veri başarı ile yüklendi.')
 
});
</script>

Peki XML i sayfaya yükledik ama içinde ki düğümlere teker teker ulaşalım.Nasıl derseniz bakın şöyle;Eğer işlem başarılı ise neler yapılabileceğine bakalım:

<script type="text/javascript">
$.ajax({
  url:'veri.xml',
  type:'POST',
  dataType:'xml',
  success:function(xml){
                //Eğer işlem başarılı ise burada ki kodlar çalışacak.
                $(xml).find('il').each(function(){
                 var telKodu=$(this).find('telefonkodu').text();
                 //0 212,0 442
                 var iladi=$(this).find('sehir').text();
                 //Istanbul,Erzurum
             })
 
});
</script>
Evet bu şekilde bilgilere ulaşmaya çalıştık ve ulaştık. Son olarak XML dosyasının Cash yapmasını engellememiz lazım olabilir.Bunu da extra bir bilgi olarak paylaşmak isterim. Yukarıda ki kodlara bir kaç ekleme yaparak bunu halledelim.
<script type="text/javascript">
var rast=Math.round(Math.random()*10000);
//sayfa her yüklendiğinde 1 ile 10000 arasında rastgele bir sayı oluşturalım.
$.ajax({
  url:'veri.xml?uid='+rast,//dosya uzantısının sonunu bu şekilde değitirelim
  type:'POST',
  dataType:'xml',
  success:function(xml){
                //Eğer işlem başarılı ise burada ki kodlar çalışacak.
                $(xml).find('il').each(function(){
                 var telKodu=$(this).find('telefonkodu').text();
                 //0 212,0 442
                 var iladi=$(this).find('sehir').text();
                 //Istanbul,Erzurum
             })
 
});
</script>

ASP.Net onMouseOver Büyüyen Resim


bir tane css olusturup ıcıne asagıda kodu ekle..
/* Image Hover */
.thumbnail{
position: relative;
z-index: 0;
}
.thumbnail:hover{
background-color: transparent;
z-index: 50;
}
.thumbnail span{
position: absolute;
background-color: #444444;
padding: 2px;
left: -1000px;
border: 1px dashed #2F4F4F;
visibility: hidden;
color: #000000;
text-decoration: none;
}
.thumbnail span img{
border-width: 0;
padding: 1px;
}
.thumbnail:hover span{
visibility: visible;
top: 0;
left: 150px;
}

/* Image Hover */
daha sonrasında ıstedıgın bır sayfada asagıdakı kodu yaz
 <a class="thumbnail" href="#thumb">
            <asp:ImageButton ID="ImageButton4" runat="server" Height="117px" ImageUrl="KUCUKRESİMYOLU"
                Width="125px" />
            <span>
                <img id="yanresim" runat="server" alt="" src="BUYUKRESİM" /></span></a>

Twitter Fotoğrafta Paylaştıracak


Sosyal ağ devi, en büyük eksiklerinden ikisini giderdi, yenilikler resmen duyuruldu.
Milyonlarca kişinin üyesi olduğu ve anlık sözlü paylaşımlar yapılan Twitter'a Twitpic tarzı yeni bir fotoğraf paylaşma servisi gelebilir.
İlk önce TechCruch'ta yayınlanan bu haber, ardından AllThingsD.com tarafından da doğrulandı. Bugün Kaliforniya'da gerçekleşecek olan D9 konferansında da Twitter CEO'su Dick Costolo'nun konu hakkında konuşması bekleniyor.
Twitter tarafından daha entegre bir sistem istenirken, bu servisin Twitter'ın yeni aldığı alan adlardından twimg.com üzerinden sağlanacağı da söylenenler arasında.
Twitter, birkaç hafta içinde kullanıma sunulacak fotoğraf paylaşım hizmetini resmen duyurdu. Bu sayede bir fotoğraf yükleyip 'Tweet'lerinize direkt olarak eklemek mümkün hale geliyor.

CRM 2011-PLUGIN YAZMA


Bugünkü makalemizde Microsoft Dynamics Crm 2011 içerisindeki bir entity'e pre plug-in yazmasını öğreneceğiz. Plug-in mimarisini Microsoft Dynamics Crm 4.0 mimarisinden bildiginiz gibi iki çeşiti vardır. ( Pre Plugin ve Post Plugin )
İsterseniz ilk önce pre plugin ile post plugin arasındaki farkları anlatalım.
Pre-Plugin : Kayıt içerisinde kayıt edilmeden hemen önce çalışan yapıdır. Bu yapıda biz ilgili kayıt henuz kayıt edilmeden istersek gerekli kontrollerimizi yapar ve kaydı engelleriz istersek kayıt henuz kayıt edilmeden önce ilgili kayıt üzerinde bazı değerler ekleyebilir veya çıkartabiliriz.
Post Plugin : Kayıt içerisinde kayıt edildikten sonra çalışan yapıdır. Post pluginler ile yapabiliceklerimiz örnek olarak bir kayıt oluştuktan sonra bir başka entity de farklı bir kayıt oluşturmak olabilir.
Biz makalemizde pre plugin yapısını inceleyeceğiz.
Seneryomuzda kişi kartı üzerinde çalışan bir pre plugin yapımızın olduğunu varsayalım. Microsoft Dynamics Crm 2011 sisteminde bir kişi eklendiği zaman ilgili kişiye bir kişi seri numarası atayalım.
  • İlk önce kişi kartı üzerinde kişi  seri numarası adında bir field oluşturalım . new_kisiserinumarasi.
  • Visual Studio 2010 üzerinde  yeni bir class library projesi açalım.
Class ımızın adına KisiSeriUpdate adını verdim. Plug-in işlemlerimizi gerçekleştirmek için ihtiyacımız olan referansları ve dll leri sırası ile ekleyelim.
microsoft.xrm.sdk.dll
Microsoft.Crm.Sdk.Proxy.dll
Yukarıdaki ilgili dll leri Crm server ımızın kurulu olduğu makina üzerinde bin klasörünün altında bulabilirsiniz.
System.Runtime.Serialization referansımızıda projemize ekleyelim.
Uygulamamız içerisindeki referanslarımız aşağıdaki şekilde olmalıdır.
Kod yazımına başlamadan önce projemize son olarak bir key file ekleyelim. bunun için gerekli olan adımlar aşağıdaki gibidir.
  • Projemiz üzerinde sağ tuş özellikler ekranına ulaşalım . Karşımıza aşağıdaki gibi bir ekran gelecektir.
Dikkat etmemiz gereken noktalardan biri uygulamamızın .net framework 4.0 olmasıdır.
Signing kısmından yeni bir key file ekleyelim.
Yukarıdaki adımlarımızı tamamladıktan sonra artık plugin yazma işlemlerimize başlayabiliriz.
using Microsoft.Xrm.Sdk;
 
namespace PrePlugin
{
    public class KisiSeriUpdate:IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            throw new NotImplementedException();
        }
    }
}
Uygulama içerisinde oluşturduğumuz KisiSeriUpdate class ımıza IPlugin interface ini implement edelim. IPlug in interface i Microsoft.Xrm.Sdk içerisinde bulunmaktadır.
İnterface imizi implement ettikten sonra Execute method unun geldiğini göreceksiniz. Plugin işleyişi Execute metot'u içerisinde olur.  Şimdi Execute method u içerisinde ilgili işlemlerimizi yapalım.
 public void Execute(IServiceProvider serviceProvider)
        {
            try
            {
                // Plug-in imizi yakalamak için serviceprovider nesnesi üzerinden gelen asagıdaki adımlarımızı tamamlayalm.  
Asagıdaki kod blogunda plug-in imizi çalıstırmak için gerekli olan servislerimizi ve ilgili servisi çalıstırmamız için gerekli olan kullanıcımızı 
yakalamaktayız. ( Plug-in imizi hangi kullanıcı çalıstırdıgı ise o kullanıcının bilgileri bize context.UserId degeri ile birlikte gelecektir.  
Dolayısı ile islemlerimiz de ilgili kullanıcının yetkisi dahilinde olacaktır. 
 
                 Microsoft.Xrm.Sdk.IPluginExecutionContext context = (Microsoft.Xrm.Sdk.IPluginExecutionContext)
                serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));
                
                IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
                IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
 
                // if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) context nesnesinin içerisindeki 
parmetrelerde Target parametresini olup olmadıgına ve ilgili parametrenin entity olup olmadıgına bakalım. 
 
                if (context.InputParameters.Contains("Target") && context.InputParameters["Target"is Entity)
                {
                    // Son olarak kendi olusturmus oldugumuz entity nesnesi içerisine yukarıda kontrol ettigimiz context nesneinin 
Target input parametresini verelim. 
                    Entity entity = (Entity)context.InputParameters["Target"];
 
                    // entity nesnesi içerisinde bizim kisi kartı üzerinde girdigimiz degerler bulunmaktadır. 
                }
            }
            catch (Exception ex)
            {
                // Plug-in içerisinde herhangi bir hata ile karsılasır isek bunu kullanıcıya mesaj olarak çıkartalım. 
                throw new InvalidPluginExecutionException("Genel Hata : " + ex.Message);
            }
        }
Yukarıda yapmış olduğumuz işlemler aslında bir plug-in yazımı aşamasındaki kalıp işlerimizdir. Servis ayarlarımızı aldık servise hangi kullanıcı ile baglanıcağımızın bilgilerini aldık . Kişi kartı içerisinde kullanıcının girdiği değerleri yakaladık.
Şimdi kişi kartı içerisine kisi seri numarası alanına değerimizi yazalım.
entity.Attributes.Add("new_kisiserinumarasi", 123456);
entity nesnesi içerisindeki Attributes listesine Add method u ile yeni bir değer ekleyelim. Eklemek istediğimiz field ın sistemsel adını verelim. new_kisiserinumarasi , field değerini belirttikten sonra ilgili alana değerimizi yazalım ben burda 123456 değerlerini yazdım bu değerler istenirse bir xml dosyasından da çekilebilir.
Plug-in işlemlerimiz bitmiştir. Şimdi uygulamamızı derleyelim ve dll çıktımızı alalım.
PrePlugin.dll dosyamızı Crm server ımıza plugin registration tool ile yukleyip test edebiliriz.

CRM de Güvenlik Rolleri (Security Roles)



Microsoft CRM, entityleriniz içindeki yetkileri yönetebilmenizi sağlamak adına bir rol sistemi sunar. ERP veya CRM gibi bir tool kullanıyorsanız, bu da mutlaka olması gereken özelliklerdendir zaten.
Microsoft CRM’in rol yetilerini maddeler halinde ifade edersek aşağıdaki 7 maddeyi sayabiliriz.
  • 1. Yetkiler rol merkezlidir. Yani roller oluşturulur ve kullanıcılara atanırlar.
  • 2. Roller arasında NxN bir ilişki vardır yani bir kullanıcı birden fazla role sahip olabileceği gibi bir rolü birden fazla kullanıcı da kullanıyor olabilir.
  • 3. Rol Kavramı sadece ürünün kendi entityleri için değil. Sonradan eklemiş olduğunuz bütün entityler için de kullanılabilirdir.
  • 4. Bir rol tanımlarken ilgili entity için o kişiye, okuma, yazma, silme,assign etme (atama) ,paylaşma(sharing) gibi yetkiler verebilirsiniz.
  • 5. Bu bahsettiğimiz yetkileri de kısıtlayabilirsiniz. Mesela Okuma yetkisini bütün organizasyondaki bütün kayıtlar için verebileceğiniz gibi yazma yetkisini sadece sahibi (owner) kendisinin olduğu kayıtlarda verebilirsiniz.
  • 6. Her kullanıcının en az bir rolü olmak zorundadır. Eğer kullanıcı bir role sahipse CRM ekranını açmaya çalıştığında rolü olmadığına dair hata mesajı alacaktır.
  • 7. Kullanıcı rollerine göre CRM ana ekranı da şekillenir. Mesela bir kullanıcının Contact Ekranını okumak için yetkisi yoksa, Ana CRM Ekranında Contact linkini dahi görmez. Dolayısıyla buradan da şu sonuç çıkıyor ki bir kullancı CRM sistemini açtığında bütün yapıları görmez. Sadece kendisine işiyle alakalı verilmiş rollerin izin verdiği yapıları görür.
Bir Kullanıcının sahip olduğu rolleri görmek için kullanıcı ekranın sol tarafındaki navigasyon barında bulunan Roles bağlantısını kullanabilirsiniz. Kullanıcıların bulunduğu listeye ise Settings --> Administration --> Users yolundan erişebilirsiniz.
Rollerin listesine ulaşmak için ise Settings --> Administration --> Security Roles yolunu kullanabilirsiniz. Bir Role tıkladığınızda Farklı tablar altında hem sistem hem de custom olmak üzere bütün entitylerinizi görebilirsiniz.
Burada entity karşısındaki kutucuklara tıklayarak rolün özelliğini değiştirebilirsiniz. Mesela Account Ekranındaki Read kutusuna tıklayarak tam yeşil hale yani Organization durumuna getiriseniz, o kullanıcı bütün account kayıtlarını görebilir. Ama aynı kullanıcı için accountda write yetkisini çeyrek sarı daire yani User durumuna getirirseniz Sadece Sahibinin kendi olduğu müşterilerde güncelleme yapabilir. Bu rollerin hangi anlama geldiğini yukarıdaki ekran görüntüsünde de olduğu gibi sayfanın altında görebilirsiniz.
Bu noktada Append ve Append To kavramından da bahsetmek önemlidir. Biribiriyle ilişkili entity’lerde Append ilgili entity’nin Append To ise ilişkilendirlecek entitynin yetkisi ile alakalıdır. Mesela Account ve Teklif ekranlarında Tekliflerin account içine ilişkilendirilebilmesi için rolde Teklif’in Append, account’un ise append to yetkilerinin olması gerekir. Mesela bir kişinin sadece kendi tekliflerini kendi account’larına entegre etmek isterseniz account için append to ve teklif için append haklarını user bazında vermeniz gerekir. Eğer kullanıcının kendi tekliflerini herhangi bir account’a ilişkilendirmesini isteseydiniz, o zaman Teklif’in append hakkına user ve account’un append to hakkında organization vermeniz gerekirdi.
Benim tavsiyem rolleri oluştururken kullanıcıların görevlerini ayırmak ve her görev için ayrı bir rol oluşturmak olacaktır. Bu durumu şöyle açıklayayım. Mesela bir çalışımız, hem Fırsatları hem de Accountları yönetiyor olabilir. Bu durumda tek bir rol altında iki entity’ye birlikte rol vermektense. İki ayrı rol tanımlayarak birinde Account diğerinde de Fırsat (Opportunity) ekranı üzerinde yetkiye sahip rol tanımlayabilirsiniz. Böylece Bu iki rolü o kişiye atadığınızda iki entity üzerinde de işlemlerini yapabilecektir.
Microsoft CRM’in rol sisteminin eksik yapısı yetkiyi kayıt bazında yönetmesi yani alan bazında olmamasıdır. Mesela bir kullancıya bu entity’deki bütün alanlara güncelleyebilirsin diyebilirsiniz, ama sadece şu ve şu alanları güncelleme diyemezsiniz.Daha doğrusu bunu CRM’in “out of box” diye tabir edilen kutudan çıktığı haliyle diyemezsiniz. Bir takım javascript özelleştirmesi yapmanız gerekir. CRM 2011 alan bazlı bu güvenlik özelliğini getirmiştir. Javscript gibi ek kodlama yapmaya gerek bırakmaz.

CRM 4.0 - CRM de İlişkiler ve Mapping (N - N ilişki)


Bu blümde N:N ilişki anlatılacaktır.Bir önceki makalede 1:N ve N:1 anlatılmaktadır.

N:N ilişki birbirine bağlı iki entiy’nin ikisinin de biribirine birden fazla kayıt içerek şekilde bağlanabilmesidir. Örnek vermek gerekirse CRM kullanıcılarının tutulduğu User entity’si ile güvenlik rollerinin tanımlandığı Roles Entity’si birbirine böyle bağlıdır. Bir kullanıcının birden fazla rolü olabileceği gibi bir rolü kullanan birden fazla kullanıcı da olabilir. Iki entity’de biribirine çoğullayacak şekilde bağlıdır. N:N ilişkilerde bağlı alanlar LookUp olarak görünmezler. Her iki entity de sol tarafta navbar üzerinde görüntülenirler.
Şimdi Örnek bir N:N ilişki tanımlaması yapalım. Fırsat (Opportunity) ekranı ile Muhatap Kişi (Contact) ekranı arasında bu tanımlamayı yapalım. Settings --> Customization --> Customize Entitties komutunu vererek Opportunity(Fırsat)’I seçin.

N:N RelationShips kısmından “New Many to Many Relationship” düğmesine tıklayın.

Other Entity kısmından bağlamayı yapacağımız entity seçilir. Burada Contact Entity’sini seçin. Bağlantının görüntülenebilmesi için Display Option kısmından “UsePlural Name” seçeneğini de seçin. “Save and Close” düğmesine basın. CRM arka planda ilişkiyi tanımlayacak ve web servise gerekli bildirimleri de ekleyecektir. Buradaki new_opportunity_contact ismine dikkat etmek gerekir. Çünkü her N:N ilişki veritabanında yeni bir tablo demektir. Ve bu tablonun adı budur. Veri tabanında aşağıdaki gibi bir sorgu yaptığınızda bu kayıtları görebilirsiniz.

Şimdi Opportunity ekranını açın sol tarafta navbar üzerinde Contacts bağlantısını görebilirsiniz. Buradan “Add Existing Contact” komutunu vererek contact’ları Opportunity ile ilişkilendirebilirsiniz.

Aynı matık Contact Ekranında da geçerlidir.

Mapping Kavramı
CRM’de Mapping ilişkilerle ilgili bir olaydır. Mesela 1:N ilişki kurarak iki entity’yi bağladınız. Biri içinden diğerini oluşturmaya kalktığınızda ana entity’deki istediğiniz alanları yavru entity’deki alanlarla eşleştirip otomatik kopyalanmasını sağlayabilirsiniz. Mesela Opportunity ekranı içindeyken Quotes bağlantısını kullanarak New Quote dediğinizde Opportunity’deki istediğiniz alanların yeni quote entitysine de kopyalanmasını sağlayabilirsiniz.
Örnek üzerine konuşalım. Fırsat entity’sini açın ve 1:N Relationships kısmına gelin.

Quote ile olan ilişkiyi çift tıklayarak açın.Burada Mapping bağlantısı altında mevcut eşleştirmeleri görebilirsiniz.

Mesela Opportunity’deki Topic alanı ile Quote’daki Name alanı eşleştirilmiştir. Gerçekten de Fırsat içinden bir teklif oluşturmaya çalıştığınızda ismi aynı kalacaktır. Benzer şekilde Campaignid alanı da eşleştirilmiştir. Yani fırsat’dan Teklif ürettiğinizde Source Campaign alanı otomatik olarak quote üzerinde campaignid alanına kopyalanacaktır.
Şimdi bir tane de biz ekleyelim. New Komutunu verin.

Soldaki alan Source Entity yani Opportunity entity’sinin alanlarını verir.Sağ taraf ise Target Entity yani Teklif entity’sinin alanlarını içerir. Eşleştirmek istediğimiz alanları karşılık seçip OK düğmesine tıklamamız gereklidir. Iki Taraftan da Descirption alanını seçin ve OK tuşuna basın. İşte Mapping işlemi tamamdır. Artık bir fırsat içinden teklif oluşturmaya çalıştırdığınızda description alanı da otomatik olarak taşınacaktır.

CRM 4.0 - CRM de İlişkiler --RelationShips


Relationship kavramını entityler arasında bağlantı kurmak diye özetleyebiliriz. Daha programcı görüşü bir ifade ile de entity tabloları içinde foreign, primary key ilişkileri tanımlayarak, tablolar arasında bağlantı kurmak diye tanımlayabiliriz. Bu makalemizde CRM içinde bunun nasıl yapıldığından, arka planda veritabanında hangi işlemlerin yapıldığını ve ilişkiler ile ilgili konfigürasyonları inceleyeceğiz.
CRM’de İlişki Türleri
CRM’de 3 tip ilişki vardır. 1:N,N:1,N:N. N’e N olan ilişki CRM 4.0 ile gelen yeniliklerden biridir.
İlişkiler entiy’ler arasında kurulur ve ilişkinin adı hangi entitynin diğerine nasıl bağlı olduğunu açıklar. Mesela Fırsat(Opportunity) ve Teklif(Quote) entitylerini düşünün. Teklif Ekranında iken Fırsat ekranı ile yapacağınız N:1 bir ilişki şu anlama gelir. N tane yani birden fazla teklif sadece 1 fırsata bağlı olabilir. Bu da teklif ekranından fırsat’ın gösterildiği bir lookup alana işaret eder. Aşağıdaki ekran görüntüsünde Teklif ekranında ona bağlı Fırsat Lookup’I gösterilmiştir.

O zaman buradan şu sonuç da çıkıyor. Eğer, Forma Lookup alan eklemek istiyorsanız Attributes ekranında “New Attribute” diyerek bunu yapmazsınız. Bunun yerine N:1 ilişki kurmanız gerekir. Daha sonra Form görünümü açıp Add Fileds diyerek Lookup alanınızı forma ekleyebilirsiniz.

Şimdi N:1 ilişkinin nasıl ekleneceğine bakalım. Settings --> Customizations -->Customize Entities komutunu vererek istediğiniz entity’yi açın. Örneğin Fırsat entity’si olabilir.
N:1 Relationships bağlantısını tıklayın. Aşağıdaki ekran görüntüsünde de görebileceğiniz gibi Fırsat ekranında zaten kurulmuş olan N:1 ilişkileri yada başka bir deyişle Look up’ları görebilirsiniz.

New Many-to-1 Relationship komutunu vererek ilişki tanımlama penceresini açın. Primary Entity alanından ilişki kuracağınız Entity seçilir. Örneğimizde Contact entity’si ile ilişki kurmak istiyoruz. Contact’I seçin. Daha Sonra Display Name alanından Lookup’ın yanında belirecek açıklamayı yazın. Formda bu açıklama görünecektir. Ben “İlgili Kişi” diye yazıyorum. CRM “Name” alanına otomatik bir isim verecektir ama bunu değiştirebilirsiniz. Projeniz içinde sitematik ve kolay ulaşılır olması açısından buraya isim olarak bağladığınız entity’nin adını sonuna id koyarak vermenizi tavsiye ederim. Mesela Bu örnekte Contact entitysini bağladığımız için new_contactid ismini vermek iyi bir yaklaşım olacaktır.

Buradaki önemli diğer konuda “RelationShip Behaviour” kısmıdır. Bu ilişkinin konfigurasyon ayarlarının yapıldığı kısımdır.
“Type of Behaviour” kısmı, hazır bazı tipler sunar. Mesela Delete Seçeneği kayıt seçildiğinde ilişki tanımlanmış kayıtların ne olacağını belirler. Yada Assign edildiğinde bağlı kayıtların da sahibinin değiştirilip değiştirlmeyeceğini belirler.
Save tuşuna basmanız ile bilrikte CRM ilişkiyi kuracaktır.
Eğer eklediğimiz Contact bağlantısını form üzerinde de görmek istiyorsak, Form görünümünde Add Fileds diyerek “İlgili Kişi” isimli alanı bulup eklememiz gerekir.

Formu kaydedip entity’yi publish ettiğimizde artık Fırsat ekranı içinde ilgili Kişi alanı lookup olarak gözükecektir.

Peki her Fırsat için bir tane Contact bağlayabiliyoruz ve bunu ekranda görüyoruz. Peki Bu Contact’a bağlı fırsatların neler olduğunu nasıl göreceğiz diye sorabilirsiniz. Contact Ekranını açtığınızda sol tarafta Opportunities bağlantısı belirmiştir. Buraya tıklayarak bu Contact’ın bağlı olduğu Fırsatları görebilirsiniz.

İşte Contact ekranındaki bu bağlantı da 1:N ilişki olarak tanımlanır. Ve aslında Fırsat ekranında N:1 ilişki tanımlarken 1:N ilişki de Contact ekranında otomatik olarak tanımlanmış oldu. 1:N ilişki mantığında da örneğimizde 1 contact birden fazla fırsata bağlı olabilir. Nitekim yukarıdaki ekran görüntüsünde de görebileceğiniz gibi “New Opportunity” düğmesine tıklayarak bu ekrandan Contact’a ait yeni bir fırsat oluşturabilir veya “Add Existing Opportunity” düğmesine tıklayarak mevcut fırsatlardan birini Contact ile ilişkilendirebilirsiniz.
Nitekim Contact ekranında 1:N Relationships bağlantısına tıkladığınızda ilişkiyi de görebilirsiniz.

Olaya Veritabanı açısından baktığımızda new_contactid isimli bir alan opportunity entity tablosuna eklenmiştir. Contact entity tablosunda ise Kolon ekleme gibi bir işlem olmamıştır.

Duplicate Detection Araçları ile Veri Temizliği

Bu makalede CRM'in çift kayıtları bulmak için kullandığı araçları inceliyor olacağız. Böylece aynı telefon numarası yada eposta adresine sahip müşteriler ayırt edilebilmektedir.

Bir çok sistem çok hızlı bilgi biriktirirler. Bir CRM uygulamasında da hızla artan kayıt sayısında verinin kalitesini sağlamak da önemlidir. CRM’in veri kalitesini artırmak adına hazır gelen araçları mevcuttur. Amaç çoklanmış kayıtları bulmak içinse CRM başka araçlar da sunar. Mesela İsimleri benzer yazılmış ama aynı müşterileri belli kurallar tanımlayarak bulabilirsiniz. Ve hatta daha kayıt oluşturulmadan bu kontrolün çalışarak sisteme hiç kayıt düşülmemesini de sağlayabilirsiniz. Bütün bu işleri yöneteceğiniz alan Settings sekmesi altındaki Data Management alanıdır.



Kuralları Tanımlamak
Önce çoklayanları bulmak kurallarını tanımlamalıyız. Bunun yapıldığı yer Duplicate Detection Rules kısmıdır. Buraya tıkladığınızda CRM’in kurulumuyla birlikte gelen bir çok hazır tanımlı kural gelir. Mesela aynı eposta adresine sahip account ve contact kayıtları gibi. Bu kurallar tanımlanırken publish kavramı vardır. Yani tanımladığınız bir kuralın geçerli olup olmamasını publish veya unpublish ederek değiştirebilirsiniz.
Bir örnek üzerinden gidelim. İki aynı contact içinde birbirinin aynı iki cep telefon numarası olamasın. New diyerek Kuralı açın ve aşağıdaki gibi doldurun.


Base Record Type ve Matching Record Type karşılaştırdığımız ve karşılaştırılan entityleri ifade eder. Biz Contact kayıtları içinde aynı cep numaralarını aradığımız için ikisinde de Contact ifadesini seçtik. Ama bu entityler farklı da olabilir. Mesela, Account ekranındaki eposta adresinin Contact kayıtlarındaki bir eposta ile aynı olup olmadığını kontrol edebilirsiniz. Farklı entitylerin benzer alanlarını birbirine kıyaslayarak çiftleri bulabilmesi CRM’in güçlü bir özelliğidir. Çiftleri ayırmak için alanların birebir aynı olması gerekmez. Criteria alanından baştan itibaren şu kadar karakterin uyuşması veya sondan itibaren bu kadar karakterin uyuşması yeterlidir de diyebilirsiniz.


Telefon örneğimizden gidecek olursak mesela aynı telefon 505 111 11 11 olarak da veya 0505 111 11 11 şeklinde de yazılmış olabilir. Bu durumda sondan itibaran belli sayıda karakteri karşılaştırmak isteyebilirsiniz. Kaydedip Publish ettikten sonra artık bu kural aktif olarak işleyecektir. İki tane aynı cep telefonuna sahip Contact oluşturmaya veya güncellemeye çalıştığınızda aşağıda gibi bir pencere açılacak ve hangi kayıtla benzeştiğini gösterecektir.



CRM ne kadar çiftlemeyi bulsa da Save Record düğmesine tıklayarak gene kaydedebilirsiniz.
Mevcut Kayıtlar İçinde Sorgulamak
Yukarıdaki yöntem ile kaydetme veya güncelleme anında çiftlemeleri yakalayabiliyorduk. Benzer işlemi zaten sistemde bulunan kayıtlar üzerinde de yapmanız mümkündür. Bunun için Duplicate Detection Jobs linkini tıklayarak yeni bir Job oluşturmanız gerekir. Karşınıza çıkan pencerede Look For alanından içinde arama yapmak istediğiniz entity’yi seçebilirsiniz. Bizim örneğimiz için Contact’ı seçip şart olarak da Cep numarasının verilen numara olmasını istedik.

İsterseniz Preview records düğmesine tıklayarak bu kayıtların neler olduğunu da görebilirsiniz. Bu basit bir örnektir. Bunları çoğaltmak mümkündür. Mesela vergi no’su olmayan müşterileri bul gibi bir sorgu da tanımlayabilirsiniz.
Bir sonraki ekranda işin ne zaman başlatılıp ne kadar sık aralıklarla çalışacağını da belirterek,işlemi bitirebilirsiniz.

Tanımladığınız işlem Duplicate Detection Jobs altında gözükecektir

İşlem belirli aralıklar çalışacak ve istediyseniz durumu size bildiren bir de eposta gönderecektir.

Bu Jobı açıp View Duplicates bağlantısına tıkladığınızda sistem çiftlemeleri gösterecektir.

Bu kontrollerinin hangi durumlarda kontrol edileceğini belirleyeceğiniz yer ise gene CRM’da Data Management sayfası altındaki Duplicate Detection Settings alanıdır.

CRM 2011 de Kampanya OLuşturma (Quick Campaigns)

Bir CRM uygulamasının olmazsa olmaz özelliklerinden biri elbette kampanya yönetimidir. TDK sözlüğünde Kampanya kelimesi “Tüketiciyi özendirmek için belli sürelerde düzenlenen indirimli veya taksitli satış. “ şeklinde geçmektedir. Bir CRM uygulamasında da kampanyayı gerçekleştirmek adına yapılan işlemler kampanya yönetimi olarak düşünülür. Bir kampanyada ana amaç hedef kitle olan müşterileri seçmek ve bunlara bir çok farklı yolla mesela Eposta,kısa mesaj veya telefonla ulaşmaktır. Böyle yapılan indirim veya taksitli satış bu kullanıcılara ulaştırılır. CRM uygulmasının işi burada bitmemekte tabi. Bu kampanyadan yararlanan müşterilerin raporlanabilmesi de kampanyanın başarısını ölçümleyebilmek adına gerekli bir özelliktir.
Microsoft CRM gelişmiş bir kampanya yönetimi sunar. Bir başka makalede bunu detaylıca yazabiliriz veya video serisinde bahsedebiliriz. Ama asıl bu makalede işlemek istediğim konu Hızlı Kampanyalar konusudur.CRM’deki karşılığı quick campaigns olan bu yapı müşterilere hızlıca ulaşmak istediğini bir durumda kullanılmak üzere tasarlanmış asıl kampanya modülünün daha sade bir halidir. Dolayısıyla normal Campaign modülünde yapabileceğiniz bazı özellikler burada kısıtlanmıştır.
Hızlı kampanyanın en büyük avantajı ise lead,account,contact ve Advanced Find ekranlarından hızlıca kullanıcıları seçerek adlarına kampanya düzenleyebilmenizdir. Tabiki oluşturulmuş bir pazarlama listesi üzerinde de hızlı kampanya uygulayabilmek mümkündür.
Account,contact ve Lead ekranlarının üzerinde aşağıdaki gibi bir düğme bulunur. İstediğiniz kayıtları seçip Bu düğmeye tıklayarak hızlı kampanya penceresini açabilirsiniz.



Bunun yanında bir pazarlama listesi veya Advenced Find’da bir arama yaptığınızda çıkan pencerede de bu düğme görünecektir.
Şimdi Contact ekranında bir kaç kullanıcı seçelim ve Quick Campaign menüsünden For Selected Records seçeneği ile örnek bir hızlı kampanya oluşturalım.
Hızlı kampanya için bir isim belirleyip Next tuşuyla ilerleyin.


Sıradaki basamakta müşterilere hangi kanallardan ulaşacağımız belirlenir. Burada Phone Call, Appointment,Letter,Fax ve Email olmak üzere 5 seçenek mevcuttur. Normal kampanya modülünde ek bazı tipler daha vardır mesela şablon kullananan eposta gibi..



Burada seçilen tipe göre CRM ilgili aktiviteleri oluşturacaktır. Mesela Phone Call seçerseniz Telefonla arama görevi oluşturacak, Appointment seçerseniz appointment kaydı oluşturacak, eposta seçerseniz Eposta oluşturup atacaktır gibi. Mesela kampanyayı çağrı merkezi düzenliyor ve tek tek müşterilere telefonla ulaşılacaksa Phone Call seçilebilir bu durumda Çağrı merkezi görevlileri önlerine düşen görevleri görürler ve kampnayadaki müşterileri arayarak pazarlamayı yaparlar. Biz daha sık kullanılan bir yol olan e-mail’i seçelim.
Hemen altındaki “select who will own these new activities” alanından bu aktivitelerin kimin üzerine atanacağını belirlersiniz. Hepsine kendinize atayabileceğiniz gibi başka bir kullanıcıya , queue denen havuzlara veya sahiplerine de atayabilirsiniz. Havuza atanmış aktivitelerin havuzdan gene ilgili kişilere atanması gereklidir. Özellikle Çağrı merkezi için hazırlanan telefon aktivitelerinde önce havuza atıp oradan call center görevlilerine atamak bir seçim olabilir.
Eğer Aktiviete olarak E-mail seçeneğini seçerseniz, en alttaki “Send e-mail messages automatically and close corresponding e-mail activities” seçeneği aktifleşecektir. Varsayılan durumda seçilidir. Ve hızlı kampnya oluşturulduktan sonra Epostaların gönderilmesini sağlar. Eğer Epostaları göndermeden önce bir bakayım olmadı metnini değiştireyim gibi bir durumunuz varsa bu seçeneği kaldırabilirsiniz ki bu durumda Epostalar oluşacak ama gönderilmeyecektir.
Next düğmesine tıklayıp ilerlediğinizde Email seçeneğini seçtiğimiz için mail içeriğini hazırlamanız gerekir.


Bu aşamadan sonra Kampanyayı oluşturabilirsiniz. Oluşturulmuş aktivitelerin listesini Activities ekranından görebilirsiniz.
Oluşturduğunuz Hızlı kampanyaların listesini ise Service Modülü altındaki Quick Campaigns linki altından görebilirsiniz. Burada Kaç müşteriye kaç aktivite gönderildi gibi istatistiki bilgilere ulaşabilirsiniz.


Bunun yanında gene bu ekrandan Göndermiş olduğunuz epostaları ve hangi müşterilere gönderdiğinizi görebilirsiniz.


Bu ekran için önemli bir konu ise kampanya cevaplarının girilebilmesidir. Campaign Responses kısmından kampanyasına yapılan dönüşleri sisteme girebilirsiniz.


Veya bu işlem daha kolay yapmak için , gönderdiğiniz eposta aktivitesini açıp Actions menüsünden “Promote to Response” komutunu verebilirsiniz
.
Bu durumda bir çok alan hazır dolu olarak kampanya cevabı ekranı açılacaktır.
Şimdi de kampanyalar ile ilgili bir kaç önemli noktadan bahsetmek istiyorum. Birincisi SMS gönderimi. CRM direkt sms gönderme özelliğine sahip değildir. Fakat sms getaway hizmeti veren bir firmadan sms satın alarak (öyle ki sms göndermek eposta gibi değildir. Gönderdiğiniz her sms için az da olsa bir ücreti ödemeniz gerekir.) ve biraz da custom kod yazarak Letter tipi aktivitilerin sms gibi çalışmasını sağlayabilirsiniz.
Konu eposta göndermek olunca da bir konudan bahsetmek istiyorum. Az sayıda eposta yollayacaksanız sorun olmayabilir ama bir kampanya için göndereceğiniz posta sayısı yükseldikçe bunların alıcı eposta kutuları tarafında spama düşme ihtimali vardır. Bu durumda da 3. Parti eposta hizmeti veren firmalar devreye girer. Bu tarz bir firmadan hizmet satın alarak epostaların CRM’de oluşturulmasını ama gönderme işleminin hizmeti aldığınız firma tarafından atılmasını sağlayabilirsiniz. Bu firmalar belli kurallar uygulayarak epostaların spama düşmesini engelleyebilirler. Mesela belli sayıda postayı belli aralıklarla atmak veya farklı domainlerdeki sunucular üzerinden atmak gibi yöntemlerle bu işlemi gerçekleştirirler.. Bu tarz firmalardan hizmet almanın bir avantajı da kampanya cevaplarını da toplayıp raporlayabilmeleridir. Hatta direkt crm içine Campaign response olarak kayıt düşebilen de vardır.
Hızlı kampanayalar ile ilgili son bahsetmek istediğim konu ise müşterinin izin vermemesi olayıdır. Öyle ki müşteriniz kendisine telefonla, epostayla, sms gibi kanllalarla ulaşılmasını istemiyor olabilir. Bu durumda zorla bu mesajları kendisine atmak pek hoş bir durum olamaybilir. Eğer bir account veya contact kendi ekranında bana epostayla ulaşmayın gibi bir seçenek ile işaretlenmişse bu kullanıcıyı içeren bir kampanya düzenlediğinizde eposta görevi oluşturulmaz.