12 Eylül 2014 Cuma

Entity Name and Type Code Reference

Entity name Value
unknown 0
Account 1
AccountLeads 16
ActivityMimeAttachment 1001
ActivityParty 135
ActivityPartyRollupByAccount 4603
ActivityPartyRollupByContact 4604
ActivityPointer 4200
Annotation 5
AnnualFiscalCalendar 2000
Appointment 4201
AttributeMap 4601
BulkImport 4407
BulkOperation 4406
BulkOperationLog 4405
BusinessUnit 10
BusinessUnitMap 6
BusinessUnitNewsArticle 132
Calendar 4003
CalendarRule 4004
Campaign 4400
CampaignActivity 4402
CampaignActivityItem 4404
CampaignItem 4403
CampaignResponse 4401
Commitment 4215
Competitor 123
CompetitorAddress 1004
CompetitorProduct 1006
CompetitorSalesLiterature 26
ConstraintBasedGroup 4007
Contact 2
ContactInvoices 17
ContactLeads 22
ContactOrders 19
ContactQuotes 18
Contract 1010
ContractDetail 1011
ContractTemplate 2011
CustomerAddress 1071
CustomerOpportunityRole 4503
CustomerRelationship 4502
Discount 1013
DiscountType 1080
DocumentIndex 126
Email 4202
EntityMap 4600
Equipment 4000
Fax 4204
FilterTemplate 30
FixedMonthlyFiscalCalendar 2004
ImportConfig 4408
Incident 112
IncidentResolution 4206
IntegrationStatus 3000
InternalAddress 1003
Invoice 1090
InvoiceDetail 1091
KbArticle 127
KbArticleComment 1082
KbArticleTemplate 1016
Lead 4
LeadAddress 1017
LeadCompetitors 24
LeadProduct 27
Letter 4207
License 2027
List 4300
ListMember 4301
MonthlyFiscalCalendar 2003
Opportunity 3
OpportunityClose 4208
OpportunityCompetitors 25
OpportunityProduct 1083
OrderClose 4209
Organization 1019
OrganizationMap 7
OrganizationUI 1021
PhoneCall 4210
PluginType 4602
PriceLevel 1022
PrincipalObjectAccess 11
Privilege 1023
PrivilegeObjectTypeCodes 31
Product 1024
ProductAssociation 1025
ProductPriceLevel 1026
ProductSalesLiterature 21
ProductSubstitute 1028
QuarterlyFiscalCalendar 2002
Queue 2020
QueueItem 2029
Quote 1084
QuoteClose 4211
QuoteDetail 1085
RelationshipRole 4500
RelationshipRoleMap 4501
Resource 4002
ResourceGroup 4005
ResourceSpec 4006
Role 1036
RolePrivileges 12
RoleTemplate 1037
RoleTemplatePrivileges 28
SalesLiterature 1038
SalesLiteratureItem 1070
SalesOrder 1088
SalesOrderDetail 1089
SavedQuery 1039
SemiAnnualFiscalCalendar 2001
Service 4001
ServiceAppointment 4214
ServiceContractContacts 20
Site 4009
StatusMap 1075
StringMap 1043
Subject 129
Subscription 29
SystemUser 8
SystemUserLicenses 13
SystemUserPrincipals 14
SystemUserRoles 15
Task 4212
Team 9
TeamMembership 23
Template 2010
Territory 2013
UnresolvedAddress 2012
UoM 1055
UoMSchedule 1056
UserFiscalCalendar 1086
UserQuery 4230
UserSettings 150
WFAction 1061
WFActionLog 1062
WFCondition 1064
WFEventLog 1065
WFEventQueue 1092
WFParameter 1066
WFProcess 121
WFProcessInstance 122
WFRule 1067
WFRuleLog 1068
WFStep 1069

3 Temmuz 2014 Perşembe

CRM 2011 Javascript - Form Disabled

function onLoad()
{
    disableFormFields(true);
}

function disableFormFields(onOff)
{
    Xrm.Page.ui.controls.forEach(function (control, index)
    {
        if (doesControlHaveAttribute(control))
        {
            control.setDisabled(onOff);
        }
    });
}

function doesControlHaveAttribute(control)
{
    var controlType = control.getControlType();
    return controlType != "iframe" && controlType != "webresource" && controlType != "subgrid";
}

26 Haziran 2014 Perşembe

CRM - Object address not found on party or party is marked as non-emailable

When you want to send an email using CRM, you may use direct method to send email or you may use SendEmailFromTemplateRequest. And sometimes you may get the error "Object address not found on party or party is marked as non-emailable". Once you debug and found the error, you will be differently know that either the email address of 'To' is blank or marked as 'No Email' or 'No Bulk Email'. But when if fields are set correctly, and if you get the same error, once shall we do?

Other than the To Address, you have to check the 'From' users email validity as well(which we usually forget to set), because if it is missing, you will get the same error 'Object address not found on party or party is marked as non-emailable'

And what will happen if the From field is blank? Then CRM conside From user as execution context user. (May be plugin executer in Plugin Context or executer in CRM Async Service for workflows or the credentials you used to communicate with CRM Service.) And if the email address of this user is missing, you will get the same error. "Object address not found on party or party is marked as non-emailable"

16 Haziran 2014 Pazartesi

CRM 2011 - 2013 - Eklenen Dosya için Maximum Boyut Tanımlama( Setting the Maximum File Size limits for attachments)

Crm üzerinde not eklerken bazen buyuk boyutlu dosya sectıgınızde hata alacaksınız.
(The attachment is too large)
CRM de dosya boyutu default  5.192 mb olarak gelmektedir.Biz bu sorunu ekleyecegimiz dosya byutundan fazla vererek hatayı gidermiş oluruz.

  1. Go to Settings -> Administration - Ayarlar
  2. Click on System Settings - Sistem Ayarları
  3. Click on E-mail tab -Email 
  4. Go to the bottom, on the section 'Set file size (in kilobytes)' - Ekler için dosya boyutu ekleme
  5. Replace current value with  "8,192" - 8192 (8 mb)









28 Mayıs 2014 Çarşamba

CRM 2011 - ParticipationTypeMask Değerleri

Activity party typeValueDescription
Sender- From
1
Specifies the sender.
ToRecipient - To
2
Specifies the recipient in the To field.
CCRecipient -CC
3
Specifies the recipient in the Cc field.
BccRecipient -BCC
4
Specifies the recipient in the Bcc field.
RequiredAttendee
5
Specifies a required attendee.
OptionalAttendee
6
Specifies an optional attendee.
Organizer
7
Specifies the activity organizer.
Regarding
8
Specifies the regarding item.
Owner
9
Specifies the activity owner.
Resource
10
Specifies a resource.
Customer
11
Specifies a customer.
Partner
12
Specifies a partner.

14 Nisan 2014 Pazartesi

CRM 2011 - Global OptionSet Değer Ekleme, Güncelleme, Silme ve Sıralama - C#

Yeni Seçenek Ekleme

Aşagıdaki örnek kod parcacıgı InsertOptionValueRequest classı kullanılarak global option sete nasıl yeni bir secenek eklenecegini gösterir.


Örnek Kullanım:

Secenek Texti Güncelleme

Aşagıdaki örnek kod parcacıgı UpdateOptionValueRequest classı kullanılarak global option setteki bir degerin textinin güncellenmesini gösterir.

Secenek Silme

Aşagıdaki örnek kod parcacıgı DeleteOptionValueRequest classı kullanılarak global option setteki bir degerin nasıl silinecegini gösterir.

Seçenek Sıralama

Aşagıdaki örnek kod parcacıgı OrderOptionRequest classı kullanılarak global option setteki degerlerin textine göre sıralanmasını saglar.

Option Set Retrieve





8 Nisan 2014 Salı

CRM 2011 - Opportunity Note Tabı Gizleme-(ODataQuery)

Opportunity altına eklenen bir not (annotation) varsa notes tabını görünür yapan ,eğer opportunity e ait daha önceden girilen bir not yoksa bu tabı gizleyen script aşagıdadır.

Burada sorgumuzu odataquery ile olusturduk.
ODataRetrieveMultipleAjax : Sorgu larımızı calıstıracagımız metot.

/*Gökhan Mentese-gkhnmnts@gmail.com*/
function NoteTabVisibleInOpportunity() {
    try {
        var entityid = GetEntityId();
        var formType = Xrm.Page.ui.getFormType();
        if (formType == 1) {
            Xrm.Page.ui.tabs.get("notetabopportunity").setVisible(false);
        }
        else {
            if (entityid != null) {
                var query = "AnnotationSet?$filter=ObjectId/Id eq guid'" + ConverttoStringFromGuid(entityid) + "'";
                var noteEntity = ODataRetrieveMultipleAjax(query);
                if (noteEntity != null && noteEntity.results != null && noteEntity.results.length != null && noteEntity.results.length != 0) {
                    Xrm.Page.ui.tabs.get("notetabopportunity").setVisible(true);
                }
                else {
                    Xrm.Page.ui.tabs.get("notetabopportunity").setVisible(false);
                }
            }
        }
    } catch (e) {
        alert("Function NoteTabVisibleInOpportunity() \n" +e.message);
    }
}

function ODataRetrieveMultipleAjax(oDataSelect) {
    var crmOrgSvc = GetCrmSvc();
    var result = null;

    oDataSelect = crmOrgSvc + oDataSelect;
    jQuery.support.cors = true;

    $.ajax({
        type: "GET",
        contentType: "application/json; charset=utf-8",
        datatype: "json",
        url: oDataSelect,
        async: false,
        beforeSend: function (XMLHttpRequest) {
            //Specifying this header ensures that the results will be returned as JSON.
            XMLHttpRequest.setRequestHeader("Accept", "application/json");
        },
        success: function (data, textStatus, XmlHttpRequest) {
            if (data != null && data.d != null) {
                result = data.d;
            }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert("Status: " + textStatus + "; ErrorThrown: " + errorThrown, "Error Function:" + "ODataRetrieveMultipleAjax");
        }
    });
    return result;
}

function GetCrmSvc() {
    //return GetClientUrl() + "/xrmservices/2011/OrganizationData.svc/";
    return Xrm.Page.context.prependOrgName("/xrmservices/2011/OrganizationData.svc/");
}
function GetEntityId() {
    return Xrm.Page.data.entity.getId();
}

CRM 2011 - Invalid Action - The selected action was not valid.

Kullanıcılar CRM'e erişirken "Invalid Action - The selected action was not valid." ya da türkçe kurulumlarda "Geçersiz Eylem - Seçilen eylem geçerli değil" şekline bir hata ile karşılaşmaktadır.

Bu rounla karşılaştığınızda ilk olarak yapılması gereken CRM Async Service'in çalıştığını teyit etmektir. Ancak bazen bu servis çalışmasına rağmen sorun devam edebilmektedir. Bu durumda loglara baktığımızda aşağıdaki gibi bir hata ile karşılaşırız:


Source: Current active key (KeyType : CrmWRPCTokenKey) is expired. This can indicate that a key is not being regenerated properly. Current Active Key : CrmKey(Id:e1a5b215-d01e-de11-9d16-0003ffd0167c, ScaleGroupId:00000000-0000-0000-0000-000000000000, KeyType:CrmWRPCTokenKey, Expired:True, ValidOn:04/01/2009 15:16:36, ExpiresOn:05/04/2009 15:16:36, CreatedOn:04/01/2009 15:16:36, CreatedBy:NT AUTHORITY\NETWORK SERVICE. Key Setting :



Bu durumda CRM klasöründe tools (C:\Program Files\Microsoft Dynamics CRM\Tools) altında bulunan WRPCKeyRenewal  aracı command line (cmd.exe) üzerinden /R  (Microsoft.Crm.Tools.WRPCKeyRenewal.exe /R) parametresi ile çalıştırılarak sorun çözülebilmektedir.

6 Şubat 2014 Perşembe

CRM 2011- Sub Gridde Seçili Eleman Bilgilerini Custom Sayfaya Yollama

Ben burada subgriddeki secili elemanları alıp custom sayfaya yollama işlemlerini ribbondaki bir butona tıklayınca gerceklestırecegım.Siz baska bir eventte de yapabilirsiniz.

Asagıdaki örnekte, subgridde secılı olan productların Id lerını custom sayfaya yollayıp burada bu secılenlere gore ıslem yapacagız.

Not:Custom sayfaya querystring yoluyla verileri aktaracagız.

CloseAsWonButtonOnClick : Butona tıklandıgında calısacak javascript fonksiyonu.
GetSelectedSubGridRow : Subgridden secili elemanları alan javascript fonksiyonu.
Default.aspx.cs  :Custom aspx sayfamızın kod tarafı

function CloseAsWonButtonOnClick() {
    var userId = Xrm.Page.context.getUserId();
    var entityid = Xrm.Page.data.entity.getId();
    var orgname = Xrm.Page.context.getOrgUniqueName();

    if (userId != null && entityid != null && orgname != null) {
        var url = null;

        var selectedRowsGuidId = GetSelectedSubGridRow('opportunityproductsGrid');
        if (selectedRowsGuidId != null) {
            if (selectedRowsGuidId.length == 0) {
                alert('You must select opportunity product.');
            }
            else{
                var selectedrow = "&selectedrow=" + selectedRowsGuidId.join("&selectedrow=");
                url = "http://deneme:1111/Modules/OpportunityEntity/WinOpportunity/Default.aspx?orgname=" + orgname.toUpperCase() + "&userid=" + userId.toString() + "&entityid=" + entityid.toString() + selectedrow;
            }
            else {
                alert("Only,you can copy one product");
            }

            if (url != null) {
                var features = 'height=500,width=500,left=300,top=150,resizable=yes,titlebar=no,resizable=no,scrollbars=no,toolbar=no,menubar=no,location=no,directories=no, status=no';
                window.open(url, 'OpportunityWonInterface', features);
            }
        }
    }
}

function GetSelectedSubGridRow(subGridName) {
    var array = new Array();
    var grid = document.getElementById(subGridName).control;
    for (var rowNo = 0; rowNo < grid.get_selectedRecords().length; rowNo++) {
        array[rowNo] = grid.get_selectedRecords()[rowNo].Id;
        /*        alert(grid.get_selectedRecords()[rowNo].Id);
        alert(grid.get_selectedRecords()[rowNo].Name);*/
    }

    if (array.length != 0) {
        return array;
    }
    else {
        return new Array();
    }
}


Default.aspx.cs
/**/
protected void Page_Load(object sender, EventArgs e) {
            if (!IsPostBack) {

                string selectedProductsID = Request.QueryString["selectedrow"];
                if (!string.IsNullOrEmpty(selectedProductsID)) {
                            ArrayList array = new ArrayList();
                            for (int indexLog = 0; indexLog < selectedProductsID.Split(',').Length; indexLog++) {
                                string id = selectedProductsID.Split(',')[indexLog];
                                array.Add(new Guid(id));
                            }
                            ViewState["selectrowid"] = array;
                        }
           }
}

Dynamics CRM Asynchronous Processing Service

Windows could not start the Microsoft Dynamics CRM Asynchronous Processing Service service on… (failed while monitoring asynchronous operations queue. Exception: System.NullReferenceException: Object reference not set to an instance of an object)


Hatanın Trace Logu

Hizmetler(Services) altında  Microsoft Asynchronous Processing Service i start ederken yukarıdaki hatayı alıyorsak ,asagıda verecegım ayarlara gore Asynchronous Service ayarlarını güncelleyin.

1.)Servisin özelliklerinden Recovery tabı altındakı ayarları asagıdakı gıbı güncelleyin.
2-)Network System yerine Local System Account seçimini deneyebilirsiniz.





22 Ocak 2014 Çarşamba

CRM 2011 - Plugin Debug Etme (Debugging Plugin)


  • Yazılan pluginde eksiklik yapıp yapmadıgınızı kontrol edin. Bakınız.
  • Plugin projemizi ReBuild edelim.
  • IIS e reset atalım.Command Prompt u acalım ve iisreset yazıp calıstıralım.
  • CRM Asynchronous Service leri restart edelim.


  • Projenın .pdp ve .dll dosyalarını Crm assembly klasorune tasıyalım.


       C:\\ProgramFiles\Microsoft Dynamics CRM\Server\bin\assembly

  • Plugin Registration Tool u acalım.Download CRM Sdk
  • Pluginimizi CRM e yukleyelim.Bir önceki yazımda nasıl yuklenecegını yazmıstım Bakınız
  • Yükleme işlemi tamamlandıktan sonra Visual Studio da projemizi acalım ve menuden Debug-Attach Process secelim.
 Eger senkron bir pluginse w3wp leri,



             Eger asenkron plugin veya custom workflow sa CRMAsyncService.exe attachleyelim.


  • Son olarak pluginimizi tetıklemek yeterli olacaktır.











CRM 2011 Error - Principal user is missing prvReadUserQuery privilege


Yeni bir rol actıgınızda ve kullanıcıya sadece bu rolu atadıgınızda kullanıcının CRM e girişlerinde yukarıda belirtilen hatayı verebilir.

Çünkü custom entitiler için view okuma yetkisi verilmemiştir.Yetkiyi verdikten sonra sorun kalkacaktır.