Dynamics 365 Code etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Dynamics 365 Code etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Dynamics 365 - Createdon ve Overriddencreatedon

CRM servslerini kullanarak veri aktarma işlemlerinde CreatedOn alanına değer veremeyiz. 

Bu aktarma işlemlerimde aşağıdaki yöntemleri kullanırız.

-- C# kod kullanılarak CRM içerinde veri oluşturma
-- CRM Veri Yönetimi kullanılarak txt/csv/xml dosyaları ile 

Bu yöntemlerde createdon tarihine değer veremezsiniz ve bu alan otomatik olarak kayıdın oluşturulduğu tarihi alır .

 Veri aktarımı yapılacağı zaman  gereksinimlerden biri de  CRM'deki kayıt oluşturma tarihinin eski sistemdeki kayıt oluşturma tarihiyle aynı olmasıdır..

Bunu CRM dekı baska bir alanda tutmak yerine sadece create için kullanılan OverrideCreatedOn  alanında tutacağız.  Bu durumda CRM tarafı OverrideCreatedOn alanını kullanacaktır .

Örnek Kod:

Entity account = new Entity("account");
account.Attributes["overriddencreatedon"] = new DateTime(2012, 2, 22);
account.Attributes["name"]=overriddencreatedon;

crmService.Create(item);

SQL Görünümü





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 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);