最近做了一个office365的项目,用SharePoint沙盒解决方案在SharePoint 2010 版本上开发的,虽然SharePoint 2013 已经不推荐使用沙盒解决方案开发(详情请参考MSDN,只是不推荐,但是一样可以用),但是因为沙盒解决方案和场解决方案在开发模式和部署模式都有很多的不同,而且项目比较简单,遇到的问题也比较有通用性,所以把这些记录下来,希望帮看到这篇博客的同行节省一点时间。
因为国内相关的资料很少,而且我这篇文章也不打算讲得太细,所以主要是引用外部链接,如果有些链接打不开,请用在线代理试试。
沙盒解决方案的限制:
http://www.sharepointdiary.com/2012/03/50-limitations-of-sharepoint-sandboxed.html#ixzz2LQrPljGQ
http://msdn.microsoft.com/en-US/library/gg615456.aspx
限制非常多,让刚接触沙盒解决方案的人非常非常头疼,连visual web part 和application page,sharepoint自带的控件等等等等都不支持。但是既然选择了沙盒解决方案肯定有不得已的原因,那么就一条一条过一遍吧。
一些小技巧:
1. 创建Visual Web Part based on sandbox
需要安装Visual Studio 2010 SharePoint Power Tools,安装地址:http://visualstudiogallery.msdn.microsoft.com/8e602a8c-6714-4549-9e95-f3700344b0d9/
2. 创建有后台代码的应用程序页面
沙盒不能直接创建应用程序页面,所以需要绕一下,在一个内容页面里嵌入一个webpart,然后在这个webpart里写代码,参考地址http://visualstudiogallery.msdn.microsoft.com/8e602a8c-6714-4549-9e95-f3700344b0d9/
3. 调用客户端脚本
因为沙盒后台不支持直接调用客户端脚本 (Page.ClientScript.RegisterStartupScript 和 ScriptManager.RegisterStartupScript)
所以需要在前台调用(后台画出来当然也行),请参考这篇博客 http://blogs.msdn.com/b/ketaanhs/archive/2011/06/23/page-class-sp-2010-sandbox-solution.aspx
这篇博客是基于base web part 开发的,如果用visual web part开发就很简单了,直接在前台写<input id="Submit1" type="submit" value="Search" οnclick="return Submit1_onclick()"/> 就可以,请无视他的InitializeControl()那一段,visual web part 自动生成的。如果想更进一步动态加载JS库(提高性能),也可以参考这篇经典的博客:http://blog.mastykarz.nl/dynamically-loading-javascript-sandbox/
以下是两个简单的列子:
后台调用脚本转向:
protected void Preview_Click(object sender, EventArgs e)
{
var ltlScript = new Literal();
ltlScript.Text = "<script type='text/javascript' language='javascript'>window.location='http://www.baidu.com';</script>";
this.Controls.Add(ltlScript);
}
前台调用脚本
<script type="text/javascript">
function Submit1_onclick(){
...
}
</script>
<input id="Submit1" type="submit" value="Search" οnclick="return Submit1_onclick()"/>
4. 调试
因为沙盒是直接部署到site collection的,不能部署到GAC,所以部署的过程不需要重启IIS,只需要attach SPUCWorkerProcess.exe 即可,非常方便。