Dynamics CRM Ve Azure Application Insights Entegrasyonu

Birçok Microsoft Azure servisini Dynamics CRM ile entegre edebilmekteyiz. Bunlardan en güzel örneklerden birisi Application Insights ve Dynamics CRM birlikteliği. Bu makalede bu Application Insights ile Dynamics CRM’i nasıl konuşturacağımızı göreceğiz. Öncelikle Application Insights’in ne olduğuyla başlayalım isterseniz.

Visual Studio Application Insight bir telemetri servisidir yani bir sistemi detaylı olarak incelemek istediğinizde ona veri gönderdiniz ve bu verileri detaylı bir şekilde grafikler ve tablolar halinde izlediğiniz sonucunda rapolar alarak sisteminizin durumu hakkında bilgiler edindiğiniz bir hizmettir. Kısacası size sisteminizin sağlıklı çalışıp çalışmadığı hakkında ölçeklenebilir bilgiler vermektedir.

Dynamics CRM ise bir web tabanlı uygulama olduğundan IIS üzerinde oluşan web sayfası görüntüleme taleplerini bunların suresini ve bu taleplerin kimden geldiğini, hangi sayfalara bakıldığını detaylı olarak Application Insights’a aktarabiliriz.
Hadi başlayalım.

Azure İçinde Application Insights Kaynağı Oluşturalım

Azure hesabınız yoksa bu adresten olusturabilirsiniz. Sisteme giriş yaptıktan sonra Browse’a tıkladıktan sonra Application Insights’i seçeneğini ile oluşturma penceresini açıyoruz burada tek dikkat etmeniz gereken nokta Application Type seçeneğinde Asp.Net’i seçmeniz gerekmekte. Gerekli bilgileri doldurduktan sonra Create düğmesiyle kendi Application Insights’inizi oluşturabilirsiniz.


Resim-1

Bu noktadan sonra ekrandaki grafiklere tıklayarak her bir grafik bölümünün içinde o bölüme nasıl veri atabileceğinize dair örnekler yer almakta.


Resim-2

Javascript İle CRM İçerisinden Veri Gönderelim

Dynamics CRM’i açıp Ayarlar(Settings)>Ozellestirme(Customization)>Customize the System(Sistemi Ozellestir) bölümünden yeni Web Resource(Web Kaynağı) ekliyoruz.


Resim-3

Ben aşağıdaki kod parçasını kullanıyorum bu kod parçası ile CRM içerisinden kullanıcıyı ve işlem yapılan entity’i(nesne) parametre olarak gönderiyorum.

var UserName;

var Alias;

var serverUrl;

function Getinfo() {

    var context;

    var UserID;

    var ODataPath;

    var selectFields = “$select=DomainName,FullName”;

    context = Xrm.Page.context;

    serverUrl = context.getClientUrl();

    UserID = context.getUserId();

    ODataPath = serverUrl + “/XRMServices/2011/OrganizationData.svc”;

    var retrieveUserReq = new XMLHttpRequest();

    retrieveUserReq.open(“GET”, ODataPath + “/SystemUserSet(guid'” + UserID + “‘)?” + selectFields, false);

    retrieveUserReq.setRequestHeader(“Accept”, “application/json”);

    retrieveUserReq.setRequestHeader(“Content-Type”, “application/json; charset=utf-8”);

    retrieveUserReq.onreadystatechange = function () {

        retrieveUserReqCallBack(this);

    };

    retrieveUserReq.send();

}

function retrieveUserReqCallBack(retrieveUserReq) {

    if (retrieveUserReq.readyState == 4 /* complete */) {

        if (retrieveUserReq.status == 200) {

            var retrievedUser = JSON.parse(retrieveUserReq.responseText).d;

            if (retrievedUser.FullName != null) {

                UserName = retrievedUser.FullName;

                Alias = retrievedUser.DomainName;

            }

        }

    }

}

function captureTelemetry() {

    var appInsights = window.appInsights || function (config) {

        function s(config) { t[config] = function () { var i = arguments; t.queue.push(function () { t[config].apply(t, i) }) } } var t = { config: config }, r = document, f = window, e = “script”, o = r.createElement(e), i, u; for (o.src = config.url || “//az416426.vo.msecnd.net/scripts/a/ai.0.js”, r.getElementsByTagName(e)[0].parentNode.appendChild(o), t.cookie = r.cookie, t.queue = [], i = [“Event”, “Exception”, “Metric”, “PageView”, “Trace”]; i.length;) s(“track” + i.pop()); return config.disableExceptionTracking || (i = “onerror”, s(“_” + i), u = f[i], f[i] = function (config, r, f, e, o) { var s = u && u(config, r, f, e, o); return s !== !0 && t[“_” + i](config, r, f, e, o), s }), t

    }({

        instrumentationKey: “Burayi degistirin”

    });

    window.appInsights = appInsights;

    appInsights.trackPageView(Xrm.Page.data.entity.getEntityName(), serverUrl, { User: Xrm.Page.context.getUserName(), DomainName: Alias });

    appInsights.trackEvent(Xrm.Page.data.entity.getEntityName());

}

function startPoint() {

    Getinfo();

    captureTelemetry();

}


Resim-4

Kodun içerisindeki “instrumentationKey: “Burayı değiştirin”” bölümündeki instrumentationKey “Essentials” altında bulabilirsiniz.

Ben yukarıdaki kodu Account(Firma) ve Contact(Contact) entity’lerinin onLoad event’lerine yerleştirdim.


Resim-5

Bunu yapmak için form üzerindeki üç noktaya tıklıyoruz ve form düzenleyicisini açıyoruz. Form düzenleyicisi üzerinden Form özeliklerini açıyoruz ve biraz önce eklemiş olduğumuz js web kaynağını buradan seçiyoruz ve ekliyoruz.


Resim-6

Yapmış olduğumuz değişiklikleri kaydedip formu yayınlıyoruz,

Artık form her açıldığında  Application Insights’e veriler gidecektir. Benim demo sistemimden elde ettiğim ekran görüntüleri aşağıdaki gibidir. AppInsights’a ilk girdiğimde aşağıda görüldüğü gibi bir ekran bizi karşılamakta. Sırasıyla bu kutucuklara tıkladığımda detaylı bilgileri almaktayım.


Resim-7

Request ve Response zamanlarını;


Resim-8

Kullanıcının sayfaları ne zaman hangi cihazdan çağırdığı ve yüklenme surelerini;


Resim-9

Hangi formların ne kadar çağrıldığını;


Resim-10

Ve metadata bilgilerine;


Resim-11

Yukarıda görüldüğü gibi ulaşabilmekteyim. Bunun haricinde formlarda oluşan hataları ve kullanıcı detaylarını (geolocation gibi) da almaktayım.

Application Insights hakkında daha fazla bilgiye buradan ulasabilirsiniz.

Bu konuyla ilgili sorularınızı  alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

https://www.mshowto.org

Yazı gezinmesi

Mobil sürümden çık