cub-e.net

just coding...

Veri Turleri Hakkinda

Microsoft Dynamics CRM 2011 ve Microsoft Dynamics CRM Online'da programlama modeli .NET'in temel türlerini kullanacak şekilde değiştirildi.

Bu tabloda beni en çok şaşırtan ise Customer, Lookup, Owner nesnelerinin artık EntityReference türünden sadece bir değer almaları. CRM'i yeni öğrenler için işler gerçekten kolaylaştırılmış. Artık kod yazarken CRM ile başlayan nesnelerimiz yok.

Aşağıdaki tablo bize Microsoft Dynamics CRM 4.0 ile CRM 2011, 2013 ve 2015 arasındaki tür dönüşümünü göstermektedir.

Özellik Adı

Microsoft Dynamics CRM 2011, 2013, 2015 Türü

Microsoft Dynamics CRM 4.0 Türü

AttributeTypeCode.Boolean

bool ya da System.Boolean

CrmBoolean

AttributeType.CalendarRules

EntityCollection

DynamicEntity[] or calendarrule[]

AttributeType.Customer

EntityReference

Customer

AttributeType.DateTime

System.DateTime

CrmDateTime

AttributeType.Decimal

decimal ya da System.Decimal

CrmDecimal

AttributeType.Double

double ya da System.Double

CrmFloat

AttributeType.Integer

int ya da System.Integer

CrmNumber

AttributeType.Internal

System.Object

Kayıtlarda Kullanılmaz

Kayıtlarda Kullanılmaz.

AttributeType.Lookup

EntityReference

Lookup

AttributeType.Memo

string ya da System.String

System.String

AttributeType.Money

Money

CrmMoney

AttributeType.Owner

EntityReference

Owner

AttributeType.PartyList

EntityCollection or ActivityParty[]

activityparty[] or DynamicEntity []

AttributeType.Picklist

OptionSetValue

Picklist

AttributeType.PrimaryKey

System.Guid

Key

AttributeType.String

System.String

System.String

AttributeType.State

OptionSetValue yada oluşturulan enumeration kullanılmalı

EntityNameStateInfo

AttributeType.Status

OptionSetValue ya da int

Status

AttributeType.Uniqueidentifier

System.Guid

UniqueIdentifier

AttributeType.Virtual

System.Object

Kayıtlarda Kullanılmaz

Kayıtlarda Kullanılmaz

Eski Tür

Yeni Tür

CrmAttributeType Class (MetadataService)

Microsoft.Xrm.Sdk.Metadata.AttributeTypeCode

Moniker Class (CrmService)

Microsoft.Xrm.Sdk.EntityReference

SecurityPrincipal Class (CrmService)

Microsoft.Xrm.Sdk.EntityReference

 

OptionSetValue

OptionSetValue’a değer atamak için ilk önce OptionSetValue türünden bir nesne oluşturmanız gerekmektedir.  Burada dikkat çekmek istediğim konu ise eğer state alanı ile çalışacaksanız (yani firma için aktif/pasif, teklif için açık/kazanıldı/kaybedildi gibi) early-bound sınıflarda bunlar için mutlaka bir enumaration oluşturulmakta. Ama late bound sınıflarda bu durumu programcı yönetmektedir.

Örnek olarak adres üzerindeki bir optionset alana değer atama aşağıdaki şekilde olmaktadır;

OptionSetValue osv = new OptionSetValue(1);

contact.Attributes["address1_freighttermscode"] = osv;

 

EntityReference

CRM sisteminde iki entity’yi birbirine bağlamak için lookup nesnesini kullanmak zorundayız. Lookup’lar üzerinde programatik işlem yapabilmek için EntityReference nesnesini kullanmaktayız. Bu nesneye Lookup alana reference vermek istemiz nesnenin türü ve Id’sini vermemiz gerekmektedir.

Aşağıdaki örnekte parentAccountId atama yapılacak nesnenin guid cinsinden Id’si olmalı;

EntityReference parentaccountid = new EntityReference("account", parentAccountId));

accountEntity.Attributes["parentaccountid"] = parentaccountid;

ioService.Update(accountEntity);

Null Değer Atama

CRM 4.0’dan farklı olarak .Net Type türleri kullanıldığı için null değer atama işlemi artık sadece alana değer vermekten ibaret oldu. İşte birkaç örnek;

EntityAdi.IndustryCode = null;

EntityAdi.AccountId = Guid.Empty;

EntityAdi.AccountNumber ="";

EntityAdi.Address1_Country = String.Empty;

Early ve Late Binding Arasındaki Farklar

Dynamics CRM 2011 ve sonrasinda CRM içerisinde programcılar kendilerine birden fazla programlama biçimi seçebilirler. Dynamics CRM’de WSDL kullanarak early-bound tipleri ve Dynamics Entity sınıflarını kullanarak da late-bound programlama yapabilirsiniz. Plug-in ve Workflow yazabilmek için late-bound tipleri kullanmamız gerekmektedir.

Dynamics CRM 4.0’da entity sınıflarının duruşu aşağıdaki şekildeki gibiydi;

Şimdi ise Dynamics CRM 2011’de bu yapı şu şekilde değişti;

DynamicEntity sınıfı artık Entity sınıfı isimli bir sınıfla yer değiştirdi. Bunun anlamı ise build time yani early bound tiplerle, runtime yani late bound tiplerin artık tek sınıftan türemesinin gerçekleşmiş olduğudur.

Dynamics CRM’de artık WSDL’e direkt ulaşamıyoruz. Daha önceki makalemde de anlattığım gibi 2 tane dll’i referans olarak eklemek ve servise bağlantı kurmak gerekmektedir.

Late-Bound olarak isimlendiren mimaride siz Entity sınıfından bir nesne türetmeli ve bu nesnenin attribute collection’da da değerlere yer vermelisiniz. Tabii burada değer alanlarının crm içerisindeki logical name’lerini kesinlikle bilmeniz gerekmektedir.

Aşağıdaki örnek bize late-bindig yapısının nasıl işlediğini gösterecektir;

Entity lead = new Entity("lead");

lead.Attributes["subject"] = "Deneme Firmasi";

lead.Attributes["firstname"] = "Baris";

lead.Attributes["lastname"] = "KANLICA";

lead.Attributes["companyname"] = "Mawens Business Solutions";

lead.Attributes["numberofemployees"] = 20;

Guid leadid = service.Create(lead);

Entity sınıfını kullanmaya başladığımız zaman late-binding’e giriş yapmış oluyoruz. Entity türünden oluşturduğumuz nesneye biz Lead türünden bilgileri içine dolduracağız diyoruz. Contact, Opportunity gibi CRM içerisindeki bütün nesneleri bu şekilde oluşturabiliriz.

Daha sonra ise alanların logical name’lerini vererek bunların değerleri veriyoruz. Burada .net tabanlı türleri kullanabilmekteyiz. CRM 4.0’da CrmBoolean, CrmNumber gibi türlere çeviriler yaparak nesnelerin içini doldururken artık buna ihtiyacımız bulunmamaktadır.

service isimli WCF tabanlı servisimizden türemiş nesnenin Create Metodunu kullanarak nesnemizi CRM içerisinde bir kayıt olarak oluşturuyoruz.

Early-Bound olarak isimlendirilen mimaride de ise CrmSvcUtil.exe aracını kullanarak bir OrganizationServiceContext türetmelisiniz. Daha sonra ise bu aracın türettiği nesneleri kullanabilir hale gelebilirsiniz. Tabii burada her bir nesnenin şema isimleriyle hareket ettiğimiz unutulmamalıdır.

Aşağıdaki örnek bize early-binding yapısının nasıl işlediğini gösterecektir;

CrmDataContext orgContext = new CrmDataContext(ServiseBaglan());

 

var contact = new Contact()

{

    FirstName = "Alan",

    LastName = "Smith"

};

orgContext.AddObject(contact);

 

orgContext.SaveChanges();

 

Burada ServiseBaglan() daha önceki makelemde belirttiğim gibi IOrganizationService Interface’inden türemiş bir sınıfı teşkil  etmektedir. Yani CRM’in WCF servisine hazır ve açık bir bağlantıdır.

Contact ise CRM içerisinde kişiler entity’sidir, Account, Lead, Invoice,Quote gibi daha bir çok entity bulunmaktadır.

Firstname ve Lastname ise kişinin adı ve soyadı için değerleri temsil etmektedir  ve bu bilgi OrganizationContext’ten gelmektedir. Bir sonraki yazında CrmDataContext isimli bu OrganizationContext’in CrmSvcUtil.exe aracılığıyla nasıl oluşturulduğu göstereceğim.

Daha sonra ise bu doldurduğumuz contact nesnesini OrganizationContext’e teslim ediyoruz ve işlem yapılması için SaveChanges() metodumuzu çağırıyoruz.

Farklılıkları ise şu şekilde sıralayabiliriz;

·         Early-Bound Entity Sınıflarının en büyük avantajı compile time da bize bütün hataları göstermesidir. Yani uygulamamızı yazarken ya da derlerken türler arası uyumsuzluk ya da yanlış değer atama gibi bütün yanlışlıklarımızı gözler önüne sermektedir. 

·         CrmSvcUtil bize tüm CRM mimarisini örneklerken bütün nesneleri ve onun ilişkilerini de getirmektedir. Böylece nesne dönüşümleri ve tür güvenliği de sağlanmış olmaktadır.

·         Visual Studio içerisinde inteli sense özelliğini kullanmamızı sağlar.

·         Dynamics CRM 4.0’dan beri WSDL ile çalışan kişiler bu yeni yapıda hiçbir farklılık hissetmeyeceklerdir.

CrmSvcUtil.exe ile Early-Bound Sınıflar Oluşturmak

Early-Bound tiplerle çalışabilmek için obje modelini bilmeye ihtiyacımız vardır. İşte CrmSvcUtil.exe bize bu kodu üretecek olan programdır.

Program early-bound .Net Framework sınıflarını ve entity modellerini Microsoft Dynamics CRM 2015 içerisinden almakta ve bize bir .cs dosyası halinde vermektedir. Bu noktadan sonra üretilen bu .cs dosyasını ya Visual Studio ile kodunuzun bir parçası olarak kullanabilir ya da bir dll haline getirip projenize referans olarak ekleyebilirsiniz. Bu sayede Visual Studio içerisinde intelli-sense özelliği ile kod geliştirebilirsiniz.

Eğer isterseniz uygulama her bir entity için ayrı bir partial class’da oluşturabilir.

CRM’in SDK’sında bin klasörü içerisinde bulabileceğiniz bu aracı command prompt ile çalıştırabilirsiniz.
crmsvcutil.exe            

/url: buraya Organization Service’in adresi gelecek

/out: çıktının hangi dosyaya olacağı bilgisi

/username : servise bağlanılacak kullanıcı adı

/şifre : servise bağlanılacak şifre

Eğer CRM’de zaten kullanıcı olan bir kişi ile oturum açtıysanız k.adı ve şifre belirtmenize gerek yok.

Bu şekilde gerekli cümleyi command promt’a yazdığınızda yukarıdaki ekranda olduğu gibi .cs dosyanızı alabilirsiniz.

Ek olarak aşağıdaki parametreleri de verebilirsiniz;

/serviceContextName: Eğer .cs dosyanızı LINQ Service Context vasıtasıyla LINQ sorgularını da desteklemesini istiyorsanız bu özelliği kullanmalısınız. Buraya türetilecek servis context’inin adını girmelisiniz örneğin “CrmDataContext” gibi.

Burada ek olarak şunu da belirtmeliyim ki bu komutu varsayalında ben hep kullanıyorum. Bu komutu kullandığımız zaman  2 şeyi unutmamız gerekmekte;

1.      Bir OrganizationContext oluşmakta artık onu kullanmamız gerekmekte, aşağıdaki örnekte olduğu gibi;

CrmDataContext orgContext = new CrmDataContext(ServiseBaglan());

2.      Crm Servis çağrısına şu özelliği eklememiz gerekmekte;

_serviceproxy.EnableProxyTypes();

 

Bu iki maddenin detayını LINQ ile veri  sorgulama makalemde daha detaylı anlatacağım.

/namespace : Varsayılanda .cs dosyası bir namespace olmadan türetilir bu özelliği kullanarak kodu bir namespace altında toplayabilirsiniz.

 /language : CrmSvcUtil.exe varsayılanda C# kodu üretil eğer VB kodu üretmek istiyorsanız bu özelliğe VB değerini vermeniz gerekmekte.

Bu tool aşağıdaki örnekte olduğu gibi bir kod üretmektedir;

 

    /// <summary>

    /// Bir müşteriyi veya potansiyel müşteriyi temsil eden işletme. Ticari işlemlerde faturalanan şirket.

    /// </summary>

    [System.Runtime.Serialization.DataContractAttribute()]

    [Microsoft.Xrm.Sdk.Client.EntityLogicalNameAttribute("account")]

    [System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9688.1244")]

    public partial class Account : Microsoft.Xrm.Sdk.Entity, System.ComponentModel.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged

    {

 

        /// <summary>

        /// Default Constructor.

        /// </summary>

        public Account() :

            base(EntityLogicalName)

        {

        }

 

        public const string EntityLogicalName = "account";

 

        public const int EntityTypeCode = 1;

 

        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

 

        public event System.ComponentModel.PropertyChangingEventHandler PropertyChanging;

 

        private void OnPropertyChanged(string propertyName)

        {

            if ((this.PropertyChanged != null))

            {

                this.PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));

            }

        }

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.

Message-entity support for plug-ins in CRM 2013

Message Name Primary Entity Secondary Entity Message Availability
AddItem Campaign NULL Both
AddItem CampaignActivity NULL Both
AddListMembers List NULL Server
AddMember List NULL Server
AddMembers Team NULL Server
AddPrivileges Role NULL Server
AddProductToKit Product NULL Both
AddRecurrence RecurringAppointmentMaster NULL Both
AddToQueue QueueItem NULL Both
AddUserToRecordTeam TeamTemplate NULL Server
Assign Account NULL Server
Assign Annotation NULL Server
Assign Appointment NULL Server
Assign Campaign NULL Server
Assign CampaignActivity NULL Server
Assign CampaignResponse NULL Server
Assign Connection NULL Server
Assign Contact NULL Server
Assign Contract NULL Server
Assign CustomerOpportunityRole NULL Server
Assign CustomerRelationship NULL Server
Assign Email NULL Server
Assign Fax NULL Server
Assign Goal NULL Server
Assign GoalRollupQuery NULL Server
Assign Incident NULL Server
Assign IncidentResolution NULL Server
Assign Invoice NULL Server
Assign Lead NULL Server
Assign Letter NULL Server
Assign List NULL Server
Assign msdyn_PostAlbum NULL Server
Assign msdyn_wallsavedqueryusersettings NULL Server
Assign Opportunity NULL Server
Assign OpportunityClose NULL Server
Assign OrderClose NULL Server
Assign PhoneCall NULL Server
Assign ProcessSession NULL Server
Assign Queue NULL Server
Assign Quote NULL Server
Assign QuoteClose NULL Server
Assign RecurringAppointmentMaster NULL Server
Assign SalesOrder NULL Server
Assign ServiceAppointment NULL Server
Assign SharePointDocumentLocation NULL Server
Assign SharePointSite NULL Server
Assign Task NULL Server
Assign Template NULL Server
Assign UserForm NULL Server
Assign UserQuery NULL Server
Assign UserQueryVisualization NULL Server
AssignUserRoles Role NULL Server
Associate NULL NULL Both
BackgroundSend Email NULL Both
Book Appointment NULL Server
Book RecurringAppointmentMaster NULL Server
Book ServiceAppointment NULL Server
Cancel Contract NULL Both
Cancel SalesOrder NULL Both
CheckIncoming Email NULL Both
CheckPromote Email NULL Both
Clone Contract NULL Both
Close Incident NULL Both
Close Quote NULL Both
CopyDynamicListToStatic List NULL Server
CopySystemForm SystemForm NULL Server
Create Account NULL Both
Create ActivityMimeAttachment NULL Both
Create Annotation NULL Both
Create Appointment NULL Both
Create BusinessUnit NULL Both
Create BusinessUnitNewsArticle NULL Both
Create Calendar NULL Both
Create Campaign NULL Both
Create CampaignActivity NULL Both
Create CampaignResponse NULL Both
Create Competitor NULL Both
Create Connection NULL Both
Create ConnectionRole NULL Both
Create ConnectionRoleObjectTypeCode NULL Both
Create Contact NULL Both
Create Contract NULL Both
Create ContractDetail NULL Both
Create ContractTemplate NULL Both
Create CustomerAddress NULL Both
Create CustomerOpportunityRole NULL Both
Create CustomerRelationship NULL Both
Create Discount NULL Both
Create DiscountType NULL Both
Create Email NULL Both
Create Equipment NULL Both
Create ExchangeSyncIdMapping NULL Both
Create Fax NULL Both
Create FieldPermission NULL Both
Create FieldSecurityProfile NULL Both
Create Goal NULL Both
Create GoalRollupQuery NULL Both
Create Incident NULL Both
Create IncidentResolution NULL Both
Create Invoice NULL Both
Create InvoiceDetail NULL Both
Create KbArticle NULL Both
Create KbArticleComment NULL Both
Create KbArticleTemplate NULL Both
Create Lead NULL Both
Create Letter NULL Both
Create List NULL Both
Create Metric NULL Both
Create msdyn_PostAlbum NULL Both
Create msdyn_PostConfig NULL Both
Create msdyn_PostRuleConfig NULL Both
Create msdyn_wallsavedquery NULL Both
Create msdyn_wallsavedqueryusersettings NULL Both
Create Opportunity NULL Both
Create OpportunityClose NULL Both
Create OpportunityProduct NULL Both
Create OrderClose NULL Both
Create PhoneCall NULL Both
Create Post NULL Both
Create PostComment NULL Both
Create PostFollow NULL Both
Create PriceLevel NULL Both
Create PrincipalObjectAttributeAccess NULL Both
Create ProcessSession NULL Both
Create Product NULL Both
Create ProductPriceLevel NULL Both
Create Queue NULL Both
Create QueueItem NULL Both
Create Quote NULL Both
Create QuoteClose NULL Both
Create QuoteDetail NULL Both
Create RecurrenceRule NULL Both
Create RecurringAppointmentMaster NULL Both
Create Role NULL Both
Create RollupField NULL Both
Create SalesLiterature NULL Both
Create SalesLiteratureItem NULL Both
Create SalesOrder NULL Both
Create SalesOrderDetail NULL Both
Create Service NULL Both
Create ServiceAppointment NULL Both
Create SharePointDocumentLocation NULL Both
Create SharePointSite NULL Both
Create Site NULL Both
Create Subject NULL Both
Create SystemUser NULL Both
Create Task NULL Both
Create Team NULL Both
Create Template NULL Both
Create Territory NULL Both
Create TraceLog NULL Both
Create TransactionCurrency NULL Both
Create UoM NULL Both
Create UoMSchedule NULL Both
Create UserQuery NULL Both
Create WebResource NULL Both
CreateException Appointment NULL Both
CreateInstance RecurringAppointmentMaster NULL Server
Delete Account NULL Both
Delete ActivityMimeAttachment NULL Both
Delete Annotation NULL Both
Delete Appointment NULL Both
Delete BusinessUnit NULL Both
Delete BusinessUnitNewsArticle NULL Both
Delete Calendar NULL Both
Delete Campaign NULL Both
Delete CampaignActivity NULL Both
Delete CampaignResponse NULL Both
Delete Competitor NULL Both
Delete Connection NULL Both
Delete ConnectionRole NULL Both
Delete ConnectionRoleObjectTypeCode NULL Both
Delete Contact NULL Both
Delete Contract NULL Both
Delete ContractDetail NULL Both
Delete ContractTemplate NULL Both
Delete CustomerAddress NULL Both
Delete CustomerOpportunityRole NULL Both
Delete CustomerRelationship NULL Both
Delete Discount NULL Both
Delete DiscountType NULL Both
Delete Email NULL Both
Delete Equipment NULL Both
Delete ExchangeSyncIdMapping NULL Both
Delete Fax NULL Both
Delete FieldPermission NULL Both
Delete FieldSecurityProfile NULL Both
Delete Goal NULL Both
Delete GoalRollupQuery NULL Both
Delete Incident NULL Both
Delete IncidentResolution NULL Both
Delete Invoice NULL Both
Delete InvoiceDetail NULL Both
Delete KbArticle NULL Both
Delete KbArticleComment NULL Both
Delete KbArticleTemplate NULL Both
Delete Lead NULL Both
Delete Letter NULL Both
Delete List NULL Both
Delete Metric NULL Both
Delete msdyn_PostAlbum NULL Both
Delete msdyn_PostConfig NULL Both
Delete msdyn_PostRuleConfig NULL Both
Delete msdyn_wallsavedquery NULL Both
Delete msdyn_wallsavedqueryusersettings NULL Both
Delete Opportunity NULL Both
Delete OpportunityClose NULL Both
Delete OpportunityProduct NULL Both
Delete OrderClose NULL Both
Delete PhoneCall NULL Both
Delete Post NULL Both
Delete PostComment NULL Both
Delete PostFollow NULL Both
Delete PostLike NULL Both
Delete PriceLevel NULL Both
Delete PrincipalObjectAttributeAccess NULL Both
Delete ProcessSession NULL Both
Delete Product NULL Both
Delete ProductPriceLevel NULL Both
Delete Publisher NULL Both
Delete PublisherAddress NULL Both
Delete Queue NULL Both
Delete QueueItem NULL Both
Delete Quote NULL Both
Delete QuoteClose NULL Both
Delete QuoteDetail NULL Both
Delete RecurrenceRule NULL Both
Delete RecurringAppointmentMaster NULL Both
Delete Role NULL Both
Delete RollupField NULL Both
Delete SalesLiterature NULL Both
Delete SalesLiteratureItem NULL Both
Delete SalesOrder NULL Both
Delete SalesOrderDetail NULL Both
Delete Service NULL Both
Delete ServiceAppointment NULL Both
Delete SharePointDocumentLocation NULL Both
Delete SharePointSite NULL Both
Delete Site NULL Both
Delete Solution NULL Both
Delete Subject NULL Both
Delete Task NULL Both
Delete Team NULL Both
Delete Template NULL Both
Delete Territory NULL Both
Delete TransactionCurrency NULL Both
Delete UoM NULL Both
Delete UoMSchedule NULL Both
Delete UserForm NULL Both
Delete UserQuery NULL Both
Delete UserQueryVisualization NULL Both
Delete WebResource NULL Both
DeleteOpenInstances RecurringAppointmentMaster NULL Both
DeliverIncoming Email NULL Server
DeliverPromote Email NULL Both
DetachFromQueue Email NULL Both
Disassociate NULL NULL Both
Execute NULL NULL Both
ExecuteById SavedQuery NULL Both
ExecuteById UserQuery NULL Both
Export NULL NULL Server
ExportAll NULL NULL Server
ExportCompressed NULL NULL Server
ExportCompressedAll NULL NULL Server
GrantAccess Account NULL Server
GrantAccess Annotation NULL Server
GrantAccess Appointment NULL Server
GrantAccess Campaign NULL Server
GrantAccess CampaignActivity NULL Server
GrantAccess CampaignResponse NULL Server
GrantAccess Connection NULL Server
GrantAccess Contact NULL Server
GrantAccess Contract NULL Server
GrantAccess CustomerOpportunityRole NULL Server
GrantAccess CustomerRelationship NULL Server
GrantAccess Email NULL Server
GrantAccess Fax NULL Server
GrantAccess Goal NULL Server
GrantAccess GoalRollupQuery NULL Server
GrantAccess Incident NULL Server
GrantAccess IncidentResolution NULL Server
GrantAccess Invoice NULL Server
GrantAccess Lead NULL Server
GrantAccess Letter NULL Server
GrantAccess List NULL Server
GrantAccess msdyn_PostAlbum NULL Server
GrantAccess msdyn_wallsavedqueryusersettings NULL Server
GrantAccess Opportunity NULL Server
GrantAccess OpportunityClose NULL Server
GrantAccess OrderClose NULL Server
GrantAccess PhoneCall NULL Server
GrantAccess ProcessSession NULL Server
GrantAccess Queue NULL Server
GrantAccess Quote NULL Server
GrantAccess QuoteClose NULL Server
GrantAccess RecurringAppointmentMaster NULL Server
GrantAccess SalesOrder NULL Server
GrantAccess ServiceAppointment NULL Server
GrantAccess SharePointDocumentLocation NULL Server
GrantAccess SharePointSite NULL Server
GrantAccess Task NULL Server
GrantAccess Template NULL Server
GrantAccess UserForm NULL Server
GrantAccess UserQuery NULL Server
GrantAccess UserQueryVisualization NULL Server
Handle Appointment NULL Both
Handle CampaignActivity NULL Both
Handle CampaignResponse NULL Both
Handle Email NULL Both
Handle Fax NULL Both
Handle Incident NULL Both
Handle Letter NULL Both
Handle PhoneCall NULL Both
Handle RecurringAppointmentMaster NULL Both
Handle ServiceAppointment NULL Both
Handle Task NULL Both
Import NULL NULL Server
ImportAll NULL NULL Server
ImportCompressedAll NULL NULL Server
ImportCompressedWithProgress NULL NULL Server
ImportWithProgress NULL NULL Server
LockInvoicePricing Invoice NULL Server
LockSalesOrderPricing SalesOrder NULL Server
Lose Opportunity NULL Both
Merge Account NULL Server
Merge Contact NULL Server
Merge Lead NULL Server
ModifyAccess Account NULL Server
ModifyAccess Annotation NULL Server
ModifyAccess Appointment NULL Server
ModifyAccess Campaign NULL Server
ModifyAccess CampaignActivity NULL Server
ModifyAccess CampaignResponse NULL Server
ModifyAccess Connection NULL Server
ModifyAccess Contact NULL Server
ModifyAccess Contract NULL Server
ModifyAccess CustomerOpportunityRole NULL Server
ModifyAccess CustomerRelationship NULL Server
ModifyAccess Email NULL Server
ModifyAccess Fax NULL Server
ModifyAccess Goal NULL Server
ModifyAccess GoalRollupQuery NULL Server
ModifyAccess Incident NULL Server
ModifyAccess IncidentResolution NULL Server
ModifyAccess Invoice NULL Server
ModifyAccess Lead NULL Server
ModifyAccess Letter NULL Server
ModifyAccess List NULL Server
ModifyAccess msdyn_PostAlbum NULL Server
ModifyAccess msdyn_wallsavedqueryusersettings NULL Server
ModifyAccess Opportunity NULL Server
ModifyAccess OpportunityClose NULL Server
ModifyAccess OrderClose NULL Server
ModifyAccess PhoneCall NULL Server
ModifyAccess ProcessSession NULL Server
ModifyAccess Queue NULL Server
ModifyAccess Quote NULL Server
ModifyAccess QuoteClose NULL Server
ModifyAccess RecurringAppointmentMaster NULL Server
ModifyAccess SalesOrder NULL Server
ModifyAccess ServiceAppointment NULL Server
ModifyAccess SharePointDocumentLocation NULL Server
ModifyAccess SharePointSite NULL Server
ModifyAccess Task NULL Server
ModifyAccess Template NULL Server
ModifyAccess UserForm NULL Server
ModifyAccess UserQuery NULL Server
ModifyAccess UserQueryVisualization NULL Server
Publish NULL NULL Server
PublishAll NULL NULL Server
QualifyLead Lead NULL Both
Recalculate Goal NULL Server
RemoveItem Campaign NULL Both
RemoveItem CampaignActivity NULL Both
RemoveMember List NULL Server
RemoveMembers Team NULL Server
RemovePrivilege Role NULL Server
RemoveProductFromKit NULL NULL Both
RemoveRelated Invoice Contact Both
RemoveRelated Lead Contact Both
RemoveRelated Lead Account Both
RemoveRelated Opportunity Account Both
RemoveRelated Opportunity Contact Both
RemoveRelated Opportunity Competitor Both
RemoveRelated Product Competitor Both
RemoveRelated Product Lead Both
RemoveRelated Quote Contact Both
RemoveRelated SalesLiterature Competitor Both
RemoveRelated SalesLiterature Product Both
RemoveRelated SalesOrder Contact Both
RemoveUserFromRecordTeam TeamTemplate NULL Server
RemoveUserRoles Role NULL Server
ReplacePrivileges Role NULL Server
Reschedule Appointment NULL Server
Reschedule RecurringAppointmentMaster NULL Server
Reschedule ServiceAppointment NULL Server
Retrieve Account NULL Both
Retrieve ActivityMimeAttachment NULL Both
Retrieve ActivityPointer NULL Both
Retrieve Annotation NULL Both
Retrieve Appointment NULL Both
Retrieve BusinessUnitNewsArticle NULL Both
Retrieve Calendar NULL Both
Retrieve Campaign NULL Both
Retrieve CampaignActivity NULL Both
Retrieve CampaignResponse NULL Both
Retrieve Competitor NULL Both
Retrieve Connection NULL Both
Retrieve ConnectionRole NULL Both
Retrieve ConnectionRoleObjectTypeCode NULL Both
Retrieve Contact NULL Both
Retrieve Contract NULL Both
Retrieve ContractDetail NULL Both
Retrieve ContractTemplate NULL Both
Retrieve CustomerAddress NULL Both
Retrieve CustomerOpportunityRole NULL Both
Retrieve CustomerRelationship NULL Both
Retrieve Dependency NULL Both
Retrieve Discount NULL Both
Retrieve DiscountType NULL Both
Retrieve Email NULL Both
Retrieve Equipment NULL Both
Retrieve ExchangeSyncIdMapping NULL Both
Retrieve Fax NULL Both
Retrieve Goal NULL Both
Retrieve GoalRollupQuery NULL Both
Retrieve Incident NULL Both
Retrieve IncidentResolution NULL Both
Retrieve InvalidDependency NULL Both
Retrieve Invoice NULL Both
Retrieve InvoiceDetail NULL Both
Retrieve KbArticle NULL Both
Retrieve KbArticleComment NULL Both
Retrieve KbArticleTemplate NULL Both
Retrieve Lead NULL Both
Retrieve LeadAddress NULL Both
Retrieve Letter NULL Both
Retrieve List NULL Both
Retrieve Metric NULL Both
Retrieve msdyn_PostAlbum NULL Both
Retrieve msdyn_PostConfig NULL Both
Retrieve msdyn_PostRuleConfig NULL Both
Retrieve msdyn_wallsavedquery NULL Both
Retrieve msdyn_wallsavedqueryusersettings NULL Both
Retrieve Opportunity NULL Both
Retrieve OpportunityClose NULL Both
Retrieve OpportunityProduct NULL Both
Retrieve OrderClose NULL Both
Retrieve PhoneCall NULL Both
Retrieve Post NULL Both
Retrieve PostComment NULL Both
Retrieve PostFollow NULL Both
Retrieve PostLike NULL Both
Retrieve PriceLevel NULL Both
Retrieve ProcessSession NULL Both
Retrieve Product NULL Both
Retrieve ProductPriceLevel NULL Both
Retrieve Publisher NULL Both
Retrieve PublisherAddress NULL Both
Retrieve Queue NULL Both
Retrieve Quote NULL Both
Retrieve QuoteClose NULL Both
Retrieve QuoteDetail NULL Both
Retrieve RecurringAppointmentMaster NULL Both
Retrieve RollupField NULL Both
Retrieve SalesLiterature NULL Both
Retrieve SalesLiteratureItem NULL Both
Retrieve SalesOrder NULL Both
Retrieve SalesOrderDetail NULL Both
Retrieve SavedQuery NULL Both
Retrieve SavedQueryVisualization NULL Both
Retrieve Service NULL Both
Retrieve ServiceAppointment NULL Both
Retrieve SharePointDocumentLocation NULL Both
Retrieve SharePointSite NULL Both
Retrieve Site NULL Both
Retrieve Solution NULL Both
Retrieve SolutionComponent NULL Both
Retrieve Subject NULL Both
Retrieve Task NULL Both
Retrieve Team NULL Both
Retrieve Template NULL Both
Retrieve Territory NULL Both
Retrieve UoM NULL Both
Retrieve UoMSchedule NULL Both
Retrieve UserForm NULL Both
Retrieve UserQuery NULL Both
Retrieve UserQueryVisualization NULL Both
Retrieve WebResource NULL Both
RetrieveExchangeRate TransactionCurrency NULL Both
RetrieveFilteredForms SystemForm NULL Both
RetrieveMultiple Account NULL Both
RetrieveMultiple AccountLeads NULL Both
RetrieveMultiple ActivityMimeAttachment NULL Both
RetrieveMultiple ActivityParty NULL Both
RetrieveMultiple ActivityPointer NULL Both
RetrieveMultiple Annotation NULL Both
RetrieveMultiple ApplicationFile NULL Both
RetrieveMultiple Appointment NULL Both
RetrieveMultiple Attachment NULL Both
RetrieveMultiple BusinessUnitMap NULL Both
RetrieveMultiple BusinessUnitNewsArticle NULL Both
RetrieveMultiple Calendar NULL Both
RetrieveMultiple Campaign NULL Both
RetrieveMultiple CampaignActivity NULL Both
RetrieveMultiple CampaignActivityItem NULL Both
RetrieveMultiple CampaignItem NULL Both
RetrieveMultiple CampaignResponse NULL Both
RetrieveMultiple ClientUpdate NULL Both
RetrieveMultiple Commitment NULL Both
RetrieveMultiple Competitor NULL Both
RetrieveMultiple CompetitorAddress NULL Both
RetrieveMultiple CompetitorProduct NULL Both
RetrieveMultiple CompetitorSalesLiterature NULL Both
RetrieveMultiple Connection NULL Both
RetrieveMultiple ConnectionRole NULL Both
RetrieveMultiple ConnectionRoleAssociation NULL Both
RetrieveMultiple ConnectionRoleObjectTypeCode NULL Both
RetrieveMultiple Contact NULL Both
RetrieveMultiple ContactInvoices NULL Both
RetrieveMultiple ContactLeads NULL Both
RetrieveMultiple ContactOrders NULL Both
RetrieveMultiple ContactQuotes NULL Both
RetrieveMultiple Contract NULL Both
RetrieveMultiple ContractDetail NULL Both
RetrieveMultiple ContractTemplate NULL Both
RetrieveMultiple CustomerAddress NULL Both
RetrieveMultiple CustomerOpportunityRole NULL Both
RetrieveMultiple CustomerRelationship NULL Both
RetrieveMultiple Dependency NULL Both
RetrieveMultiple DependencyNode NULL Both
RetrieveMultiple Discount NULL Both
RetrieveMultiple DiscountType NULL Both
RetrieveMultiple DisplayStringMap NULL Both
RetrieveMultiple DocumentIndex NULL Both
RetrieveMultiple Email NULL Both
RetrieveMultiple EmailHash NULL Both
RetrieveMultiple EmailSearch NULL Both
RetrieveMultiple Equipment NULL Both
RetrieveMultiple ExchangeSyncIdMapping NULL Both
RetrieveMultiple Fax NULL Both
RetrieveMultiple FilterTemplate NULL Both
RetrieveMultiple Goal NULL Both
RetrieveMultiple GoalRollupQuery NULL Both
RetrieveMultiple Incident NULL Both
RetrieveMultiple IncidentResolution NULL Both
RetrieveMultiple InternalAddress NULL Both
RetrieveMultiple InterProcessLock NULL Both
RetrieveMultiple InvalidDependency NULL Both
RetrieveMultiple Invoice NULL Both
RetrieveMultiple InvoiceDetail NULL Both
RetrieveMultiple KbArticle NULL Both
RetrieveMultiple KbArticleComment NULL Both
RetrieveMultiple KbArticleTemplate NULL Both
RetrieveMultiple Lead NULL Both
RetrieveMultiple LeadAddress NULL Both
RetrieveMultiple LeadCompetitors NULL Both
RetrieveMultiple LeadProduct NULL Both
RetrieveMultiple Letter NULL Both
RetrieveMultiple License NULL Both
RetrieveMultiple List NULL Both
RetrieveMultiple ListMember NULL Both
RetrieveMultiple Metric NULL Both
RetrieveMultiple msdyn_PostAlbum NULL Both
RetrieveMultiple msdyn_PostConfig NULL Both
RetrieveMultiple msdyn_PostRuleConfig NULL Both
RetrieveMultiple msdyn_wallsavedquery NULL Both
RetrieveMultiple msdyn_wallsavedqueryusersettings NULL Both
RetrieveMultiple Notification NULL Both
RetrieveMultiple Opportunity NULL Both
RetrieveMultiple OpportunityClose NULL Both
RetrieveMultiple OpportunityCompetitors NULL Both
RetrieveMultiple OpportunityProduct NULL Both
RetrieveMultiple OrderClose NULL Both
RetrieveMultiple OrganizationStatistic NULL Both
RetrieveMultiple Owner NULL Both
RetrieveMultiple PhoneCall NULL Both
RetrieveMultiple Post NULL Both
RetrieveMultiple PostComment NULL Both
RetrieveMultiple PostFollow NULL Both
RetrieveMultiple PostLike NULL Both
RetrieveMultiple PriceLevel NULL Both
RetrieveMultiple PrincipalObjectAccess NULL Both
RetrieveMultiple PrivilegeObjectTypeCodes NULL Both
RetrieveMultiple ProcessSession NULL Both
RetrieveMultiple Product NULL Both
RetrieveMultiple ProductAssociation NULL Both
RetrieveMultiple ProductPriceLevel NULL Both
RetrieveMultiple ProductSalesLiterature NULL Both
RetrieveMultiple ProductSubstitute NULL Both
RetrieveMultiple Publisher NULL Both
RetrieveMultiple PublisherAddress NULL Both
RetrieveMultiple Queue NULL Both
RetrieveMultiple Quote NULL Both
RetrieveMultiple QuoteClose NULL Both
RetrieveMultiple QuoteDetail NULL Both
RetrieveMultiple RecurrenceRule NULL Both
RetrieveMultiple RecurringAppointmentMaster NULL Both
RetrieveMultiple ResourceGroupExpansion NULL Both
RetrieveMultiple RolePrivileges NULL Both
RetrieveMultiple RoleTemplate NULL Both
RetrieveMultiple RoleTemplatePrivileges NULL Both
RetrieveMultiple RollupField NULL Both
RetrieveMultiple SalesLiterature NULL Both
RetrieveMultiple SalesLiteratureItem NULL Both
RetrieveMultiple SalesOrder NULL Both
RetrieveMultiple SalesOrderDetail NULL Both
RetrieveMultiple SalesProcessInstance NULL Both
RetrieveMultiple SavedQuery NULL Both
RetrieveMultiple SavedQueryVisualization NULL Both
RetrieveMultiple Service NULL Both
RetrieveMultiple ServiceAppointment NULL Both
RetrieveMultiple ServiceContractContacts NULL Both
RetrieveMultiple SharePointDocumentLocation NULL Both
RetrieveMultiple SharePointSite NULL Both
RetrieveMultiple Site NULL Both
RetrieveMultiple Solution NULL Both
RetrieveMultiple SolutionComponent NULL Both
RetrieveMultiple StatusMap NULL Both
RetrieveMultiple StringMap NULL Both
RetrieveMultiple Subject NULL Both
RetrieveMultiple SystemUserBusinessUnitEntityMap NULL Both
RetrieveMultiple SystemUserLicenses NULL Both
RetrieveMultiple SystemUserPrincipals NULL Both
RetrieveMultiple SystemUserProfiles NULL Both
RetrieveMultiple SystemUserRoles NULL Both
RetrieveMultiple