EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

模型差异存储

使用“模型编辑器”进行的UI自定义称为“模型差异”,可以以不同的方式存储。XAF有一个ModelStoreBase类,其后代定义了存储Model Differences的方法。

存储模型差异的方法

ModelStoreBase类有四个主要后代。

  • FileModelStore ”用于将模型差异存储在XAFML文件中。
  • ResourcesModelStore ''用于在运行时从资源加载模型差异。
  • ModelDifferenceDbStore ”用于将模型差异存储在数据库中。
  • ASP.NET应用程序使用CookiesModelDifferenceStore ''将用户模型差异存储在cookie中。

默认情况下,使用“解决方案向导”创建的XAF应用程序使用以下“模型差异”存储技术组合。

  • 使用Visual Studio进行的应用程序项目的自定义存储在FileModelStore中
  • 使用Visual Studio进行的Module项目的自定义存储在资源中,并由ResourcesModelStore加载。
  • 由禁用了安全系统的WinForms应用程序的最终用户进行的自定义存储在FileModelStore中
  • 由禁用了安全系统的ASP.NET应用程序的最终用户进行的自定义存储在CookiesModelDifferenceStore中
  • 由启用了安全性的WinForms和ASP.NET应用程序的最终用户进行的自定义存储在ModelDifferenceDbStore中

模型差异层

应用程序模型具有分层结构。图层按重叠顺序在下面列出。

  1. 集成的模型差异''是在Module项目中进行的UI定制,并存储在应用程序程序集中。
  2. 默认情况下,在Application项目中进行了管理员的模型差异''UI自定义,并已将其应用于所有用户。
  3. 用户的模型差异-最终用户进行的UI自定义。

如果同一参数的值在两层或更多层中不同,则实际值将从具有更高编号的层中获取。要了解有关应用程序模型的分层结构的更多信息,请参阅“应用程序模型基础”主题。

您可以为管理员和用户模型差异分配不同的存储类型。订阅XafApplication.CreateCustomUserModelDifferenceStore事件以更改用户模型差异存储类型,并订阅XafApplication.CreateCustomModelDifferenceStore来更改管理员的模型差异存储类型。下表列出了默认的存储类型。

WinForms应用程序的默认存储类型 ASP.NET应用程序的默认存储类型 移动应用程序的默认存储类型
集成模型差异 组装资源 组装资源 组装资源
管理员型号差异 FileModelStore FileModelStore FileModelStore
用户模型差异(无安全系统) FileModelStore CookiesModelDifferenceStore 不支持
用户模型差异(启用安全系统) ModelDifferenceDbStore ModelDifferenceDbStore 不支持

档案储存

为了将模型差异存储在文件中,XAF使用* .xafml文件,可以通过模型编辑器对其进行编辑。* .xafml文件有两种类型。

  • 模型差异''包含常规的UI定制
  • 模型差异方面''包含本地化的UI定制

ModelDiffAspects

提示

要了解有关应用程序模型中字符串本地化的更多信息,请参阅“本地化基础知识”主题。

下表显示了不同的* .xafml文件的名称和位置。

型号差异 模型差异方面 地点
集成模型差异 Model.DesignedDiffs.xafml Model.DesignedDiffs.Localization。<语言代码> .xafml 组装资源
管理员型号差异 Model.xafml 型号。<语言代码> .xafml 申请文件夹
用户模型差异 Model.User.xafml Model.User。<语言代码> .xafml 应用程序文件夹或%USERPROFILE%\ AppData文件夹。

使用appSettings部分中的UserModelDiffsLocation键在App.config文件中指定用户模型差异位置。

<appSettings>
    <!-- ... -->
    <add key="UserModelDiffsLocation" value="CurrentUserApplicationDataFolder"/>
    <!-- ... -->
</appSettings>

可能的值为:

价值 描述
没有任何 用户差异不会保存。
应用文件夹 用户差异存储在应用程序工作文件夹中(连同应用程序可执行文件一起)。
CurrentUserApplicationDataFolder 用户差异存储在用户配置文件(%USERPROFILE%\ AppData文件夹)中。

默认值为ApplicationFolder

数据库存储

提示

请参阅“如何:在数据库中存储应用程序模型差异”主题,以了解如何在现有应用程序中启用数据库存储

为了将模型差异存储在数据库中,XAF使用在以下接口中实现的持久类。

实现这两个接口的对象彼此之间是一对多的关系(一个“模型差异”集合具有许多“模型差异方面”)。

ModelDiffs_DB_Tables

使用IModelDifference.UserId属性将每个模型差异分配给特定用户。空的UserId表示当前的模型差异由所有用户共享,并与他们各自的模型差异叠加在一起。每个用户在不同的上下文中可以具有各种模型差异(例如,一个用于WinForms,另一个用于ASP.NET应用程序)。使用IModelDifference.ContextId属性指定上下文。

实现IModelDifferenceAspect接口的对象还存储应用程序本地化。默认情况下,应用于所有语言的方面在IModelDifferenceAspect.Name属性中具有一个空字符串。

重点

如果您使用集成安全性模式或中间层服务器,请确保所有用户都具有对ModelDifferenceModelDifferenceAspect类型的读/写访问权限(具有只读权限的用户在退出时不能保留应用程序自定义设置)。Model.xafml文件导入操作需要读写权限。在“中间层”方案中,还需要“创建”权限。

注意

作为授予用户只读权限的替代方法,可以使用WinApplication.IgnoreUserModelDiffs属性忽略用户的Model Differences

管理界面

为了轻松管理存储在数据库中的模型差异,您可以按照如何:启用管理UI来管理用户的模型差异一文中的说明添加一个额外的导航项。

管理用户界面包括位于“工具”类别中的以下“操作”。

DbModelDiffs_Actions

  • 创建模型差异''在所有现有上下文中为所有用户创建一个空的应用程序模型差异。
  • 复制模型差异''将打开一个对话框,用于将所选用户的模型差异复制到另一个用户。在此对话框中,您可以选择“覆盖目标模型差异”,或使用“复制行为”选项合并源和目标。

    DbModelDiffs_Copy

  • 导出模型差异”将所选用户的模型差异保存到<应用程序文件夹> \ ExportedModelDifferences \ <用户名> \ Model.User.xafml”文件中。
  • 导入共享模型差异''将在Visual Studio中创建的共享模型差异(Model.xafml文件)加载到共享模型差异对象。
  • 重置模型差异''为所选用户清除模型差异。

IModelDifference的财产用户ID定义模式差异集的所有者。有一个用户友好的非持久IModelDifference.UserName属性,其中包含“模型差异”集所有者的名称。管理员的模型差异IModelDifference.UserId属性中以空字符串存储在对象中,并命名为“ Shared Model Difference”。此文本是从位于“本地化” | “应用程序模型”中的可本地化值加载的。文字| SharedModelDifferenceName

当用户注销时,将保存用户的型号差异,但是管理员可以在用户仍登录到应用程序时更改他们的型号差异。在这种情况下,管理员所做的应用程序模型定制将丢失。为了处理这种情况,添加了IModelDifference.Version属性。每次管理员更改应用程序模型时,以及当用户注销时IModelDifference.Version属性值大于登录时的值(管理员在用户处于应用程序中的情况下进行更改)时,该值都会增加。 ,则不会保存用户的更改,而管理员的更改将保留。

共享模型差异管理

解决方案向导将可在数据库中存储共享模型差异(管理员设置)的代码添加到WinModule.csWinModule.vb)和WebModule.csWebModule.vb)文件中,但已注释掉。因此,默认情况下始终会加载设计时设置。您可以根据需要手动取消注释XafApplication.CreateCustomModelDifferenceStore事件订阅。请注意,一旦启动应用程序,Model.xafml文件的内容将被加载到数据库中。如果由于共享模型差异而已经存在数据库记录,则对该文件的进一步更改将被忽略。要从重新加载设置Model.xafml启用管理UI并使用Import Shared Model Difference Action(或删除Shared Model Difference记录并重新启动)。

注意

一起使用时,不支持以下功能组合。

在这种配置中,您的应用程序从数据库加载有关自定义持久性字段的信息,然后更新数据库架构。但是,建立数据库连接后,线程安全数据层不支持更改数据模型。

相关文章

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