EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

应用程序模型基础

业务应用程序是复杂的项目。要从头开始构建应用程序,必须实现数据存储,数据可视化,业务逻辑等。使用eXpressApp Framework,只需实现业务模型。默认用户界面会自动生成。为此,eXpressApp框架使用特殊的数据存储,其中包含有关UI的结构化信息-应用程序模型。它是根据应用程序代码和引用的模块中的类声明生成的。本主题详细介绍如何收集应用程序模型信息,以及如何使用它来定制默认UI。

应用模型概述

当您运行WinForms,ASP.NET或Mobile应用程序时,应用程序模型用于创建UI元素。例如,当框架创建显示联系人对象列表的网格编辑器时,每列的可见性,位置,标题和其他设置的信息均来自“应用程序模型”。应用程序模型提供有关业务类,ControllersActionsProperty Editors和其他提供或影响应用程序功能的元素的详细信息。

应用模型信息通常由树表示。树节点通常具有一组实际上指定应用程序模型数据的属性。默认情况下,应用程序模型的组织方式如下:根节点(应用程序)和几个子节点(ActionDesign,BOModel,CreatableItems,ImageSources,NavigationItems,ViewItems,View等)。

应用模型2

应用模型定制

若要查看或自定义应用程序模型的数据,请使用以下方法之一。

  • 在代码中。通过适当的控制器,您可以访问所需的“应用程序模型”节点。有关详细信息,请参见在代码中访问应用程序模型主题。
  • 在设计时。您可以从应用程序的任何项目中运行模型编辑器。通过查看节点(左侧)及其属性(右侧),您可以看到大多数数据已经生成。例如,BOModel节点提供有关在应用程序和引用的模块中声明的所有业务类的信息。要了解有关“模型编辑器”的更多信息,请参阅“模型编辑器”帮助部分。

    Tutorial_BMD_Lesson4_1模型编辑器设计

    您可以自定义任何非只读数据。教程的“ UI定制”部分提供了许多应用程序模型定制的示例。

    您在“模型编辑器”中所做的更改将保存到Model.DesignedDiffs.xafmlModel.xafml文件中,具体取决于打开“模型编辑器”的项目。

    请注意,如果您更改移动应用程序模型,则需要重新构建应用程序。

    要删除在模型编辑器中所做的更改,请删除相应的XAFML文件。当然,您也只能在模型编辑器中(通过“重置差异”上下文菜单)或通过编辑XAFML文件来删除特定的更改。要在MS Visual Studio中打开XAFML文件,请右键单击该文件,然后在调用的窗口中选择“查看代码”。更改以XML格式显示。您可以轻松找到要删除或修改的所需节点或属性。但是,我们建议您尽可能使用模型编辑器,而不要手动编辑XAFML文件。

    注意

    不建议使用应用程序模型来更改可以在代码中更改的设置(请参阅数据模型中的数据注释)。例如,如果您重命名一个类,那么您在“应用程序模型”中对该类所做的所有更改都会丢失。还建议您更改模块项目的模型。如果您为应用程序项目自定义模型,则更改不会基于相同的逻辑应用于其他应用程序。

  • 在运行时。最终用户可以直接通过在运行时调用的模型编辑器来定制应用程序模型,也可以通过修改布局,更改外观等间接地定制应用程序模型。最终用户的定制存储在Model.User.xafml文件中(在WinForms应用程序),会话中(在ASP.NET应用程序中)或数据库中。移动应用程序不支持运行时自定义。您还可以实现自定义存储(请参阅如何:在数据库中存储模型差异)。

应用程序模型的节点结构也是可定制的。您可以将自定义节点和属性添加到自定义节点和默认节点。若要了解如何执行此操作,请参考在代码中扩展和自定义应用程序模型主题。

应用程序模型的分层结构

在应用程序的不同位置自定义应用程序模型时,应注意生成模型的顺序。在内部,应用程序模型具有分层结构。

应用模型

  • 在其基础上,存在零层。该层的生成基于应用程序引用的模块的代码。
  • 更高的是,应用程序的每个模块都有一层,由模块的XAFML文件表示。另外,如果应用程序的引用模块中有XAFML文件,它们也将形成层。这些层的顺序在下图中详细说明。
  • 然后,为应用程序项目的XAFML文件提供了一层。
  • 最顶层是最终用户自定义层,存储在Model.User.xafml文件(在WinForms和Mobile应用程序中),会话(在ASP.NET应用程序中)或数据库中。
  • 最后是主层。它本身不包含任何信息。它充当所有其他层的代理。通常,当您访问应用程序模型时,您将处理主层。

    应用程序模型无法一次完全生成。每个部分在需要时按需生成。当需要从某个节点获取信息时,该请求将发送到主控层。主机检查所需的信息是否已经在零级别生成。如果不是,则在此处生成所需的模型部分。然后,主服务器检查所有其他层,将它们与在零级别生成的信息叠加在一起,然后返回请求的信息。如果这些层包含各种数据,则将最顶层考虑在内。中间层上的信息未修改。

    当需要更改数据时,主节点在顶层创建模型的相应部分(要修改的节点及其父节点),然后将更改保存在那里。

为了收集有关应用程序模型节点的信息,将扫描为其生成模型的项目所使用的所有模块。在每个模块中,将收集来自代码的信息,并扫描引用的模块。下图显示了扫描模块的顺序。

OrderOfModelLoading

此图像说明了一个简单的“ MySolution” XAF WinForms应用程序。的BusinessClassLibraryCustomizationModule系统模块是由所需模块MySolution模块。的MySolutionModuleSystemWindowsFormsModule是由所需模块MySolutionWindowsFormsModule。生成应用程序模型时,将首先扫描BusinessClassLibraryCustomizationModuleSystemModule。由于这些模块在依赖关系树上位于同一级别,因此没有保证的顺序。该系统模块可能会第一个或最后。然后,MySolutionModule扫描SystemWindowsFormsModule。同样,由于这些模块在依赖关系树上位于同一级别,因此它们之间没有保证的顺序。最后,将扫描MySolutionWindowsFormsModule

您可以使用“应用程序设计器”的“模块”部分来了解哪些模块参与了“应用程序模型”的生成。它列出了添加到应用程序项目中的所有模块,添加的模块所使用的模块,等等。除了应用程序和模块设计器之外,还有其他添加模块的方法。例如,您可以在应用程序项目的配置文件中列出所需的模块。有关这些方法的详细信息,请参阅“注册模块的方法”主题。使用所有可能的方法,用于生成应用程序模型的模块列表包括已添加的模块。

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