CRM 2011 Update Rollup 6 – Rollup Summary

I found on this post a very interesting thing: the list of all the currently released rollups for CRM 2011 (there’s also a list for CRM 4.0 for those interested). I reproduce the CRM 2011 list below. For more information about UR6, see that same post.

The post mentions the following important information:

If you did new installs with the Update Rollup 6 “slipstream” packages that were released (these would be the packages that include the full install bits as well as Update Rollup 6) you will get an error trying to patch those components to the new Update Rollup 6 build.  This Knowledge Base article describes the issue:
http://support.microsoft.com/kb/2668504 .

This Knowledge Base article is live, as well as the updated Update Rollup 6 KB article:
http://support.microsoft.com/kb/2600640.

The only workaround is to reinstall if you happened to use the Update Rollup 6 slipstream builds.  For server you can connect to existing databases on the reinstall.  The reinstall goes for any of the components that you installed with the Update Rollup 6 slipstream builds, (Client, Router, etc.).  If you do not reinstall you will not be able to patch to the re-released Update Rollup 6 packages or future Update Rollups, as Update Rollup 6 represents a new baseline.

What this means is that:

  • if you made a fresh install of CRM, that includes UR6, then you will need to reinstall everything.
  • if you installed the UR6 patch to an existing install, you should be able to install the UR6 on top of it without problem

 

CRM 2011 UR #

Release date and Download Center URL

Release date – Microsoft Update

Build number

Knowledge Base article

PFE Blog

PFE Podcast

1

4/4/2011

4/26/2011

5.0.9688.1045

2466084

Blog

Podcast

2

6/6/2011

6/28/2011

5.0.9688.1155, 5.0.9688.1157 (server)

2466086

Blog

Podcast

3

7/26/2011

8/23/2011

5.0.9688.1244

2547347

Blog

Podcast

4

9/22/2011

Will not be released to Microsoft Update

5.0.9688.1450

2556167

Blog

Podcast

5

10/25/2011

11/8/2011

5.0.9688.1533

2567454

Blog

Podcast

6

1/12/2012

1/24/2012

5.0.9690.1992

2600640

Blog

Podcast

7

3/8/2012 (PROJECTED)

3/27/2012 (PROJECTED)

5.0.9688.TBD

2600643

Blog

Podcast

CRM 2011 – Installing the Sharepoint List Component

It’s not completely straightforward.

First things to know about the CRM 2011 – Sharepoint 2010 integration:

A. You can’t install solutions on Sharepoint online, so integration here will only happen with basic Sharepoint UI. See this great blog post about it.

B. For Sharepoint on-premise, there are a few things to verify and a few actions to perform.

Here’s the summary of what needs to be done:

 

1. First, set permissive mode

2. Second, make sure that the “Microsoft SharePoint Foundation Sandboxed Code Service” is started

3. Third, install the Sharepoint list component

4. Fourth, configure CRM to connect to Sharepoint

 

 

    1. First, set permissive mode:

    • In Sharepoint central administration, under Application Management, click “Manage Web Applications
    • Then select the Sharepoint Web Application you want to integrate with CRM 2011 and click on “General Settings” :

 

    •  Scroll down to “Browser File Handling”, and select “Permissive”:

 

2. Second, make sure that the “Microsoft SharePoint Foundation Sandboxed Code Service” is started

Otherwise you might not be able to activate the list solution (you might get a grayed out Activate button)

  • At Central Administration home, Click on the link “Manage services on server”

 

  • Next, check the status of the service: if not started, click start

 

    3. Install the Sharepoint list component

  • Download it from here.
  • On your Sharepoint site, click “Site Actions”, “Site Settings”, and under “Galleries”, click “Solutions”

 

  • Click “Upload Solution”

 

  • Select the file “crmlistcomponent.wsp”

 

  • Activate the solution

  • The solution is now activated!

 

4. Configure CRM to connect to Sharepoint

  • Configure the “Document Management Settings”: select the entities for which you want to store documents, and indicate the Sharepoint site URL you want to use, and click next.

 

  • If you entered a valid URL, you will now have to choose the folder structure you want to use, either “based on entity” or not. Here is a good explanation. In a word, if the box is not checked (ie not based on entity), then for a contact “John Smith”, the structure will look like:
    • …/contact/John Smith/document01.xlsx
    • …/contact/John Smith/document02.xlsx
  • If based on an entity (you have to choose between account and contact), if you pick account, it means the whole structure is based on accounts. And so, if John Smith is a contact from the “Good company” account, while it changes nothing for the accounts, for contacts you will have:
    • …/account/Good Company/contact/John Smith/document01.xls
  • To end, the wizard presents you with the document library creation status. It should say for each selected entity “Succeeded”, or, if like me you like to do things multiple times for no reason, “Already exists”.

 

  • Click finish, open an account, click documents, and after a small warning message, the system will create the folder for that account in Sharepoint, and then display it as an iFrame on the account form! You now have access to Sharepoint from CRM, and can associate documents to specific accounts.

 

 

While all this works pretty well, there are still some limitations to the integration, in terms of security for example. Hopefully, these shortcomings will be addressed in future releases.

 

Optimizing and Maitaining the Peformance of a CRM 2011 Infrastructure – Part 2

Second part of the series: the Application tier.

Content:

  • 2.1 Optimizing and Maintaining Microsoft Windows Server
  • 2.2 Optimizing and Maintaining the Microsoft .NET Framework and Microsoft .NET Applications
  • 2.3 Optimizing and Maintaining Internet Information Services
  • 2.4 Optimizing the Performance of Microsoft Dynamics CRM Server 2011
  • 2.5 Optimizing Microsoft Dynamics CRM Reporting Services
  • 2.6 Optimizing Report Performance
  • 2.7 Best Practices for Optimizing Workflow

 

2. Optimizing and Maintaining the Application Tier

2.1 Optimizing and Maintaining Microsoft Windows Server

    • See the Performance Tuning Guidelines for Windows Server 2008 R2
    • Increasing the Ephemeral TCP Port Limit:
      • In some situations, you may want to reserve a range of ports so that a program or process that requests a random port will not be assigned a port that is in the reserved range. The ports in that range are called ephemeral ports. In rare cases there may be no free ephemeral ports available, which will cause the connection open to fail or time out.
      • To view the current range of ephemeral ports: netsh int <ipv4|ipv6> show dynamicport <tcp|udp>
      • To change the current range of ephemeral ports: netsh int <ipv4|ipv6> set dynamic <tcp|udp> start=number num=range
      • To increase the maximum number of ephemeral TCP ports: navigate to HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters.Create a registry entry by using the following information:
        Value Name: MaxUserPort
        Value Type: DWORD
        Value data: 65534
        Valid Range: 5000-65534 (decimal)
        Default: 0x1388 (5000 decimal)
        Description: Controls the maximum port number used when a program requests any available user port from the system. Typically, ephemeral (short-lived) ports are allocated between the values of 1024 and 5000, inclusive.
    • Monitoring the Performance of Microsoft Windows Server: Microsoft Windows Server provides performance counters that you can use to help identify potential performance bottlenecks associated with memory and the cache, processors (and multi-processor computers), physical disks, and the network infrastructure. Remember to monitor each disk and processor used by the operating system. Check the TechNet article Performance and Reliability Monitoring Step-by-Step Guide for Windows Server 2008.

 

2.2 Optimizing and Maintaining the Microsoft .NET Framework and Microsoft .NET Applications

      • Optimizing the Performance of the Microsoft .NET Framework: Configuring the .NET Framework for optimal performance involves tuning the common language runtime (CLR) and then, depending on the nature of any specific application, tuning the associated .NET Framework technology, for example ASP.NET-connected applications, Web services, Enterprise Services, and ADO.NET code. Consider the potential issues: (see here for more information)
Potential issue Description
Memory misuse Creating too many objects, or failing to properly release resources, pre-allocate memory, or explicitly force garbage collection can prevent the CLR from efficiently managing memory, which can lead to an increased working set size.
Resource cleanup Implementing finalizers unnecessarily, failing to suppress finalization in the Dispose method, or failing to release unmanaged resources can lead to unnecessary delays in reclaiming resources and can potentially create resource leaks.
Improper use of threads Creating threads on a per-request basis and not sharing threads using thread pools can cause performance and scalability bottlenecks for server applications.
Abusing shared resources Creating resources per request can lead to resource pressure, and failing to properly release shared resources can cause delays in reclaiming them.
Type conversions Implicit type conversions and mixing value and reference types leads to excessive boxing and unboxing operations.
Misuse of collections Each collection type in the .NET Framework class library is designed to meet specific storage and access requirements; they may not perform optimally outside of those requirements.
Inefficient loops Looping magnifies even the slightest coding inefficiency, and loops that access an object’s properties are a common culprit of performance bottlenecks, particularly if the object is remote or the property getter performs significant work.

 

2.3 Optimizing and Maintaining Internet Information Services

      • Optimizing the Performance of Internet Information Services: Optimizing the performance of Microsoft Internet Information Services (IIS) within a Microsoft Dynamics CRM 2011 implementation benefits not only the overall system, but also any custom applications, plug-ins, or add-ins that have been developed by using the Microsoft Dynamics CRM 2011 SDK.
      • Optimizing the Performance of Integrated Windows Authentication and Kerberos Authentication
        • In Internet Explorer, ensure that “Enable Integrated Windows Authentication” is set to enable use of Kerberos for integrated authentication.
        • There is a known issue where users are members of too many groups to be communicated in a UDP packet. It is possible to get Kerberos to use TCP rather than UDP, which enables larger packets of information.
        • To determine whether users are connecting via Kerberos, in the registry, enable Kerberos logging. If necessary, to help diagnose whether the user can obtain and use a Kerberos ticket, use applications such as Kerbtray
      • On IIS, tracing and debugging, while disabled by default, may cause performance issues if enabled.
      • Optimizing Microsoft .NET ThreadPool Settings: if each .aspx page makes a Web service call to a single IP address, it is recommended to adjust these parameters as shown in the following table.
Parameter Value
maxWorkerThreads 100
maxIoThreads 100
maxconnection 12*n (where n is the number of CPUs)
minFreeThreads 88*n
minLocalRequestFreeThreads 76*n
minWorkerThreads 50 (manually add this parameter and value to the file)
    • Monitoring the Performance of Internet Information Services: One of the key counters to monitor and measure against a baseline is the %Process Time for the inetinfo (IIS).

 

2.4 Optimizing the Performance of Microsoft Dynamics CRM Server 2011

      • Disable platform tracing
      • Verify that the computers meet the hardware and software requirements
      • Enhancing Performance by Distributing Server Roles on Multiple Servers
      • Throttling Client Synchronization Processes
      • Limiting the Number of Records Returned by Aggregate Queries
      • Applying RetrieveMultiple Query Optimizations for large data sets
      • Setting the Default View to a smaller view to limit the records that are displayed
      • Customizing Quick Find Views by Limiting Search Columns
      • Leveraging teams instead of an excessively complex business hierarchy because teams will provide better performance with a lower penalty for security checks
      • Use Field Level Security (FLS) wisely, since there is a performance impact associated with using FLS
      • When changing the order of records returned by a saved query, consider adding an index based on the new ordering to improve the performance of the query
      • Use an iterative process to determine which index best optimizes query performance
      • Disabling Auto-Complete on Lookups
      • To optimize the performance of queries on custom entities, ensure that all columns on the ORDER BY clause derive from a single table, and build an index that satisfies the ORDER BY requirements and as much of the query’s
      • A specific recommendation for any custom application is to limit any columns and rows retrieved to those required to achieve the application’s business goals.WHERE clause selection criteria as possible.

 

2.5 Optimizing Microsoft Dynamics CRM Reporting Services

  • Report processing and rendering are memory intensive operations, so ensure that the computer hosting the report server includes ample memory.
  • Host the report server and the report server database on separate computers rather than hosting both on a single high-end computer.
  • If all reports are processing slowly, consider a scale-out deployment with multiple report server instances. For best results, use load balancing software and hardware to distribute requests evenly across multiple report servers in the deployment. If load balancing is used, it is advisable to use client affinity to avoid loading the session cache in memory on multiple servers.
  • If a single report is processing slowly, tune the query if the report must run on demand. You might also consider caching the report or running it as a snapshot.
  • If all reports process slowly in a specific format (for example, while rendering to PDF), consider file share delivery, adding more memory, or using another format.

 

2.6 Optimizing Report Performance

  • Guidelines
    • Configure reports to display data from a specified time frame, for example the previous 90 days, rather than displaying all records in the Microsoft Dynamics CRM database.
    • Reports with a large dataset or a complex SQL query should not be available to all users on-demand. Instead, schedule a snapshot in Report Manager during a period when the system is lightly loaded.
    • Deploy reports through Microsoft Dynamics CRM, and then use Report Manager to run the reports and have the results posted at a scheduled time.
    • Reports should access the fewest datasets possible to meet business requirements.
    • When possible, use fetch based reports, which are much more efficient than SQL-based reports, to run against Filtered Views.
    • Consider using subreports. Show aggregated information in a report initially, and then use subreports for drilling down on aggregates to show non-aggregated values. Using this technique will prevent Report Server aggregations and improve performance.
    • Use explicit paging for reports that require bringing large amounts of data to the Reporting Services middle tier. Build reports so that they show only a page of the total records at one time and have explicit clickable links to bring in data for further pages. Although Report Viewer control shows paging control on reports, all the data needed for the full report has already been pulled from the middle tier.
  • Techniques
    • Use SQL “Group By”: This helps to prevent the computer running Microsoft SQL Server from being overtaxed with gathering, transmitting, and then processing large volumes of data. Instead, it uses the natural indexing and grouping ability of SQL Server to massively reduce this overhead.
    • Making Reports Pre-Filterable (CRMAF_)
    • Using Dynamic Excel or Filtered View Queries: make reports restrictive, verify that a non-clustered index exists on fields in the where clause
    • Throttling Resources used for Reports and Data Visualizations: If a query is sent for reporting purposes, it is tagged with MSCRMReportsGroup. If it is sent for data visualization, it is tagged with MSCRMVisualizationsGroup. See Managing SQL Server Workloads with Resource Governor.

2.7 Best Practices for Optimizing Workflow

  • Determine the appropriate security/permissions model for workflow.
  • Use the Scope property judiciously.
  • Review workflow logic carefully.
  • To improve performance in large deployments, scale out as necessary
  • Monitor the Microsoft Dynamics CRM 2011 database for excess workflow log records.

Optimizing and Maitaining the Peformance of a CRM 2011 Infrastructure – Part 1

This is a summary of this white paper, to use as a quick reference when necessary.
This summary will come in different parts. I’ll update this posts with links to the new posts as they come.

Part 1. Server-Side Techniques for Optimizing the Client Tier

1.1 Using Compression Techniques

    • Configuring HTTP Compression. Note: Compression of dynamic application responses can affect CPU resources because IIS does not cache compressed versions of dynamic output. So use it only on servers that have slow network connections but that have CPU time to spare. Note that caching compressed static responses does not consume CPU resources.
    • Using WAN Accelerator Hardware: To address latency issues, several vendors offer web-acceleration appliances that improve the performance of applications such as Microsoft Dynamics CRM, and using these devices can greatly improve Microsoft Dynamics CRM performance over the WAN. Using WAN accelerator hardware can help improve performance especially in on-premises scenarios with a geographically distributed deployment in which users are distributed around the world and performance for users in a specific location is not satisfactory.

1.2. Configuring Proxy Server Settings

    • Configuring Proxy Server Settings: For on-premises deployments of Microsoft Dynamics CRM 2011 within a local area network, client computers can achieve much higher throughput by completely bypassing the proxy server, as long as the fully qualified domain name of the Microsoft Dynamics CRM server is listed as an exception.

1.3 Reducing E-Mail Traffic by Modifying Outlook Rules:

    • For deployments with the E-mail router configured to use a forward mailbox strategy, when users only track Microsoft Dynamics CRM e-mails, then configure Outlook to forward only messages that include CRM: in the subject or body.


Extending Microsoft Dynamics CRM 2011

I just noticed that since December 29 2011, the long awaited exam MB2-876, also known as Extending Microsoft Dynamics CRM 2011, is available!

Click here to find more information about that exam.

Description of this exam:

This certification exam measures your ability to understand and articulate how to extend Microsoft Dynamics CRM 2011 including planning a Microsoft Dynamics CRM 2011 deployment, performing common and advanced platform operations, creating custom workflow activities, utilizing Windows Workflow Foundation, creating plug-ins, implementing and programming application events, customizing application integration, and implementing web resources.

Topics covered:

The following list includes the topic areas covered on this exam.
  • Planning to Deploy Microsoft Dynamics CRM
  • Performing Common Platform Operations
  • Performing Advanced Platform Operations
  • Creating Custom Workflow Activities and Utilizing Windows Workflow Foundation
  • Creating Plug-ins
  • Implementing Application Events
  • Programming Application Events
  • Customizing Application Integration
  • Implementing Web Resources

Good luck to everyone planning to take that exam!

 

Optimizing and Maintaining the Performance of CRM Clients

 

This is the title of a White Paper that was published by Microsoft and that is available for download here.

I’d like to summarize this white paper, as a quick reference for a future use.

1. In general

  • Use IE9
  • Set Power Settings to “High Performance” (under “Show additional plans”)
  • Turn off other non-critical applications
  • Disable other Outlook add-ins
  • Exclude CRM pages from AntiVirus scans
  • Ensure network’s latency is under 150 milliseconds
  • Limit the number of columns, grids and subgrids, records per page, controls on a form, controls on the ribbon, client side events
  • Limit the complexity of Javascript, plugins, dashboards
2. For Internet Explorer:
  • Increase the amount of hard disk space that is reserved for temporary Internet files (the closer to 250 MB, the better)
  • Increase the number of files that can be downloaded at one time to 10
    • For IE7 and before: HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionInternet Settings, new dword values: MaxConnectionsPer1_0Server to 10, and MaxConnectionsPerServer to 10
    • For IE8 and later:
      HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerMAINFeatureControlFEATURE_MAXCONNECTIONSPERSERVER
      new dword value: iexplore.exe, 10
    • This can also be done with group policy: under Local Group Policy, under User Configuration, navigate to: Administrative TemplatesWindows ComponentsInternet ExplorerSecurity FeaturesAJAX and specify the appropriate values for the Maximum number of connections per server (HTTP 1.0) and Maximum number of connections per server (HTTP 1.1)
  • Set ie zoom to 100%

3. For the Outlook Client:

  • Configure the Outlook filters to affect as few records as possible
  • Configure the synchronization process to occur as infrequently as possible
  • Modify the frequency of the background polling activities. The table below lists the registry keys associated with activity:
Registry Entry Unit of Measure Default Duration/Value Registry Subkey (in HKEY_CURRENT_USERSoftwareMicrosoft) Suggested Testing
NotificationPollInterval Msec 180000 (Decimal) MSCRMClient Increment to 3600000 (Decimal)
StateManagerPollInterval Min 5 (Decimal) MSCRMClient Increment to 10 (Decimal)
TagPollingPeriod Msec 300000 (Decimal) MSCRMClient{ORGGUID} Increment to 600000 (Decimal)
TagMaxAggressiveCycles Not Applicable 2 MSCRMClient{ORGGUID} Set to 0
ActiveCachesUpdatingPeriodMilliseconds Msec 1500000 (Decimal) MSCRMClient Increment to 3000000 (Decimal)
IncrementalDataCachesInclusionUpdatingPeriodMilliseconds Msec 300000 (Decimal) MSCRMClient Increment to 6000000 (Decimal)
IncrementalDataCachesExclusionUpdatingPeriodMilliseconds Msec 300000 (Decimal) MSCRMClient Increment to 6000000 (Decimal)
  • Optimize Address Book performance by configuring the Address Book to match only against the contacts that are synchronized to Microsoft Dynamics CRM and to retrieve updates as infrequently as possible without compromising business requirements
  • With Microsoft Dynamics CRM for Outlook, users can “pin” views so they always display when a user logs in to Outlook. Pinned views, which are stored in cache, respond more quickly than do standard views, so be sure that suggest that users “pin” the views with which they most commonly interact. Note: Each pinned view consumes system resources (memory), so balance the use of pinned views against the need for system resources.
  • Optimize the offline synchronization process
    • Assign all users roles with the minimum access levels
    • Whenever possible, avoid using “Parent downloaded=true” and sliding time windows.
    • Implement local data filtering for each offline client to ensure that users have offline access only to the data required to perform their job functions
    • Configure offline synchronization to run in the background periodically, for example every 15 minutes, to improve performance

4. About CRM Customzation:

  • Use Javascript, columns, grids, iFrames, subgrids judiciously
  • Use role-based forms to limit the fields that display on a form
  • Adjust security roles to limit the functionality presented to users
  • Consider the complexity and number of visualizations used in the dashboards
  • Limit the number of rows that are returned per page
  • Hide the Get Started pane

Dynamics CRM: White Papers and Documentation List

Shawn Dieken has just posted here what I think is a great list of links to white papers, technical documents and other stuff about Microsoft Dynamics CRM. So for my own reference, I just copied this list to add it here, so I can find it back more easily. Thank you for the great job Shawn!

 

Titles Date Published
Optimizing and Maintaining Client Performance for Microsoft Dynamics CRM 2011 and CRM Online 12/20/2011  (Refreshed)
Microsoft Dynamics CRM 2011 Software Development Kit (SDK) 12/2/2011 (Updated Quarterly)
Using EFS and BitLocker to Protect Microsoft Dynamics CRM Data on Client Computers 11/2/2011
Microsoft Dynamics CRM 2011 Implementation Guide 11/2/2011 (Updated Quarterly)
Deploying Microsoft Dynamics CRM 2011 and CRM Online Solutions from Development through Test and Production Environments 10/25/2011
Optimizing and Maintaining the Performance of a Microsoft Dynamics CRM 2011 Server Infrastructure 10/21/2011
Microsoft Dynamics CRM 2011 Performance and Scalability with Intel 10/4/2011
Microsoft Dynamics CRM 2011 for Outlook Quick Start Guide 9/29/2011
Microsoft Dynamics CRM 2011 Quick Start Guide for Business Users 9/29/2011
Microsoft Dynamics CRM Online: Security Features 9/22/2011
Microsoft Dynamics CRM 2011 for Outlook Installing Guide for use with Microsoft Dynamics CRM Online 8/18/2011
Microsoft Dynamics CRM 2011 User’s Guide 8/12/2011
Microsoft Dynamics CRM 2011 Performance Counters 8/11/2011
Microsoft Dynamics CRM 2011 Administrator’s Guide 8/11/2011
Microsoft Dynamics CRM 2011 Configuring Claims-based Authentication 8/1/2011 (Updated)
System Center Monitoring Pack for Microsoft Dynamics CRM 2011 7/12/2011
Microsoft Dynamics CRM for Microsoft Office Outlook Compatibility with Citrix XenApp 6 7/5/2011
How to configure the Microsoft Dynamics CRM on-premises and Microsoft Dynamics CRM Online E-mail Router in different deployment scenarios 5/2/2011
Microsoft CRM Online Data Migration to Microsoft Dynamics CRM 2011 on-premises 4/29/2011
Deployment and Operational Guidance for Hosting Microsoft Dynamics CRM 2011 4/5/2011
Microsoft Dynamics CRM 2011 Entity Relationship Diagrams 3/24/2011
Microsoft Dynamics CRM 2011 for E-mail Router Installing Guide for use with Microsoft Dynamics CRM Online 12/9/2010
Microsoft Dynamics CRM 2011 ISV White Paper 11/4/2010

 

 

Brad Wilson is being replaced

Brad Wilson, who was since 2005 General manager of the customer relationship management (CRM) business with the Microsoft Dynamics organization, is handing over his responsibilities to Dennis Michalis, who officially took over as general manager of the product line last week. The process began approximately 2 months ago.

Before joining Microsoft, he worked for Deloitte, Infor Global Solutions,  XALT Technologies, a Fujitsu subsidiary, PWC, etc. With more than 20 years of experience as manager, he describes himself as “leading companies and build teams that won’t accept anything other than growth, profitability and fanatical customer loyalty”. He believes that “the key to great business results is to get great people, then do cool stuff to maximize their motivation, performance and effectiveness once you have them in the door”.

Hopefully, he will do a great job for Dynamics CRM, and help the product get even more growth, recognition and attractive features.

Thanks to Brad Wilson for the great job he accomplished as GM for Dynamics CRM. He helped bring the product from version 1.2 to version 2011. As a reminder, when Brad joined the team in 2005, he is the person who decider to skip entirely version 2.0 and to move directly to version 3.0. At the time, when version 2.0 was almost ready, he decided to go further with the Web Services architecture, and to provide the ability to create new objects with no coding.

Make notes readonly with CRM

To make notes readonly with CRM, just find the notes iframe: notescontrol.
Then replace the iframe src with the url of the notesdata.aspx page.
And specify the parameters EnableInlineEdit and EnableInsert.
And you’re done!

var oNotes = document.getElementById(“notescontrol”);
oNotes.src= “/_controls/notes/notesdata.aspx?id=” + crmForm.ObjectId + “&ParentEntity=”+crmForm.ObjectTypeCode + “&EnableInlineEdit=false&EnableInsert=false”;