cub-e.net

just coding...

CRM Tablet Uygulamasini Calistirmak

a) Dynamics CRM’I kurdurktan sonra ilgili icon’a basip calistiriyoruz.

 

1.     Let's get set up! ekranindaki kutucuga Dynamics CRM’e girerken kullandiginiz adresi yazmaniz gerekmekte.

 

2.     Sag alt kosedeki ok seklindeki dugmeye tiklanizda siradaki ekran gelecektir.

b)    Kullanici adi ve sifre bilgilerinizi bu ekrana girdikten sonra “Sign In – Oturum Ac” dugmesine basiniz.

1.     Kullanici Adi

2.     Sifre.

3.     Oturumun surekli acik tutulmasi icin isaretleyiniz

4.     Sign in – Oturum Ac dugmesine basiniz.

c)     c) Bu bolumleri gectikten sonra asagidaki ekran gelecek. Bu ekranda baglanti hiziniza bagli olarak bir sure kalabilirsiniz.

d)      d) Iste bu ekrandan sonra Dynamics CRM tablet versiyonu acilacak ve kullanima hazir olacaktir.

Dynamics CRM Tablet Uygulama Magazalari

Dynamics CRM Tablet uygulamasini kurmak icin elimizdeki cihaz ya da cihazlarin uygulama magazalarina gitmemiz gerekmekte.

Windows 8 : http://apps.microsoft.com/windows/en-us/app/93772212-7b72-4aee-bc4e-b1adb7712ebe



Windows 8.1 : http://apps.microsoft.com/windows/en-us/app/dec52fd4-dbc0-41b1-9cdd-cdc070051918



iPad : https://itunes.apple.com/us/app/microsoft-dynamics-crm/id678800460?mt=8


Android Tablet : https://play.google.com/store/apps/details?id=com.microsoft.crm.crmtablet

Dynamics CRM IFD (Windows server 2012 R2 ADFS 3.0) ile CRM for Outlook Baglanma Problemi

Eger sizde benim gibi Dynamics CRM kurulumunuz ile ADFS 3.0'i ayni server uzerinde kullaniyorsaniz Outlook Client Configuration Wizard ile yapilandirma sirasinda authentication probleminden dolayi bir hata alabilirsiniz.
Log dosyasini incelediginizde asagidaki gib bir hata mesaji olacaktir.

"Error connecting to URL: https://org.contoso.com/XRMServices/2011/Discovery.svc Exception: Microsoft.Crm.CrmException: Authentication failed"

Bu hata ile ilgili nette buldugun bircok cozeum yolunu denesem de sonuc vermedi. Bende Fiddler ile arka tarafatki iletisimde neler oldugunu izlemeye karar verdim. Fiddler ile gordum ki Configuration Wizard'in gitmeye calistigi bir adreste 503 hatasi almaktayim, Adres ise su formattaydi: 

"https://adfs.contoso.com/adfs/services/trust/mex"

Evet sorun ADFS'deydi. CRM web arabiriminde sorunsuzca gorevini yerine getiren ADFS Outlook Client'da ise hataya neden olmaktaydi. Bunun uzerine hemen ADFS Servera gittim ve arastirmalara basladim.
ADFS Serverda Event Viewer'da  sorunun kaynagini yakaladim:

Event ID:      102
Description:
There was an error in enabling endpoints of Federation Service. Fix configuration errors using PowerShell cmdlets and restart the Federation Service. 
 
Additional Data 
Exception details: 
System.ServiceModel.AddressAlreadyInUseException: There is already a listener on IP endpoint 0.0.0.0:808. This could happen if there is another application already listening on this endpoint or if you have multiple service endpoints in your service host with the same IP endpoint but with incompatible binding configurations. ---> System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted
 

Yani ADFS Server 808 nolu bir portu kullanmaktaydi. 808 Portu ayni zamanda Asynchronous Service tarafinda da kullanilmakta.
ProtocolPortDescriptionExplanation

TCP

808

CRM server role communication

The Asynchronous Service and Web Application Server services communicate to the Sandbox Processing Service through this channel. The default port is 808, but can be changed in the Windows registry by adding the DWORD registry value TcpPort in the key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM\.

Yeri gelmisken bahsedeyim CRM tarafindan kullanilan diger portalarin listesi de soyle:
ProtocolPortDescriptionExplanation

TCP

80

HTTP

Default web application port. This port may be different as it can be changed during Microsoft Dynamics CRM Server Setup. For new websites, the default port number is 5555.

TCP

135

MSRPC

RPC endpoint resolution.

TCP

139

NETBIOS-SSN

NETBIOS session service.

TCP

443

HTTPS

Default secure HTTP port. The port number may differ from the default port. This secure network transport must be manually configured. Although this port is not required to run Microsoft Dynamics CRM, we strongly recommend it. For information about how to configure HTTPS for CRM, see “Make Microsoft Dynamics CRM client-to-server network communications more secure” in Post-installation and configuration guidelines for Microsoft Dynamics CRM in the Installing Guide.

TCP

445

Microsoft-DS

Active Directory service required for Active Directory access and authentication.

UDP

123

NTP

Network Time Protocol.

UDP

137

NETBIOS-NS

NETBIOS name service.

UDP

138

NETBIOS-dgm

NETBIOS datagram service.

UDP

445

Microsoft-DS

Active Directory service required for Active Directory access and authentication.

UDP

1025

Blackjack

DCOM, used as an RPC listener.

Listenin tamamina bu adresten ulasabilirsiniz. https://technet.microsoft.com/en-us/library/hh699823.aspx

Sorunumuza geri donersek 808 nolu portu degistirmem gerekiyordu. Iste asagidaki komut da tam bu ise yariyor:
Set-ADFSProperties –nettcpport 809

ADFS portunu 809 olarak degistirdim ve servisi yeniden baslattim. 
Configuration Wizard'a geri dondum ve tekrar denedim sorun cozulmustu. Zaten Fiddler'da da ilgili bolumu sorunsuzca gectigini gordum. 

Umarim sizlere de faydali olur.

*************************
21/05/2015 tarihinde ek:
Yukaridaki durum update rollup 0.1 yukledikten sonra yine devam etti. Konuyu arastirinca bu sefer de 49443 portunda ayni sorunun oldugunu gordum. Konuyu inceleyince bu portu da ADFS TlsClientPort oldugunu ogrendim.
Bu portu da yukaridaki konutla baska bir porta yonlendirdim.
Set-ADFSProperties -tlsclientport 42223

firewall ve diger ayarlari yaptiktan sonra ADFS Servisi yeniden baslattim ve hersey yoluna girdi. 

CRM 2011’de Create/Update/Delete Metodlarına Farklı Bir Bakış

Dynamics CRM'in iş dünyasının parlayan yıldızı olan ve her türlü iş platfomunun temeline yerleştirebilecek bir mimaride olduğunu her fırsatta anlatmaya çalışıyorum. Bu mimari üzerinde bizim kod geliştirmemizi ve sistem ile entegre olmamızı sağlayan web servisleri ve dll'ler vasıtasıyla yazma ve okuma işlemlerimizi gerçekleştirmekteyiz. Bugün sizlere daha önceden eski versiyonlar için de bahsetmiş olduğum oluşturma,  güncelleme ve silme metodlarının yapısını tekrar anlatacağım ama sonunda bunları Process isimli bir class'da birleştirip tek bir yerden yönetilmelerini sağlayacağız.

CRM servis nesnesi bize kayıtlar üzerinde işlem yapma özelliği sağlamaktadır. Servis içinden yapmak istediğimiz harekete uygun metodu çağırmamız gerekmektedir.
  Tabii burada unutulmaması gereken konu servisi çağıran kullanıcının çağrılan metodda işlem yapmaya yetkili olması gerekmektedir.

Create Metodu CRM 2011 içerisinde bir entity içerisinde yeni bir nesne oluşturmamıza olanak tanır. Metod parametre olarak entity türünden bir nesne alır ve yeni oluşturulmuş nesnenin GUID türünden değerini geri döndürür.

Aşağıdaki örnek bu metodun late-bound sınıfla kullanımını göstermektedir.

// Entity nesnesinin yeni bir instance’ini olusturuyoruz
Entity account = new Entity("account");
// Gerekli attribute’lara atama yapiyoruz.
account["name"] = "Örnek Firma";
// Örnek Firma adında bir firma karti olusturuyoruz.
_accountId = ioService.Create(account); 

Aşağıdaki örnek bu metodun early-bound sınıfla kullanımını göstermektedir.

Contact contact = new Contact()
{
    FirstName="Deneme",
    LastName="Kisisi",
    Address1_City="İstanbul",
};
Guid contactGuid =_service.Create(contact);

Update Metodu CRM 2011 içerisinde bir entity içerisinde bir nesneyi güncellememizi sağlar. Metod parametre olarak entity türünden bir nesne alır. Güncellenecek nesnenin id’si mutlaka parametre olarak verilmelidir.

Guid gContact = new Guid("7bE545CCD3-9A3A-E011-BA8B-78E7D1623F9D");
 
Contact contact = new Contact()
{
     ContactId = gContact,
     FirstName="Test",
     LastName="Kisisi",
     Address1_City="Ankara",
};
_service.Update(contact);

Delete Metodu CRM 2011 içerisinde Id’sini verdiğiniz bir nesneyi sistemden silmeye yarar. Metod parametre olarak silinecek nesnenin Id’si yanında bu nesnenin türünü ister.

Guid gContact = "7bE545CCD3-9A3A-E011-BA8B-78E7D1623F9D";
_service.delete("contact", gContact); 

Bir programcı olarak çok standart olan bu işlemleri isterseniz bir class mantığı altında birleştirelim. Bu sayede daha yönetilebilir bir CRUD (Create, Read, Update, Delete) yapısı oluşturabiliriz. Ben bu sınıf için Process adını kullandım ve Process sınıfı içerisinde şu anda Oluşturma, Güncelleme ve Silme işlerimi yapmaktayım. İlerleyen makalelerde Okuma yapılarını incelerken onları da bu sınıfa dâhil ederiz.

Burada öncelikle açıklamalıyım ki bir önceki makalede yer alan Singleton tasarım deseniyle CRM servisini oluşturma yazımdaki class’tan faydalanarak servisi çağırma işlemini gerçekleştirdim. O yazıyı okumak isterseniz buraya tıklayınız

Ek olarak hata olaylarını kontrol etmek için Result isimli bir class kullandım bu class’ın içeriği şu şekilde;

public class Result
    {
        public string Message { get; set; }
        public bool isError { get; set; }
        public Object BusinessObject { get; set; }
 
        public Result(string _Message, bool _isError, Object _BusinessObject)
        {
            Message = _Message;
            isError = _isError;
            BusinessObject = _BusinessObject;
        }
 
        public Result(string _Message, bool _isError)
        {
            Message = _Message;
            isError = _isError;
            BusinessObject = null;
        }
    }

Görüldüğü üzere çok basit bir class bize sonucun başarılı mı başarısız mı olduğunu döndürecek o kadar.

Bunun haricinde bir de Base isimli bir class’ım var ki Process sınıfını aslında bu class’dan türetmekteyim. Şu anda bu class’ı sadece ErrorNumber ve ErrorDetail gibi hata oluştuğunda bilgi almamızı sağlayacak iki property ile kullanmaktayım ama ileride farklı propertyler de eklenecek.

public class Base
{
    public int ErrorCode { get; set; }
    public string ErrorDetail { get; set; }
} 

Bu iki class’ımı açıkladıktan sonra asıl yapıda kullanacağımız metodlara gelelim. İlk önce create metodunu inceleyelim. Hatırlayacağınız üzere CRM servisinde Create metdonun Update metodundan tek farkı id’ye ihtiyaç duymamasıydı. Çünkü bu metod id’yi üretip bize geri döndürecek. Ben de kurguyu buna göre planladım.

public Result Create(Entity EntityForCreate)
       {
            try
            {
                Service service = Service.GetService();
 
                if (service == null)
                    throw new Exception("Service is null");
                if (service != null && service.ErrorCode > 0)
                    throw new Exception(service.ErrorDetail);
 
                Guid EntityID = service.OrganizationService.Create(EntityForCreate);
 
                DetailedLog.CreateLog("Entity Created! Type: " + EntityForCreate.LogicalName + ", ID : " + EntityID, 
                    System.Diagnostics.EventLogEntryType.Information);
 
                return new Result("", false, EntityID);
            }
            catch (Exception ex)
            {
                ErrorCode = 100;
                ErrorDetail = ExceptionHandler.HandleException(ex);
                DetailedLog.CreateLog(System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
                    + " : " + System.Reflection.MethodBase.GetCurrentMethod().ToString()
                    + " : " + ErrorDetail, System.Diagnostics.EventLogEntryType.Error);
 
                return new Result(ErrorDetail, true);
            }
        }

Aslında yapı çok basit servis nesnemi çağırıyorum, servis oluşurken hata var mı diye bakıyorum eğer hata varsa hatayı fırlatıyorum. (bu noktada şunu belirtmeliyim ki catch bölümünde yer alan DetailLog ve ExceptionHandler benim daha önceden yazmış olduğum hata yönetimi ile ilgili class’lar catch bölümünü siz de istediğiniz gibi düzenleyebilirsiniz) Eğer hata yok ise OrganizationService metodumu kullanarak nesnemi oluşturuyorum. Bu noktada da bir hata yoksa servis bana oluşturduğu nesnenin id’sini döndürüyor yok eğer hata varsa zaten kod catch bloğuna düşüyor. İşte bu kadar.

Şimdi gelin diğer metodlara bir göz atalım;

public Result Update(Entity EntityForUpdate, Guid EntityID)
        {
            try
            {
                Service service = Service.GetService();
 
                if (service == null)
                    throw new Exception("Service is null");
                if (service != null && service.ErrorCode > 0)
                    throw new Exception(service.ErrorDetail);
 
                service.OrganizationService.Update(EntityForUpdate);
 
                DetailedLog.CreateLog("Entity Updated! Type: " + EntityForUpdate.LogicalName + ", ID : " + EntityID,
                    System.Diagnostics.EventLogEntryType.Information);
 
                return new Result("", false);
            }
            catch (Exception ex)
            {
                ErrorCode = 100;
                ErrorDetail = ExceptionHandler.HandleException(ex);
                DetailedLog.CreateLog(System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
                    + " : " + System.Reflection.MethodBase.GetCurrentMethod().ToString()
                    + " : " + ErrorDetail, System.Diagnostics.EventLogEntryType.Error);
 
                return new Result(ErrorDetail, true);
            }
        }

Update metodu neredeyse Create metodunun aynısı tek fark daha önce de ifade ettiğim gibi güncellenecek nesnenin id’sini alması. Bunu almalı ki neyi güncellediğini bilebilsin. Aslında burada şöyle bir mantıksal kargaşa var update metodu ek olarak id’yi almamakta zaten sizin ona update edilmesi için vereceğiniz entity’nin Id alanına vermelisiniz. Benim burada ek olarak almamdaki amaç onu loglamak için.

Bir de Delete metoduna göz atalım;

public Result Delete(string EntityName, Guid EntityID)
        {
            try
            {
                Service service = Service.GetService();
 
                if (service == null)
                    throw new Exception("Service is null");
                if (service != null && service.ErrorCode > 0)
                    throw new Exception(service.ErrorDetail);
 
                service.OrganizationService.Delete(EntityName, EntityID);
 
                DetailedLog.CreateLog("Entity Created! Type: " + EntityName + ", ID : " + EntityID,
                    System.Diagnostics.EventLogEntryType.Information);
 
                return new Result("", false);
            }
            catch (Exception ex)
            {
                ErrorCode = 100;
                ErrorDetail = ExceptionHandler.HandleException(ex);
                DetailedLog.CreateLog(System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
                    + " : " + System.Reflection.MethodBase.GetCurrentMethod().ToString()
                    + " : " + ErrorDetail, System.Diagnostics.EventLogEntryType.Error);
 
                return new Result(ErrorDetail, true, null);
            }
        }

Delete metodu entity’nin adını ve id’sini almakta. Bu iki veriyi de servise vermekteyiz.

Class’ın tamamına bakacak olursak;

public class Process : Base
    {
        public Result Create(Entity EntityForCreate)
        {
            try
            {
                Service service = Service.GetService();
 
                if (service == null)
                    throw new Exception("Service is null");
                if (service != null && service.ErrorCode > 0)
                    throw new Exception(service.ErrorDetail);
 
                Guid EntityID = service.OrganizationService.Create(EntityForCreate);
 
                DetailedLog.CreateLog("Entity Created! Type: " + EntityForCreate.LogicalName + ", ID : " + EntityID, 
                    System.Diagnostics.EventLogEntryType.Information);
 
                return new Result("", false, EntityID);
            }
            catch (Exception ex)
            {
                ErrorCode = 100;
                ErrorDetail = ExceptionHandler.HandleException(ex);
                DetailedLog.CreateLog(System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
                    + " : " + System.Reflection.MethodBase.GetCurrentMethod().ToString()
                    + " : " + ErrorDetail, System.Diagnostics.EventLogEntryType.Error);
 
                return new Result(ErrorDetail, true);
            }
        }
 
        public Result Update(Entity EntityForUpdate, Guid EntityID)
        {
            try
            {
                Service service = Service.GetService();
 
                if (service == null)
                    throw new Exception("Service is null");
                if (service != null && service.ErrorCode > 0)
                    throw new Exception(service.ErrorDetail);
                
                service.OrganizationService.Update(EntityForUpdate);
 
                DetailedLog.CreateLog("Entity Updated! Type: " + EntityForUpdate.LogicalName + ", ID : " + EntityID,
                    System.Diagnostics.EventLogEntryType.Information);
 
                return new Result("", false);
            }
            catch (Exception ex)
            {
                ErrorCode = 100;
                ErrorDetail = ExceptionHandler.HandleException(ex);
                DetailedLog.CreateLog(System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
                    + " : " + System.Reflection.MethodBase.GetCurrentMethod().ToString()
                    + " : " + ErrorDetail, System.Diagnostics.EventLogEntryType.Error);
 
                return new Result(ErrorDetail, true);
            }
        }
 
        public Result Delete(string EntityName, Guid EntityID)
        {
            try
            {
                Service service = Service.GetService();
 
                if (service == null)
                    throw new Exception("Service is null");
                if (service != null && service.ErrorCode > 0)
                    throw new Exception(service.ErrorDetail);
 
                service.OrganizationService.Delete(EntityName, EntityID);
 
                DetailedLog.CreateLog("Entity Created! Type: " + EntityName + ", ID : " + EntityID,
                    System.Diagnostics.EventLogEntryType.Information);
 
                return new Result("", false);
            }
            catch (Exception ex)
            {
                ErrorCode = 100;
                ErrorDetail = ExceptionHandler.HandleException(ex);
                DetailedLog.CreateLog(System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
                    + " : " + System.Reflection.MethodBase.GetCurrentMethod().ToString()
                    + " : " + ErrorDetail, System.Diagnostics.EventLogEntryType.Error);
 
                return new Result(ErrorDetail, true, null);
            }
        }
    }

Class’ımızı bu şekilde oluşturduktan sonra gelin onu bir konsol uygulaması yardımıyla çağıralım ve iş başında görelim.

static void Main(string[] args)
        {
            try
            {
                Entity lead = new Entity("lead");
                lead.Attributes["subject"] = "Fuardan Gelenler";
                lead.Attributes["firstname"] = "Barış";
                lead.Attributes["lastname"] = "KANLICA";
                lead.Attributes["companyname"] = "Omerd Business Solutions";
 
                Process process = new Process();
                Result result = process.Create(lead);
                if (result.isError)
                    throw new Exception(result.Message);
 
                Console.WriteLine("Lead created : " + result.BusinessObject.ToString());
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error : " + ex.Message);
                Console.ReadLine();
            }
        }

 

Gördüğünüz üzere Entity nesnemi çağıyor ve ona lead adını veriyorum. İçerisi istediğim bilgiler ile dolduruyor ve Process class’ımın içindeki Create metodu vasıtasıyla CRM içerisinde oluşmasını sağlıyorum. İşte hepsi bu kadar :) 

Bütün bu işlemler sonunda tek bir noktadan yönetilebilir bir CRUD mimarisi yavaş yavaş ortaya çıkmakta. Sıra Okuma işlemlerinin detaylarına inmekte. Onu da artık başka bir makalede inceleyeceğiz.

Microsoft Dynamics CRM 2015 Coklu Arama (Multi-Entity Quick Find)

Bugune kadar CRM ile ilgilenen pek cok kisi ve firma projeler icerisinde (ki bunlara bende dahilim ozellikle cagri merkezi projelerinde) CRM icin coklu arama ozelligi uygulamasi yazdi. Yani bir tane kutuya CRM icerisinde aramak istediginiz kisi, kurum ya da herhangi birsey yaziyorsunuz ve bu otomatik olarak daha onceden belirlediginiz nesneler icerisinde araniyor ve ekrana getiriliyor. Bugun Dynamics CRM 2015 ile birlikte bu ozellik CRM icersinde gomulu olarak geliyor ve sistem menusunde her zaman ulasilabilir bir yerde duruyor.


Bu ekrani acabilmek icin yukaridaki resimde de godugunuz uzere buyutec simgesine tiklamak gerekiyor. Cikan ekrandaki metin kutusuna birseyler yazip enter'a bastiginizda ise yazdiginiz kelime daha onceden ayarlarlar bolumunde ayarlanan butun nesneler icerisinde aranmakta ve sonuclar karsiniza gelmekte. 

Dilerseniz bu ekrana gecmeden once ayarlar bolumunde nasil ayarlar yapabilecegimize bakalim. Bu ekran ile ilgili ayarlari acmak icin Ayarlar>Yonetim bolumu altinda bulunan Sistem Ayarlari dugmesine tiklamamiz gerekmekte. Acilan ayarlar ekraninda asagiya dogru ilerledigimizde "Hizli Bulmayi Ayarla" yazisi altindaki 2 secenek iste aradigimiz ayarlar.


Hizli bul kayit sinirlarini etkinlestir: Bu ayar arama performansini arttirmak için arama kayitlarini 10.000 kayitla sinirli tutan ozellik.
Arama icin varliklari secin: Bu dugmeye tikladiginizda ise bir pencere acilacak ve bu arama ozelliginin hangi varliklar uzerinde etkili olacagini ayarlamanizi saglayacaktir.


Burada sitediginiz nesneleri ekleyebilir ve cikartabilirsiniz ama unutmamamiz gereken bir sinirimiz mevcut o da max. 10 tane nesne secebiliyoruz. 10'dan fazla nesne sectiginizde su sekilde bir uyari karsiniza cikacaktir.


Iste bu ekran vasitasiyla ayarlamalarimizi yaptiktan sonra gecek arama ekranimiza donebiliriz. Bu ekran uzerinde istedigimizi yazip entrer'a bastigimizda sonuclar ekrana gelecektir.


Bu ekranda bazi onemli ozellikler bulunmakta;
  • her bir nesne uzerindeki + dugmesine tiklayarak yeni kayit ekleyebilirsiniz.
  • herhangi bir kayda tikladiginizda o kayit acilir.
  • arama yapilacak alanlari arama hizli gorunumu uzerinden ayarlayabilirsiniz.
  • O nesne icin arama hizli gorunumunde ayarlanmis ilk uc alan goruntulenir.
  • ekranin sag tarafinda bulunan filtre olcutunu kullanarak kayitlari filtreleyebilirsiniz.
Bu sayede CRM 2015'de yillardir soze edilen ve beklenen bir ozelligi de Dynamics CRM platformu icerisinde gormus olduk.

Satışlarınız Düşmesin Yükselsin

Acikakademi.com sponsorlugunda gerceklestirecegimiz bu online etkinlikte Dynamics CRM 2013 SP1 uzerinde bir satis senaryosunun nasil gerceklestirilecegi anlatilacaktir. 09.10.2014 tarihinde Turkiye saatiyle 20:00 da etkinlik baslayacaktir. Internet uzerinden online olarak izleyebileceginiz etkinlik hakkinda daha fazla bilgiye buraya tiklayarak ulasabilirsiniz.

Sektörünün önde gelen firmalarından Contoso, satışlarını artıramamaktan yakınıyor, firma sahibi Ahmet Bey ise sorunun nereden kaynaklandığını tam teşhis edemiyordu. Satış ekipleri mi mevcut potansiyelin farkında olamıyor, yoksa potansiyellerini bildikleri halde işleri rakiplerine mi kaptırıyorlardı? Ahmet Bey’in bu sorunu çözebilmesi için daha ayrıntılı bilgiye sahip olması gerekiyor, ancak satış ekiplerinden daha fazla bilgi toplamak için girişimde bulunduğunda, tepki alıyordu. Dışa dönük ve satışa odaklanmış bu ekipler, sistemle uğraşmaya ve bilgi girişi yapmaya direniyorlar; tüm zamanlarını satışa ayırmak istiyorlardı. Satış ekiplerinden her görüşmelerini, her teklifi, teklif sonrası her takip adımını sisteme girmelerini istemek hiç de kolay değildi.

Pazarlama bölümü ise ürünlerini etkin tanıtamıyordu. Doğru müşteriye doğru iletişim kanalı ile ulaşmak ve bunu yaparken ekibinin aktivitelerini de denetleyerek, kampanyanın maliyetini düşürmek istiyorlardı. Tabii ki ürün ve pazarlama performanslarının etkin bir şekilde raporlanması da gerekiyordu.

İşte firmasındaki bütün bu sorunlara cevap arayan Ahmet Bey, araştırmasında Microsoft’un Dynamics CRM İş Platformunun, esnek ve genişleyebilir yapısı ile çok iyi bir ürün olduğunu gördü. Satış ve pazarlama bölümündeki sorunları giderebildiği gibi, servis talepleri ile çağrıları yönetebileceğini, servis aktiviteleri ile sahadaki personelin iş yükünü yönetebileceğini öğrendi. Üstelik iş akışları ile sistem otomatik olarak kendisine verilmiş işleri yapmaktaydı. İş akışları sayesinde bir olay ya da değişiklik olduğunda sistem bunu algılayıp gerekli işlemleri yerine getirebilmekteydi. Ayrıca bu sisteme tümleşik olan Web Portalı sayesinde kullanıcılar kendi servis taleplerini açmanın yanında, kendisiyle ilgilenen teknik servis personelinin boş olduğu saatlere randevu da alabiliyordu. Sahadaki teknik servis personeli sistemle entegre tablet ve akıllı cep telefonu arabirimi sayesinde şirket sistemine bağlanabilmekte, böylece müşteri bilgilerine ulaşabilmekte ve üzerlerindeki işleri, servis taleplerini çevrimiçi olarak görebilmekteydiler. Üstelik esnek raporlama arayüzü ile herkes kendi anlayabildiği şekilde raporlar alarak sistemi en yüksek verimle kullanabilmekteydi. 

Windows 10 :)


Yeni Windows 10 işletim sisteminin kurumlara yönelik avantajlarını ve kullanıcılarla ortak geliştirme programını öne çıkaran ilk tanıtımını sizlerle paylaşmanın heyecanı içindeyiz. Bu yazıda Windows 10 teknik ön izleme sürümüne dair detayları bulabilirsiniz. 


Yepyeni bir Windows neslinin ilk habercisi olan Windows 10, çalışma, eğlence ve çevrimiçi deneyim adına yenilikçi yaklaşımlar ortaya koyacak. Kurumların ihtiyacına en uygun işletim sistemi olarak planlanan Windows 10′u, önümüzdeki aylarda adım adım hazır hale getirirken, müşterilerimizden gelen geri bildirimler en büyük yol göstericimiz olacak.

Windows 10 ile birlikte ayrıca Windows Insider Program (WIP) adını verdiğimiz yeni bir programın duyurusunu da gerçekleştirdik. Programa kaydolanlar, bugüne kadar kullanıcılarla ortak hayata geçirilmiş en geniş işletim sistemi geliştirme platformuna katılma fırsatını yakalayacak. Böylece, teknik uzmanlar Windows işletim sisteminin geleceğini şekillendirmek üzere Microsoft ile birlikte çalışma fırsatına sahip olacak. 

Her Cihazda Ayni Deneyim

Windows 10 Xbox’tan PC’lere, akıllı telefonlardan tabletlere kadar tüketicilerin kullandığı tüm cihazlarda alışıldık, uyumlu ve sürekli bir deneyim ortaya koyacak. Böylece amaç ister çalışma olsun ister oyun veya eğlence, tüketiciler farklı platformlara uyum sağlamak için vakit harcamak zorunda kalmayacak.


Windows 10, nesnelerin interneti (Internet of Things) odaklı cihazlardan kurumsal veri merkezlerine kadar görülmemiş ölçüde geniş bir donanım portföyüne destek verecek şekilde tasarlandı. Microsoft ayrıca Windows 10 ile Windows geliştirme platformunu ve mağazaları da ortak hale getirdi. Tüketiciler artık Windows uygulamalarını ortak bir mağaza üzerinden keşfedebilecek, satın alabilecek ve güncelleyebilecek. PC’lerden akıllı telefonlara kadar farklı cihazları bir arada kapsayan ortak uygulama platformu sayesinde, geliştiriciler oyunlardan kurumsal uygulamalara kadar geliştirdikleri uygulamaları tüm cihazlara kolayca uyum sağlar hale getirebilecek.

Yeni Nesil Isletmelerin Ihtiyaclari Icin Tasarlandi

Windows 10 ile gelen temel özellikler, kurumların güvenlik ve yönetim odaklı ihtiyaçlarını karşılamak için geliştirildi. Kurumsal güvenliğin güçlendirilmesine dair yetenekler kurgulanırken, korumayı artırmanın yanı sıra karmaşıklığı azaltmak ön planda tutuldu. Kullanıcı kimlik yönetim sistemleri oltalama ve benzer yöntemlerle gerçekleştirilen kimlik hırsızlığını zorlaştırmak üzere yeniden tasarlandı. Uygulama ve dosya seviyesinde koruma sağlayan gelişmiş veri kaybı önleme sistemiyle, verinin kullanıcının herhangi bir müdahalesine gerek kalmadan gittiği her noktada takip edilmesi sağlandı.


Windows 10, yönetimin kolaylaştırılması ve maliyetin azaltılması konusunda da önemli yeniliklerle geliyor. Basitleştirilmiş güvenli kurulum sayesinde yerinde kurulum ve güncellemeler, zamana ihtiyaç duyan silme ve yeniden yükleme süreçlerine gerek kalmadan gerçekleştirilebilecek. Esnek kurulum ve güncellemeyle şirketler iş birimlerinin ihtiyacına uygun kurulumları çok daha esnek ve hızlı olarak kurgulayabilecek. Ayrıca kurumlara özgü Windows Mağazası deneyimi, kurumların ihtiyaç duyduğu çoklu lisanslama, esnek dağıtım ve lisanların yeniden kullanımı gibi kullanımlara izin verecek.

Ilk Bakista Windows 10

Tanıtılan ilk ön izleme sürümüyle öncelikli olarak PC deneyimine odaklanan ve önümüzdeki aylarda kullanıcıların geri bildirimleri doğrultusunda sürekli gelişecek olan Windows 10 sürümünün ilk bakışta dikkat çeken diğer özelliklerini şöyle sıralamak mümkün:


Genişletilmiş Başlat Menüsü: Bildiğiniz Başlat menüsü, yeni sürümde en sık kullanılan dosya ve fonksiyonları öne çıkaran ve kullanıcıya çok daha fazla özelleştirme olanağı sunan yeni haliyle geri dönecek.
Pencereli Uygulamalar: Windows Mağazası üzerinden edindiğiniz uygulamalar artık masaüstü uygulamalarına benzer bir pencere içinde açılacak. Bu pencereleri yeniden boyutlandırabilecek, taşıyabilecek, üzerinde yer alan uygulama çubuğu üzerinden tek tıkla minimize edebilecek veya kapatabileceksiniz.
Geliştirilmiş Uygulama Tutturma: Uygulama tutturma (snap) özelliğindeki yenilikler sayesinde aynı ekranda birden fazla uygulamayla çok daha kolay çalışabileceksiniz. Yeni dörtlü snap konfigürasyonu sayesinde aynı anda ekrana dört uygulama yerleştirmeniz mümkün. Windows 10, ayrıca çalışan diğer uygulamaların ekranda kalan boşluklara nasıl yerleştirilebileceği konusunda tavsiyelerde bulunacak.
Yeni Görev Görüntüleme Fonksiyonu: Bu buton sayesinde çalışan tüm uygulamalarınızı bir arada görebilecek, tek tıkla dilediğinizi ön plana alabilecek ve farklı masaüstü görüntüleri arasında geçiş yapabileceksiniz.
Sanal Masaüstü: Birçok uygulamayı ve dosyayı tek bir masaüstü üzerinde kalabalık bir şekilde görüntülemek yerine, iş veya eğlence odaklı farklı amaçlar ve projeler için özelleştirilmiş farklı masaüstü görünümleri tasarlayabileceksiniz.  

Microsoft, Windows Insider Program (WIP) ile yeni Windows işletim sisteminin gelişiminde kullanıcılardan gelen geri bildirimlere verdiği önemin altını çizen yeni bir uygulama başlatıyor. Windows Insider Program’a katılanlar, Microsoft ile kuracakları çift yönlü diyalog sayesinde geliştirme süreci boyunca sağlayacakları geri bildirimlerle yeni Windows 10 sürümünün çağdaş ihtiyaçlara uyum için adım adım şekillenmesinde söz sahibi olabilecek. Geri bildirimler için Windows Feedback uygulamasını kullanarak önerilerde bulunmak veya Windows Technical Preview Forum’a katılarak Microsoft mühendisleriyle doğrudan etkileşim kurmak mümkün olacak.

Windows 10 ve WIP programıyla ilgili detaylı bilgi için http://preview.windows.com adresini ziyaret edebilirsiniz.

Dynamics CRM 2013 and Microsoft Dynamics CRM Online nedir?

Microsoft Dynamics CRM 2013 ve Microsoft Dynamics CRM Online güçlü ve gelişmiş bir iş platformu deneyimini kullanıcılarına sunmaktadır. Dynamics CRM içerisine entegre edilmiş gelişmiş uygulama altyapısı sayesinde sadece uygulamayı kullanmakla kalmıyor aynı zamanda onun istediğimiz yerlerini işimize uygun halde yeniden programlayarak hem kendi içinde hem de dış uygulamalarla konuşabilen kendi iş çözümümüzü oluşturabiliyoruz. Bu şekilde genişlemeye biz xRM adını vermekteyiz. Yani herşeyin yönetilebildiği bir platform.


Dynamics CRM Microsoft tarafından çeşitli zamanlarda çıkartılan çeşitli service pack ve rollup paketleriyle genişlemekte ve yeni özellikler kazandırılmaktadır.

Dynamics CRM mevcutta üç farklı çeşitte paketlenmektedir;

  • Microsoft Dynamics CRM 2013 on-premises deployment
  • Microsoft Dynamics CRM 2013 Internet-facing deployment (IFD)
  • Microsoft Dynamics CRM Online

Bu üç çeşitte de aşağıdaki şekillerde son kullanıcı arabirimi sunmaktadır;

  • Microsoft Dynamics CRM Web client
  • Microsoft Dynamics CRM for Microsoft Office Outlook
  • Microsoft Dynamics CRM for Microsoft Office Outlook with Offline Access
  • Microsoft Dynamics CRM for phones and tablets

Yani siz Dynamics CRM’i şirketiniz için kullanmaya başladıktan sonra isterseniz Internet Explorer, Chrome, Safari gibi browserlardan sisteme girebilir isterseniz de cep telefonu ya da Outlook üzerinden de kullanabilirsiniz.

Oluşturduğunuz uygulamaları Dynamics CRM ile Web Servisleri aracılığıyla entegre edebilirsiniz. Bu web servisleri arka tarafta Dynamics CRM’in kalbi olan xRM platform katmanı ile iletişim halinde bulunmaktadır.

Bu katmanda güvenlik gibi genel kısımları içermektedir ve bir uygulamanın çalışması için gerekli olan yapı taşlarını içerir fakat kendisi ilgili nesnelerinin bir koleksiyonun başka bir şey değildir. Nesneler arasındaki iletişimi sağlar ve tekliften siparişe, siparişten faturaya gibi fiyatlandırma mantığı gibi daha genişletilebilir bir mantığı uygulamak için kullanılır.

XRM platformu ayrıca, güvenlik yoluyla verilere ve veritabanına erişimi denetler. Ayrıca iş akışı ve özel iş mantığı uygulamaları (plugins) için süreçlerinin tetiklenmesini denetler. Bu katman Microsoft Exchange Server üzerinden gelen ve giden e-posta işleme alır.