【翻译】eXpressAppFramework QuickStart 业务模型设计(四)—— 实现自定义业务类...

这一讲,你将学到如何从头开始实现业务类。为此,将要实现Department和Position业务类。这些类将被应用到之前实现的Contact类中。你将学到引用对象自动生成用户界面的基本要素。

在此之前,我建议你去阅读一下 【翻译】eXpressAppFramework QuickStart 业务模型设计(二)—— 从业务类库中继承

·  在MySolution.Module中添加如下类:

ContractedBlock.gifExpandedBlockStart.gifCode
 1 [DefaultClassOptions]
 2 [System.ComponentModel.DefaultProperty("Title")]
 3 public class Department : BaseObject {
 4     private string title;
 5     private string office;
 6     public Department(Session session) : base(session) { }
 7     public string Title {
 8         get { return title; }
 9         set { SetPropertyValue("Title"ref title, value); }
10     }
11    public string Office {
12       get { return office; }
13       set { SetPropertyValue("Office"ref office, value); }
14    }
15 }
16 
17 

添加Department属性到Contact类,代码如下:

ContractedBlock.gifExpandedBlockStart.gifCode
 1 [DefaultClassOptions]
 2 public class Contact : Person {
 3    //
 4    private Department department;
 5    public Department Department {
 6       get {return department;}
 7       set {SetPropertyValue("Department"ref department, value);}
 8    }
 9    //
10 }
11 
12 

 ·  类似的,实现Position类

ContractedBlock.gifExpandedBlockStart.gifCode
 1 [DefaultClassOptions]
 2 [System.ComponentModel.DefaultProperty("Title")]
 3 public class Position : BaseObject {
 4    public Position(Session session) : base(session) { }
 5    private string title;
 6    public string Title {
 7       get { return title; }
 8       set { SetPropertyValue("Title"ref title, value); }
 9    }
10 }
11 
12 

添加Position属性到Contact类中

ContractedBlock.gifExpandedBlockStart.gifCode
 1 [DefaultClassOptions]
 2 public class Contact : Person {
 3    //
 4    private Position position;
 5    public Position Position {
 6       get {return position;}
 7       set {SetPropertyValue("Position"ref position, value);}
 8    }
 9    //
10 }
11 
12 

 ·  运行程序。你将看到如何运用特定的数据结构自动生成用户界面。导航控件包含了新的Department和Position项,它们允许你访问Department和Position对象。注意Contact明细窗口(或者叫Contact明细视图),创建了新的DepartmentPosition的查找编辑器。通过此编辑器你可以为当前的Contact选择所需的Department和Position。另外,你还可以自定义Department对象列表或者单个的Department(Position)对象。前者,你需要点击New按钮。后者,按住Ctrl+Shift然后点击所需要的对象编辑器。

 

 


我的话:

对于我来说,比较感兴趣的是这种UI是如何通过框架产生出来的。QuickStart完了之后,我想把这部分拿出来跟大家分享一下。

 

上一篇【翻译】eXpressAppFramework QuickStart 业务模型设计(三)—— 提供初始化数据

下一篇【翻译】eXpressAppFramework QuickStart 业务模型设计(五)—— 从业务类库中添加类 

 

 

 

转载于:https://www.cnblogs.com/1231net/archive/2009/10/22/1587983.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379520.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内存重映射

文章目录1 kmap2 映射内核内存到用户空间使用remap_pfn_range使用io_remap_pfn_rangemmap文件操作建立VMA和实际物理地址的映射mmap 之前分配 一次性映射mmap 之前分配 Page FaultPage Fault 中分配 映射内核内存有时需要重新映射,无论是从内核到用户空间还是从内…

math.sqrt 有问题_JavaScript中带有示例的Math.sqrt()方法

math.sqrt 有问题JavaScript | Math.sqrt()方法 (JavaScript | Math.sqrt() Method) The Math.sqrt() method is inbuilt in JavaScript to find the square root of a number. In this tutorial, we will learn about the sqrt() method with examples. JavaScript中内置了Mat…

ISAPI Rewrite 实现简单url重写、二级域名重写

实现步骤: 第一步:下载ISAPI_Rewrite.rar,将Rewrite文件夹和httpd.ini直接放在项目根目录下面。 第二步:IIS配置,筛选Rewrite文件夹里面的Rewrite.dll文件,如图: 第三步:在httpd.ini…

用户登录

用户登录 代码namespace 用户登录 {public partial class Form1 : Form{public Form1(){InitializeComponent();}bool b1, b2, b3, b4, b5, b6;private void button1_Click(object sender, EventArgs e){try{if (b1 && b2 && b3 && b4 && b5 &…

进程上下文和中断上下文

文章目录进程的preempt_count变量thread_infopreempt_counthardirq相关softirq相关上下文原文链接: https://zhuanlan.zhihu.com/p/88883239进程的preempt_count变量 thread_info 在内核中,上下文的设置和判断接口可以参考 include/linux/preempt.h 文…

标题:凑算式

标题:凑算式 这个算式中AI代表19的数字,不同的字母代表不同的数字。 比如: 68/3952/714 就是一种解法, 53/1972/486 是另一种解法。 这个算式一共有多少种解法? 注意:你提交应该是个整数,不要…

Linux内存地址管理

文章目录系统内存布局内核地址的低端和高端内存概念低端内存高端内存地址转换和MMULinux中的四级分页模型虚拟地址字段页表处理将虚拟地址转换物理地址Linux系统中的每个内存地址都是虚拟的,它们不直接指向任何物理内存地址。每当访问内存位置时,可以执行…

录制caf 转 mp3

编译需要使用的 lame库http://www.cocoachina.com/bbs/read.php?tid108237参考的文章http://blog.csdn.net/ysy441088327/article/details/7392842说起来,我一直在找一个音频转换成mp3的方法。一年前,我成功编译出了一个lame for armv7的库。苦于不会使…

開發記要 詭異的變量

告別繁體文盲,從寫blog開始 Variable命名很重要,有多重要,看看.net和java的加密就知道, 都是把variable改到一塌糊塗,你想看看都沒門. 但是這幾天看遺留系統的代碼,真是大開眼界。 我一直以為別人寫a,b,c,d這些單字節variable已經很過分。直到我看到以下這幾個&#xff0…

排序算法---快速排序、堆排序、冒泡排序

排序算法1 快速排序代码实现stdlib库快排2 堆排序堆排序的基本思想如何构造一个大顶堆排序3 冒泡排序1 快速排序 文章原地址:https://blog.csdn.net/morewindows/article/details/6684558 快速排序的平均时间复杂度是0(NlogN),它采用了一种分治的策略&a…

项目总结:华南师范大学校园开发教育android客户端总结

忽略之前小打小闹,这个项目算是我的第一个项目--SCNU的网络公选课的android版本的客户端。项目是从5月中旬开始的,中间经历了几个星期的复习考试时间,到现在可以说是完工了吧(或许还有写细节要修改)。这个项目带给我蛮…

Linux系统编程---守护进程

1 守护进程的概述 Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。Linux系统的大…

邮箱服务器

一.邮箱服务器的基本概念 邮件的客户端:可以只安装在电脑上(C/S)的也可以是网页形式(B/S)的 邮件服务器:起到邮件的接受与推送的作用 邮件发送的协议: 协议:就是数据传输…

类加载器

一、类加载器 1,什么是类加载器? 类加载器就是用来加载字节码文件 2,类加载器的种类有哪些? 1)BootStrap:引导类加载器:加载都是最基础的文件 2)ExtClassLoader:扩展类加…

算法---链表

文章目录反转链表合并两个有序链表删除重复元素反转链表 反转链表包括两种,反转全部元素或者反转部分元素。在这里,我们约定:数据元素类型是struct LinkNode,要反转链表的第一个节点是head,head的前面一个节点是pre&a…

SSM

二、环境设置(MyEclipse) 1,字体设置 window–>Preference->General->Appearance->Colors and Fonts->Basic Text->Font 2,workspace字符集设置 window–>Preference->General->Appearance->W…

设计模式--Strategy 策略模式

所谓策略模式(Strategy Pattern),就是将策略 (算法) 封装为一个对象,易于相互替换,如同 USB 设备一样可即插即用;如果将策略、具体的算法和行为,编码在某个类或客户程序内部,将导至事后的修改和扩展不易。 …

打开eclipse出现Failed to load the JNI shared library “D:\java\jdk\bin\...\jre\bin\server\jvm.dll”如何解决?

eclipse打开的时候出现Failed to load the JNI shared library “D:\java\jdk\bin…\jre\bin\server\jvm.dll”如何解决?? 如图所示: 即代表你的jdk与eclipse的位数不一样!!! 你可以查看一下eclipse和jd…

圆形坠落模拟算法设计

目标:实现一个算法,模拟在一个封闭二维区域,圆形小球朝给定方向坠落的过程,实现二维区域的紧密填充。 像下面这样: 难点,及其简单解决: 1.如何把粒子移动尽可能远? 图中的粒子i&…

Maven详细教学

一、Maven简介 maven:是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的 依赖管理:就是对jar包的统一管理 可以节省空间 项目一键构建:mvn tomcat:run该代码可以将一个完整的项目运行起来&#xff0…