`

windchill交流第三篇:Windchill中的事件监听

 
阅读更多

前言:常年离线在线开发实施Windchill9.0和Windchill10.0。
带人经验极其丰富,可帮公司创建Windchill开发团队。
高效,务实,认真,负责!

所有文章全部原创,均经过测试,如有不对,欢迎留言指正。
以下是Windchill中可以监听的部分事件类型,一般是按功能划分:
wt.fc.PersistenceManagerEvent
wt.vc.VersionControlServiceEvent
wt.vc.wip.WorkInProgressServiceEvent
wt.events.summary.ModifyContentSummaryEvent
以PersistenceManagerEvent为例,所有可监听的事件在该类的静态常量中,定义如下:
    
    public static final String PRE_STORE = "PRE_STORE";
    public static final String POST_STORE = "POST_STORE";
    public static final String PRE_MODIFY = "PRE_MODIFY";
    public static final String POST_MODIFY = "POST_MODIFY";
    public static final String PREPARE_FOR_MODIFICATION = "PREPARE_FOR_MODIFICATION";
    public static final String PREPARE_FOR_VIEW = "PREPARE_FOR_VIEW";
    public static final String UPDATE = "UPDATE";
    public static final String PRE_REMOVE = "PRE_REMOVE";
    public static final String REMOVE = "REMOVE";
    public static final String PRE_DELETE = "PRE_DELETE";
    public static final String POST_DELETE = "POST_DELETE";
    public static final String CLEANUP_LINK = "CLEANUP_LINK";
    public static final String COPY_LINK = "COPY_LINK";


所有的事件监听原理相同,我们以删除事件为例(对应的事件类型为PersistenceManagerEvent.POST_DELETE),假定存在名字为postdelete的文档对象,如果对此文档进行删除操作,则在提交确认的时候阻止并进行信息提示,实现该监听的方法如下:

创建一个空的接口ListenerService,这个是必须的。

package com.wclistener; 

 /**
  * 空接口,什么也不做,但这是必须的
  * <p>Description:  </p>
  * @author:
  * @time: May 22, 2010 6:08:24 PM
  * @version 1.0
  */
public interface ListenerService {

}


创建具体的实现类,这个类需要继承wt.services.StandardManager类并实现我们定义的空接口ListenerService,其他解释见类中的注释。
package com.wclistener;

import java.io.Serializable;

import wt.doc.WTDocument;
import wt.events.KeyedEvent;
import wt.events.KeyedEventListener;
import wt.fc.PersistenceManagerEvent;
import wt.services.ManagerException;
import wt.services.ServiceEventListenerAdapter;
import wt.services.StandardManager;
import wt.util.WTException;

 
/**
 * 
 * <p>Description:  </p>
 * @author:
 * @time: May 22, 2010 6:09:20 PM
 * @version 1.0
 */
public class StandardListenerService extends StandardManager implements
		ListenerService, Serializable {
	
	private static final long serialVersionUID = 1L;

	private static final String CLASSNAME = StandardListenerService.class.getName();

	private KeyedEventListener listener;

	public String getConceptualClassname() {
		return CLASSNAME;
	}

	public static StandardListenerService newStandardListenerService()
			throws WTException {
		StandardListenerService instance = new StandardListenerService();
		instance.initialize();
		return instance;
	}
	
	/**
	 * 添加需要监听的事件
	 */
	protected void performStartupProcess() throws ManagerException {
		listener = new WCListenerEventListener(this.getConceptualClassname());
		//添加需要监听的事件,可以添加多个,这里添加的是删除事件POST_DELETE和修改事件	POST_MODIFY
		getManagerService().addEventListener(listener,PersistenceManagerEvent.generateEventKey(PersistenceManagerEvent.POST_DELETE));
		getManagerService().addEventListener(listener,PersistenceManagerEvent.generateEventKey(PersistenceManagerEvent.POST_MODIFY));
	}
 
	
	/**
	 * 定义内部类,用来处理相应的事件
	 * <p>Description:  </p>
	 * @author:
	 * @time: May 18, 2010 5:53:55 PM
	 * @version 1.0
	 */
	class WCListenerEventListener extends ServiceEventListenerAdapter {
		
		private String post_delete = PersistenceManagerEvent.POST_DELETE;
		private String post_modify = PersistenceManagerEvent.POST_MODIFY;
		
		public WCListenerEventListener(String manager_name) {
			super(manager_name);
		}
		public void notifyVetoableEvent(Object eve) throws Exception {
			if (!(eve instanceof KeyedEvent))
				return;
			//获取当前触发的事件对象
			KeyedEvent event = (KeyedEvent) eve;
			//获取当前被操作的持久化对象,如部件,文档,容器等
			Object target = event.getEventTarget(); 
                           String eventType = event.getEventType();
			/************************以下代码可根据实际业务进行修改******************************/
			if(eventType.equals(post_delete)){
				System.out.println("删除操作执行!");
			}else if(eventType.equals(post_modify)){
				System.out.println("修改操作执行!"); 
			}
			if (target instanceof WTDocument&& eventType.equals(post_delete)) {
				WTDocument document = (WTDocument) target; 
				if("postdelete".equals(document.getName())){
					//抛出WTException阻止删除操作的确认并提示必要的信息
					throw new WTException("名字为postdelete的文档是不可被删除的!");
				}
			} 
		}
	}
}


代码写完,同样需要在site.xconf中配置以便让其生效,添加如下内容:
<Property name="wt.services.service.5007" overridable="true"
             targetFile="codebase/wt.properties" 
             value="com.wclistener.ListenerService/com.wclistener.StandardListenerService"/>  


添加完毕,windchill shell中执行命令让其生效并重启methodserver:
xconfmanager -p&windchill stop&windchill start


全部配置完毕,请在任意容器中创建名字为postdelete的文档并对其执行删除操作,观察页面的提示信息和methodserver的输出信息。
整理好的代码在附件,直接拿来修改修改业务逻辑就可以用了。

前言:常年离线在线开发实施Windchill9.0和Windchill10.0。
带人经验极其丰富,可帮公司创建Windchill开发团队。
高效,务实,认真,负责!

0
0
分享到:
评论
1 楼 hm_240912 2010-11-17  
有沒有建立三種table 的全部代碼,請發到-----> hm_240912@163.com  的郵箱,本人非常感謝

相关推荐

    windchill交流第十四篇:系统性能调优

    在"Windchill交流第十四篇:系统性能调优"这个主题中,我们将深入探讨如何优化Windchill系统的运行效率,确保其能够高效、稳定地服务于企业的日常运营。 性能调优是任何大型系统的关键环节,对于Windchill这样的企业...

    windchill10.0&11;.0api_chm版

    - **事件和监听器**:通过注册监听器,开发者可以捕获WindChill系统中的事件,如对象创建、修改等,实现自动化的业务逻辑。 - **工作流和审批流程**:WindChill提供强大的工作流引擎,API允许开发者自定义和控制...

    Windchill题库

    * Windchill 中自动任务实现方法有:监听、工作流定时器、排成队列等。 15. 判断题 * 在设计工作流时,尽量不要调用工作流外的 Java 类代码,把逻辑写在工作流中,因为这样做可以在部署到生产环境时避免系统重启。...

    Windchill 开发.rar

    8. **XML和XSLT**:Windchill中的数据交换和配置文件通常涉及XML格式,而XSLT用于转换XML数据,因此理解这两种技术也是有益的。 9. **测试和调试**:在开发过程中,测试和调试技能同样重要。开发者需要学会使用...

    Windchill PDM业务管理中文版

    1. **数据类型**:Windchill支持多种类型的数据,包括可变类型、CAD数据等。 2. **可变类型**:允许用户定义数据类型,满足特定需求。 3. **可视化数据**:支持各种格式的数据可视化,便于用户理解和操作。 综上所...

    Windchill二次开发代码

    在Windchill中,报表是展示和分析数据的重要手段。二次开发时,开发者可能会创建新的报表或者修改现有报表,以便提供更直观的数据可视化和分析功能。这涉及到理解Windchill的报表引擎,如JasperReports或Crystal ...

    windchill11.0开发API

    5. **Event System**:Windchill的事件系统允许开发者订阅和处理系统中的特定事件,实现自动化响应。 6. **Security**:API提供了安全模型,确保只有授权的用户和应用程序能够访问和操作Windchill的数据。 7. **...

    Eclipse配置Windchill远程调试

    本文将深入探讨如何在Eclipse集成开发环境中配置Windchill的远程调试环境,以便于高效地定位和解决代码中的问题。 首先,我们需要理解Eclipse作为一款强大的Java开发工具,其内置的调试器功能非常强大,支持多种...

    Windchill 8.0 安装说明

    本指南将详细介绍Windchill 8.0的标准“开箱即用”(OOTB)安装流程,包括必要的第三方产品安装、各个组件的安装以及配置过程。 #### 二、安装环境与前提条件 - **操作系统**: Windows XP Professional。 - **硬件...

    Windchill常用命令.docx

    使用`windchill -version`命令可以在Windchill Shell环境中查看当前安装的Windchill系统的版本信息。这有助于确定系统是否为最新更新或判断是否需要进行升级,确保系统兼容性和性能。 2. **XConf Manager工具**: ...

    Windchill工程师面试.pdf

    11. 零件管理(Part Management):Windchill中零件管理的API和功能对于工程师来说同样重要,特别是WTPartHelper这样的类以及如何管理零件的使用关系。 12. Bom API:Bom API是Windchill中用于处理物料清单(Bill ...

    Windchill10.21M030产品安装教程

    Windchill是一款强大的Product Lifecycle Management (PLM)系统,由PTC公司开发,全球排名前三。本教程聚焦于Windchill 10.21 M030的安装过程,适用于PLM行业的从业者和初学者,旨在提供详尽的指导。安装教程包括...

    windchill_API.zip

    在这个名为"windchill_API.zip"的压缩包中,包含了有关Windchill 10和11版本的CHM(Compiled Help Manual)格式的API文档,这对于那些需要对Windchill进行二次开发或者深入理解其内部工作原理的工程师来说是非常宝贵...

    windchill安装手册

    3. 安装Multi Language Package F0005:Windchill支持多语言,需要安装Multi Language Package F0005以便支持多语言。 4. 安装Windchill MultiLanguage Pack M0105:Windchill MultiLanguage Pack M0105是Windchill...

    windchill开发环境部署

    此外,还需要将srclib目录下的commons-io.jar、commons-lang.jar和commons-collections.jar三个jar文件添加到类路径中,这三个jar文件是Apache.net开发的一些常用方法,例如复制IO流、List与数组转换等。 在添加jar...

    windchill安装步骤

    2. **Windchill 10.0 第三方软件** - 版本:F000 - 文件名:Windchill10.0ThirdPartySoftware 3. **Windchill 10.0 Directory Server** - 版本:F000 - 文件名:Windchill10.0DirectoryServer 4. **Windchill ...

    Windchill专业化管理指南

    2. **Windchill队列管理**:队列管理涉及到Windchill中任务和事件的处理流程。管理员需要理解如何配置和监控队列,以确保系统能够有效地处理工作流程中的各种任务,如审批、变更请求等。队列管理有助于优化系统性能...

    windchill业务培训笔记

    - **产品生命周期管理(PLM)解决方案**:Windchill PDMlink是一款专为快速实施和基于PTC技术设计的PLM解决方案软件包,旨在帮助企业管理整个产品生命周期中的数据和流程。 - **基于Web的协作平台**:它提供了以下核心...

Global site tag (gtag.js) - Google Analytics