5

这是场景。用户上传一个 Excel 文件,这将启动验证文件的工作流程,将其转换为几个不同的文件,然后根据转换对数据库执行更新。上传后,需要团队成员审核结果才能继续流程。

我正在使用 Ruby,并发现信号和计时器是在 SWF 中实现此目的的方法。但是,缺少或不存在 Ruby 示例,我需要一些帮助来了解使用 Ruby 将如何工作。

到目前为止,我们的理解是安排了一个 Timer 活动,该活动基本上暂停流程,直到计时器到期(此时我可以取消工作流程或向员工发送电子邮件并设置另一个计时器)或向工作流程发送信号以启动下一步。决策者将处理信号,然后启动适当的活动。

对其他来源的任何想法或方向将不胜感激。

谢谢,托马斯

4

2 回答 2

3

鉴于您并没有真正提出具体问题,因此提供“答案”有点困难。我同意你的观点,即使用定时器和信号是你想要的。

您没有指定团队如何收到有关审核的通知。我假设您通过电子邮件通知他们并将他们定向到可以查看更改的某个网站,然后单击链接以批准或不批准。单击 Approve 链接将向 Web 服务器发送一个请求,该请求将“发出”SWF 信号,表明审查已被批准。单击“不批准”的链接将“发出”SWF 信号,表明审核未获批准。你提到如果没有人对审查采取行动,你想重新通知团队(或者可能升级到经理)。假设此重新通知发生在 48 小时后。重新通知后,您在假设不批准之前再授予他们 72 小时。

在我看来,您的工作流程如下所示:

  1. 用户上传文件并启动工作流程
  2. 决定任务计划“TransformActivity”
  3. TransformActivity 运行,将数据转换成不同的文件,成功完成
  4. 决定任务计划“UpdateDatabaseActivity”
  5. UpdateDatabaseActivity 运行,更新数据库,并成功完成
  6. 决定任务计划“EmailTeamActivity”
  7. EmailTeamActivity 运行,向团队发送电子邮件,并成功完成
  8. Decider Task 将 Timer 安排为 48 小时。

如果在 48 小时内收到表示批准或不批准的信号:

  1. 决策者任务安排“RecordFinalDecisionActivity”
  2. RecordFinalDecisionActivity 将运行,将批准(或不批准)记录到数据库中,并成功完成。
  3. Decider Task 将关闭工作流,因为它已完成。

如果没有收到信号并且计时器触发(48 小时后):

  1. 决策者任务计划“EmailTeamAndManagerActivity”
  2. EmailTeamAndManagerActivity 运行,向团队和经理发送电子邮件,并成功完成。
  3. 决策者任务将另一个计时器安排为 72 小时。

如果在给定的额外 72 小时内收到指示批准或不批准的信号:

  1. 重复与“如果在 48 小时内收到指示批准或不批准的信号”部分相同的逻辑。

如果没有收到信号并且计时器触发(在额外的 72 小时之后):

  1. 此时,工作流可以假设它是“不批准”,安排“RecordFinalDecisionActivity”并在该活动完成后关闭工作流。

您不想进行“审查”活动的原因是因为该任务已安排好,然后一些活动工作人员需要回复成功。那将如何运作?当有人单击批准或不批准链接时,对网络服务器的请求将不得不从任务列表中拉下活动。但是,如果任务列表有多个活动,SWF 只会给出其中任何一个。它可能找不到正确的。现在,您可以争辩说您可以在不同的任务列表中安排不同的审查,但这只是麻烦和乏味。

完成信号以指示“外部”事件,这非常重要。关于 Signals的SWF 文档在谈论 Signals 方面做得很好。这是关于如何使用 Timers 和 Signals 的 SWF 文档。至于如何使用 SWF 和 Ruby,我真的帮不上忙。我仅通过使用 AWS Flow Framework 将 SWF 与 Java 结合使用。

于 2013-04-07T05:09:23.643 回答
1
  1. 用户上传 excel 文件,执行“StartWorkflowExecution”,将决策任务排队
  2. 决策工作者通知流程是新的/“第一阶段”,它安排“转换文件”活动任务
  3. 活动工作者拿起任务,并执行“转换文件”活动,完成后会执行“RespondActivityTaskCompleted”,结果是“转换完成”,将决策任务排入队列
  4. 决策工作者拿起决策任务,通知转换已完成并安排新的活动任务
  5. 活动工作者拿起活动任务,通知它是给团队成员的(根据决策工作者在安排活动任务时给出的指示),团队成员得到通知,以某种方式执行他的动作,然后以某种方式通知将回复的活动工作者“响应活动任务已完成”

我认为不需要计时器或信号,它只是简单的流程。如果您想要重复事件、超时和/或中断流程,这两个概念很有用。

请注意,您可以通过使用任务列表来区分活动工作者(例如,用于自动化工作的活动工作者与用于人类参与者的活动工作者,等等)。

于 2013-04-06T22:44:19.550 回答