### 前言
Teamcenter web 端处理浏览器的请求的流程是:
1. 浏览器点击一个link
2. 在app map.xml 中定义的 response-chian 来处理这个link (response-chain 由action component 组成,每个action component 都是做通过输入,得到输出这样一些事情)
3. 最终的resposne chain 都会导入到一个 jsp 的 page页面中, 而且有一个handle来处理这个jsp 页面。
com.sdrc.metaphase.wcc.mwau.util.TemplatePageHandler
这个handler 的作用就是,在jsp页面之前,读取system preference的配置文件组成一些bean存到request 中(比如页面的button 配置是怎样的), 这样的话在jsp中就可以得到这个bean. 这个bean 是直接显示,还是render 显示,或是通过标签来显示都可以了。
总之,返回的就是定义的一个java 的bean.(更直接就是一个java 的实例)
### 如何整合Ext JS
对于Ext js 的组件而言,只需要通过store从服务端取到 json 格式的子串就可以了。
这种解法可能行得通:
在jsp里取到哪些bean,然后解析那些bean成Ext js需要的格式。
但是问题是:
1. 需要很清楚的知道那些bean 的结构,而且如果对于一些新的组件来说,TC或许没有这样的bean , 或者说没有提供合适的bean.
2. 还有就是Ext js的优势在store 可以异步的获取资料。 页面的框架可以先出来, 这样用户感觉上会更好。(其实这也是Teamcenter 2007 web的一个最大的弱势,没有异步调用的方式,页面要全部刷新才能够出得来)
其他的设想不再做了,直接给出觉得比较好的解法:
解法思路:
使用JSON lib直接返回标准的JSON格式的数据,
改动如果写在TemplatePageHandler,则需要修改和覆盖这个问题, 看上去很麻烦。
这里的例子是获取Ext tree grid 的栏位的方式:
正确步骤:
1. 在system preference XML 定义一个新的widget
~~~
<edit parent="/PageInfo/WidgetDefinitions">
<add>
<node name="ExtTreeJSArrayWidget">
<map>
<entry key="widget_type" value="ExtTreeColJSArray"/>
<entry key="bean_name" value="ExtTreeColJSArrayBean"/>
<entry key="parameters" value="ItemHandleParam"/>
<entry key ="content" value="ExtTreeColContent"/>
</map>
</node>
</add>
</edit>
~~~
2. 针对这个类型的widget , 定义一个处理它的processor
~~~
<edit parent="/AppConfig/WidgetProcessors">
<add>
<node name="ExtTreeColJSArray">
<map>
<entry key="class"
value="com.oscar999.widgets.ColumnJSArrayProcessor" />
</map>
</node>
</add>
</edit>
~~~
3. 完成ColumnJSArrayProcessor 的内容
~~~
public class ColumnJSArrayProcessor extends BaseWidgetProcessor {
boolean debug_;
public ColumnJSArrayProcessor() {
this.debug_ = false;
}
public void prepareWidget() {
HttpServletRequest request = getRequest();
ServletContext servlet_ctx = getServletContext();
RequestContext context = getContext();
WidgetPreferencesReader preferences_ = getWidgetPreferencesReader();
Session session = WebAppSupportUtil
.getESSession(request, servlet_ctx);
Manager manager = WebAppSupportUtil.getESManager(servlet_ctx);
Locale locale = context.getServerLocale();
ResourceLookup resourceLookup = context.getResourceLookup();
Processor proc =null;
try {
proc = (Processor) manager.getProcessor("base.Processor",
session);
} catch (UnknownProcessorException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
.........................
request.setAttribute(presentationBeanName_, jsonArray.toString());
}
}
~~~
这里面该有的都有了, preference , Proce; 接下来可以写任何想写的逻辑。
4. web端使用
tree的col 定义有了,tree 的框架就可以出来了。 数据可以通过store 的proxy 去异步获取。
需要的数据的栏位也可以通过col 传给store 的proxy .
~~~
Ext.create('Ext.tree.Panel', {
title: 'Tree',
width: '100%',
//height: 150,
store: store,
rootVisible: false,
renderTo: doc_div,
columns: treeCols
});
~~~
### 结言
当然,如果以及完全不使用OOTB的jsp Template的话,可能就不需要这样。
但是, 她的这个widget 和widge processor 的设计的确很好, 很灵活。
- 前言
- 国内外PLM/PDM厂商情况
- PLM系统与选择
- Teamcenter及其一揽子产品解决方案初步介绍
- Teamcenter 开发利器组合介绍。 Eclipse + Visual Studio
- TeamCenter开发系统设计系列之一
- linux下自动部署Teamcenter Enterprise 的服务端脚本
- Teamcenter 入门开发系列问答(1)
- PLM基本概念收集
- Teamcenter 入门开发系列问答(2)
- Teamcenter 入门开发系列问答(3)
- Teamcenter 入门开发系列问答(4)
- Teamcenter 入门开发系列问答(5)
- Teamcenter开发问题之-- relation 无法创建 and 无法check in
- Teamcenter(Enterprise 2007) Admin 手法之 -- 移除relation
- Teamcenter 2007 之 Part 物件关联
- Teamcenter 2007之错误信息提示
- Teamcenter(Enterprise 2007) 开发之- 快速搭建开发环境(windows)
- Teamcenter 开发中的一些问题
- Teamcenter - Index search 找不到相关物件的解决方法
- Teamcenter2007 安装步骤
- [Teamcenter 2007 开发系列] 整合Extjs 展现页面组件
- Teamcenter2007 开发环境搭建和技巧
- [Teamcenter 2007 开发系列] web 非空验证
- [Teamcenter 2007 开发实战] 获取错误或提示信息
- Teamcenter Web 端自动登录 (SSO)
- [Teamcenter 2007 开发实战] 调用web service
- [码海拾贝 之TC] 呼叫外部应用程序或脚本
- [码海拾贝 之TC] 使用View 定义动态的Class