Visual Studio Code Kurulumu




Build 2015’de duyurulan Visual Studio Code, bu işletim sistemlerinde CoreCLR ve ASP.NET 5 uygulamaları geliştirmek için sunulan bir “text-editor”.

 Burada önemli nokta bir “IDE”, yani tam bir geliştirme ortamı olmaması. Yani kısaca Visual Studio Code bir IDE değil, bir text-editor. Electron alt yapısı kullanılarak geliştirilmesi bunun asıl sebebi. 

Github’un geliştirdiği Atom Text editörünün de temelinde bulunan Electron(a.k.a Atom Shell) node,js, HTML, CSS, javascript gibi alt yaplar ile cross-platform uygulamalar geliştirmenizi sağlıyor. Visual Studio Code’da bu alt yapı üzerinde geliştirilmiş bir uygulama.

NOT : Text-Editor olduğu için, sadece .NET uygulamalar değil, her türlü text tabanlı kodu yazmak mümkün.

Visual Studio Code Kurulumu

Kurulum dosyasını  buradan   bilgisayarınıza indiriniz.





İndirilen dosyayı açalım.






Daha sonra Welcome to the Visual Studi Code Setup Wizard ekranında Next butonuna basalım.


License Agreement ekranında I accept the aggrement  seçeneğini işaretleyip Next butonuna basalım.


Select Destination Location ekranında Next butonuna basalım. İsteğe bağlı olarak kurulumun yapılacağı klasör değiştirilebilir.


Select Start Menu Folder ekranında Next butonuna basalım.


Select Additional Tasks ekranında Next butonuna basalım.


Ready to Install ekranında yükleme bilgilerini kontrol edelim.Bir sorun görünmüyorsa Install butonuna basarak yüklemeyi başlatalım.



Yükleme tamamlandıktan sonra Finish butonuna basarak yüklemeden çıkalım.


Visual Studio Code Ekran Görünümü




Microsoft .NET Core SDK Yükleme (Install .NET Core SDK)

Kurulum dosyasını  buradan   bilgisayarınıza indiriniz.

https://www.microsoft.com/net/core#windowscmd



İndirlen dosyayı açalım ve Yükle butonuna basalım.


Yükleme sırasında biraz bekleyeceğiz.


Kurulum bittikten sonra Bitir butonuna basarak kurulumu tamamlayalım.


Dynamics 365 Tools - Site Haritası Tasarımı (Sitemap Designer)

Site haritaları, Dynamics 365'teki uygulamanızın navigasyonunu tanımlar.

Dynamics 365 teki  site haritası tasarımcısını  kullanarak uygulamanız için kolayca bir site haritası oluşturabilirsiniz.

Başka bir deyişle, Site Haritası Tasarımcısı, site haritanızı güncellemek için görsel bir yöntemdir.

Tasarımcı, bileşenleri sürükleyip bırakarak tasarımcıya bırakmanızı, çalışmalarınızı önizlemenizi ve site haritasını anında yayınlamanızı sağlar.

Yöneticiler ve gerekli ayrıcalıklara sahip herhangi bir kullanıcı, uygulamalar için hızlı bir şekilde site haritaları oluşturabilir.

Site Haritası Tasarımcısı, alan, alt alan veya grup başlıklarını Microsoft Dynamics 365 tarafından desteklenen dillerde tanımlamanıza da olanak tanır.

Ayarlar-> Özelleştirmeler-> Sistemi Özelleştir -> İstemci Uzantıları-> Site Haritası izlenerek Düzenle butonuna tıklayalım.







Dahili site haritası editörü, 8.2 ve daha sonraki sürümlerde mevcuttur.
8.2'den önceki bir sürümü kullanıyorsanız, bu seçeneği seçmek için önce kuruluşunuzu güncellemeniz gerekir.


Veya yine de XrmToolBox gibi harici araçları kullanabilir veya  XML'yi manuel olarak düzenleyebilirsiniz (XML i manuel editlemek risklidir).

Aşağıda, Microsoft Dynamics 365'te bulunan yerleşik site haritası düzenleyicisi bulunmaktadır.


Dynamics 365 Tools - CRM Dev Tools (Google Chrome)

Bu tool ile basit işlemleri kolaylakla yapabilirsiniz. 

Örneğin , login olan kullanıcının bilgilerini bir kaç tıklamayla öğrenebilirsiniz.


Buradan Google Chrome a ekleyebilirsiniz.



Google Chrome üzerinde F12 tuşuna basılarak Developer Tool açılır . Yukarıdaki eklentiyi ekledikten sonra Developer Tools da CRM Dev Tools tabı görünecektir.


Bu taba tıklanarak kullanacağımız ekranlar bulabiliriz.

USER
Buradan CRM e login olan kullancı hakkında bilgilere ulaşabiliriz.



FIND

FETCH


PLUGINS



DEBUG


Daha fazla bilgi için tıklayınız.

Dynamics 365 SQL - Global OptionSet Sorgulama



SQL Sorgu

SELECT OS.NAME, L.LABEL, AV.VALUE
FROM AttributePicklistValueAsIfPublishedLogicalView AV
JOIN OptionSetAsIfPublishedLogicalView  OS
ON AV.OptionSetId = OS.OptionSetId
JOIN LocalizedLabelAsIfPublishedLogicalView  L
ON L.OBJECTID = AV.AttributePicklistValueId
WHERE OS.ISGLOBAL = 1 AND OS.IsCustomOptionSet = 1
AND L.OBJECTCOLUMNNAME = 'DISPLAYNAME'
AND OS.NAME ='<Provide Global OptionSet Schema Name>'

Dynamics 365 - Müşteri Veri Tipi (Customer Data Type)


Firma ve ilgili kişi varlıklarının kombinasyonundan oluşmaktadır . Her iki varlıktan tek bir değer setlenebilir.


Firma ve İlgili Kişi için oluşacak relationlara alan oluşturulmadan değer verebiliriz.


Form üzerinden alana veri girişinde hangi varlık altından veri gireceksek o varlığı seçmemiz gerekir.



Not : Microsoft Dynamics CRM 2016 ve sonraki versiyonlarda kullanılmaktadır.


Microsoft Dynamics CRM 2016 Certifications list

Dynamics 365 - Varlığın Guid Değerini Alma (Form Üzerinden)

Çoğu zaman işlemlerimizi yaparken ilgili kaydımızın guid değerine ihtiyacımız  olmaktadır. Bunu öğrenmenin yollarından biri , formdaki AÇILIR PENCERE butonuna basarak açılan formun linkinden öğrenebiliriz.



Açılan formun url ini alalım.


id=%7b ( { ) ile %7d ( } ) arasındaki 32 haneli değer varlığın guid değerini içerir.

http://hostname/orgname/main.aspx?etc=2&extraqs=&histKey=561271371&id=%7b3B6C4759-BCFD-E611-8F1E-00155D005200%7d&newWindow=true&pagetype=entityrecord#696644333

Not : Eğer bir kaydın guid değerini biliyorsak ve crm üzerinde görüntülemek istiyorsak ,  aynı varlığa ait farklı bir kayıt açılır ve linkteki  ilgili değer ile elimizdeki guid değeri değiştirilir ve o kaydın formuna erişilir.


Dynamics 365 - Organizasyon Bilgilerini Alma ( RetrieveCurrentOrganizationRequest )


Organizasyon hakkında bilgiler edinmek için kullanılan bir metotdur.Alttaki ekran görüntüsündeki gibi bilgilere ulaşabilirsiniz.



C# Kodu

  CrmServiceClient crmServ = CrmManagerStatic.GetCrmServiceClient();

            RetrieveCurrentOrganizationRequest req = new RetrieveCurrentOrganizationRequest();


            RetrieveCurrentOrganizationResponse res = (RetrieveCurrentOrganizationResponse)crmServ.Execute(req);



Daha fazla bilgi için tıklayınız.

Not : CRM 2015 ve sonraki versiyonlarda kullanılmaktadır.

Dynamics 365 Javascript – Editable Grids


İlgili makaleye buradan ulaşabilirsiniz.


Dynamics 365 Code - App.Config Dosyasından ConnectionString Verisini Okuma (To Read Connection Strings From App.Config)


Projemize System.Configuration referansını eklememiz gerekir.




    private String GetServiceConfiguration()
        {
            // Get available connection strings from app.config.
            int count = ConfigurationManager.ConnectionStrings.Count;
            // Create a filter list of connection strings so that we have a list of valid
            // connection strings for Microsoft Dynamics CRM only.
            List<KeyValuePair<String, String>> filteredConnectionStrings =
            new List<KeyValuePair<String, String>>();
            for (int a = 0; a < count; a++)
            {
                if (isValidConnectionString(ConfigurationManager.ConnectionStrings[a].ConnectionString))
                    filteredConnectionStrings.Add
                    (new KeyValuePair<string, string>
                    (ConfigurationManager.ConnectionStrings[a].Name,
                    ConfigurationManager.ConnectionStrings[a].ConnectionString));
            }
            // If one valid connection string is found, use that.
            if (filteredConnectionStrings.Count == 1)
            {
                return filteredConnectionStrings[0].Value;
            }
            return null;
        }

        private Boolean isValidConnectionString(String connectionString)
        {
            // At a minimum, a connection string must contain one of these arguments.
            if (connectionString.Contains("Url=") ||
            connectionString.Contains("Server=") ||
            connectionString.Contains("ServiceUri="))
                return true;
            return false;
        }

Dynamics 365 - CrmService Kullanımı (Microsoft.Xrm.Tooling.Connector)





CrmServiceClient crmServ = GetCrmServiceClient();


  public CrmServiceClient GetCrmServiceClient()
        {
            CrmServiceClient crmSvc = new Microsoft.Xrm.Tooling.Connector.CrmServiceClient(@"AuthType=AD;Url=https://crmdev.gkhnmnts.com/CRMDEV; Domain=gkhn; Username=crmadmin; Password=password");

            return crmSvc;
        }


Dynamic 365 Code - İki Varlık Arasındaki Eşlenmiş Alanları Çekme - GetAttributesMap (Mapping)


Aşağıdaki kod ile lead ve account arasındaki mapping edilen kolonları çekebiliriz.


 EntityCollection attributeMaps = GetAttributesMap(crmService, "lead", "account");

                            Entity account = new Entity("account");

                            foreach (var item in attributeMaps.Entities)
                            {
                                string sourceAttributeName = item.GetAttributeValue<string>("sourceattributename");
                                string targetAttributeName = item.GetAttributeValue<string>("targetattributename");
                                if (lead.Attributes.Contains(sourceAttributeName))
                                {
                                    if (sourceAttributeName.ToLower() == "leadid")
                                        account[targetAttributeName] = new EntityReference("lead", lead.Id);
                                    else
                                        account[targetAttributeName] = lead[sourceAttributeName];
                                }
                            }

                            //account["name"] = companyname;

                            accountid = crmService.Create(account);




 private EntityCollection GetAttributesMap(IOrganizationService serv, string sourceentityname, string targetentityname)
        {
            QueryExpression query = new QueryExpression()
            {
                EntityName = "attributemap",
                ColumnSet = new ColumnSet("sourceattributename", "targetattributename"),
                LinkEntities =
                     {
                         new LinkEntity
                          {
                              LinkFromEntityName="attributemap",
                              LinkFromAttributeName="entitymapid",
                              LinkToEntityName = "entitymap",
                              LinkToAttributeName = "entitymapid",
                              LinkCriteria = new FilterExpression
                                    {
                                        FilterOperator = LogicalOperator.And,
                                        Conditions =
                                        {
                                            new ConditionExpression("sourceentityname",ConditionOperator.Equal,sourceentityname),
                                             new ConditionExpression("targetentityname",ConditionOperator.Equal,targetentityname)
                                        }
                                    }
                          }
                     },
                Criteria = new FilterExpression
                {
                    FilterOperator = LogicalOperator.And,
                    Conditions =
                                        {
                                            new ConditionExpression("parentattributemapid",ConditionOperator.Null),
                                            new ConditionExpression("sourceattributename", ConditionOperator.NotNull),
                                            new ConditionExpression("targetattributename", ConditionOperator.NotNull)
                                        }
                }

            };


            return serv.RetrieveMultiple(query);

        }

Dynamics 365 - SecureString Kullanımı



 public static CrmServiceClient GetCrmServiceClient()
        {
            CrmServiceClient crmSvc = new Microsoft.Xrm.Tooling.Connector.CrmServiceClient("username", ConvertToSecureString("password"), "NorthAmerica", "orgname", isOffice365: true);

            return crmSvc;
        }

        private static SecureString ConvertToSecureString(string password)
        {
            if (password == null)
                throw new ArgumentNullException("missing pwd");

            var securePassword = new SecureString();
            foreach (char c in password)
                securePassword.AppendChar(c);
            securePassword.MakeReadOnly();
            return securePassword;
        }

Not : Dynamics 365 kullanıyorsanız , SDK versiyonunuz 8.2 olmalıdır. CRM 2016 için SDK versiyonu 8.0 veya 8.1 olmalıdır.

Dynamics 365 Code - Fırsat Kazanma - Kaybetme (C#)


Fırsat Kazanma

            IOrganizationService crmService = CrmManagerStatic.GetCrmServiceCredential(CRMOrganization.CRM);

            Entity OpportunityClose1 = new Entity("opportunityclose");
            OpportunityClose1["opportunityid"] = new EntityReference("opportunity", new Guid("Opportunity GuId "));
            OpportunityClose1["subject"] = "Won the Opportunity";
            crmService.Create(OpportunityClose1);

            WinOpportunityRequest winQuoteRequest = new WinOpportunityRequest()
             {
                 OpportunityClose = OpportunityClose1,
                 Status = new OptionSetValue((int)OpportunityState.Won)
             };
            crmService.Execute(winQuoteRequest);


Fırsat Kaybetme

 IOrganizationService crmService = CrmManagerStatic.GetCrmServiceCredential(CRMOrganization.CRM);

            Entity OpportunityClose1 = new Entity("opportunityclose");
            OpportunityClose1["opportunityid"] = new EntityReference("opportunity", new Guid("Opportunity GuId "));
            OpportunityClose1["subject"] = "Lose the Opportunity";
            crmService.Create(OpportunityClose1);
            LoseOpportunityRequest request = new LoseOpportunityRequest()
              {
                  OpportunityClose = OpportunityClose1,
                  Status = new OptionSetValue((int)OpportunityState.Lost)
              };
            crmService.Execute(request);

Dynamics 365 - Virtual Entities



Dynamics 365 Temmuz 2017 Güncellemesi  ile gelen özellik olan  sanal varlıklar, veriyi Dynamics 365'te varlıklar olarak sorunsuz bir şekilde temsil ederek, veri replikasyonu yapmadan ve genellikle özel kodlamasız olarak harici sistemlerde bulunan verilerin entegrasyonunu mümkün kılar.



İlgili makaleye buradan ulaşabilirsiniz.


Dynamics 365 Plugin - Rest Web Service Kullanımı (HOW TO CALL REST WEB SERVICE IN PLUG-IN)


Son zamanlarda SOAP kullanmadan REST web hizmetini nasıl kullanacağımı öğrenmek istedim. CRM'de bir kayıt oluşturulduğunda, her seferinde diğer sistemlere veri gönderen bir web servisi yazmak zorunda kalıyordum.

Bildiğiniz gibi, REST hizmeti bir istemci taban yapısına sahiptir ve bu nedenle SOAP'tan biraz farklıdır. Artık referans hizmeti eklemiyoruz ve bunun yerine RestRequest sınıfını kullanıyoruz. Nasıl yapılacağını aşağıdaki kod anlatıyor.

RestSharp ı buradan indirebilirsiniz veya Package Manager Console  ile projenize yükleyebilirsiniz.






C# Code




    RestClient client = new RestClient("url/api/");
            var request = new RestRequest("ControllerName/MethodName", Method.POST);

            //here I preferred to send data in Json  format
            request.AddJsonBody(
                    new
                    {
                        //parameter is the requiring method variable name
                        //value is your data that you want to post
                        parameter1 = "value1",
                        parameter2 = "value1"
                    });
            request.RequestFormat = DataFormat.Json;
            var result = client.Execute(request);
            if (result.StatusCode == System.Net.HttpStatusCode.OK)
            {
                //success

            }