EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:在工作流设计器启动时禁用持久性活动重新编译

工作流设计器是由真正的.NET类型代表的支持活动。这就是工作流模块为每个设计的活动创建新的.NET类型的原因。每次启动设计器时,驻留在内存中并为设计器提供持久性活动的动态程序集都会重新编译。动态程序集已加载到应用程序域中,并且只有在应用程序关闭时才能释放程序集占用的内存(在.NET中,每个已编译的类型都保留在内存中,直到应用程序重新启动为止)。但是,当所有运行时活动都是基于已编译的WF活动构建的,并且没有重用的运行时活动时,此行为是不必要的。在这种情况下,您可以禁用持久性活动重新编译,并因此减少内存消耗。

注意

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

提示

可在http://www.devexpress.com/example=E4485的DevExpress代码示例数据库中找到完整的示例项目。

  • 使用DevExpress v 19.2 XAF解决方案向导创建WinForms应用程序。
  • 运行应用程序设计器。将WorkflowWindowsFormsModule组件从“工具箱”拖到“模块”窗格。

    Workflow_AddModuleFromToolbox

    在设计器中进行更改后,重新构建您的解决方案。

  • 继承XpoWorkflowDefinition持久类(需要Devexpress.ExpessApp.Workflow.vv 19.2 .dll参考)。在您的自定义后代中,重写CanCompileForDesigner属性,使其始终返回false

    using DevExpress.ExpressApp.Workflow.Xpo;
    // ...
    public class MyWorkflowDefinition : XpoWorkflowDefinition {
        public MyWorkflowDefinition(DevExpress.Xpo.Session session) : base(session) { }
        public override bool CanCompileForDesigner {
            get { return false; }
        }
    }
    
  • 重建您的解决方案。运行模型编辑器,然后导航到“视图” | “视图”。MyWorkflowDefinition_DetailView | 布局节点。调整布局以使其类似于基类的布局(即,使所需的基类的属性可见)。下图说明了这种自定义。

    PersistentActivities_Layout

  • 返回到应用程序设计器。在设计器的“模块”窗格中,聚焦WorkflowModule组件。在“属性”窗口中,将WorkflowModule.WorkflowDefinitionType属性设置为MyWorkflowDefinition

    PersistentActivities_DefinitionType

现在您可以检查结果了。运行该应用程序,以查看运行时活动未添加到“工作流设计器”工具箱中。结果,该应用程序需要更少的内存。

与这个简单的示例相反,真实世界的应用程序将另外包括Workflow Server Service。因此,您应该在服务器端指定相同的工作流程定义类型。实例化WorkflowServer对象后,可以在WorkflowServerService.cs(WorkflowServerService.vb)中声明的OnStart方法中完成此操作。

server = new WorkflowServer("http://localhost:46232", objectSpaceProvider, objectSpaceProvider);
server.WorkflowDefinitionProvider = new WorkflowDefinitionProvider(typeof(MyWorkflowDefinition));

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