Another CRM -> Sharepoint integration
Here is my first blogpost in English since I received requests from non speaking
Swedes. The MSCRM team, Kjell-Sverre Jerijærvi
(Integrating
team-sites into MSCRM (part II)) and allot of others has published different
ways of integrating MSCRM with Sharepoint. Guess what! Here is another solution
actually made back in 05’ as a Proof of concept solution… Each Account has its own
sharepoint library structured under an alphabetic label (dummy library). This is
done initial on setup of libraries A,B,C,D etc. A custom Sharepoint template is
used for MSCRM look and feel (not in scope of this blogpost)
For example Alfa Demo Account is stored as own library under letter A with it's
url stored on the MSCRM.
SPSite site = null;
try
{
site = new SPSite(wssServerUrl);
SPSite newSite = site.SelfServiceCreateSite(rootUrl, siteName,
description, 1053, "STS", @"custom\mscrm", "Admin",
"mscrm@custom.local", @"custom\mscrm", "Admin", "mscrm@custom.local");
SPWeb web = newSite.OpenWeb();
web.Webs.Add(nextLevelSiteName, nextLevelSiteName, description, language,
template, false, false);
}
catch (SPException err)
{
System.Diagnostics.Debug.WriteLine(err.Message);
throw;
}
catch (Exception err)
{
System.Diagnostics.Debug.WriteLine(err.Message);
throw;
}
finally
{
site.Dispose();
}
A new chrome remover file is stored under its own web.
MSCRM_iframe.aspx cleaner removes chromes
from library files
<%@ Page Language="C#" %>
<%string sUrl = Context.Request["url"];%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>MSCRM
Integration</title>
<scriptlanguage="Jscript">
var iNavCount=0;var strValidPages="AllItems.aspx,Upload.aspx,Checkin.aspx,EditForm.aspx,DispForm.aspx,Versions.aspx,SubNew.aspx";var strOriginalUrl="<%=sUrl%>";function
evReadyStateChange()
{var oFrm=document.frames.mscrmShowPage;var
ofrmElement=event.srcElement;try{var sDoc=oFrm.location.pathname;sDoc=sDoc.substring(sDoc.lastIndexOf("/")+1);if(ofrmElement.readyState=='loading'){ofrmElement.style.display="none";oFrm.onerror=function(){return
true;}}else if(ofrmElement.readyState=='complete'){var
bValid=false;iNavCount++;var
arrTmp=strValidPages.split(",");for(var
s in arrTmp)if(arrTmp[s]==sDoc)bValid=true;if(!bValid){document.location.assign("MSCRM_error.aspx?rUrl="+location.href);}else{try{var
oTable=oFrm.document.all.tags("table")[0];oTable.rows(0).style.display="none";oTable.rows(1).style.display="none";oTable.rows(2).cells(0).style.display="none";oFrm.document.all("diidEditInGridButton")[0].parentNode.parentNode.style.display="none";oFrm.IMNShowOOUI=function(){return
false;};}catch(e){}
oFrm.document.body.insertAdjacentHTML("beforeEnd","<a href='#' onclick='window.open(location.href)'
class='ms-formdescription' style='position:absolute;top:10px;right:10px;color:blue'>In
new window</a>");ofrmElement.style.display="inline";}}}
catch(e)
{}}
</script>
</
head >
<
body style ="margin:0 0 0 0">
<%if (sUrl!=null) {%>
<iframeid="mscrmShowPage"frameborder="0"height="100%"width="100%"onreadystatechange="evReadyStateChange()"style="display:none"src="<%=sUrl%>"></iframe>
<%}%>
</
body >
</html>
On MSCRM server a new virtual directory
(or new web according to ISV rules) holds files to link it all to WSS or Sharepoint
side.
<divclass="tab"id="tabBody1"style="DISPLAY:
inline">
<tableid="Table0"style="TABLE-LAYOUT:
fixed"height="100%"cellSpacing="0"cellPadding="3"width="100%">
<tr>
<td>
<iframeid="Iframe0"frameborder="0"width="100%"height="100%"src="<%Response.Write(ConfigurationSettings.AppSettings["PathToMSCRM"].ToString());%>/SharePointConnector/_redirect.aspx?<%Response.Write(Request.QueryString);%>&Folder=1"></iframe>
</td>
</tr>
</table>
</div>
Clip from AccountCreateFrame.aspx .
I added 2 keys in MSCRM’s web.config
for dynamic settings
<appSettings>
<addkey="PathToMSCRM"value="https://crm/Beta.Crm.Sharepoint/"/>
<addkey="SharePointServerIframe"value="https://sharepoint/_layouts/CRM/MSCRM_iframe.aspx?url="/>
</appSettings>
I prefer to add everything on the leftside navigation
and that could be easily done by modification of ISV.config
or by injecting js script in from onLoad
Documents added in
ISV.config pointing <PathToMSCRM> Accountcreateframe.aspx
You can download all files here
and hopefully everything is clearer when you look at the code J
NOTE!!! You are required to
have licenses for SharePoint server
Not Supported example code.zip
Comments
Anonymous
March 24, 2007
PingBack from http://www.virtual-generations.com/2007/03/24/sharepoint-2007-link-love/Anonymous
October 05, 2007
I have a HTTP handler as shown below. It works for one user (that's me), but not for other users on the fareast.corp.microsoft.com domain. I am on the same domain. What the problem could be? public class SyncHandler : IHttpHandler { byte[] fileBytes = new byte[256]; public bool IsReusable { get { return false; } } public void ProcessRequest(HttpContext context) { context.Request.SaveAs(@"c:\request.txt", true); context.Response.Write("From main handler "); } } COuld it be that the handler dll, in which this class is defined, doesn't allow other users to access "c:"? Please advise. I couldn't find another place for this query. My apologies for any inconvenience. I am using handler to process POST requests for a SP site. So I have set WSS trust settings properly.Anonymous
July 25, 2008
The comment has been removed