起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1815|回复: 20

[请求]信息的创建!**

[复制链接]
发表于 2004-6-15 11:38:56 | 显示全部楼层 |阅读模式
在一个功能中包含多个信息,每个信息包含多个表单:
1。在功能运行时是否创建所有包含的信息,
   还是只创建有代理的信息,还是其他。
2。信息创建时是否创建所有的包含的表单,
   还是只创建有代理的信息,还是其他。
3。信息中包含很多表单是不是会很影响速度。
回复

使用道具 举报

发表于 2004-6-15 15:58:14 | 显示全部楼层
这个问题比较不好回答,涉及到 环境链 隔离级 的概念,我先整理一下思路,明天给一个答复吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-15 17:07:54 | 显示全部楼层
谢谢,确实是个隔离级的问题!
回复 支持 反对

使用道具 举报

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

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

1.jpg

61.52 KB, 下载次数: 1699

回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-16 10:18:55 | 显示全部楼层
对象查看器是什么,我的版本没有。
各种对象的隔离级在设置不同的选项有什么作用,未定义又有什么作用。
比如全局的信息和岗位的信息使用上有什么区别。全局的只需创建一次吗??
这些概念我还是比较糊涂。请详细说明好吗?
回复 支持 反对

使用道具 举报

发表于 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-16 11:12:00 | 显示全部楼层
在回到1楼的问题上。
InforBroker有两个重要的属性:AutoBroker、AutoKind
AutoBroker表示是否自动创建引用的信息。
  如果AutoBroker=False,通过程序对InforBroker.Info赋值来获得信息(类似DataSource)
  如果AutoBroker=True,AutoKind=akShare,按照BizClassRef属性在功能环境中查找这个信息,如果没有就在功能环境创建一个。
  如果AutoBroker=True,AutoKind=akPrivate,按照BizClassRef属性创建这个信息,不管功能环境中是否已经存在。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-16 15:31:23 | 显示全部楼层
十分感谢,待俺仔细品味品味,希望继续关注此帖
:cheers:
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-4-19 13:27 , Processed in 0.059278 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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