起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 2808|回复: 9

环境、环境链、隔离级的概念说明

[复制链接]
发表于 2004-6-16 09:53:51 | 显示全部楼层 |阅读模式
首先我们看看 环境
就像在现实生活中,我们每个人都生活在环境中一样,环境由小到大,首先是家庭、区、城市、省、国家、洲、地球、银河系...,每个人都会受到自己所在的每一个环境的影响。

相应的,每一个对象都生存在一定的环境中,并且依赖于环境来决定自己的行为和表现。
每个对象的环境也是由小到大的,信息、功能、流程、岗位、人员、全局等。

1.jpg

36 Bytes, 下载次数: 1689

回复

使用道具 举报

 楼主| 发表于 2004-6-16 10:19:53 | 显示全部楼层
每一个环境都会有一个对象池,存放在这个环境下生存的对象。当执行Context.GetBizObject的时候,首先会检查在这个Context的对象池中是否存在这个BizURL的对象,如果有直接返回这个对象;如果没有就在这个环境中创建一个这个对象,并且放到对象池中。

再看看环境链。
当取环境信息的时候,如果这个环境没有,就去到这个环境的父环境中寻找,这样一级一级上去,直到找到为止。比如:当订单信息中需要用到当前操作者编号的时候,其实是在父环境TOperator中获得的。

有的功能需要调用环境中的岗位信息、人员信息,如果在不恰当的环境中执行这个功能的话,就会取不到这些信息。比如:工作任务需要用到岗位信息,如果放到主界面上(见上图,主界面TProfession在全局环境中,从环境链中得不到岗位信息),必须用一个岗位成员的环境来运行它。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-16 10:31:08 | 显示全部楼层
再看看 当前环境。
当前环境就是取这个环境的环境链,从这个环境链中取需要的环境信息。比如:ContextCurrent有Operator属性,但是如果用GlobalContext来创建当前环境的话,从当前环境中就得不到当前操作者,因为这个环境的环境链上没有人员环境。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-16 10:44:12 | 显示全部楼层
终于可以讲 隔离级 了。
隔离级是在对象定义中,直接指定这个对象生存的环境。比如定义一个参数组对象的隔离级为功能,那么当需要用到这个参数组的时候,首先会在功能环境中查找这个参数组,如果没有则在功能环境中创建这个参数组,于是这个功能中的每一个对象访问到的参数都是一样的。在信息1中对参数赋的值,可以在信息2中取得这个值,但是另外一个功能如果也用到了这个参数组的话,也会在自己的功能环境中创建这个参数组,于是这个参数在功能1中等于'aa',在功能2中等于'bb'。

如果隔离级是 未定义,那么就会在环境链中查找这个对象,如果没有的话,就会在这个环境中创建一个这样的对象。还看4楼的图,订单表 这个信息的隔离级为未定义,订单申请 功能用到了这个信息,而且在当前环境链中没有这个信息,于是在功能环境中,创建了 订单表 信息。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-19 10:09:18 | 显示全部楼层
我按照你说的两个功能 物资库存功能 和 统计计算字段
都引用了一个信息 物资库存信息
而且这三个对象都设置隔离级为 全局

于是得到了下面的结果

跟4楼的图比较,我们可以看到,4楼的图中,信息是在功能环境中创建的,而这里是在 全局环境 中创建的,功能环境下都没有信息了。

1.jpg

36 Bytes, 下载次数: 1648

回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-19 10:13:14 | 显示全部楼层
上面提到的功能和信息,你那里也有,你可以看看。(没有设置隔离级,另外这两个功能没有对应一个文档)

当其中一个功能的数据集滚动的时候,另一个功能也发生了同样的变化。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-24 14:27:46 | 显示全部楼层
edit不是在信息中,而是在文档中,这个文档又是在功能中
只有数据集是在信息中的。

1.jpg

36 Bytes, 下载次数: 1596

回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-24 14:30:39 | 显示全部楼层
只有数据集才是在信息中的,可以被多个功能中引用。
而文档是对数据的表现,根据数据集的变化来表现对应的数据。
而edit没有对应的数据,就会出现这样的问题了。
如果确实需要的话,可以创建一个自定义数据集,然后在文档中表现这个数据集。

1.jpg

36 Bytes, 下载次数: 1589

回复 支持 反对

使用道具 举报

发表于 2004-6-18 11:25:35 | 显示全部楼层
我创建了一个信息,两个功能,各个功能都引用该信息,功能和信息的隔离级都是全局;
我认为我打开功能一后,信息已经创建,我把信息中的文本控件付值;
然后打开功能二,这时应该取功能一里已经创建好的信息,也就是文本控件应该已经有值,
可是打开功能二时发现没有值。
看来我理解的有错误,能再说说吗。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-8-25 11:46:02 | 显示全部楼层
帖子中所有的截图都是对象查看器。
在运行平台中,任何状态下都可以按 Ctrl+Alt+Shift+O 热键调出来的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-23 00:43 , Processed in 0.041800 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表