• 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

  • 相关阅读:
    springCloud学习6(Spring Cloud Sleuth 分布式跟踪)
    springCloud学习5(Spring-Cloud-Stream事件驱动)
    springCloud学习4(Zuul服务路由)
    springCloud学习3(Netflix Hystrix弹性客户端)
    springCloud学习笔记2(服务发现)
    EFCore
    webBrowser.DocumentText重新赋值无效解决方法
    C# SQLite写入和读取DateTime类型
    自定义协议链接 ------2.实践篇
    自定义协议链接 ------1.原理篇
  • 原文地址:https://www.cnblogs.com/Sunmoonfire/p/1811651.html
Copyright © 2020-2023  润新知