分享

SharePoint中自定义WebPart的部署

 xiaozhenyu 2012-05-16

SharePoint中自定义WebPart的部署

 

关于SharePointWebPart的部署,网上有很多文章可以参考,但好多都是SharePoint 2003下的,还有一些是针对SharePoint 2007的但是我觉得也比较麻烦,而且好多文章都没有讲清楚。我这里要讲的是另外一种方式:将ASP.net中的UserControlascx文件)作为WebPart部署到SharePoint上!

首先,在自定义和部署WebPart之前你要装好环境,这个估计你已经装好了,这里就不多说了,下面介绍具体步骤:

1.新建WebPart项目,命名为WebPartTest,如下图所示:

 

2.在解决方案里再新建一个ASP.NET  Web 应用程序,就叫WebApp吧,如下图所示:

新建好的两个项目结果如下所示:

3.创建ascx文件

WebApp项目上右击选择“添加”->“新建项”->选择“Web用户控件”,我建立了这样的结果:

Label1Text属性文字删除。双击按钮在Button1_Click事件中写入以下代码:

            string year = Convert.ToString(DateTime.Now.Year);

            string mont = Convert.ToString(DateTime.Now.Month);

            string day  = Convert.ToString(DateTime.Now.Day);

            string hour = Convert.ToString(DateTime.Now.Hour);

            string minu = Convert.ToString(DateTime.Now.Minute);

            string seco = Convert.ToString(DateTime.Now.Second);

            Label1.Text = year + " " + mont + " " + day + " " + hour + ":" + minu + ":" + seco;

我的UserControl算是创建完毕,下面开始编辑WebPartTest项目。

右击WebPartTest项目->“添加”->新建项目->选择“Module”重命名为WebParts如图所示:

点“添加”按钮!

可以看到在WebPartTest项目下多了一个WebParts文件夹,其下有两个文件一个是Module.xml一个是sample.txt,打开Module.xml文件里面有如下xml代码:

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">

  <Module Name="WebParts" Url="" Path="">

    <File Url="sample.txt" />

  </Module>

</Elements>

其中NameModule的名称,Url表示你要将你想部署的文件放到SharePoint什么目录下面,这里我填写为WebPartsPath可以不用管(实际上我也没有搞明白是干什么的),File Url表示你要部署的文件的路径名称,注意在这里可以添加多条File元素,对应多个你要部署的WebPart

下面,拖住刚才创建的WebUserControl.ascx将它拖到WebPartTest项目的WebParts文件夹下,然后将Module.xml文件中的Url值填写为WebParts,在File Url的值中填写WebUserControl.ascx,修改后如下图所示:

    

下面需要修改WebPartTest项目下WebParts文件夹下的WebUserControl.ascx文件。将第一行代码<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="WebApp.WebUserControl1" %>修改成<%@ Control Language="C#" Inherits="WebPartTest.WebUserControl1" %>也就是去掉AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs"并且将Inherits的值中的namespace修改为WebPartTest,注意这里非常重要,而且要将后台代码WebUserControl1.ascx.csWebUserControl1.ascx.designer.cs中的namespace都要修改为WebPartTest,注意,再强调一遍,namespace的修改非常重要。

 

4. 部署WebPart

接下来就要做部署WebPart的工作了。

右击WebPartTest项目点击属性,调出属性界面。点击调试在“使用URL启动浏览器(R)”后面输入你要部署的SharePoint站点URL,如下图所示:

接着就要添加几行代码了,打开WebPartTest项目下的WebPartTest文件夹下的WebPartTest.cs文件,添加如下代码:

private Control wp;

 

        protected override void CreateChildControls()

        {

            wp = this.Page.LoadControl("~/WebParts/WebUserControl1.ascx");//注意这里的写法,和Module.xml中的Url还有File Url要保持一直

            this.Controls.Add(wp);

        }

 

        protected override void Render(HtmlTextWriter writer)

        {

            this.EnsureChildControls();

            this.wp.RenderControl(writer);

        }

WebPartTest.cs文件中的全部代码为如下:

using System;

using System.Runtime.InteropServices;

using System.Web.UI;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Serialization;

 

using Microsoft.SharePoint;

using Microsoft.SharePoint.WebControls;

using Microsoft.SharePoint.WebPartPages;

 

namespace WebPartTest

{

    [Guid("1a23b714-7a10-4bd7-8a1e-3ec153fe1dae")]

    public class WebPartTest : System.Web.UI.WebControls.WebParts.WebPart

    {

        public WebPartTest()

        {

            this.ExportMode = WebPartExportMode.All;

        }

 

        private Control wp;

 

        protected override void CreateChildControls()

        {

            wp = this.Page.LoadControl("~/WebParts/WebUserControl1.ascx");//注意这里的写法,和Module.xml中的Url还有File Url要保持一直

            this.Controls.Add(wp);

        }

 

        protected override void Render(HtmlTextWriter writer)

        {

            this.EnsureChildControls();

            this.wp.RenderControl(writer);

        }

    }

}

 

接下来我们的工作做完了,开始编译项目,部署WebPart

点击菜单栏上“生成”->“生成解决方案”,项目生成失败,原因是我们要在WebPartTest项目里添加System.Data的引用,然后重新生成解决方案。OK,生成成功,然后右击WebPartTest项目,点击“部署”,经过漫长的几十秒部署成功。接着在我们的SharePoint站点上添加我们部署的WebPart。(怎么添加我这里就不叙述了)

添加失败,并且提示如下错误:处理 /WebParts/WebUserControl1.ascx 时出现错误。未能加载类型“WebPartTest.WebUserControl1”

这里的错误原因是我们没有在WebUserControl1.ascx文件中加入程序集的信息,打开你站点的web.config文件,找到<SafeControls>下的最后一行,就是我们刚才添加的WebPart的信息,将Assembly的值复制下来,打开WebParts文件夹下的WebUserControl1.ascx文件,在最上面添加如下程序集信息:<%@ Assembly Name="WebPartTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5" %>

重新生成解决方案,并且部署。

OK这次重新加载WebPart部署成功,点击我们添加的Time按钮,会显示现在的准确的时间。

 

总结:

    整个过程就是先建立WebPart项目,然后添加一个Web应用程序项目,在Web应用程序项目里创建ascx文件,然后在WebPart项目中创建Module,将创建好的ascx文件复制添加到Module文件夹下,其实Module.xml文件就是个Feature,在WebPart属性页中的SharePoint Solution项中就详细的列出了Feature的信息。

经过这样的创建和部署,我们就省去了其他一些繁琐的修改web.config文件的麻烦。

里面不对的地方还请高手多指点!

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多