在定义SharePoint列表的SPD数据视图的时候需要注意的问题

为了开发的效率我们通常对SharePoint列表的新建、编辑等自带的ASPX表单进行自定义,但在实际的过程中,老是会出现莫名其妙的错误,从而造成开发有可能无限拖延。

首先,作为开发者,我们要清楚微软一贯的行事风格,就是一个错误往往并不是您的作法不对,而是系统并不完善。

所以,我把多年来的对SharePoint开发的经验写下来,在SPD中往往对数据视图并不能作太频繁的改动,往往你对数据视图一个“非DEMO”的操作,就会引发意想不到的错误,从而造成您的开发时间有可能无限地拖延。

这些错误我总结下来,有如下的原因:

1、频率地对数据更改“新建”、“编辑”的模式, 当你插入的数据视频一会从新建表单变成编辑表单,而又往复时,会造成巨大的灾难。

2、频率地对数据的呈现模式进行更变,如一个字段你感觉默认的显示效果不行进,您会把它从“列表表单域”-> “文本框”,然后又改回来,这又会造成巨大灾难。

我们通过分析ASPX文件的代码,来发现其中的奥秘:

比如在定义一个新建列表的数据视图时,系统如自动生成在SPD中的如下的定义:

<SharePoint:FormField runat="server" id="ff27{$Pos}" ControlMode="New" FieldName="_x7533__x8bf7__x5173__x95ed_" 
__designer:bind="{ddwrt:DataBind('i',concat('ff27',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@_x7533__x8bf7__x5173__x95ed_')}" />

 当1发生时,我会发现在这个字段中的一个属性 ControlMode 可能会不对,当是新建表单时,我们一定要保持这个值等于New,在多次进行更改时这个值可能会于我们的表单冲突。

当2发生时,我会发现往往在_designer:bind,这个属性中的, ddwrt:DataBind这个方法中的, concat('******',$Pos,这个部分不对,
这个部分应该于id属性相对应,如果id为*****{$Pos},那么这个部分应该就是 conct("*****",$Pos}。

所以在自定义数据视图时,我们要抱定一个理念,SPD只是给我们自动生成代码的工具,而不是微软所说的万能的工具,是充满BUG的,

千万不要相信SPD自动生成的代码,我们可以通过检查SPD生成的自动代码,并把它更正,才能高效地利用这个工具。

其实在SharePont 2013 以后的版本中,就取消了所见即所得的视图模式了,我想,这可能SPD未来的使命吧,既然自动生成代码做不好,我们就让专业人士去一行一行写XSL代码,而非专业人士,您就用用SharePoint即有的功能。

 

 

 

posted @ 2013-03-31 20:39  dosboy  阅读(686)  评论(0编辑  收藏  举报