点击此处察看效果演示
最近看到一个老外写的一个Flash播放器的WebPart,感觉这些WebPart写起来很简单,正好也希望给初学者介绍一下如何进行WebPart的开发。我也没写过几个WebPart,因为实际上WebPart的开发是师傅领进门,修行在个人。很多初学Sharepoint的对WebPart开发摸不着头脑。实际WebPart写起来很简单,但是准备工作比较复杂,包括安装模板,引用dll,部署,调试等。这些东西我在后面的一篇文章中会介绍。另外就是WebPart的开发需要多看看sharepoint的sdk,里面讲解了组件模型,如果你的WebPart不引用任何SPS库对象(比如这个Flash WebPart),那么写起来就更简单了。
首先如何写WebPart,在新建了一个WebPart的项目之后,默认就生成了一个WebPart,这个WebPart本身就能够编译成功,当然这个WebPart是一个空的WebPart。什么功能也没有。
WebPart的呈现是靠RenderWebPart这个方法实现的,这个方法有一个output参数,只要通过output将需要呈现的HTML输出出来就可以了。熟悉asp的朋友可能很熟悉这种方式,就像用asp的Response一样。因为WebPart的呈现无法用可视化的开发。当然利用Kaneboy做的用户控件包装器可以简单的将一个用户控件包装成WebPart。
OK,那么该如何呈现呢,其实Flash的呈现代码很简单,就是输出一个object标签,然后设置flash的url、width、height等属性。那么我们需要设置哪几个属性呢?是Flash url、Width、Height、Quality、CabVersion(CAB的版本)这五个属性。
这五个属性定义如下:
private
string
url
=
""
;
[Browsable(
true
),
Category(
"
Flash属性
"
),
DefaultValue(
""
),
WebPartStorage(Storage.Personal),
FriendlyName(
"
Flash Url
"
),
Description(
"
Flash动画的Url
"
)]
public
string
Url
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
get
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return url;
}
set
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
url = value;
}
}
private
int
width
=
100
;
[Browsable(
true
),
Category(
"
Flash属性
"
),
DefaultValue(
100
),
WebPartStorage(Storage.Personal),
FriendlyName(
"
Flash的显示宽度(px,0表示原大小)
"
),
Description(
"
Flash动画的宽度
"
)]
public
int
FlashWidth
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
get
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return width;
}
set
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
width = value;
}
}
private
int
height
=
100
;
[Browsable(
true
),
Category(
"
Flash属性
"
),
DefaultValue(
100
),
WebPartStorage(Storage.Personal),
FriendlyName(
"
Flash的显示高度(px,0表示原大小)
"
),
Description(
"
Flash动画的高度
"
)]
public
int
FlashHeight
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
get
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return height;
}
set
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
height = value;
}
}
private
string
quality
=
"
high
"
;
[Browsable(
true
),
Category(
"
Flash属性
"
),
DefaultValue(
"
high
"
),
WebPartStorage(Storage.Personal),
FriendlyName(
"
Flash显示质量
"
),
Description(
"
Flash动画的显示质量
"
)]
public
string
Quality
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
get
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return quality;
}
set
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
quality = value;
}
}
private
string
cabversion
=
"
7,0,0,0
"
;
[Browsable(
true
),
Category(
"
Flash属性
"
),
DefaultValue(
"
7,0,0,0
"
),
WebPartStorage(Storage.Personal),
FriendlyName(
"
Flash的CAB版本
"
),
Description(
"
Flash的CAB版本
"
)]
public
string
CabVersion
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
get
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return cabversion;
}
set
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
cabversion = value;
}
}
默认的时候有一个Text属性,只要照猫画虎就可以了。每个属性前有一堆属性修饰。这些属性不用讲也能猜得出来意思。
然后最终的呈现代码如下:
/**/
/// <summary>
/// Render this Web Part to the output parameter specified.
/// </summary>
/// <param name="output"> The HTML writer to write out to </param>
protected
override
void
RenderWebPart(HtmlTextWriter output)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
try
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if (this.url.Trim() == "")
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
output.Write(SPEncode.HtmlEncode("请选择要显示的Flash动画"));
}
else
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
output.Write("<OBJECT classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=");
output.Write(SPEncode.HtmlEncode(this.cabversion) + "\" ");
output.Write(" WIDTH=\"" + this.width + "\" ");
output.Write(" \"HEIGHT=\"" + this.height + "\">");
output.Write("<PARAM NAME=movie VALUE=\"" + SPEncode.HtmlEncode(this.url) + "\"><PARAM NAME=quality VALUE=" + SPEncode.HtmlEncode(this.quality) + "><param name=wmode value=opaque>");
output.Write("<EMBED src=\"" + SPEncode.HtmlEncode(this.url) + "\" quality=" + SPEncode.HtmlEncode(this.quality));
output.Write(" WIDTH=\"" + this.width + "\" ");
output.Write(" HEIGHT=\"" + this.height + "\" ");
output.Write(" TYPE=\"application/x-shockwave-flash\" PLUGINSPAGE=\"http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash\"></EMBED></OBJECT>");
}
}
catch (Exception e)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
output.Write("有错误发生:" + e.Message);
}
}
其中注意是当Url为空的时候提示一个需要设置属性的信息。另外就是捕获一下异常。
一个WebPart就这么轻轻松松完成了,然后就是部署了。关于WebPart的强签名和部署,我将在以后的Blog中讲。