Windows Server 2012 - Aynı Kullanıcı ile Birden Fazla Oturum Açma ( Restrict each user to a single session in Server 2012 )

İlk olarak Yerel Grup İlkesi Düzenleyicisi penceresini açalım . Bunun için Çalıştır penceresine gpedit.msc yazıp Tamam butonuna basalım.




Sol panelden Bilgisayar Yapılandırılması altından Yönetim Şablonları nı genişletelim.

Yönetim Şablonları altından Windows Bileşenleri ni genişletelim.

Windows Bileşenleri altından Uzak Masaüstü Bağlantıları nı genişletelim.

Uzak Masaüstü Bağlantıları altından Uzak Masaüstü Oturumu Ana Bilgisayarı nı genişletelim.


 Uzak Masaüstü Oturumu Ana Bilgisayarı altından Bağlantılar a tıklayalım.Ve sağ taraftaki panelden  Uzak Masaüstü Hizmetleri kullanıcılarını bir Uzak Masaüstü Hizmetleri oturumuyla sınırla ayarına çift tıklayalım.

Açılan pencereden Devre Dışı Bırakıldı alanını seçelim.Ve Uygula butonuna tıklayalım.

Uygulama işlemi tamamlandıktan sonra Tamam butonuna basarak işlemleri tamamlayıp açılan pencereyi kapatalım.

Daha sonra aynı kullanıcı ile iki kere bağlanmayı deneyelim.


CRM 2011 - Auditing

Enabling Auditing


CRM 2011 de Autiding kullanılmaya başlamadan önce system ayarlarından Auditing enable edilmelidir.



Daha sonra hangi entiti için Autiding kullanılacaksa o entitinin ayarlarından Autiding aktif hale getirilmelidir.






Audit Security



  • View Audit History –  allows Audit History to be viewed within the context of a record
  • View Audit Summary – allows the Audit Summary View of all audit records to be viewed from Settings -> Auditing
  • View Audit Partitions – allows the Audit Log Management area to be viewed from Settings -> Auditing
  • Delete Audit Partitions – allows audit log partitions to be deleted from the Audit Log Management area

Non-Audited Information


  • Excel dışarı alımlarda
  • Kayıt görüntülemede
  • Kullanıcıarın log-off olduğu durumlarda
  • Rapor üretildiğinde
  • Workflow çalıştığında
  • Workflow ve Dialog  adımlarındaki değişikliklerde

Auditing Best Practices


Data import boyunca auditing disable olur.
Sadece önemli olan bilgileri auditleyin.
Eski denetim logları periyodik olarak silinir.


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





CRM Releases and Updates

Aşağıdaki makalede Dynamics Microsoft CRM in Service Pack ve Update Rollup ları hakkında bilgi edinebilirsiniz.


CRM Releases and Updates


CRM REST Builder 2.3.0.0 Now with Web API

Yenilikler ve Değişiklikler

Web API Desteği (2016+)
  • Create, Retrieve, Retrieve Multiple, Update, Delete, Associate, Disassociate, & Execute Predefined Queries by Id and FetchXML Kullanımı
  • Impersonation, change detection, & count
  • XMLHTTP & jQuery

2011 Değişiklikleri

  • Birçok bug fixlendi.
  •  N:N relationships desteği sağlandı.

Genel

  • Kütüphane güncellemeleri
  • Endpointi desteklemeyen attribute ve entitiler kaldırıldı
  • select & copy
  • Özel karakter sorunu çözümlenmesi
  • Kullanılabilirlik geliştirildi.


CodePlex üzerinden CRM versiyonunuza göre solutionı indirebilirsiniz.

2011 & 2013 
https://crmrestbuilder.codeplex.com/releases/view/619461

2015 & 2016
https://crmrestbuilder.codeplex.com/releases/view/619460


CRM 2011 de Kullanımı

Managed solutionımızı indirip CRM e import edelim.

Settings - Solutions - Import dedikten sonra bilgisayarımıza indirdiğimiz solutionı seçelim ve Next diyelim.


 Solution Information sayfasında Next butonuna tıklayalım.

 Importing Solution sayfasında solutionımız CRM e yüklenmektedir . Bu arada biraz beklemelisiniz.
Daha sonra kurulum başarılı bir şekilde tamamlandıysa aşağıdaki ekran görüntüsü gelecktir.Close butonuna basalım.

Import ettiğimiz solutionımızı Solutions lar bölümden açalım.

Açılması  biraz zaman alacaktır


Öncelikle gelen ekran hakkında bilgi vereyim.

CRM 2011 WebAPI desteği vermediğinden Web API butonu disable gelmiştir.
Ekran üzerinden gerekli işlemleri yaptıktan sonra CreateRequest butnuna bastığımızda bize çalışacak metotun kodunu vermektedir.


CreateRequest ekranına Copy Code butonu sayesinde kodları kopyalayabiliyoruz.
Excecute Code butnuna tıkladığımızda seçimimizi çalıştırır ve sonuç ekranını bize gösterir.
Ben örneğimde Account entitisi üzerinde Retrieve işlemi yaptım.Sonuç olarak Account bilgilerini getirdi.


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

CRM 2011 Javascript Library


CRM 2011 Plugin - Değişken Paylaşımı ( Shared Variables )

Bazen plugin yazımında pre deki değişkeni postta kullanmak isteriz. Bazen de başka bir plugin üzerindeki değişkeni kullanmak isteriz. Bunun için CRM in context i üzrindeki SharedVariables özelliğini kullanıyoruz.

Aynı entiti üzerinde çalışan pluginler için örnek kod yazımı

using System;
using Microsoft.Xrm.Sdk;

namespace Microsoft.Crm.Sdk.Samples
{
    /// <summary>
    /// A plug-in that sends data to another plug-in through the SharedVariables
    /// property of IPluginExecutionContext.
    /// </summary>
    /// <remarks>Register the PreEventPlugin for a pre-event and the
    /// PostEventPlugin plug-in on a post-event.
    /// </remarks>
    public class PreEventPlugin : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            // Obtain the execution context from the service provider.
            Microsoft.Xrm.Sdk.IPluginExecutionContext context = (Microsoft.Xrm.Sdk.IPluginExecutionContext)
                serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));

            // Create or retrieve some data that will be needed by the post event
            // plug-in. You could run a query, create an entity, or perform a calculation.
            //In this sample, the data to be passed to the post plug-in is
            // represented by a GUID.
            Guid contact = new Guid("{74882D5C-381A-4863-A5B9-B8604615C2D0}");

            // Pass the data to the post event plug-in in an execution context shared
            // variable named PrimaryContact.
            context.SharedVariables.Add("PrimaryContact", (Object)contact.ToString());
        }
    }

    public class PostEventPlugin : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            // Obtain the execution context from the service provider.
            Microsoft.Xrm.Sdk.IPluginExecutionContext context = (Microsoft.Xrm.Sdk.IPluginExecutionContext)
                serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));

            // Obtain the contact from the execution context shared variables.
            if (context.SharedVariables.Contains("PrimaryContact"))
            {
                Guid contact =
                    new Guid((string)context.SharedVariables["PrimaryContact"]);

                // Do something with the contact.
            }
        }
    }
}


İki farklı entiti üzerinde çalışan plugin için ;

context.ParentContext.SharedVariables["PrimaryContact"] şeklinde değerleri alabilirsiniz.

CRM Versiyon Alma ( Retrieve the current CRM version)

 public enum CRMVersion
    {
        Unknown,
        CRM2011,
        CRM2011UR12PLUS,
        CRM2013,
        CRM2013SP1,
        CRM2015
    }

 public CRMVersion GetCRMVersion(IOrganizationService service)
        {
            RetrieveVersionRequest versionRequest = new RetrieveVersionRequest();
            RetrieveVersionResponse versionResponse = (RetrieveVersionResponse)service.Execute(versionRequest);

            string version = versionResponse.Version;
            if (version.StartsWith("5"))
            {
                try
                {
                    int buildNumber = Convert.ToInt32(version.Substring(version.LastIndexOf(".") + 1));
                    if (buildNumber > 3000) { return CRMVersion.CRM2011UR12PLUS; }
                }
                catch { }
                return CRMVersion.CRM2011;
            }
            if (version.StartsWith("6.0")) { return CRMVersion.CRM2013; }
            if (version.StartsWith("6.1")) { return CRMVersion.CRM2013SP1; }
            if (version.StartsWith("7")) { return CRMVersion.CRM2015; }
            return CRMVersion.Unknown;
        }

CRM 2011 - Entity Type Codes

Aşağıdaki SQL sorgu sayesinde CRM deki entitilerin type code larını alabilirsiniz.

select * from EntityView 
order by ObjectTypeCode

Microsoft CRM  sisteminin entitiyleri için 10000 nin altındaki değerler rezerve edilmiştir.
Custom entitilerin değerleri 10000 e eşit yada daha fazladır.

Not : Custom entitilerin object type code değerleri başka bir CRM e import edildiğinde değişiklik gösterebilir , iki sistemde de aynı olacak diye bir garantisi yoktur.

Microsoft CRM Entitilerinin object type code ları aşağıdaki listededir.

Account 1
Contact 2
Opportunity 3
Lead 4
Annotation 5
BusinessUnitMap 6
Owner 7
SystemUser 8
Team 9
BusinessUnit 10
PrincipalObjectAccess 11
RolePrivileges 12
SystemUserLicenses 13
SystemUserPrincipals 14
SystemUserRoles 15
AccountLeads 16
ContactInvoices 17
ContactQuotes 18
ContactOrders 19
ServiceContractContacts 20
ProductSalesLiterature 21
ContactLeads 22
TeamMembership 23
LeadCompetitors 24
OpportunityCompetitors 25
CompetitorSalesLiterature 26
LeadProduct 27
RoleTemplatePrivileges 28
Subscription 29
FilterTemplate 30
PrivilegeObjectTypeCodes 31
SalesProcessInstance 32
SubscriptionSyncInfo 33
SubscriptionTrackingDeletedObject 35
ClientUpdate 36
SubscriptionManuallyTrackedObject 37
TeamRoles 40
PrincipalEntityMap 41
SystemUserBusinessUnitEntityMap 42
PrincipalAttributeAccessMap 43
PrincipalObjectAttributeAccess 44
PrincipalObjectAccessReadSnapshot 90
RecordCountSnapshot 91
Incident 112
Competitor 123
DocumentIndex 126
KbArticle 127
Subject 129
BusinessUnitNewsArticle 132
ActivityParty 135
UserSettings 150
ActivityMimeAttachment 1001
Attachment 1002
InternalAddress 1003
CompetitorAddress 1004
CompetitorProduct 1006
Contract 1010
ContractDetail 1011
Discount 1013
KbArticleTemplate 1016
LeadAddress 1017
Organization 1019
OrganizationUI 1021
PriceLevel 1022
Privilege 1023
Product 1024
ProductAssociation 1025
ProductPriceLevel 1026
ProductSubstitute 1028
SystemForm 1030
UserForm 1031
Role 1036
RoleTemplate 1037
SalesLiterature 1038
SavedQuery 1039
StringMap 1043
UoM 1055
UoMSchedule 1056
SalesLiteratureItem 1070
CustomerAddress 1071
SubscriptionClients 1072
StatusMap 1075
DiscountType 1080
KbArticleComment 1082
OpportunityProduct 1083
Quote 1084
QuoteDetail 1085
UserFiscalCalendar 1086
SalesOrder 1088
SalesOrderDetail 1089
Invoice 1090
InvoiceDetail 1091
SavedQueryVisualization 1111
UserQueryVisualization 1112
RibbonTabToCommandMap 1113
RibbonContextGroup 1115
RibbonCommand 1116
RibbonRule 1117
RibbonCustomization 1120
RibbonDiff 1130
ReplicationBacklog 1140
FieldSecurityProfile 1200
FieldPermission 1201
SystemUserProfiles 1202
TeamProfiles 1203
AnnualFiscalCalendar 2000
SemiAnnualFiscalCalendar 2001
QuarterlyFiscalCalendar 2002
MonthlyFiscalCalendar 2003
FixedMonthlyFiscalCalendar 2004
Template 2010
ContractTemplate 2011
UnresolvedAddress 2012
Territory 2013
Queue 2020
License 2027
QueueItem 2029
UserEntityUISettings 2500
UserEntityInstanceData 2501
IntegrationStatus 3000
ConnectionRole 3231
ConnectionRoleAssociation 3232
ConnectionRoleObjectTypeCode 3233
Connection 3234
Equipment 4000
Service 4001
Resource 4002
Calendar 4003
CalendarRule 4004
ResourceGroup 4005
ResourceSpec 4006
ConstraintBasedGroup 4007
Site 4009
ResourceGroupExpansion 4010
InterProcessLock 4011
EmailHash 4023
DisplayStringMap 4101
DisplayString 4102
Notification 4110
ActivityPointer 4200
Appointment 4201
Email 4202
Fax 4204
IncidentResolution 4206
Letter 4207
OpportunityClose 4208
OrderClose 4209
PhoneCall 4210
QuoteClose 4211
Task 4212
ServiceAppointment 4214
Commitment 4215
UserQuery 4230
RecurrenceRule 4250
RecurringAppointmentMaster 4251
EmailSearch 4299
List 4300
ListMember 4301
Campaign 4400
CampaignResponse 4401
CampaignActivity 4402
CampaignItem 4403
CampaignActivityItem 4404
BulkOperationLog 4405
BulkOperation 4406
Import 4410
ImportMap 4411
ImportFile 4412
ImportData 4413
DuplicateRule 4414
DuplicateRecord 4415
DuplicateRuleCondition 4416
ColumnMapping 4417
PickListMapping 4418
LookUpMapping 4419
OwnerMapping 4420
ImportLog 4423
BulkDeleteOperation 4424
BulkDeleteFailure 4425
TransformationMapping 4426
TransformationParameterMapping 4427
ImportEntityMapping 4428
RelationshipRole 4500
RelationshipRoleMap 4501
CustomerRelationship 4502
CustomerOpportunityRole 4503
Audit 4567
EntityMap 4600
AttributeMap 4601
PluginType 4602
PluginTypeStatistic 4603
PluginAssembly 4605
SdkMessage 4606
SdkMessageFilter 4607
SdkMessageProcessingStep 4608
SdkMessageRequest 4609
SdkMessageResponse 4610
SdkMessageResponseField 4611
SdkMessagePair 4613
SdkMessageRequestField 4614
SdkMessageProcessingStepImage 4615
SdkMessageProcessingStepSecureConfig 4616
ServiceEndpoint 4618
AsyncOperation 4700
WorkflowWaitSubscription 4702
Workflow 4703
WorkflowDependency 4704
IsvConfig 4705
WorkflowLog 4706
ApplicationFile 4707
OrganizationStatistic 4708
SiteMap 4709
ProcessSession 4710
WebWizard 4800
WizardPage 4802
WizardAccessPrivilege 4803
TimeZoneDefinition 4810
TimeZoneRule 4811
TimeZoneLocalizedName 4812
Solution 7100
Publisher 7101
PublisherAddress 7102
SolutionComponent 7103
Dependency 7105
DependencyNode 7106
InvalidDependency 7107
Post 8000
PostRole 8001
PostRegarding 8002
PostFollow 8003
PostComment 8005
PostLike 8006
Report 9100
ReportEntity 9101
ReportCategory 9102
ReportVisibility 9103
ReportLink 9104
TransactionCurrency 9105
MailMergeTemplate 9106
ImportJob 9107
WebResource 9333
SharePointSite 9502
SharePointDocumentLocation 9508
Goal 9600
GoalRollupQuery 9602
Metric 9603
RollupField 9604
ComplexControl 9650

CRM 2011 Javascript - OptionSet Kullanımı


if (typeof (opt) == "undefined") { opt = {}; }

opt.getValues = function (fieldName) {
    var values = [];
    var attribute = Xrm.Page.getAttribute(fieldName);
    if (attribute != null && attribute.getAttributeType() == "optionset") {
        var options = attribute.getOptions();
        for (var i in options) {
            if (options[i].value != "null") values.push(options[i].value * 1);
        }
    }
    return values;
};

opt.getLabels = function (fieldName) {
    var labels = [];
    var attribute = Xrm.Page.getAttribute(fieldName);
    if (attribute != null && attribute.getAttributeType() == "optionset") {
        var options = attribute.getOptions();
        for (var i in options) {
            if (options[i].value != "null") labels.push(options[i].text);
        }
    }
    return labels;
};

opt.getLabel = function (fieldName, value) {
    var label = "";
    var attribute = Xrm.Page.getAttribute(fieldName);
    if (attribute != null && attribute.getAttributeType() == "optionset") {
        var option = attribute.getOption(value);
        if (option != null) label = option.text;
    }
    return label;
};

opt.getValue = function (fieldName, label) {
    if (label == "") return null;
    var value = null;
    var attribute = Xrm.Page.getAttribute(fieldName);
    if (attribute != null && attribute.getAttributeType() == "optionset") {
        var options = attribute.getOptions();
        for (var i in options) {
            if (options[i].text == label) return options[i].value * 1;
        }
    }
    return value;
};


Kullanimi

opt.GetValues(fieldName)
opt.GetLabels(fieldName)
opt.GetLabel(fieldName, value)
opt.GetValue(fieldName, label)

Favicon Kullanımı

Favicon Nedir?

Favicon terimi İngilizce “Favorites Icon”dan kısaltılmıştır.
Bu favicon dosyası siteniz ziyaret edildiğinde adres satırında belireceği gibi adresiniz sık kullanılanlara eklendiğinde de site adınızın baş kısmında görünecektir.
Faviconlar özellikle siteyi sık kullanılanlara eklediğinizde listede kolayca bulunmasını sağlar.
Yani bir anlamda o site için simgedir, bayraktır. Site simgesi ifadesi de favicon terimin Türkçedeki karşılığı olmaktadır.

Favicon dosyası 16×16 piksel boyutlarında .ico uzantılı bir grafik dosyasıdır.
Modern web tarayıcıları artık .gif ve .png uzantılı dosyaları da favicon olarak gösterebilmektedirler. Fakat genel olarak .ico uzantılı dosyalar favicon olarak kullanılmaktadır.

Peki oluşturduğunuz favicon’u nasıl kullanacaksınız ?
Çok basit. Favicon kullanmak istediğiniz sayfanın <head> </head> tagları arasına aşağıdaki kodu eklemelisiniz. Koddaki href kısmı favicon.ico resminizin yerini belirler. Mesela aşağıdaki html kodunda favicon.ico dosyası ana (kök) dizinde bulunmaktadır.
<link rel="shortcut icon" href="favicon.ico">

Örnek:
<head runat="server">
    <title>Gökhan Menteşe Blog</title>
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
</head>

Favicon Kullanmak Size Ne Sağlar?

Favicon kullanırsanız ziyaretçileriniz sitenizi sık kullanılanlara eklediğinde site adınızın hemen önünde favori ikonunuz yer alacaktır. Böylelikle sitenizin kolayca bulunabilmesini sağlayacaktır.
Arama motorları sitenizi indekslerken yada web tarayıcıları sitenizi ziyaretçilere gösterken favicon.ico dosyasına erişmeye çalışırlar, bu dosya yoksa sunucu hata dosyasına dosyanın bulunmadığını belirten bir satır ekler. Siteniz çok hit alan bir site ise bu zamanla log dosyalarınızın çok fazla büyümesine ve sunucunuzun yavaşlamasına yol açar.
Ziyaretçi sitenizin kısa yolunu masaüstüne oluşturursa, kısa yol simgesi favicon resmi ile siteniz ayıredici bir şekilde masaüstünde yer alacaktır.
Genellikle site tasarımı ile aynı stile sahip olan, 16×16 ve 32×32 piksel büyüklüğündeki faviconlar sitenin tasarımının, dolayısıyla renk ve genel stilinin ziyaretçinin zihninde kalmasına yardımcı olmakta, ziyaretçinin beyninde küçük de olsa yer edinmektedirler. Dolayısı ile sitenizi bu küçük favicon ile artık tanıyor olmaktalar.
Favicon, sitenizin markalaşmasına katkı sağlar.
Favicon, amatör veya profesyonel tüm web sitelerinde kullanılmalıdır.
Favicon, küçük bir dosyadır ve genellikle pek önemsenmez fakat katkısı azımsanmayacak kadar büyüktür.

Favicon oluşturmak için kullanabileceğiniz siteler: