起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: huixiangtao

【结贴】用 ocx直接运行一个功能**

[复制链接]
发表于 2009-4-24 15:55:11 | 显示全部楼层
第二个是人员和密码拼在一起的字符串,中间用分隔符分开,然后在平台里面解析
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-24 16:21:20 | 显示全部楼层
我新了个NewBusiness.jsp,其他的地方都没动,只是用Run2代替了Run,代码如下:
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="com.justep.loader.LibContext"%>
<%@ page import="java.lang.reflect.Method" %>
<%
Class pclass = LibContext.getInstance().getLoader().loadClass("com.justep.web.SysServerProvider");
Object pobj = pclass.newInstance();
Method getBXClassIDMethod = pclass.getMethod("getBXClassID",new Class[]{});
Method getBXCodeMethod = pclass.getMethod("getBXCodebase",new Class[]{});
Method getSysServerURLMethod = pclass.getMethod("getSysServerURL",new Class[]{});
Method getClientPathMethod = pclass.getMethod("getClientPath",new Class[]{});
Method getVersionMethod = pclass.getMethod("getVersion",new Class[]{});
Method getVersionKeyMethod = pclass.getMethod("getVersionKey",new Class[]{});
Method getVersionHashMethod = pclass.getMethod("getVersionHash",new Class[]{});

String classId = (String)getBXClassIDMethod.invoke(pobj,new Object[]{});
String codeBase = (String)getBXCodeMethod.invoke(pobj,new Object[]{});
String url = (String)getSysServerURLMethod.invoke(pobj,new Object[]{});
String clientPath = (String)getClientPathMethod.invoke(pobj,new Object[]{});
String version = (String)getVersionMethod.invoke(pobj,new Object[]{});
String versionKey = (String)getVersionKeyMethod.invoke(pobj,new Object[]{});
String versionHash = (String)getVersionHashMethod.invoke(pobj,new Object[]{});
String params = " -s" + url;
if (clientPath != null && !"".equals(clientPath))
  params = params + " -p" + clientPath;

if (version != null && !"".equals(version))
  params = params + " -vid" + version;

if (versionKey != null && !"".equals(versionKey))
  params = params + " -vk" + versionKey;

if (versionHash != null && !"".equals(versionHash))
  params = params + " -vh" + versionHash;
%>
<HTML>
<HEAD>
<title>X3 协同管理系统</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script src="Scripts/AC_ActiveX.js" type="text/javascript"></script>
<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>
</HEAD>

<BODY leftmargin="0" topmargin="0" scroll="no">

<script type="text/javascript">
  AC_AX_RunContent("id", "X3X", "classid", "<%= classId%>", "codebase", "<%= codeBase%>", "width", "100%", "height", "100%", "align", "center", "hspace", "0", "vspace", "0");
</script>
<noscript><OBJECT  id = "X3X"
          classid="<%= classId%>"
          codebase="<%= codeBase%>"
          width="100%"
          height="100%"
          align=center
          hspace=0
          vspace=0
>
</OBJECT></noscript>

<script type="text/javascript">
  AC_AX_RunContent("id", "WebBrowser", "width", "0", "height", "0", "classid", "CLSID:8856F961-340A-11D0-A96B-00C04FD705A2");
</script>
<noscript><object id="WebBrowser" width=0 height=0 classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2">
</object></noscript>

<script ID="BusinessCloseEventHandler" language="javascript" FOR="X3X" EVENT="OnTerminate">
  top.window.opener=null;
  top.window.close();
  //WebBrowser.ExecWB(45,1); // close window
</script>
<script ID="RTEventHandler" language="javascript" FOR="X3X" EVENT="OnRTEvent(Param)">
  //X3脚本事件
  //可以在脚本中执行RTEvent.Execute('Param1');最终调用会执行到这里,Param1的内容格式可以自定义
  //Param变量的内容就是传出的字符串(Param1)。
</script>

<script type="text/javascript">
  function BeforeClose()
  {
    if(!X3X.TerminateQuery())
    {
      event.returnValue = "";
    }
  }

  document.title = X3X.DisplayName;
  X3X.Params = "<%= params%>";
  
  X3X.UpdateVersion();
  X3X.ShowSplash();
  X3X.Init();
  X3X.Run2("Biz:\TXK\FUNC\GZRZCXGN.Func", "chenping;");
  document.body.onbeforeunload=BeforeClose;
  document.title = X3X.DisplayName;
</script>

</BODY>
</HTML>
其中用户名是chenping,没有密码,
可是用IE运行报错:URL“biz:TXKFUNCGZRZCXGN.FUNC”转化为文件名失败,
我哪儿做错了吗?
回复 支持 反对

使用道具 举报

发表于 2009-4-24 16:34:04 | 显示全部楼层
Biz:\\TXK\\FUNC\ \GZRZCXGN.Func
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-24 16:57:47 | 显示全部楼层
可以打开这个功能了,但是我这个功能有两个标签页,第一个标签页用datagrid表现数据集中的记录,第二个标签页显示选中的这条记录的详细信息,以dataEdit方式。我本来在第二页的docview上设有只读属性,现在有个错误:如下图所示,
并且只读没有表现出来。

qq9.png

6.61 KB, 下载次数: 273

回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-24 17:13:15 | 显示全部楼层
并且我发现运行两次之后就出现了这个错误,不知道怎么回事?
如下图所示:它是在打开功能之前出现的。

qq10.png

5.55 KB, 下载次数: 282

回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-24 17:23:08 | 显示全部楼层
焦急等待中~
回复 支持 反对

使用道具 举报

发表于 2009-4-24 17:37:51 | 显示全部楼层
这个方法不好,刚才liujian过来和我说了一下你们的需求,感觉还是另外一种方法比较好,比如有很多按钮(oa、crm、hr)然后每次点击oa把平台运行起来只显示oa空间下的所有功能,
这个不用run2方法了,直接用run,把空间id作为run的第四个参数传进来,然后把这个人的所有运行功能和这个参数进行比较,如果是这个空间下的就能够现实在功能树中,所以要找到在加载业务功能树的时候那些所有功能是在那里取到的,好像是在组件库的LoadFuncs函数中。

这个你先研究着,我周一来简单的做个例子看看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-27 09:26:37 | 显示全部楼层
期待中~
回复 支持 反对

使用道具 举报

发表于 2009-4-27 11:37:27 | 显示全部楼层
具体实现思路是这样的:
1.在Business.jsp文件中使用Run方法中第2个参数把空间名传入到平台中
2.在 系统初始化功能DoRun中去掉Business.jsp中传进来的参数,类似这样 Param := Parameters;
3.定义一个全局参数,然后在系统初始化中对这个全局参数赋值,把Param的值赋给这个全局参数
4.在  业务模型\系统空间\用户界面基础\界面库\组件库 中接收到上面的全局参数,然后判断一下  LoadFuncs 这个函数中 lFuncURLs[I] (功能的url)值和那个参数比较一下,如果空间URL在功能的lFuncURLs[I] 就执行
        lFuncItem := TOperatorFuncItem(lFuncURLs.Objects[I]);
        FAllocatedFuncs.Add(lFuncItem.FuncURL.FileName);

当然 LoadFuncs中也要判断一下当参数为空的时候默认加载所有功能的情况。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-27 12:37:05 | 显示全部楼层
哦,谢谢,这个方法我现在开始照着做,
25楼那个错误还是不停的冒出来,不知道到底是什么原因引起的。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-22 02:45 , Processed in 0.039076 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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