Embedding ISV web applications in Microsoft Dynamics CRM 4.0 through SiteMap (not as an IFrame) via a left navigation link. Application & link Access restriction through Site Map

There are (at least) two standard ways of implementing an external ISV web application (website, html, .NET, etc..) inside your dynamics CRM application.

The first way is by creating an IFrame inside the form of an entity. This is quite straight forward and can be achieved from the entity customisation section in CRM settings.

The second option is to create a link in the left navigation of your Microsoft Dynamics CRM 4.0 solution. This link can then point to your ISV webpage (aspx page for example) and you will have your web page implemented and embedded inside CRM. If you also do the application css (stylesheet file)  to be same colours and similar styles as CRM colours and styles, your application will be presented nicely inside CRM as if it is part of CRM. The permission and restriction of access to this web application and its left navigation link is also controlled to show/hide the applications to users.

This post is discussing the second option.

Embedding a webpage or web application in CRM and having  CRM’s left navigation linked to it can be done by editing the sitemap customisation file (xml). This left nav link can be shown or hidden to users based on their security roles and this is also controlled in the site map file. If the link is hidden, then obviously the web application will not be accessible and cannot be retrieved by unauthorised users.

The following is an example of a sitemap file that displays two links to two applications on the top of the left navigation menu of CRM 4.0. The privilage for accessing each link is also set in the following example:

<SiteMap>
    <SiteMap>
      <Area Id="Workplace" ResourceId="Area_Workplace" ShowGroups="true"
Icon="/_imgs/workplace_24x24.gif" DescriptionResourceId="Workplace_Description">
        <Group Id="MyWork" ResourceId="Group_MyWork" 
DescriptionResourceId="My_Work_Description">
          <SubArea Id="MyWebApplication" Icon="/_imgs/ico_18_servicecal.gif" 
Url="../../ISV/MyWebApplication/WebPage.aspx" AvailableOffline="false">
            <Titles>
              <Title LCID="1033" Title="My Web Application ONE" />
            </Titles>
            <Descriptions>
              <Description LCID="1033" Description="My Web Application ONE" />
            </Descriptions>
<!-- this is where you control displaying the 1st link-->
<!-- if the user has read and write access to entity Kbarticle (for ex)-->
<!-- then they should be able to view this link. Otherwise, its hidden-->
            <Privilege Entity="kbarticle" Privilege="Read,Write" /> 
          </SubArea><!--another example follows: -->
          <SubArea Id="WebPage2" Icon="/_imgs/ico_18_servicecal.gif"  
Url="../../ISV/WebApplication2/index.htm" AvailableOffline="false">
            <Titles>
              <Title LCID="1033" Title="Web Page 2" />
            </Titles>
            <Descriptions> 
<!-- if the user has create access to entity Kbarticle (for ex)-->
<!-- then they should be able to view this link. Otherwise, its hidden-->
              <Description LCID="1033" Description="Web Page 2" />
            </Descriptions>
            <Privilege Entity="kbarticle" Privilege="Create" />
          </SubArea>
<!-- The following is the standard activity left link for CRM-->
          <SubArea Id="nav_activities" Entity="activitypointer"  
DescriptionResourceId="Activities_SubArea_Description"  
Url="/Workplace/home_activities.aspx" />

This is how you can get site map to control your left navigation buttons and get them to link to ISV applications. Please mind that you might need to change the relative location of your application in the URL parameter.

Hope this helps.