EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:设计工作流

本主题演示如何创建和执行工作流。您将定义任务问题业务类,并设计工作流以创建活动问题的任务。有关工作流模块和相关概念的一般信息,请参考工作流模块帮助主题。

注意

移动应用程序不支持工作流模块,因此本主题中描述的方法无法在移动平台中实现。

提示

DevExpress代码示例数据库(http://www.devexpress.com/example=E4523)中提供了完整的示例项目。

这个例子是基于XPO的。有关Entity Framework数据模型的完整示例,请参见如何将工作流模块与Entity Framework数据模型一起使用。XPO的扩展示例在默认情况下安装到%PUBLIC%\ Documents \ DevExpress Demos 19.2 \ Components \ eXpressApp Framework文件夹中的WorkflowDemo中提供。

准备解决方案

调用“应用程序设计器”,并将WorkflowWindowsFormsModule从“工具箱”拖动到“模块”面板。重建解决方案。

Workflow_AddModuleFromToolbox

添加模块后,运行该应用程序一次,以在数据库中创建服务工作流表。这是必不可少的步骤,因为除非存在这些表,否则工作流服务器服务将无法正常运行。

由于工作流将为活动问题创建任务,因此首先声明相应的业务类-IssueTask。该发行业务类将有一个字符串主题属性和布尔活动属性。该任务公务舱将有一个字符串主题属性和引用问题的属性指定为其创建任务的问题。

[DefaultClassOptions]
public class Issue : BaseObject {
    public Issue(Session session) : base(session) { }   
    public string Subject {
        get { return GetPropertyValue<string>(nameof(Subject)); }
        set { SetPropertyValue<string>(nameof(Subject), value); }
    }
    public bool Active {
        get { return GetPropertyValue<bool>(nameof(Active)); }
        set { SetPropertyValue<bool>(nameof(Active), value); }
    }
}
[DefaultClassOptions]
public class Task : BaseObject {
    public Task(Session session) : base(session) { }
    public string Subject {
        get { return GetPropertyValue<string>(nameof(Subject)); }
        set { SetPropertyValue<string>(nameof(Subject), value); }
    }
    public Issue Issue {
        get { return GetPropertyValue<Issue>(nameof(Issue)); }
        set { SetPropertyValue<Issue>(nameof(Issue), value); }
    }
}

现在,您可以配置和部署将执行实际工作流程实例的服务。若要了解如何执行此操作,请参考Workflow Server服务帮助主题。

设计工作流程

部署工作流服务器服务后,运行该应用程序。单击“工作流程定义”导航项,然后使用“新建 操作”创建一个新的工作流程定义。

Workflow_DefinitionNewAction

创建活动任务的创建任务指定为工作流程定义的名称。由于工作流将要跟踪“问题”对象,因此将“问题”指定为工作流定义目标对象类型以为其创建任务。工作流实例仅应针对活动中的问题执行,因此,选中“对象适合标准”复选框,并指定[活动] = True作为相应条件。

Workflow_DefinitionDetailView

注意

如果未选中AllowMultipleRuns属性,则工作流将为每个符合条件的目标对象运行一次。如果您想在对象符合条件时多次重复工作流,请选中此选项。

单击设计器选项卡以调用重新托管的工作流设计器并开始创建工作流逻辑。

Workflow_RunTimeDesigner_Empty

工作流将操纵业务对象,这些业务对象本质上无法序列化。工作流服务器可以尝试将工作流实例卸载到数据库,并在此过程中持久化所有变量,包括那些引用业务对象的变量。由于这些对象不可序列化,因此将发生异常。因此,您必须确保不能将工作流实例卸载到数据库。为此,从工具箱中拖动ObjectSpaceTransactionScope活动并将其拖放到设计图面上。此活动可防止将其工作流实例卸载到数据库,并且专门用于封装业务对象操作。该活动创建并维护对象空间,并且在超出范围时可以提交它。

工作流程设计1

接下来,您需要获取对已针对其执行工作流实例的Issue对象的引用。需要此对象来指定将创建的Task对象的Issue属性值。因此,将GetObjectByKey <T>活动从工具箱中拖放到ObjectSpaceTransactionScope中。请注意,GetObjectByKey <T>是通用活动。因此,将其删除时,将显示一个对话框,要求您指定通用类型参数的值。单击显示的组合框,然后选择“浏览类型...”。找到问题输入您之前声明的类型,然后选择它。现在,活动知道它必须检索一个Issue对象,但是它不知道哪个对象。因此,单击活动的Key字段,然后输入targetObjectId。这是由工作流模块创建的所有工作流定义中可用的输入参数。该参数指定已为其执行工作流实例的持久对象的标识符。

工作流程设计2

现在,已将活动正确配置为检索所需的对象。尽管如此,检索到的对象仍必须存储在某处以供以后使用。为此,请通过单击位于设计图面下方的状态栏上的相应页面名称来调用“变量”页面。选择ObjectSpaceTransactionScope以指定您要创建一个变量,该变量将在工作流实例的整个生命周期中存在。点击创建变量,并指定issue作为其名称,并指定Issue作为其类型。

工作流程_设计3

现在选择GetObjectByKey <Issue>活动,并在该活动的属性网格上将issue指定为Result属性值。这指定必须将检索到的Issue对象存储到本地issue变量中。

工作流程_设计4

获得对Issue对象的引用后,该对象变为活动状态,您需要创建一个相应的Task对象。从工具箱中拖动CreateObject <T>活动,并将其拖放到由橙色三角形表示的GetObjectByKey <Issue>活动的连接点上。当要求提供通用类型参数值时,请指定Task

工作流程_设计5

要存储创建的Task对象,请像使用issue变量一样声明一个任务变量。这些变量之间的唯一区别应该是它们的类型。该任务变量的类型的任务。

工作流程_设计6

选择CreateObject <Task>活动,然后输入task作为其Result属性值。

工作流程_设计7

现在,您需要填充创建的Task对象的属性值。为此,将“分配”活动从工具箱中拖放到CreateObject <Task>活动的连接点上。将活动的To属性设置为task.Subject,并将Value属性设置为“ New active issue:” issue.Subject

工作流程_设计8

从工具箱中再拖动一个分配活动,将其拖放到现有分配活动的连接点上。将新的Assign活动的To属性设置为task.Issue,将Value属性设置为issue

工作流程_设计9

保存完成的工作流程。请注意,新创建的工作流程定义处于非活动状态,并且不会由工作流程服务器服务执行。因此,您将需要使用“激活操作”。

Workflow_ActivateAction2

激活工作流程定义后,您可以对其进行测试。单击“活动”复选框来创建问题,然后切换到“任务列表视图”。您可能需要稍等片刻并刷新列表视图,因为默认情况下,工作流实例是由服务器每15秒执行一次的。如果已正确配置和部署了工作流服务器服务,则将看到已创建一个新任务

工作流程_设计_最终

相关文章

转载保留此链接,注明出处