Tuesday, November 21, 2006

专心spy第二天

早上起来晚了15分钟,于是终于感受了一下上海特有的"天天春运"这一人为奇观。记得上次体会还是在读书的时候,怀念ing~~~!

今天培训的开始就是昨天的继续。到现在为止,把对数据库的qiud这几种操作都完成了。主要用到了以下几个运算构件(在EOS的文档中有详细的说明,这点上看来EOS的文档要好好使用):BL_expandEntityAll,BL_updateEntity,BL_getPrimaryKey(用来自动生成主键),BL_insertEntity,BL_deleteEntity,BL_queryEntityAllWithPage(其中的分页条件这个输入参数的节点路径必须是PageCond,也就是/root/data/PageCond,这个在帮助中应该有讲到)。

昨天做的是对单表的操作,对于单表操作的话只需要在data包里导入数据实体即可。不需要象多表查询那样要手动写一下多个表的联接的sql。对于单表的操作今天还讲了使用向导的方法来做数据库操作(单表维护向导)。步骤如下:
1.新建构件包
2.在构件包中新建单表维护向导
3.根据提示,根据需要修改属性并一路next直到finish。

今天讲到了多表查询,基本思路和单表的是一样的,只是单表在做数据实体映射的时候是直接导入了数据实体,而多表的话是自己写select语句联接要查询的几张表把查询结果当一个数据实体,有点象是导入了一个view的感觉。步骤如下:
1.在data中新建查询类型实体。
2.手写select sql语句("alt+/"可以调出表名,随后加"."可以调出属性名)。

对于数据库查询结果显示在DataGrid中时要指定DataGrid的数据源xpath,这个xpath一般就是数据库查询运算构件返回的一个list的路径。

在eos中有以下数据类型:
1.常量:字符串(string)
2.变量:
比如xml数据是<who><name>jojo</name></who>,那么变量:who/name就是jojo,也就是取了name节点的值。
3.EOSField:
比如xml数据还是<who><name>jojo</name></who>,那么EOSField:who/name就是<name>jojo</name>,也就是取了name这个节点。
4.EOSEntity:这个和EOSField一样是取节点,只是EOSField不包含子节点而EOSEntity包含子节点。
5.EOSEntityList:多个相同节点的集合。比如
<list><sublist></sublist><sublist></sublist><sublist></sublist></list>

在讲到<dict:write>这个标签(TAG)的时候讲到了eos的业务字典,bndict_t_busitype和dndict_t_dictionary。比如处理性别这样的数据属性时,在数据库中
sex字段的值是1和2,在使用业务字典后使其在页面上自动将值1和2转换成男和女。

下午主要还讲了一下展现逻辑和业务逻辑中其他图元的用处如下:
1.数据设置:设置RequestContext和SessionContext中的数据。双击可以对其设置,其中source和target是成对出现的,讲source节点赋值给target节点。
2.开始:双击对其设置,"向session输出"表示该构件运行结束前从RequestContext向SessionContext拷贝的东西。"向session输入"和"向session输入/输出"同理。
注:若使用到了SessionContext中的SessionEntity,则EOS会自动把SessionEntity从SessionContext中拷贝到RequestContext中,构件运行结束再自动从RequestContext中拷贝到SessionContext中。
3.数据移除:删除节点数据。
4.事务开始、事务提交、事务回滚:可用连接线把事务的三种状态与业务逻辑连接,通过在连接线上设置相应的返回值,可以控制当业务逻辑运行成功后事务提交,而运行不成功时转向事务回滚。
5.异常线:在业务逻辑中有一种红色的连接线就是异常线,用来捕获异常,包括各种java的异常和自定义的异常。
6.迭代:在迭代中的节点必须是ITERATOR为根节点(大小写敏感)。

另外要注意的一点是展现逻辑内可以调用子展现逻辑,而且展现逻辑只能以jsp页面或子展现逻辑结束。

EOS还实现了分布式的构件包或跨数据库的调用,使用eosmgr中"构件包信息配置"来进行配制,多个数据库的话就是对datasource做配置即可(呵呵,估计和spring中配置多个datasource用hibernate对多个数据库使用多个事务管理器道理一样的)。

最后做了一个调用EOS内置js的一个练习,感觉上是EOS提供了不少预先制作好的js,可以在文档中找到具体用法和引用的js文件以及调用时需要的数据,这些数据可由业务逻辑求得并返回到RequestContext中,并以js中规定的xml数据形式位于/root/data/下以供js使用。

今天遇到的问题是:
1.对于一个自己建的构件包,对其重命名时会发现无法对整个构件包中的东西重构,而仅仅只是改了构件包的名字而已。这样的话会带来很多问题,因为java的类都是按package来找的,所以构件包的个个部件将找不到原来引用的包,导致运行失败,唯一的办法就是不要改动构件包名或者手动把该构件包下引用到该构件包名的地方都手动修改(是人都不愿意做这事,呵呵)。
2.对Firefox的支持并不好,很多js只能在IE中起作用,包括EOS自己的manager,用ff打开就会少很多东西,不能用。难道是EOS对ff不重视?应该迟早都会重视的,要跟国际接轨嘛,哈哈。

明天要讲一点ajax的应用(这个我喜欢),还要讲workflow,似乎满重要的,所以先睡觉养精神~~!哈哈哈!

No comments: