前些天在刚刚接触WebPart的时候,搜到了一篇《使用Feature导入WebPart》的文章,那个时候对Feature的了解还为零,所以看了是一知半解,等到今天回望时,发现文章里的内容竟然“缺斤少两”(我晕),郁闷之下,直接到Google上用英文查找,功夫不负有心人,总算被我挖到了另外一篇《Add A Web Part To Your Web Parts Gallery Using A Feature》(使用Feature添加一个WebPart到你的WebPart库?)。
内容很简单啊,而且有前一篇文章做参考,所以很好理解。然而一试,发现问题多多,似乎作者们只是写出了具体的步骤,而忽略了告诉读者需要注意的小细节(- -),呃呃,于是只能硬着头皮试到底(这里非常感谢谷歌先生的帮忙),最后,光辉迸射的一刻终于到来!
【1】简单的讲,我们需要一个做好了的WebPart,比如我用:WebPartForLeadingIn.dll。
using System.Text;
using System.Web.UI.WebControls.WebParts;
namespace WebPartForLeadingIn
{
public class Wp:WebPart
{
private string _Text = "看,我是通过Feature导入的WebPart~";
[WebBrowsable(true), Personalizable(true)]
public string Text
{
get { return _Text; }
set { _Text = value; }
}
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
writer.Write(_Text);
}
}
}
做强名称这个就不用说了,然后编译。。。
【2】同时最好手动编写一个.webpart文件——这个文件一般在用VS编码时不会产生,在导入到SharePoint后才有,是XML格式的文件。(我命名为Wp.webpart)
<webParts>
<webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
<metaData>
<type name="WebPartForLeadingIn.Wp, WebPartForLeadingIn, Version=1.0.0.0, Culture=neutral, PublicKeyToken=437f6f449ff02b7a" />
<importErrorMessage>无法导入此 Web 部件。</importErrorMessage>
</metaData>
<data>
<properties>
<property name="Title" type="string">Wp</property>
</properties>
</data>
</webPart>
</webParts>
【3】上面两步就把WebPart搞定了,下面开始编写Feature.xml和Element.xml(后面这个文件可以随便命名, 不过记得要在Feature.xml文件里相应的关联部分输入同样的文件名)
◎Feature.xml文件:
<Feature xmlns="http://schemas.microsoft.com/sharepoint/"
Id="FC3BB8FB-EC18-4ace-9B1D-24333C2C9A6E"
Title="Leading in WebPart"
Description="通过Feature导入WebPart"
Hidden="FALSE"
Scope="Site">
<ElementManifests>
<ElementManifest Location="Element.xml" />
</ElementManifests>
</Feature>
◎Element.xml文件:
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Module
Name="WebPartPopulation"
List="113"
Url="_catalogs/wp"
RootWebOnly="TRUE">
<File Url="Wp.webpart" Type="GhostableInLibrary" />
</Module>
</Elements>
【4】接下来这一步很棒,编写.bat批量文件,省了在cmd敲命令的功夫,而且完全“一步到位” :)
◎ImportWP.bat文件:
@SET STSADM="c:\program files\common files\microsoft shared\web server extensions\12\bin\stsadm"
Echo Installing feature
%STSADM% -o InstallFeature -filename WebPartForLeadingIn\feature.xml -force
Echo Activating feature
%STSADM% -o activatefeature -filename WebPartForLeadingIn\feature.xml -url http://gl-5fc632fd62e9:8800/
Iisrest
以上有些地方要根据您的实际情况修改,比如stsadm.exe所在位置,WebPartForLeadingIn是一个文件夹名,http://gl-5fc632fd62e9:8800/是SharePoint网站URL。
【5】搞定这些,就万事俱备,只欠东风了。
把 WebPartForLeadingIn.dll 拷到GAC里(C:\WINDOWS\assembly),把Feature.xml、Element.xml、ImportWP.bat、Wp.webprt四个文件拷贝到WebPartForLeadingIn文件夹里,然后将其挪到C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\下。
(*这里有两点要注意:
1)是要到相应的网站下修改web.config,添加SafeControl节点,我的是<SafeControl Assembly="WebPartForLeadingIn, Version=1.0.0.0, Culture=neutral, PublicKeyToken=437f6f449ff02b7a" Namespace="WebPartForLeadingIn" TypeName="*" />。感觉有点昏,不是说放到GAC下的WebPart文件是完全可信的吗,怎么还要设置安全节点?
2)可能在后面进行Feature激活时会出错,
我自己是通过以下手段解决的:【SharePoint 3.0管理中心】—>【应用程序管理】—>【应用程序安全性】的“Web应用程序的策略”—>选择要激活的网站,【添加用户】—>【区域】选择“所有区域”(也可以选择相应的区域,比如 默认)—>【下一步】—>在“用户”框填上网站管理员帐号,“权限”为“完全控制”—>【完成】
)
【6】运行ImportWP.bat,然后到您的网站里,看看是不是多了什么东东,我的网站上是这样:
好了,如果有兴趣,再到“Web部件”库里看看是不是new出了什么(Wp.webpart!新 ) 。Jesus,还等什么,直接添加到页面上吧~
Good luck :)