设为首页 收藏本站
查看: 628|回复: 0

[经验分享] SharePoint:扩展DVWP

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-25 12:05:44 | 显示全部楼层 |阅读模式
  编辑列表项时通常会必简单的查看要包含更多字段。列表默认视图中并不总显示该项的所有字段。但当我们进到编辑状态时,却需要访问所有的字段...。或者,最起码是所有你需要编辑的字段。
  在我们的Full-time Employee(FTE)例子中,我们准备通过Location来过滤雇员,从而实现在某个特定地点对应的页面上只显示该地点的雇员。因此,在该页面上我们不需要再次显示出Location字段。在每一个页面上,我们还会通过“Group”字段实现分组显示,所以Group字段也无需显示在行视图中。
DSC0000.png
  默认的DVWP多项目视图,打开了编辑/删除功能(并移到了右侧)
  但是,当需要进行编辑时,我们必须能够编辑雇员的Location和Group。我们需要创建一个“编辑”视图,并包含所有用户切换到编辑状态后需要用到的字段。或者,你也可以将字段添加到默认视图中,以便其可以在编辑模版中使用。但是如果这样做,当我们没有在编辑模式时,实际上页面上会显示一下多余的或者说是无关紧要的信息。
  此外,当你真正使用这些表单字段时,就会发现页面会被撑的很宽,不得不拖动左右滚动条(这个用户体验是很差的)。
DSC0001.png
  包含所有字段的编辑模版,屏幕很难容得下
  一种选择是想办法把所有的字段都摆放在页面中。
DSC0002.png
  修改DVWP多项目视图的编辑模版
  注意到我们摆了两行,默认情况下所有东西都是在一行里,像下面这样:



<xsl:template name="dvt_1.rowedit">
<xsl:param name="Pos" />
<tr>
<td class="ms-vb">
<SharePoint:FormField runat="server" id="ff4{$Pos}" ControlMode="Edit" FieldName="Title" ItemId="{@ID}" {code} />
<SharePoint:FieldDescription runat="server" id="ff4description{$Pos}" FieldName="Title" ControlMode="Edit" />
</td>
<td class="ms-vb">
<SharePoint:FormField runat="server" id="ff3{$Pos}" ControlMode="Edit" FieldName="Positions" ItemId="{@ID}" {code} />
<SharePoint:FieldDescription runat="server" id="ff3description{$Pos}" FieldName="Positions" ControlMode="Edit" />
</td>
<td class="ms-vb">
<SharePoint:FormField runat="server" id="ff5{$Pos}" ControlMode="Edit" FieldName="WorkShift" ItemId="{@ID}" {code} />
<SharePoint:FieldDescription runat="server" id="ff5description{$Pos}" FieldName="WorkShift" ControlMode="Edit" />
</td>
<td class="ms-vb">
<SharePoint:FormField runat="server" id="ff6{$Pos}" ControlMode="Edit" FieldName="FTE" ItemId="{@ID}" {code} />
<SharePoint:FieldDescription runat="server" id="ff6description{$Pos}" FieldName="FTE" ControlMode="Edit" />
</td>
<td class="ms-vb">
<SharePoint:FormField runat="server" id="ff7{$Pos}" ControlMode="Edit" FieldName="EffDate" ItemId="{@ID}" {code} />
<SharePoint:FieldDescription runat="server" id="ff7description{$Pos}" FieldName="EffDate" ControlMode="Edit" />
</td>
<xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">
<td class="ms-vb" width="1%" nowrap="">
<xsl:call-template name="dvt_1.automode">
<xsl:with-param name="KeyField">ID</xsl:with-param>
<xsl:with-param name="KeyValue" select="ddwrt:EscapeDelims(string(@ID))" />
<xsl:with-param name="Mode">edit</xsl:with-param>
<xsl:with-param name="Pos" select="$Pos"/>
</xsl:call-template>
</td>
</xsl:if>
</tr>
</xsl:template>

  例子——默认的编辑模版:“dvt_1.rowedit”的XSLT
  在对该视图进行修改时,我们需要添加Site/Department栏和Group栏。
  由于该模版是一个完整的行(TR),我们可以很容易的将其断成两行。过程很简单,只要考虑重什么地方结束一行并开始另一行(通过在需要断开的TD间插入</tr><tr>)即可。
DSC0003.png
  之前
DSC0004.png
  之后
  如果我们刷新设计视图,可以看到显示布局很难看。因为上面一行里有四栏,而下面一行里只有两栏。表格需要进行一些整理,来为更多的栏腾一点空间。不过,首先我们需要在下面的行中添加两个TD。



<tr>
<td class="ms-vb"></td>
<td class="ms-vb"></td>
<td class="ms-vb">
<SharePoint:FormField runat="server" id="ff7{$Pos}" ControlMode="Edit" FieldName="EffDate" ItemId="{@ID}" {code} />
<SharePoint:FieldDescription runat="server" id="ff7description{$Pos}" FieldName="EffDate" ControlMode="Edit" />        </td>

  当然,由于我们操作的是编辑模版,当设计视图刷新后会回到默认值模版,需要手工切回编辑模版。
  尽管数据被分在两行里了,但是本例中的文本框占的空间太夸张了:
DSC0005.png
  文本框占用了太多页面空间,根本用不了那么长
  修正这一点也很简单,在FormField标记中添加一个DisplaySize属性即可:



<SharePoint:FormField runat="server" id="ff4{$Pos}" ControlMode="Edit" FieldName="Title" ItemId="{@ID}" {code} DisplaySize="35" />

  现在,可以添加我们需要的栏了:
  1、在表格中点击准备插入该栏的单元格
  2、在数据源详细信息面板中找到该栏
  3、右击该栏,然后选择“插入为列表表单域”
  当然,栏的标题和下面的内容现在不匹配,因此你需要添加必要的标签以使得用户能够明白。
  当进行默认内容的分割时,你可以从主标题行中进行复制,然后粘贴到所创建的行中...



<tr>
<th class="ms-vh" nowrap="">Location</th>
<th class="ms-vh" nowrap="">Group</th>
<th class="ms-vh" nowrap="">Effective Date</th>
<th class="ms-vh"> </th>
</tr>

DSC0006.png
  两行的编辑模版
  或者,你也可以直接添加一些简单的标签,看起来更清晰...



<strong>Site/Department: </strong> . . .
  在SharePoint页面中显示时,看起来还是比较晕:
DSC0007.png
  能看出我正在干什么吗?我是在插入,编辑,还是删除?我在处理哪一行数据?
  从用户界面上考虑,上面的布局用户体验很差,所以我们准备在数据项四周加上一个线框,使其看起来更突出,以便用户可以知道他们正在处理哪一行数据。
  这一点同时也是插入和删除模版会面临的问题,所以我们会为不同的模版设置不同的颜色,以便给用户提供另一个可视化的提示:当前进行的是什么操作?在本例中,我们将插入设为绿色,删除设为红色。而下面的操作是为了将更新设为蓝色。
  使用CSS,为边框效果创建类,以区分不同的模版:



.ed-l {border-left:medium #0099FF ridge;}
.ed-r {border-right:medium #0099FF ridge;}
.ed-t {border-top:medium #0099FF ridge;}
.ed-b {border-bottom:medium #0099FF ridge;}
.in-l {border-left:medium lime ridge;}
.in-r {border-right:medium lime ridge;}
.in-t {border-top:medium lime ridge;}
.in-b {border-bottom:medium lime ridge;}
.dl-l {border-left:medium red ridge;}
.dl-r {border-right:medium red ridge;}
.dl-t {border-top:medium red ridge;}
.dl-b {border-bottom:medium red ridge;}

  然后,为每一个TD添加合适的类:



<xsl:template name="dvt_1.rowedit">
<xsl:param name="Pos" />
<tr>
<td class="ms-vb ed-l ed-t">
. . .
</td>
<td class="ms-vb ed-t">
. . .
</td>
<td class="ms-vb ed-t">
. . .
</td>
<td class="ms-vb ed-r ed-t">
. . .
</td>
</tr>
<tr>
<td class="ms-vb ed-b ed-l">
. . .
</td>
<td class="ms-vb ed-b">
. . .
</td>
<td class="ms-vb ed-b">
. . .
</td>
<xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">
<td class="ms-vb ed-b ed-r" width="1%" nowrap="">
<xsl:call-template name="dvt_1.automode">
. . .
</xsl:call-template>
</td>
</xsl:if>
</tr>
</xsl:template>

  现在的编辑模版如下图所示:
DSC0008.png
  现在我们的操作变得一目了然:正在编辑Marcia Walsh的信息
  在插入模版上重复上面的操作。
  
  下一次:将继续我们的扩展DVWP系列,为remove表单操作添加一个备用编辑模版。
  
  参考资料
  SharePoint: Extending the DVWP – Part 26: Modifying the Edit Template

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-118671-1-1.html 上篇帖子: (翻译)WF 应用场景指南: SharePoint 与工作流(上) 下篇帖子: [原]SharePoint文档库上传文档
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表