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

[经验分享] SharePoint:扩展DVWP

[复制链接]
累计签到:8 天
连续签到:1 天
发表于 2015-9-29 13:17:12 | 显示全部楼层 |阅读模式
  如果你尝试在数据视图Web部件(DVWP)中通过表单字段添加工作流类型的列表表单操作链接(或者如果你根据上一次文章中的步骤亲自动手验证),则很有可能当你回到设计视图时看到了这个错误信息:
  设置处理器样式失败
   DSC0000.png

  请留意一下错误信息所说的,无法解析对变量或参数'Pos'的引用。变量或参数可能未定义或不在范围内。正是这个原因,该参数默认情况下不在当前范围内,因为它没有被传递到这个用于展现保存和取消按钮的特定的模板中。
  1、在代码视图中,搜索:template name="dvt_1.automode":



<xsl:template name="dvt_1.automode">
<xsl:param name="KeyField" />
<xsl:param name="KeyValue" />
<xsl:param name="Mode" />
. . .
  2、既然该范围内未定义Pos参数,就让我们进入该范围内。将Pos参数添加到该模板所需的xsl:param集合中:



<xsl:template name="dvt_1.automode">
<xsl:param name="KeyField" />
<xsl:param name="KeyValue" />
<xsl:param name="Mode" />
<xsl:param name="Pos" />
. . .

  
很容易。但是...
  3、如果调用这个模板时没有包含Pos的xsl:with-param,我们还是会遇到麻烦。也就是说如果你添加了一个访问表单域的工作流,则每一个调用该模板的地方都必须同时传递Pos。
  当我们搜索该webpart时,发现有三个<xsl:call-template name="dvt_1.automode">调用,分别对应默认值模板,编辑模板和插入模板。我们要做的很简单,只要通过<xsl:with-param name="Pos" select="$Pos"/>向下传递即可。因为Pos已经作为变量或参数定义在该模板中了(对于编辑和插入模板),所以只需简单的在当前范围内获取Pos的当前值进行传递即可。



<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"/> // 很简单,添加这一行,以便将 $Pos的值传下去
</xsl:call-template>

  
4、然而,默认值视图中的dvt_1.rowview模板也调用了dvt_1.automode,但是在其范围内并没有$Pos。所以,我们需要首先传给该模板,然后再从这里传下去。
  i. 搜索:template name="dvt_1.body"



<xsl:template name="dvt_1.body">
<xsl:param name="Rows"/>
<xsl:for-each select="$Rows">
<xsl:choose>
<xsl:when test="$dvt_1_form_editkey = ddwrt:EscapeDelims(string(@ID))">
<xsl:call-template name="dvt_1.rowedit">
<xsl:with-param name="Pos" select="concat('_', position())" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="dvt_1.rowview" />
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>

  
这段代码是该表单body 部分的全部模板。它既会用于渲染编辑视图,也会用于选择标准的行视图。看一下中间部分的代码。
  ii. 这是所谓的空标记,也就是说该标记的起始和结束标记都写在了一起。为了展开这个标记,我们需要从结尾位置删除 / ,并在后面添加一个结束标记</xsl:call-template>。这样,我们就可以添加with-param标记了,比如在模板中调用dvt_1.rowedit:



<xsl:otherwise>
<xsl:call-template name="dvt_1.rowview">
<xsl:with-param name="Pos" select="concat('_', position())" />
</xsl:call-template>
</xsl:otherwise>
  iii. 在该代码后面,你很容易就可以找到dvt_1.rowview的模板定义(如果不好找,就搜索template name="dvt_1.rowview")。现在,我们需要在这个模板中添加$Pos参数来接受我们刚刚在call-template中添加的with-param的值。



<xsl:template name="dvt_1.rowview">
<xsl:param name="Pos"/>
. . .

  
至此,你可以从DVWP中调用一个工作流并访问用户刚刚输入或编辑的内容了。
  确实,本文涉及到一些高级的XSLT编辑工作。
  下一次:如果我们可以传递一个变量给你的工作流岂不妙哉?完全没问题。在接下来的扩展DVWP系列中,我们将介绍这部分内容。
  
  参考资料
  SharePoint:Extending the DVWP - Part 9:Oops!Failed Setting Processor Stylesheet

运维网声明 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-120513-1-1.html 上篇帖子: SharePoint 2010 页面引用 Reporting Services 展现 List 报表 下篇帖子: SharePoint:扩展DVWP
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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