SharePoint:扩展DVWP - 第9部分:噢~设置处理器样式失败
2010-08-29 23:37
309 查看
如果你尝试在数据视图Web部件(DVWP)中通过表单字段添加工作流类型的列表表单操作链接(或者如果你根据上一次文章中的步骤亲自动手验证),则很有可能当你回到设计视图时看到了这个错误信息:
设置处理器样式失败
请留意一下错误信息所说的,无法解析对变量或参数'Pos'的引用。变量或参数可能未定义或不在范围内。正是这个原因,该参数默认情况下不在当前范围内,因为它没有被传递到这个用于展现保存和取消按钮的特定的模板中。
1、在代码视图中,搜索:template name="dvt_1.automode":
很容易。但是...
3、如果调用这个模板时没有包含Pos的xsl:with-param,我们还是会遇到麻烦。也就是说如果你添加了一个访问表单域的工作流,则每一个调用该模板的地方都必须同时传递Pos。
当我们搜索该webpart时,发现有三个<xsl:call-template name="dvt_1.automode">调用,分别对应默认值模板,编辑模板和插入模板。我们要做的很简单,只要通过<xsl:with-param name="Pos" select="$Pos"/>向下传递即可。因为Pos已经作为变量或参数定义在该模板中了(对于编辑和插入模板),所以只需简单的在当前范围内获取Pos的当前值进行传递即可。
这段代码是该表单body 部分的全部模板。它既会用于渲染编辑视图,也会用于选择标准的行视图。看一下中间部分的代码。
ii. 这是所谓的空标记,也就是说该标记的起始和结束标记都写在了一起。为了展开这个标记,我们需要从结尾位置删除 / ,并在后面添加一个结束标记</xsl:call-template>。这样,我们就可以添加with-param标记了,比如在模板中调用dvt_1.rowedit:
至此,你可以从DVWP中调用一个工作流并访问用户刚刚输入或编辑的内容了。
确实,本文涉及到一些高级的XSLT编辑工作。
下一次:如果我们可以传递一个变量给你的工作流岂不妙哉?完全没问题。在接下来的扩展DVWP系列中,我们将介绍这部分内容。
参考资料
SharePoint:Extending the DVWP - Part 9:Oops!Failed Setting Processor Stylesheet
设置处理器样式失败
请留意一下错误信息所说的,无法解析对变量或参数'Pos'的引用。变量或参数可能未定义或不在范围内。正是这个原因,该参数默认情况下不在当前范围内,因为它没有被传递到这个用于展现保存和取消按钮的特定的模板中。
1、在代码视图中,搜索:template name="dvt_1.automode":
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的当前值进行传递即可。
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:
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
相关文章推荐
- SharePoint:扩展DVWP - 第5部分:在保存操作提交前做些事情——PreSaveAction()
- SharePoint:扩展DVWP - 第18部分:可维护的下拉框 - 填充关系列表(上)
- SharePoint:扩展DVWP - 第1部分:布局增强 – 在默认值模板和编辑模板中重新排列栏
- SharePoint:扩展DVWP - 第13部分:PreSaveAction()实务——创建变量
- SharePoint:扩展DVWP - 第23部分:工作流实现基于其他字段自动创建标题
- SharePoint:扩展DVWP - 第24部分:写给读者的话
- SharePoint:扩展DVWP - 第19部分:可维护的下拉框 - 填充关系列表(下)
- SharePoint:扩展DVWP - 第25部分:通过SPServices创建列表项实现审计跟踪
- SharePoint:扩展DVWP - 第34部分:使用图标形式的表单操作链接
- SharePoint:扩展DVWP - 第3部分:把DVWP的功能链接放在同一行中
- SharePoint:扩展DVWP - 第30部分:用EasyTabs和筛选使DVWP的数据更具条理
- SharePoint:扩展DVWP - 第2部分:布局增强 – 在插入模板中重新排列栏
- SharePoint:扩展DVWP - 第33部分:修改DVWP中的合计和分类汇总
- SharePoint:扩展DVWP - 第14部分:用jQuery编写PreSaveAction()实务
- SharePoint:扩展DVWP - 第35部分:把所有的内容串起来
- SharePoint:扩展DVWP - 第12部分:从数据源添加更多表单域
- SharePoint:扩展DVWP - 第15部分:通过网站栏实现可维护的下拉框
- SharePoint:扩展DVWP - 第21部分:实现可维护的三级联动下拉框
- SharePoint:扩展DVWP - 第26部分:修改编辑模版
- SharePoint:扩展DVWP - 第31部分:在Insert模版上通过jQuery填写默认值