OK,ECO 4中新鲜的东西,在我看来并不是很多。BDS 2007的第三个update后,仍然有些小bug使得我今天的BDS已经被我强制从进程中关掉4次了。
不过这些,都抵挡不住我的热情,嘿嘿。下面,为大家 讲述新功能,主要还是围绕着新的EcoDataSource for Asp.net,附带一个小例子。
首先在Newitems中,选择Eco中的Eco Delphi .net Wizard。在精灵中选择要建立的是WebForm App,如果你需要将Eco的UML的定义图在一个单独的Dll中可以被复用,那就要选中Model中的In separate assembly,我们这里不选。在Asp .net中,可以提供新的EcoDataSource模式或者老的利用RootHandle,ExpressHandle,PsHandle这样的模式。我们这里选择新的EcoDataSource模式。另外说下,我到现在还不是很清楚Remote的工作模式,所以没有去选择。
选取到模型中,在Package下添加一张Class视图
画以下的UML图,其中Employ的FullName是一个Derived=true的字段,Derived OCL被定义为:“self.FistName+self.LastName”。其中还定义了DropFile等3个trigger,一个叫HireState的State属性,将被用在State图中。
State图:在入点和出点随意的使用了些ECO Action Language来操作Task属性,没有设置任何的Guard,因为这部分功能在Eco3的文章中已经讲过了。
先跳过EcoSpace和EcoSpaceProvider的设置了,那些请参考李维老师的Eco书籍。
我们直接来到Asp.net的第一个页面,放入下面这些控件。其中edsCompany的Express(对应与传统开发的SQL的CommandText)为“Company.allInstances”,把所有公司都列出来。BDS 2007的控件中默认是没有DataGrid的,因为新的GridView比DataGrid更好用,但是GridView有个小bug,无法处理应用在Format数据字段为1:1这样字符串,所以为了能建立一个HyperLink列,只能去Compnent中去把DataGrid重新叫出来。
下面就是这个连接到公司明细的列的属性,类似与URL Format这样东西,GridView会在碰到1:1这样的ExternalId的独特字符的时候出错。
新增的按钮中的代码如下(BDS 2007不支持c#,有点遗憾):
var
c: Company;
begin
c := Company.Create(EcoSpace);
c.Name := edtCompanyName.Text ;
EcoSpace.UpdateDatabase;
self.DataBind;
end;
运行结果:
点选连接到公司明细,会打开一个超连接,连接中的姓名=姓+名,这个是通过ocl定义过的,自动实现:
下面着重开始讲Company.aspx是如何自动接受这个CompanyId的QueryString的。在Company的EcoDataSource中,首先定义一个Parameters,来源是QueryString,Field名称是CompanyId,另外这个QueryString的来源还可以是表单提交的,cookies的,session的,control(这个后面讲),none(无自动来源,自己写代码设置)
然后给这个EcoDataSource的Expression设置为:“Company.objectfromExternalId(CompanyId)”用来显示被要求显示的Company对象,再同样建立另一个EcoDataSource,Expression设置为:“Company.objectfromExternalId(CompanyId).Employs”,显示选则的company下的所有employ.这样,前面一个页面传递过来的CompanyId参数就被自动处理并找出数据来了。
下面是新增被选中的Company的Employ的代码,直接从EcoDataSource的查询结果中获取Company对象或者通过QueryString中的参数来获取都可以。
Control参数主要功能是用来做同一个页面中的主从表关系的,在主Grid上点下,立即就能把参数传到EcoDataSource上查询出子表的数据,具体做法很简单,大家看下就会了,呵呵
Enjoy ECO 4