XAF应用开发教程(六)控制器

https://www.cnblogs.com/foreachlife/p/xafviewcontrollerAndValidationContext.html

是的,XAF也是MVC结构的,但不仅限于MVC,ViewModel也存在,它是一项复合技术,AOP,ORM,MVC都有。

真实运行的系统中,仅有增删改查功能肯定是远远不够的,ERP、CRM等系统的开发中,有无数的业务逻辑,通常这些都是在控制器中实现的,控制器有两种:

ViewController:应用于视图,需要操作视图的数据。

WindowsController:应用于窗口,比如当前界面还没有视图,与具体视图也没有关系,比如登出系统按钮,不用考虑当前在哪个视图下面都可以做些操作。

需求:为客户类填加审核操作。

第一步,我们需要为客户类填加一个属性,即,已审核:

找到客户.cs类:

public class 客户.....{.............         private bool _已审核;
        [ModelDefault("AllowEdit","False")]
        public bool 已审核
        {
            get { return _已审核; }
            set { SetPropertyValue("已审核", ref _已审核, value); }
        }.............}

这里,使用了新的Attribute,ModelDefault,它是让已审核这个属性在界面上是只读的,因为我们想用控制器控制些属性的值,所以将其禁止修改,改为按钮控制。

第二步,创建视图控制器:

如下所示,在解决方案中找到XCRMDemo.Module项目,展开,找到Controllers文件夹,右键->添加->新建项.

当然,是不是放到Controllers文件夹都是可以的,也可以自己按业务情况新建文件夹:

然后出现:

在名称处输入CheckViewController.cs

创建完成后,并不上像上图一样,有一个审核按钮,需要从工具箱中拖一个SimpleAction到空白区域。

选中新拖过来的按钮,并按下F4查看属性窗口,这里就与普通的窗体程序一样的界面了。

如图所示,将3处都修改一下。

在属性栏中找到闪电图标,找到Execute并双击。

        private void 审核_Execute(object sender, SimpleActionExecuteEventArgs e)
        {
            var x = this.View.CurrentObject as 客户;
            x.已审核 = true;
            ObjectSpace.CommitChanges();
        }

可以看到有一个事件是空白的,敲入上述代码。

按下F5查看效果:

打开一条已有的记录,可以看到,已审核前面的checkbox已经不可以点了,而且在工具栏中已经有了一个”审核”按钮。

按下审核按钮后,界面上的已审核checkbox也会打上勾。

而且,完成后,不要点保存按钮,直接点击左侧导航中的客户信息,来到列表中,可以看到数据已经保存了。

下面我们来看一下写的那三行代码:

            var x = this.View.CurrentObject as 客户; //this代表了当前控制器,View是当前控制器所生效的视图,CurrentObject是指当前操作的数据对象。因为当前是在详细视图下面,CurrentObject就是指打开的那条记录了。但是因为这个变量是通用的,所以为Object类型,我们可以转换为客户类。
            x.已审核 = true;//转换完成后,就可以对属性值变更了。
            ObjectSpace.CommitChanges();//ObjectSpace在控制器中是一个IObjectSpace接口类型,因为XAF会支持EF/XPO所以ObjectSpace的实例是XAF控制的简单的理解ObjectSpace就是对象的总控制对象,比如新建,删除,查询,都是通过它来进行,就像是直接在操作数据库,但是对象比库结构复杂,比如还方含方法、事件等编程元素在里面,所以它看起来比数据库功能强大多了。这里调用了 ObjectSpace.CommitChanges()即为提交变更的内容。当然如果不写这句,界面上也会发生变化,只是没有保存,需要保存时,我们可以再按下保存按钮。

实现自定义上下文:

在验证规则一节中的规则有上下文的概念,即,某些规则只在某个操作执行才被执行,我们上面增加了审核按钮,希望客户信息仅在审核时才为必填:第一步,增加验证规则:

public class 客户.....{................        private DateTime _出生日期;
        [RuleRequiredField("审核时必填出生日期","审核")]
        public DateTime 出生日期
        {
            get { return _出生日期; }
            set { SetPropertyValue("出生日期", ref _出生日期, value); }
        }................}

可以看到,[RuleRequiredField("审核时必填出生日期","审核")] 中,第一个参数是规则的名称,第二个参数是生效上下文的名称,此时这个上下文是不存的。

下图展示如何创建上下文:

打开xafml文件,展开ActionDesign->Actions->点击审核按钮,在右键属性中找到ValidationContexts,输入“审核“

F5运行项目,新建客户信息,不输入任何内容,直接按下审核按钮:

可以看到出生日期上面的验证规则生效了,而姓名必填规则没有触发。问题:姓名也是需要必填的,怎么能让保存时执行验证,审核时也执行验证呢?很简单,让审核按钮具有两种上下文环境就可以了:

效果:

你也许看到了,审核按钮好象在哪里都有,有客户列表上出现并点击时,还会报错。这是因为这个按钮是有生效位置限制的,我们制作时仅是希望它能在客户的详细视图中显示,但现在却哪里能看到,好,下面我们来处理一下:

打开CheckViewController的设置界面,查看按钮的属性窗口,进行如下设置:

其中,TargetOjectType是指在哪种类型上面生效,TargetViewType是指哪种视图类型,选择为DetailView后,只能在DetailView中看到审核按钮了。

下面再说说这些属性都是做什么的:1.Name,是指生成按钮的代码中的名称。2.ActionMeaning,是指按钮在对话框中生效时,代表的是什么意义,有 Unknown无意义,Accept接受,相当于OK按钮,Cancel,相当于取消按钮。3.Caption,按钮显示的文字4.Category,按钮显示的位置5.ConfirmationMessage,按下按钮时显示一个确认对话框,并显示这段文字,如删除时,显示”确定要删除吗?"6.ID指显示按钮的名称,全局唯一的。7.ImageName,按钮显示什么图标,这里不能选择,可以去xafml中选择那里是有预览图标可以看的。8.PaintStyle,是指绘制的风格,可以选择要不要显示图标,文字,或一起显示。默认是都显示。9.QuickAcces,仅在winform中生效,是指在ribbon方式下显示时,显示在快速访问的位置。10.SelectionDependencyType,有三个选项,Independent:没有限制,RequireSingleObject:选中一个对象时按钮可用,RequireMultipleObject:选中多个对象时按钮可用,含一个。可以看到我们之前的按钮没有这项选择依然可用。而列表上的删除按钮,是RequireMultipleObject,即,可以同时删除多条记录。11.Shortcut:快捷键,仅在win中生效。12.TargetObjectCriteria,这里填写的是一个条件,比如写的是 "!已审核",则只在没有被审核的记录才能点击这个按钮,否则是不可以用的。13.TargetObjectsCriteriaMode:指定是否所有当前选定的对象必须满足targetobjectscriteria条件时才可以执行这个按钮。

可先值:trueatleastforone
在选定的对象中至少有一个必须满足的targetobjectscriteria条件才能执行按钮。
trueforall
所有选定的对象必须都满足的targetobjectscriteria条件才能执行按钮。

这个就需要看业务要求来选择使用了,通常都是trueforall的。

14.TargetObjectType:哪个类型可以显示按钮。如果有多种对象都需要显示,我们演示的是客户这个类,其实继承自客户类的视图也会被生效,继承还没有演示过,后面会展示。

15.TargetViewID:仅指定的视图才会生效。视图ID在哪里?可以打开xafml找到指定的视图,在ID属性栏中就有。比如客户详细视图就是 客户_DetailView.

16.TargetViewNesting:目标视图嵌套,有如下可选项:

  名称 说明
Any 任何视图都会生效.
Nested 必须是嵌套的视图才生效,什么是嵌套的视图?比如客户详细视图中的联系人列表,所属大区列表.
Root 非嵌套的视图,就是root级别了,比如列表视图,详细视图。

17.TargetViewType:视图类型

  名称 说明
Any 任何视图.
DashboardView 组合视图,这种还没有出现过,后面介绍.
DetailView 详细视图
ListView 列表视图

18.ToolTip:鼠标悬停时的提示信息。

按钮的属性就这么多,接下来再来看看控制器的属性:

不选中任何按钮,在控制器设计界面的空白区域点击一下,查看属性栏可以看到:

从TargetObjectType开始,才是有意义的。

这里的设置与按钮是一样的,需要注意的是,这里的Targetxxxxx是针对于整个控制器的,一个控制器中可以有多个按钮,比如设置了TargetObjectType后,所有按钮都在满足这个条件后,才会显示在界面上。

QQ 4603528 QQ群:336090194

标签:
XAF, 快速开发, C#, .Net, ViewController, SimpleAction, ValidationContext

原文地址:https://www.cnblogs.com/xyyhcn/p/11719533.html

时间: 2024-11-08 04:30:48

XAF应用开发教程(六)控制器的相关文章

公众号第三方平台开发 教程六 代公众号使用JS SDK说明

公众号第三方平台开发 教程一 创建公众号第三方平台 公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取 公众号第三方平台开发 教程三 微信公众号授权第三方平台 公众号第三方平台开发 教程四 代公众号发起网页授权说明 公众号第三方平台开发 教程五 代公众号处理消息和事件 公众号第三方平台开发 教程六 代公众号使用JS SDK说明 另,感谢一下这个大虾的博客,这几篇东西都是在他的博文基础上完成的,他的博客里也有一些接口代码可以下载 微信开发系列

XAF应用开发教程(七)外观控制模块

很多时候,我们需要按照不同的条件显示不同的效果,在传统的软件开发中,我们会直接使用 控件名称.BackColor,Enable,Visible等属性进行控制. 如果一个业务对象在多处使用,要么我们会去一个地方一个地方的修改,要么会集中代码做个方法进行控制. 在XAF中,就实现了一处控制全局生效的方法. 下面我们来看看外观模块: 上图中展示了几种效果:1,整行红色背景.2,蓝色字体加删除线.3编辑时控件禁用.4.单元格颜色变化. 详细界面中,同样生效了,上面两幅图,一个是web的,一个winfor

XAF应用开发教程(一) 创建项目

XAF是DevExpress公司的快速开发框架,全称eXpress Application Framework,是企业信息系统的开发利器,快速开发效果显著,在.net框架中,笔者至今没有找到一款可以与之比较的产品.下面以应用为中心,讲述如何应用XAF. 下载与安装,如果你已经安装好了sqlserver和visual studio,请至http://www.devexpress.com 下载试用版,安装完成后即可体验. 我使用的是vs2015+sqlserver 2014(与vs内置一起的). 一

XAF应用开发教程(八) 汉化与多国语言支持

https://www.cnblogs.com/foreachlife/p/5067380.html 使用了XAF开发时,汉化是一个比较常的问题. 要实现汉化很简单: 1.在这里下载汉化资源文件.这里演示的版本是15.1.X的 2.文件下载后将:文件解压到目录    <你的项目>\BIN\ 下面. 解压后如下所示: 这一步的功能是:汉化多数控件中的使用的文字资源.这是官方提供的方法,也有些字符串是没有被汉化的.因为DEV支持的语言也不少,也制做了许多国家的语言包.但CN的资源包还没有做完全汉化

XAF应用开发教程(二)业务对象模型之简单类型属性

https://www.cnblogs.com/foreachlife/p/XAFBOSimpleTypeProperty.html 使用过ORM的朋友对这一部分理解起来会非常快,如果没有请自行补习吧:D. 不说废话,首先,我们来开发一个简单的CRM系统,CRM系统第一个信息当然是客户信息.我们只做个简单 的客户信息来了解一下XAF好了. 新建项之后,可以看到如下代码界面: using System; using System.Linq; using System.Text; using Dev

XAF应用开发教程(五)验证模块

数据验证是应用程序开发中使用频率最高的功能模块,本节详细介绍一下XAF中如何使用验证模块. XAF 验证模块内置了下面的一些验证规则: 验证规则类型 说明 RuleCombinationOfPropertiesIsUnique (RuleCombinationOfPropertiesIsUniqueAttribute) 要求多个属性的值组合在一起时是唯一的. RuleCriteria (RuleCriteriaAttribute) 要求满足指定的条件. 如:座机或手机必须填写一个. 条件为:坐机

XAF应用开发教程(四)应用程序模型

https://www.cnblogs.com/foreachlife/p/xafml.html XAF是重量型框架,确实够重量的,方方面面都做得规规矩矩. 如果看了前面三节,可能会认为,这N多的Attribute到底都是从哪里来的?到底有多少这样的Attribute?如果不够用了怎么办?等着官方开发吗? 好吧,我不是为了解决上面的这些问题的,从另一个角度来看一下我们的应用程序吧! 我们回过头来看看解决方案中的项目都是做些什么用途吧: XAF的默认项目结构中,XCRMDemo.Module中写了

XAF应用开发教程(三)业务对象模型之引用类型与关联关系

本节介绍信息系统开发中最常见的问题,引用关系,一对多关系,多对多关系. 以客户信息为例,客户通常需要客户分类,如VIP客户,普通客户,潜在客户.当然,我们可以定义枚举类型进行定义出这个类型,并在客户类上面定义对应的属性. 但枚举类型增加值需要修改程序,而客户分类很可能是会增加或是修改的,此时,我们就需要用到了引用类型.引用类型对应到数据库上,也就是外键关系. 既然是需要可以维护的客户分类,那么我们应该建立一张表出来,在XPO中就要新建出一个业务类,代码如下: [DefaultClassOptio

Android OpenGL ES 开发教程 从入门到精通

From:http://blog.csdn.net/mapdigit/article/details/7526556 Android OpenGL ES 简明开发教程 Android OpenGL ES 简明开发教程一:概述 Android OpenGL ES 简明开发教程二:构造OpenGL ES View Android OpenGL ES 简明开发教程三:3D绘图基本概念 Android OpenGL ES 简明开发教程四:3D 坐标变换 Android OpenGL ES 简明开发教程五