none
designer设计工作流,如何获得上文指定的下一部的操作人并把任务分配给他 RRS feed

  • 问题

  • 一个简单的审批工作流。需要达成的大概要求就是,审批人审批通过以后,指定下一部的执行人。然后将任务分配这个这个执行人执行。

    使用“从用户处收集数据”把任务分配给审批人,在收集的表单里面增加了一项用户组(命名为“执行用户”)来选择下一部的执行人。

    然后继续使用“从用户处收集数据”,把“用户”处配置成在工作流中查找,选择关联:任务列表,选择上一部中表单里面的“执行用户”,下面选择匹配上一部的ID。

    但是实际操作的时候审批用户审批通过以后,下一部的分配人员变成了空。但是我的LOG里面可以看到我取到了这个用户。(LOG里面输出了1条分配给XXX的记录)

    怎么才能让下一部的分配人员可以变成我在审批时选择的那个用户以达到我的目的呢?

    2012年11月12日 8:06

全部回复

  • Hi gundamboy,

    在你的工作流中你是分配了一个待办事项给你的用户吗? 你说你的分配人员员变成了空 是怎么回事呢? 按道理你从用户收集数据,那么你的审批之后,就可以分配一个待办事项给你的用户,一旦你的用户完成这个任务,那么这个工作流就完成了。

    你倒是可以参考博客园中的一篇博文的。

    http://www.cnblogs.com/meiweijun/archive/2011/08/22/2149579.html

    Thanks,

    Jack

    2012年11月13日 7:22
    版主
  • 如图,问题出在“从 任务:执行人员 处收集XXXXX” 这里。“执行人员”这一项是我从上文的 “从 行长审批 处收集 行长审批单”里收集的数据,类型是用户或者用户组。

    我希望上一部指定的这个用户可以成为我流程下一部的执行人。

    但是测试的时候发现,行长审批通过以后,流程的下一步因为分配对象那一栏变成了空白(即没分配给任一用户)导致流程死锁。

    而我在前面的记LOG得操作里面可以看到,”任务:执行人员“这个数据是可以正确取到的,LOG记录里面是有的。

    中间的“将 完成任务 分配给 任务:执行人员” 一行是我后来尝试的时候加进去的。

    2012年11月14日 2:01
  • Hi guangdanboy,

    也就是说你的行长审核通过之后,指派给一个人的时候,这个指派的人你是获取不到的。 首先你要到域里面去检查这个人是不是在一个安全组里面, 还有这个人的必要属性在不在。比如邮箱、地址、和其他比较重要的属相。

    还有一个就是 我建议你 设置一个工作流变量来存储 这个用户, 当行长审批通过之后,在指派执行人的时候,你可以将这个人存储到工作流变量中,然后用的时候,再取出来。

    Thanks,

    Jack


    2012年11月14日 3:20
    版主
  • 这个用户没有工作组,做的时候为了简单,相关信息都没有设置。但是应该不影响分配任务吧,如果我直接写死分配给这个用户貌似没问题。如果需要,那我去维护一下也不麻烦。

    第二个,你建议的用一个工作流变量来储存,用什么类型的变量呢?字符串?再取出来的时候直接赋值给“从 用户处收集数据”可以么?

    而且你说这个指派的人我获取不到,但是事实是我的“将 任务:执行人员 记录到工作流历史记录列表”里面是可以取到这个用户的,我的历史记录里面可以清楚的看到 “将任务分配个 XXX用户 ”这条记录,而这个XXX用户就是我在审批表单里面选择的那个人。我觉得奇怪的就在于,我要用这个值,再把它赋值回去的时候,为什么就认不出来呢?

    你的这个建议,仅仅相当于用一个中间变量来过度一样。我的流程里面,像审批意见,审批的结果(通过还是拒绝),我都可以取到,也可以使用。当然了,这些类型可能比较简单,都是字符类型的变量,是不是用户类型的就比较复杂呢?

    但是总应该有一个办法可以实现指定流程下一步的执行人,而不是只能全部写死吧。

    2012年11月14日 9:12
  • Hi gundamboy,

    其实是这样的,你的行长在SharePoint 中指定一个人的时候 比如是 ITDC\zhangsan, 但是SharePoint在存储的时候并不是 ITDC\zhangsan,  而是用数字编号和#号构成。比如是03;#ITDC\zhangsan .  这才是真正的值,显示的时候,#和;都不显示的。当你取出这个值,赋给designer的时候,估计designer是不认识的, 因为designer 只认识 ITDC\zhangsan.

    所以我建议你取出来ITDC\zhangsan 之后,就保存在工作流的变量中,用的时候再从变量中取出来。不要从SharePoint中再读取出来,因为你读取出来的值是包含分号和# 号的.

    Thanks,

    Jack




    2012年11月15日 2:06
    版主
  • 确实,我以前用字符串输出的时候是带数字编号和#号的。如果我用工作流变量保存的话,工作流变量选择字符串类型么?

    赋值回去的时候,又要选择什么类型呢?

    我用字符串保存,回来的时候还是字符串貌似不行啊。

    2012年11月15日 2:41
  • 版主给力点啊,就差一点帮我解决了这个问题吧。
    2012年11月19日 1:48
  • Hi Gundamboy,

    你通过工作流中的lookup  去找到这个人比较好,不要去读取你的收集数据。

    Thanks,

    Jack

    2012年11月19日 4:01
    版主
  • 按照你的建议,我新建了一个字符串型的变量next来保存我在行长审批表单中“执行人员”这个数据。

    然后在 “从 变量:next 处收集 XXXX”这里用字符串类型在复制给用户。

    以上所有return field as 都是选的as string。

    为什么还是不行呢,还是认不出我这个用户……

    而且版主你的图里面,选择current item(中文版的应该是当前项目吧)的话,在field from source里面是找不到我前面表单里面的输入项的。
    2012年11月19日 7:02
  • 补2个图,一个是用next变量保存我指定的用户的,一个是重新赋给“ 从 用户处收集数据的 ”

    2012年11月19日 7:12
  • Hi gundamboy,

    我的截图中是选择工作流查找用户,不是选择变量的。请参考图中的红色圈圈。

    Thanks,

    Jack

    2012年11月20日 1:48
    版主
  • 我有点糊涂了,前面你的建议告诉我要用中间变量做缓存的。现在又不要了么?

    我一开始就是这么做的啊,在分配任务的时候就是用的这个工作流查找用户,然后去取前面收集表单里面“执行人员”的数据。具体配置和我贴的第一张图一样。

    但是你告诉我需要用一个变量保存一下,我才改成现在这样。

    然后你又绕回去了。我现在彻底绕不出来了,到底怎么弄……


    2012年11月20日 3:32