SharePoint:扩展DVWP - 第8部分:挂接了工作流列表表单操作
上一次我们讨论了在挂接工作流之前列表表单操作链接的组成形式。在本文中,让我们看一下在创建好工作流后发生了哪些变化。
继续上一次未完成的操作,创建一个简单的工作流,其中要用到所有的表单字段。(具体做什么操作都无所谓,只要用到所有的表单字段就可以了。因为不论如何,我们都要修改该工作流操作。)
现在,我们已经创建好一个工作流了,让我们看一看该操作链接HREF中的 JavaScript调用现在变成什么样的了。
之后
<a href="javascript: {ddwrt:GenFireServerEvent(concat('__workflowStart={{A50B3A56-0C82-43E3-917E-D37E2E036F3B},New,{F6244C84-AAE5-45E0-9C71-60F6AB31F584},ff1_x007b__x0024_Pos_x007d_={ff1',$Pos,'}*ff2_x007b__x0024_Pos_x007d_={ff2',$Pos,'}*ff3_x007b__x0024_Pos_x007d_={ff3',$Pos,'}*ff4_x007b__x0024_Pos_x007d_={ff4',$Pos,'}*ff5_x007b__x0024_Pos_x007d_={ff5',$Pos,'}*ff6_x007b__x0024_Pos_x007d_={ff6',$Pos,'}*ff7_x007b__x0024_Pos_x007d_={ff7',$Pos,'}*};__commit'))}">保存文件</a>
哇哦!真是多了不少的代码。但还是让我们将其拆分开,看个究竟。
这里实际上只多了一个concat()函数,其目的只是传递一些变量,以便在运行commit函数的同时触发自定义操作(__workflowStart):
1、ddwrt:GenFireServerEvent() - 这个在之前的代码中也见过。之前它是接收一个字符串。在这里仍旧是接收一个字符串,只不过这次的字符串变得有点长。
2、concat() - 连接一大堆由逗号分隔的字符串和/或变量,并输出成一个长字符串。在该函数内,我们可以看到所有的操作都作为连接体的一部分,并且以创建工作流时我们设置的顺序排列:
I. __workflowStart - workflowStart函数需要4个参数:
i.该工作流的GUID
ii.一个字符串:‘New'(有人知道这里有哪些可用的选项吗?)
iii. 另一个GUID(有人知道它代表了什么吗?)
iv. 一长串由星号分隔的若干个名值对,代表了该表单的字段及其所包含的值——谢天谢地,这一部分正是我们所关心的。这一长串参数使用如下语法:
fieldname1=value1*fieldname2=value2*…fieldnameN=valueN*
II.__commit - 和之前见到的一样,这是一个简单的函数,用于将我们的修改提交回数据库。
所以,第四个参数是这样的:
ff1_x007b__x0024_Pos_x007d_={ff1',$Pos,'}*ff2_x007b__x0024_Pos_x007d_={ff2',$Pos,'}*ff3_x007b__x0024_Pos_x007d_={ff3',$Pos,'}*ff4_x007b__x0024_Pos_x007d_={ff4',$Pos,'}*ff5_x007b__x0024_Pos_x007d_={ff5',$Pos,'}*ff6_x007b__x0024_Pos_x007d_={ff6',$Pos,'}*ff7_x007b__x0024_Pos_x007d_={ff7',$Pos,'}*
或者如下,重新排版,以便更易于阅读:
ff1_x007b__x0024_Pos_x007d_={ff1',$Pos,'}* ff2_x007b__x0024_Pos_x007d_={ff2',$Pos,'}* ff3_x007b__x0024_Pos_x007d_={ff3',$Pos,'}* . . . ff7_x007b__x0024_Pos_x007d_={ff7',$Pos,'}*
每个名值对都具有如下规律:
一个很长的SharePoint生成的字段名,以ff和一个数字(n)开头。数字代表了其在页面中的顺序={ffn_1}
其中"_1"的部分来源于参数$Pos,该参数在客户端会替换成"_1"。然后当它传递给工作流后,表单字段ffn_1的实际值会被插进来,因为它位于{}内,{}内的内容会被页面上相应字段的实际值所替换。
换句话说:如果ff1代表了Name栏,且该表单域的值为“John”...当该名值对传递到工作流中时,应该是下面的样子:
ff1_x007b__x0024_Pos_x007d_=John
(不用担心l类似x00XX的符号。只是转换后的字符串,同样也是为了方便工作流使用。如果从方便人类阅读的角度来看,转换回来应该为ff1(_$Pos),但这似乎并没有使其更具可读性。)
设置处理器样式失败???
你是不是遇到这样的错误信息?
下一次:在接下来的扩展DVWP系列中,我们将讨论为何出现这样的错误,其中的关键点在哪里,以及如何修复它。
参考资料
SharePoint: Extending the DVWP – Part 8: Creating a Form Action Workflow – The After Math