问题标签 [state-machine-workflow]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
943 浏览

workflow - 可以使用状态机模式完成并行拆分工作流吗?

或者我应该说,实现并行拆分任务的正确方法/工具是什么?

对于工作流中涉及的实体,我有一个单一的状态/状态。我可以为每个并行路径添加一些额外的状态,但有没有更好的方法来做到这一点?

谢谢

编辑

这还不是一个完整的答案,但经过大量研究后我最终做的是为状态机创建一种包装器。我查看的现有工具开销太大,无法满足我的需求。每个状态机都是一个“进程”,进程的每个状态都是“会话”的一部分。一个会话又具有一个会话密钥,它只是每个进程当前状态的集合。

我将会话密钥令牌序列化为字符串,因此持久会话看起来像这样:

各种状态的触发器可以将并行拆分指定为目标。实际上它似乎工作得很好。

0 投票
1 回答
1399 浏览

c# - 如何将事件发送到 Windows Workflow 4 状态机以推进状态?

我正在考虑使用 Windows 工作流状态机 (.NET 4.5) 但需要一些指导。

我有一个带有状态机的 WCF 服务,用于通话。假设这些状态是:

  • 初始化
  • 铃声
  • 连接的
  • 忙碌的
  • 没有答案
  • 断开连接

可能的过渡是:

  • 称呼
  • 连接
  • 忙碌的
  • 没有答案
  • 断开

该服务公开了一个使用呼叫 ID 和事件(“呼叫”、“连接”、“断开连接”等)调用的方法。我需要能够加载与该调用 id 对应的特定状态机实例并传入事件,以便它可以进入下一个状态(或者如果从当前状态没有相应的转换,则不更改状态)。

例如,如果状态机处于 Ringing 状态并且我们得到“connect”,我想将状态移动到 Connected,但是如果我们得到“busy”,我们将移动到 Busy 状态。但是,如果我们得到“断开连接”事件,状态机应该保持在振铃状态。

我已经用 Stateless 成功地做到了这一点,但我想在 Windows Workflow 中尝试一下。

MSDN 示例并未真正显示由外部事件驱动的状态机。

1)无论它处于什么状态,什么是向状态机发送转换的好方法?2)在给定某种ID的情况下,将特定状态机实例(即状态和变量)加载/保存到数据库(不一定是SQL Server)的好方法是什么?

0 投票
1 回答
377 浏览

c# - 无法加载 StateMachineStateTracker 的实例。也许它在WF中达到最终状态

首先,我对 WorkFlow Foundation 4.5 完全陌生。我们使用 WF 引擎来管理案例实体中的状态。我们决定使用 WF,而不是构建我们自己的状态机。主要是因为我们的客户有我们想在 xaml 中绘制的大型流程(不是那么复杂)。每个人都很容易真正理解这个过程并谈论它。

问题是我们转换到结束状态,最终状态,导致 StateMachineStateTracker 实例在我们加载时为空。下面的这段代码完美地适用于所有转换,我们可以在恢复书签后加载跟踪器实例以查看新的当前状态是什么。

上面的代码实例化了一个 WorkFlowApplication 实例。

protected bool Execute(Activity process, Case @case, string transition) { WorkflowApplicationInstance instance = null; 使用 (var store = new DisposableStore()) { instance = WorkflowApplication.GetInstance(@case.InstanceId, store.Store);

上面的代码旨在从一个状态转换到下一个状态(字符串转换),我们还想为我们的 Case 类设置新状态。

当我们想从最终状态之前的状态执行此操作时,这将失败。没有例外。没有登录输出窗口。没有什么。只是那行

var trackerInstance = StateMachineStateTracker.LoadInstance(@case.InstanceId, wfApp.WorkflowDefinition, _connectionString);

返回空值。这是因为您无法使用处于最终状态的实例加载 StateMachineStateTracker(不确定它是否真的达到最终状态)。

有人对这个问题有任何线索吗?我有一种感觉,这是我们忘记的基本内容。

0 投票
0 回答
131 浏览

wcf - 状态机工作流中的 OperationContext (WF 4.5)

所以我正在努力解决以下情况。
我正在尝试将 DI (Autofac) 集成到 xamlx 工作流服务中。
由于这样的服务只是 WCF 托管服务,我想我可以看看 Autofac 的 WCF 集成实现并对其进行调整,以便它可以与 WorkflowServiceHost(Factory) 一起使用。
虽然我设法做到了这一点(添加一个 InstanceContextInitializer,它在当前 OperationContext 上放置一个 IExtension 以为 WCF 请求启动一个新的 LifetimeScope)并使用简单的顺序工作流成功地对其进行了测试,但这不适用于状态机工作流!

好吧,它确实在该工作流的第一个状态下工作,但是在转换到下一个状态后,OperationContext 就消失了。
所以我的问题是,有没有人在做类似的事情?对 xamlx 状态机工作流服务的每个 WCF 请求都有一个生命周期范围?

现在我想我将不得不使用每个 Activity 的生命周期范围,以便对容器中的已解析对象进行某种控制。

0 投票
0 回答
131 浏览

state-machine - 如何实现涉及多个状态的状态转换

到目前为止,在处理简单的状态机时,我还没有遇到从一种状态转换到另一种状态时上下文需要通过其他状态的情况。也就是说,例如有一个实体具有以下状态:Running 、 ShutdownDisabled,并且从RunningDisabled的转换在功能上经过了Shutdown状态:

问题是就正确的状态机实现而言,我应该如何在涉及两个以上状态的情况下进行这种转换。

此致

0 投票
0 回答
74 浏览

.net - 在运行时扩展 Windows 工作流状态机

在我们的应用程序中,我们有一个状态机工作流程。我们希望允许用户通过为其自定义活动添加新状态来扩展现有工作流程。为了实现这一点,我们正在考虑重新托管工作流设计器,在工具箱中提供一些可供用户使用的必需活动。

在这里,我们希望对扩展工作流程进行一些控制,例如在移入或移出某个状态时执行一些过程。为了实现这一点,我们考虑扩展现有的“状态”类并覆盖一些功能。但不幸的是它是密封类,所以我们不能继承它:(

那么,如何在运行时实现此功能,用户可以扩展工作流程并且我们可以完全控制他们的活动?

0 投票
1 回答
564 浏览

c - 复杂的状态转换:最佳实践

我使用嵌入式的东西,我有一些管理硬件的软件模块。这个模块有状态,状态转换很复杂:根据事件,模块可以从一个状态A到另一个状态,B或者可能到C. 但是,当它退出某个状态时,它应该对硬件执行一些操作,以使其也保持在正确的状态。

对于相当简单的模块,我只有几个这样的功能:

显然,我们需要为函数中的所有状态保留所有必要的操作_state_on_off(),当我们需要移动到另一个状态时,我们只需调用_state_set(new_state)并且状态转换会顺利进行,而与方向无关:执行所有需要的操作。

但它只适用于简单的情况。如果我们在状态MY_STATE__B和之间有一些共同点MY_STATE__C,那么当状态从来回改变时MY_STATE__BMY_STATE__C我们应该只执行缩短的析构/构造?但是当我们进入其他状态(比如 to MY_STATE__A)时,我们应该执行完全销毁。

想到的是子状态。所以我们有一个状态MY_STATE__BC和子状态,比如MY_BC_SUBSTATE__Band MY_BC_SUBSTATE__C;当然我们有它自己的功能,比如_state_bc_on_off(). 即使这已经是一种痛苦,但想象一下更复杂的事情:它变得可怕。

那么,此类事情的最佳实践是什么?

0 投票
0 回答
356 浏览

c# - 如何从代码活动中获取状态机当前状态

我需要一些帮助来了解如何获取状态机的当前状态,以便我可以将其作为接收发送回复活动的一部分返回

所以我有一个 WCF 方法可以触发状态 public string GetResults(int id) 我希望在工作流中获取当前状态并作为字符串返回

我看过这里,这允许将状态记录到输出中,但是我如何通过代码访问它。

谢谢

0 投票
1 回答
1016 浏览

persistence - 我们如何在基于 stateless4j 的状态机中保持状态和转换?

我正在为基于Stateless4j API的工作流管理系统实现状态机。但是,我无法找到一种有效的方法来保持 Stateless4j 中的状态和转换。

作为我们用例的一部分,我们要求在用户返回工作流之前让状态保持 3 到 4 天以上。我们将同时运行多个工作流。

您能否分享您对在基于 Stateless4j 的状态机实现中保持状态的最佳实践的见解?

0 投票
1 回答
191 浏览

triggers - 我们可以在状态机中的两个状态之间有多个触发器吗?

我正在为基于Stateless4j API的工作流管理系统实现状态机。根据有限状态机的概念,两种状态之间是否可以有多个触发器。触发器是在基于 Stateless4j 的状态机中促进状态之间转换的概念实体。如果两个状态之间可以有多个触发器,我们如何在 Stateless4j API 中实现呢?

请分享你的想法!