起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 651|回复: 6

【搞定】GetBizObject的问题

[复制链接]
发表于 2004-3-25 11:46:09 | 显示全部楼层 |阅读模式
我用一个窗体类名去找到一个对应的窗体,但是找到了窗体创建以后却是Void型的,
不能把这个创建了的窗体赋给一个窗体类的对象,
我是这样操作的:
var
  UrlVar: TBizClassURL;  
  RecForm : Tfrom;


    UrlVar := TBizClassURL.Create;
    UrlVar.BizURL.URL := 'Biz:\EPOWER_SPACE\SPACE_DEV\YCSBLLQ.Func\' + 窗体名+ '.Form';
[U]RecForm := TForm(self.Context.GetBizObject(UrlVar)).Create(Self.Context);[/U]
当执行到有下划线的这一句后,提示“Incompatible types: "TForm" and "Void"”,怎样才能实现将创建的窗体赋给一个窗体变量呢?
是不是用一次GetBizObject方法就相当于创建了一个对象?所以应该这样执行:
RecForm := TForm(self.Context.GetBizObject(UrlVar))
我验证过了,这样执行不报错

还有TbizContext具体怎么用,我这么用对吗?最好给个例子,谢谢。
回复

使用道具 举报

发表于 2004-3-25 12:14:04 | 显示全部楼层
这个问题可命题为:
  已知一个ClassURL(TBizClassURL)和环境(Context),怎样得到该ClassURL的对象实例?

解答:
  根据需要不同有两种方式:
    这两种方式的关键区别是是否需要由池共享对象,多次使用。具体该使用哪种需要根据应用选择。
    1、在环境共享对象池中取
      Context.GetBizObject(ClassURL)是在环境对象池取得共享对象,如果环境中已有该对象,直接返回,否则创建一个并加入池中。通过这种方式取得的对象生命周期由环境管理,不用主动Free。      

    2、自己创建
      通过BizSys.BizServive.CreateObject(ClassURL, Context)可创建出该ClassURL的对象实例,该实例必须由自己管理生命周期,即必须主动Free。

      下面是BizServive的相关接口:

  TBizService = class
    function CreateBizForm(const AClass: TBizClassURL; AContext: TBizContext): TBizForm;
    function CreateBizObject(const AClass: TBizClassURL; AContext: TBizContext): TBizModule;
    function CreateObject(const AClass: TBizClassURL; AContext: TBizContext): TComponent;
  end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-3-25 13:34:32 | 显示全部楼层
bizSys是个什么东西?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-3-25 13:38:44 | 显示全部楼层
还有Context前面不加Self是不是默认就是本地的环境?bizContext和Context的关系是什么?
回复 支持 反对

使用道具 举报

发表于 2004-3-25 13:56:21 | 显示全部楼层
1、BizSys是Business.Model名空间下的单元类,该类里有BizService属性,可以用来根据TBizClassURL创建对象
   
2、TBizContext是类名,Context是TBizObject(TInfo、TFunc等)或 TBizForm下的属性,表明该对象的环境

3、你的那段代码如果用第二种方式,大致代码如下:

UrlVar := TBizClassURL.Create;
try
  UrlVar.BizURL.URL := 'Biz:\EPOWER_SPACE\SPACE_DEV\YCSBLLQ.Func' + 窗体名+ '.Form';
  RecForm := BizSys.BizService.CreateBizForm(UrlVar, Self.Context);
  try
     //使用RecForm
  finally
     RecForm.Free;
  end;
finally
  UrlVar.Free;
end;

需说明的是,由于我这儿时间有限,代码没有验证,但原理应该是这样。
回复 支持 反对

使用道具 举报

发表于 2004-3-25 14:43:25 | 显示全部楼层
thx
回复 支持 反对

使用道具 举报

发表于 2005-9-9 15:12:37 | 显示全部楼层
UrlVar := TBizClassURL.Create;
try
  UrlVar.BizURL.URL := 'Biz:\EPOWER_SPACE\SPACE_DEV\YCSBLLQ.Func' + 窗体名+ '.Form';
  RecForm := BizSys.BizService.CreateBizForm(UrlVar, Self.Context);
  try
     //使用RecForm
  finally
     RecForm.Free;
  end;
finally
  UrlVar.Free;
end;

如果我所建立的对象是一个tformdoc呢?请问该如何做呢?谢谢?

我自己写了一段,可是提示不能隐式转换,

charttoimage:Tformdoc;

scale:trect;
begin


    charttoimage:=bizsys.BizService.CreateObject(DOCVIEW1.DOC.BIZCLASSURL,DocView1.Info.Context);
     try
     scale.Bottom:=600;
     scale.top:=0;
     scale.right:=800;
     scale.left:=0;
     Dialogs.ShowMessage(DOCVIEW1.DOC.BIZCLASSURl.BizURL.URL);

   finally
   charttoimage.free;
    end;
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-4-25 04:50 , Processed in 0.058030 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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