科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件图解Delphi 8 Eco 开发实战

图解Delphi 8 Eco 开发实战

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文一步一步的讲述了在Delphi8中开发ECO完整流程。

作者:佚名 来源:天极网 2007年10月31日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
4. 编码

  下面我们要完成的就是界面设计、编码工作。在工程视图中双击WinForm.pas打开窗体编辑器。ECO Application Wizard已经创建了一个ReferenceHandle组件rhRoot和多个Extender组件。Extender组件保留其默认属性即可,如果将其删除用户界面中的控件将无法和ECO关联。设置rhRoot的EcoSpaceType 为 "EcoCRMEcoSpace.TEcoCRMEcoSpace",如果在EcoSpaceType属性下拉列表中没有选项,可重新编译一下工程。

  在界面上放置6个DataGrid,分别将其重命名为dgPersons、dgCompanys、dgCompanyCars、dgPersonCarSells、dgCompanyCars、dgPersonCars,为使界面更清晰可以分别设定一下DataGrid的CaptionText。并且在每个DataGrid上放置两个按钮,其Text分别为"添加"、"删除"。完成界面设计为如下样式。


  用户界面中的组件需要和ExpressionHandle相连接才能显示感知对象实例。在这里ExpressionHandle与Delphi中Dateset的概念很类似,它是一组数据的集合。向窗体编辑器中新添加一个ExpressionHandle,设置其Name属性为ehCompanys,其RootHandle属性为rhRoot,双击Expression打开OCL Expression编辑器。OCL Expression编辑器很类似于我们以前用的SQL编辑器,不过它使用的是OCL语法,在系统发布运行后ECO会根据不同的数据库平台将OCL翻译成相应的SQL进行执行。在OCL Expression编辑器中输入"Company.allInstances",它的含义是取得Company的所有对象实例,我们可以将它等效理解为SQL语句中的" Select * from Company"。


  同样我们为其他的几个类建立对应的ExpressionHandle,它们的名字分别为ehPersons、ehCompanyCarSells、ehPersonCarSells、ehCompanyCars、ehPersonCars。为实现主子表关联关系我们还需要CurrencyManagerHandle组件,添加一个CurrencyManagerHandle组件到设计器中,将其重命名为cmhCompany,设定其RootHandle属性为主对象ehCompany,其BindContext 属性为显示Company列表的dgCompanys。


  CurrencyManagerHandle组件的Element属性即表示对象集中的当前元素,它是根据BindContext属性来进行判断当前元素的。我们如果想要使ehCompanyCarSells与Company建立主子关联关系则需要设置ehCompanyCarSells的RootHandle属性为cmhCompany,Expression属性为"self.CarSell"。建立其他需要进行主子表关联的CurrencyManagerHandle,它们分别是cmhPerson、ehCompanyCarSells、ehPersonCarSells、ehCompanyCars、ehPersonCars。其属性与cmhCompany类似。


  主要组件属性为:

ehPersons.Expression := 'Person.allInstances';
ehPersons.RootHandle := Self.rhRoot;
ehCompanyCars.Expression := 'self.Car';
ehCompanyCars.RootHandle := Self.cmhCompanyCarSell;
cmhCompanyCarSell.BindingContext := Self.dgCompanyCarSells;
cmhCompanyCarSell.RootHandle := Self.ehCompanyCarSells;
ehCompanyCarSells.Expression := 'self.CarSell';
ehCompanyCarSells.RootHandle := Self.cmhCompany;
cmhCompany.BindingContext := Self.dgCompanys;
cmhCompany.RootHandle := Self.ehCompanys;
ehCompanys.Expression := 'Company.allInstances';
ehCompanys.RootHandle := Self.rhRoot;
ehPersonCarSells.Expression := 'self.CarSell';
ehPersonCarSells.RootHandle := Self.cmhPerson;
cmhPerson.BindingContext := Self.dgPersons;
cmhPerson.RootHandle := Self.ehPersons;
ehPersonCars.Expression := 'self.Car';
ehPersonCars.RootHandle := Self.cmhPersonCarSell;
cmhPersonCarSell.BindingContext := Self.dgPersonCarSells;
cmhPersonCarSell.RootHandle := Self.ehPersonCarSells;

  然后将刚才所设计的DataGrid和ExpressionHandle组件关联,设置DataGrid的DateSource属性为相对应的ExpressionHandle。下面我们需要为添加删除方法编写代码,对于那些没有主对象关联关系的对象来说代码十分简单。

procedure TWinForm.btnPersonAdd_Click(sender: System.Object; e: System.EventArgs);
begin
Person.Create(EcoSpace);
end;

  添加人员只用这一句代码即可,删除代码同样很简单:

procedure TWinForm.btnPersonDelete_Click(sender: System.Object; e: System.EventArgs);
begin
Person(cmhPerson.Element.AsObject) .AsIObject.Delete
end;

  添加删除Company的代码和这个类似,但带有主对象关联的对象在添加时候还需要为其主对象赋值。CompanyCarSells(企业购车纪录)的添加代码为:

CarSell.Create(EcoSpace).Customer := Customer(cmhCompany.Element.AsObject);

  其中cmhCompany.Element.AsObject为当前所被选中的Company的值,将其转换Customer类型赋值给新创建好的 CarSell.Create(EcoSpace).Customer。

  我们需要完成的代码十分简单,为每个方法添加一句类似于上述的过程代码即可。ECO带给我们的变化的确令人惊喜。我们现在完成了对对象操作的代码,下面还需要把所添加修改的事例保存到数据库中,添加一个按钮只需要执行一下EcoSpace.UpdateDatabase;就可以完成数据的保存工作。

  系统运行界面如下:


  在选择客户时,客户汽车销售纪录会自动显示相关纪录,而浏览销售纪录时下面会自动显示与销售纪录相关的汽车信息。ECO还提供了AutoForm 功能,选择一个DataGrid设置其EcoAutoForm属性为True[图16],在运行状态时,双击DataGrid标题即可打开ECO自动生成的对象属性Form。如果需要手工调用AutoForm可以用下面的代码。


Uses
Borland.Eco.AutoContainers, Borland.Eco.ObjectRepresentation;
..
var
autoContainer: IAutoContainer;
begin
autoContainer := AutoContainerService.Instance.CreateContainer(
EcoSpace, cmhCompanyCarSell.Element);
Form(autoContainer).ShowDialog;
end;

  后记

  通过上面的实例我们已经看到MDA开发的威力了,它不仅大幅提高了开发效率,还以模型驱动的方式保证了设计和编码的一致性。但是对于ECO来说,前面还有很长的路要走,Delphi 8的完成度远远达不到它以前的版本。在笔者写DEMO过程中就发现了很多常规操作中的Bug,Borland即将推出Delphi 8 的Update,以修正其中的问题。现在Eco并不支持ASP.NET开发,如果不出意外在下个版本的Eco就会加入对ASP.NET的支持并添加更多易用的组件。Eco虽然还不够成熟,但是我们还是能从上面看到很多软件开发方式上的变化,相信随着ECO的成熟和完善,人们也会更加广泛的接纳它。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章