XAF:如何让用户在运行时个性化界面并将个性化信息保存到数据库中 win/web/entityframework/xpo
public sealed partial class MySolutionWindowsFormsModule : ModuleBase {
private void Application_CreateCustomModelDifferenceStore(Object sender, CreateCustomModelDifferenceStoreEventArgs e) {
e.Store = new ModelDifferenceDbStore((XafApplication)sender, typeof(ModelDifference), true, "Win");
e.Handled = true;
}
private void Application_CreateCustomUserModelDifferenceStore(Object sender, CreateCustomModelDifferenceStoreEventArgs e) {
e.Store = new ModelDifferenceDbStore((XafApplication)sender, typeof(ModelDifference), false, "Win");
e.Handled = true;
}
//...
public override void Setup(XafApplication application) {
base.Setup(application);
application.CreateCustomModelDifferenceStore += Application_CreateCustomModelDifferenceStore;
application.CreateCustomUserModelDifferenceStore += Application_CreateCustomUserModelDifferenceStore;
}
}
注意红色的代码:
1.MySolutionWindowsFormsModule 是指 你的项目.Module.Win这个project.
2.在setup中的2行代码增加事件,CreateCustomModelDifferenceStore 是指全局的模型设置信息。
3.CreateCustomUserModelDifferenceStore ,是指当前用户的模型信息。
4.e.Store = new ModelDifferenceDbStore((XafApplication)sender, typeof(ModelDifference), true, "Win"); 其中,true代表是否为全局设置,“win"代表平台,当然在web中,需要写"web"。web项目是:你的项目.Module.Web
public sealed partial class MySolutionAspNetModule : ModuleBase {
private void Application_CreateCustomModelDifferenceStore(Object sender, CreateCustomModelDifferenceStoreEventArgs e) {
e.Store = new ModelDifferenceDbStore((XafApplication)sender, typeof(ModelDifference), true, "Web");
e.Handled = true;
}
private void Application_CreateCustomUserModelDifferenceStore(Object sender, CreateCustomModelDifferenceStoreEventArgs e) {
e.Store = new ModelDifferenceDbStore((XafApplication)sender, typeof(ModelDifference), false, "Web");
e.Handled = true;
}
// ...
public override void Setup(XafApplication application) {
base.Setup(application);
application.CreateCustomModelDifferenceStore += Application_CreateCustomModelDifferenceStore;
application.CreateCustomUserModelDifferenceStore += Application_CreateCustomUserModelDifferenceStore;
}
}
下面有介绍如何启用管理UI。
如果你使用Entity Framework, 需要在DbContext中做如下声明:
using DevExpress.Persistent.BaseImpl.EF;
// ...
public class MyDbContext : DbContext {
// ...
public DbSet<ModelDifference> ModelDifferences { get; set; }
public DbSet<ModelDifferenceAspect> ModelDifferenceAspects { get; set; }
}
另外,一定要确保所有用户都具有读/写访问 ModelDifference 和 ModelDifferenceAspect 类型的权限,否则有的权限模块会阻止这个行为成功执行。
下面是在代码中给权限的代码:
C#
public class Updater : ModuleUpdater {
public override void UpdateDatabaseAfterUpdateSchema() {
base.UpdateDatabaseAfterUpdateSchema(); SecuritySystemRole defaultRole = ObjectSpace.FindObject<SecuritySystemRole>(
new BinaryOperator("Name", "Default"));
if(defaultRole == null) {
defaultRole = ObjectSpace.CreateObject<SecuritySystemRole>();
// ...
defaultRole.SetTypePermissionsRecursively<ModelDifference>(
SecurityOperations.ReadWriteAccess, SecuritySystemModifier.Allow);
defaultRole.SetTypePermissionsRecursively<ModelDifferenceAspect>(
SecurityOperations.ReadWriteAccess, SecuritySystemModifier.Allow);
// The 'Create' permission is additionally required if you use the Middle Tier Application Server
defaultRole.SetTypePermissionsRecursively<ModelDifference>(
SecurityOperations.Create, SecuritySystemModifier.Allow);
defaultRole.SetTypePermissionsRecursively<ModelDifferenceAspect>(
SecurityOperations.Create, SecuritySystemModifier.Allow);
}
sampleUser.Roles.Add(defaultRole);
// ...
ObjectSpace.CommitChanges();
}
// ...
}
在运行时,通过菜单打开模型差异管理的列表,可以看到相关的按钮。
在这里,会列出存在的用户的模型差异(用户打开一次程序后,就会保存该用户的模型差异),如果想为没有使用过程序的用户创建模型差异,可以单击创建模型差异。
如果想要加载共享的模式差异(就是在 Visual Studio (Model.xafml) 文件中创建的那个),可以点击导入共享模型差异。
另外三个按钮是:复制模型差异、 导出模型差异和重置模型差异 ,将应用于所选记录。
在模型的差异列表视图中,有一条共享模型差异的记录。它不是指某个用户的设置,而是指应用程序全局的设置。
XAF:如何让用户在运行时个性化界面并将个性化信息保存到数据库中 win/web/entityframework/xpo的更多相关文章
- XAF实现运行时填加验证规则并保存到数据库中
有几种方法可以用来声明一个验证规则.最常用的方法是使用对应的Attribute来定义.详见这里.验证模块还允许您通过在业务类实现 IRuleSource 接口定义自定义的验证规则的来源. IRuleS ...
- iOS crash log 解析 symbol address = stack address - slide 运行时获取slide的api 利用dwarfdump从dsym文件中得到symbol
概述: 为什么 crash log 内 Exception Backtrace 部分的地址(stack address)不能从 dsym 文件中查出对应的代码? 因为 ASLR(Address spa ...
- 【Python】【demo实验1】【Python运行时强制刷新缓冲区,输出信息】(Python3 应不存在类似情况)
[原文] 需求:打印一颗 ”*” 休息1s 代码如下: #!/usr/bin/python #coding=utf-8 ''' 暂停1s输出 ''' import time def printStar ...
- Java虚拟机及运行时数据区
1.Java虚拟机的定义 Java虚拟机(Java Virtual Machine),简称JVM.当我们说起Java虚拟机时,可能指的是如下三种不同的东西: 抽象的虚拟机规范 规范的具体实现 一个运行 ...
- Objective-C Runtime 运行时之四:Method Swizzling
理解Method Swizzling是学习runtime机制的一个很好的机会.在此不多做整理,仅翻译由Mattt Thompson发表于nshipster的Method Swizzling一文. Me ...
- Mysql常用show命令,show variables like xxx 详解,mysql运行时参数
MySQL中有很多的基本命令,show命令也是其中之一,在很多使用者中对show命令的使用还容易产生混淆,本文汇集了show命令的众多用法. 详细: http://dev.mysql.com/doc/ ...
- Objective-C Runtime 运行时之四:Method Swizzling(转载)
理解Method Swizzling是学习runtime机制的一个很好的机会.在此不多做整理,仅翻译由Mattt Thompson发表于nshipster的Method Swizzling一文. Me ...
- Java 9 揭秘(7. 创建自定义运行时映像)
Tips 做一个终身学习的人. 在第一章节中,主要介绍以下内容: 什么是自定义运行时映像和JIMAGE格式 如何使用jlink工具创建自定义的运行时映像 如何指定命令名称来运行存储在自定义映像中的应用 ...
- 解读JavaScript 之引擎、运行时和堆栈调用
转载自开源中国 译者:Tocy, 凉凉_, 亚林瓜子, 离诌 原文链接 英文原文:How JavaScript works: an overview of the engine, the runtim ...
随机推荐
- 前端forEach在Array、map、set中的使用
数组: var s = ['a','b','c']; s.forEach(function(ele,index,array){ console.log(ele); }); Map: var map = ...
- vi编辑器的使用
在命令模式下进入编辑模式,输入字母"a","A","i","I","o","O" ...
- 2-MySQL数据库编码uft-8
mysql> show variables like 'character%'; mysql> show variables like 'collation%'; mysql> st ...
- HDU-1274 展开字符串
Problem Description 在纺织CAD系统开发过程中,经常会遇到纱线排列的问题.该问题的描述是这样的:常用纱线的品种一般不会超过25种,所以分别可以用小写字母表示不同的纱线,例如:abc ...
- 转载 wpf使用经验
转载自 胡庆访[ http://zgynhqf.cnblogs.com/ ] WPF 是一个界面层框架技术,要对 WPF 技术达到熟练运用的程度,需要同时拥有开发和设计两方面的知识.而我作为一名开发人 ...
- java context 讲解
在 java 中, 常见的 Context 有很多, 像: ServletContext, ActionContext, ServletActionContext, ApplicationContex ...
- DELPHI XE5
一直觉得DELPHI7之后,如果写WINDOWS桌面应用,没什么变化. 一直在痛苦,为什么DELPHI提供的控件那么丑陋,透明等什么功能都做的那么差. 一直在郁闷,新装的DELPHI都不带DEMO. ...
- oracle的IMU和ora-01555
IMU: 01555: 按照上图找啊找,已经提交事物的undo块找不到了,就产生01555错误,解决这样问题:1. 确保undo表空间数据的保留时间至少大于最长sql语句的时间 2. 增大undo表空 ...
- PHP基础班初学心得:JS里inner的一些理解
本人刚参加PHP基础班培训,由于之前毫无基础,分享的心得可能不规范,方法也许也"旁门左道",不能保证质量,只作自己总结学习,也希望能帮助到同样是初学者的朋友们,共同进步. 在这里分 ...
- u-boot移植 III
延续上一篇, 烧录完成后, 串口屁毛都没有了, 运行了代码比较工具, 看看问题在哪. board/100ask24x0/ 没有问题, 除了lowlevel_init.S, 不过我没在uboot中用 ...