`

windchill交流第五篇:创建计划执行队列执行计划任务

阅读更多

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

所有文章全部原创,均经过测试,如有不对,欢迎留言指正。
本文不说这东西从哪里来,要到那里去,只说如何去应用。
可以通过计划任务队列去有规律有间隔的执行一些任务,和定时器类似。
请按照以下步骤进行:
第一步,编写创建队列对象的代码,详细说明参见代码:
编写两个类com.queue.CreateQueue 和 com.queue.TestQueue,CreateQueue 里编写创建队列的代码,TestQueue里编写计划任务队列执行时所调用的类和方法。
CreateQueue.java文件如下:


package com.queue;

import java.sql.Timestamp;
import java.util.Date;
import java.util.Enumeration;

import wt.org.OrganizationServicesHelper;
import wt.org.WTPrincipalReference;
import wt.org.WTUser;
import wt.scheduler.ScheduleItem;
import wt.scheduler.SchedulingHelper;
import wt.util.WTException;

/**
 * <p>Description:  </p>
 * @author: 
 * @time: Oct 29, 2010 10:56:35 PM
 * @version 1.0
 */

public class CreateQueue {
	
	public static void main(String args[]) throws WTException{
		createScheduleQueue();
	}
	/**
	 * 创建计划执行队列,只需要执行一次即可,以后当windchill服务启动则按照设定的时间定时执行任务
	 * 11:25:38 PM
	 * @throws WTException 
	 */
	public static void createScheduleQueue() throws WTException{
		System.out.println("开始创建计划执行队列... ...");
		//创建计划队列对象
		ScheduleItem si = ScheduleItem.newScheduleItem();
		//设置该队列的描述信息
		si.setItemDescription("测试计划执行队列");
		//设置队列的名称,一般以英文命名
		si.setQueueName("TestScheduleItem");
		//设置要执行的类和方法
		//类名
		si.setTargetClass(TestQueue.class.getName());
		//方法名
		si.setTargetMethod("testQueue");
		si.setToBeRun(-1l);
		//设置开始时间,在这里我设置为队列创建后立即执行
        Date today = new Date();
        Timestamp timestamp = new Timestamp(today.getYear(), today.getMonth(),today.getDate(),
                00, 00, 0, 0); //这四个参数依次为小时,分,秒,毫秒
		si.setStartDate(timestamp);
		//设置执行周期,这里设置为每隔10秒执行一次
		si.setPeriodicity(10);
		//设置执行该任务的用户,如果是操作Windchill对象的话会牵扯到权限控制,这里设置为管理员执行
		WTUser administrator = getUserFromName("Administrator");
		WTPrincipalReference p = null;
		si.setPrincipalRef(WTPrincipalReference.newWTPrincipalReference(administrator));
		//最后,将计划任务对象添加到队列
		si = SchedulingHelper.service.addItem(si, null);
                  System.out.println("计划执行队列创建完毕... ..." + "'启动时间为'" + si.getStartDate() + "',间隔为'" + si.getPeriodicity() + "'!");	}
	
	
    /**
     * 根据用户名得到用户
     * @param name 用户名
     * @throws WTException 
     * return  WTUser
     */
    public static WTUser getUserFromName(String name) throws WTException {
        Enumeration enumUser = OrganizationServicesHelper.manager.findUser(WTUser.NAME, name);
        WTUser user = null;
        if (enumUser.hasMoreElements())
            user = (WTUser) enumUser.nextElement();

        if (user == null) {
            enumUser = OrganizationServicesHelper.manager.findUser(WTUser.FULL_NAME, name);
            if (enumUser.hasMoreElements())
                user = (WTUser) enumUser.nextElement();
        }

        if (user == null) {
            throw new WTException("系统中不存在用户名为'" + name + "'的用户!");
        }

        return user;
    }

}

TestQueue .java文件如下:

package com.queue;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

import wt.admin.AdministrativeDomainHelper;
import wt.method.MethodContext;
import wt.session.SessionAuthenticator;

/**
 * <p>Description:  </p>
 * @author: 
 * @time: Oct 29, 2010 11:29:46 PM
 * @version 1.0
 */

public class TestQueue {
	
	/**
	 * 计划队列执行时调用的方法
	 * 11:49:00 PM
	 */
	public static void testQueue(){
		TimeZone zone = TimeZone.getTimeZone("GMT+8:00");
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		sdf.setTimeZone(zone);
		String currentTime = sdf.format( new Date());
		System.out.println("测试计划执行队列,当前时间:" + currentTime );
		//在这里编写处理业务相关的代码,如果操作Windchill持久化对象时出现"找不到活动方法的上下文"错误时,可增加以下代码进行处理
		MethodContext mc = MethodContext.getContext(Thread.currentThread());
		if (mc == null)
			mc = new MethodContext(null, null);
		if (mc.getAuthentication() == null) {
			SessionAuthenticator sa = new SessionAuthenticator();
			mc.setAuthentication(sa.setUserName(AdministrativeDomainHelper.ADMINISTRATOR_NAME));
		}
	}
}


第二步,启动windchill服务,shell中执行以下命令运行CreateQueue的main方法
java com.queue.CreateQueue

弹出授权请求,输入管理员的用户名和密码,因为其他用户是没有权限创建队列的。

观察shell和methodServer中的输出信息,发现并未出错,同时,正在以10秒的间隔时间执行TestQueue类里的TestQueue()方法。
打开站点-实用程序-队列管理器,发现已存在名为TestScheduleItem的队列。
shell中的输出信息

methodServer中的输出信息

队列管理器

至此,计划执行任务队列创建完毕。
PS:
本文只是简单的描述了如何去创建一个队列对象。如果想写的更全面些,以下代码可能会有用处:
1,通过ScheduleItem对象的ITEM_NAME和QUEUE_NAME查询一个ScheduleItem对象
    /**
     * 通过ScheduleItem对象的ITEM_NAME和QUEUE_NAME查询一个ScheduleItem对象
     * 12:25:41 AM
     * @param schedule_item_name
     * @param Schedule_queque_name
     * @return
     * @throws WTException
     */
    public static ScheduleItem getScheduleItemFabu(String schedule_item_name,String Schedule_queque_name) throws WTException {
        ScheduleItem scheduleItem = null;
        QuerySpec queryspec = new QuerySpec(ScheduleItem.class);
        queryspec.appendWhere(new SearchCondition(ScheduleItem.class, ScheduleItem.ITEM_NAME, SearchCondition.EQUAL,
        		schedule_item_name));
        queryspec.appendAnd();
        queryspec.appendWhere(new SearchCondition(ScheduleItem.class, ScheduleItem.QUEUE_NAME, SearchCondition.EQUAL,
        		Schedule_queque_name));
        queryspec.appendOrderBy(ScheduleItem.class, ScheduleItem.START_DATE, true);

        QueryResult queryResult = PersistenceHelper.manager.find(queryspec);
        while (queryResult.hasMoreElements()) {
            scheduleItem = (ScheduleItem) queryResult.nextElement();
        }

        return scheduleItem;
    }

2,修改已存在的队列对象的相关属性
在获取ScheduleItem对象后,可修改其相关属性,下面是一些示例:
ScheduleItem  si= getScheduleItemFabu("a","b");
si.setStartDate(timestamp);
si.setItemDescription("修改队列描述");
si.setPeriodicity(60);
si.setToBeRun(-1l);
//保存修改后的队列对象
si=SchedulingHelper.service.modifyItem(si);


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

分享到:
评论
1 楼 talin2010 2011-07-25  
顶,好文章

相关推荐

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

    【标题】:“Windchill交流第三篇:Windchill中的事件监听” 在Windchill系统中,事件监听是一项核心功能,它允许系统在特定事件发生时执行预定义的逻辑或操作。这一篇我们将深入探讨Windchill如何实现事件监听,...

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

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

    windchill10.0&11;.0api_chm版

    WindChill API(应用程序接口)则是开发者用来与WindChill系统进行交互的工具集,通过编程方式实现自动化任务、定制功能或与其他系统集成。 这个压缩包包含的是WindChill 10.0和11.0两个版本的API参考文档,格式为...

    Windchill题库

    * 后台队列中的每个条目都对应一个要处理的任务,条目状态有:就绪、已暂停、正在执行、已完成、失败、重新安排、严格的。 13. 变更对象 * 变更对象有:问题报告、变更请求、变更通告、变更任务、超差。 14. 自动...

    Windchill专业化管理指南

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

    Windchill PDM业务管理中文版

    1. **登录Windchill PDMLink**:管理员需要使用指定的凭证登录Windchill PDMLink主页来执行管理任务。 2. **Windchill PDMLink主页**:提供了一个集中的位置来管理PDMLink的数据和配置设置。 3. **建立管理员账户**...

    PTC标准课程01_Windchill系统组件

    5. **配置和管理后台队列**:优化后台任务的执行顺序和优先级。 6. **排查Windchill组件故障**:快速定位并解决系统中出现的问题。 通过上述内容,我们可以看出Windchill系统不仅在技术架构上考虑周全,而且为用户...

    windchill安装手册

    2. 创建Oracle数据库实例:在安装了Oracle 9i后,需要创建一个Oracle数据库实例,以便Windchill可以连接到数据库。 3. 安装Oracle客户端(可选):如果需要使用Oracle客户端来连接数据库,可以安装Oracle客户端。 4....

    Windchill 开发.rar

    5. **Windchill SDK**:PTC提供了Windchill Software Development Kit(SDK),包含开发工具、文档和示例代码,帮助开发者更好地理解和使用Windchill API。 6. **WebSphere Application Server**:Windchill运行在...

    Windchill102M020_安装配置(Windows篇).zip

    本教程“Windchill102M020_安装配置(Windows篇)”将指导用户在Windows操作系统上进行Windchill的基础安装和配置。 **一、系统需求** 在安装Windchill之前,必须确保你的Windows系统满足最低硬件和软件要求。这...

    Windchill常用命令.docx

    5. **Windchill工作流程**: Windchill支持自定义工作流程,使得团队可以按照特定的审批流程处理设计变更、项目进度和其他业务活动。通过命令行工具或用户界面,可以启动、跟踪和管理这些工作流程。 6. **安全性与...

    Windchill用户使用手册 (2).pdf

    根据提供的文件信息,以下是关于Windchill系统使用手册的知识点: 1. Windchill使用手册内容概述:该手册是为企业内部用户准备的,内容包括用户操作指导和系统管理。手册提供详细的操作指导,旨在帮助用户快速学会...

    windchill_API.zip

    使用这些API文档,开发者可以创建自定义的插件、应用程序或脚本来扩展Windchill的功能,比如自动化数据导入导出、集成其他系统、定制工作流程等。在开发过程中,通常需要了解如何进行身份验证、调用API、处理返回...

    Windchill 10.0 建模文档

    ### Windchill 10.0 建模文档详细解析 #### Windchill 10.0 建模概述 Windchill是PTC公司的一款产品生命周期管理(PLM)软件,广泛应用于工程设计、制造和服务领域。Windchill 10.0版本在建模方面提供了强大的功能,...

    windchill业务培训笔记

    - **客户端**:只需最新版本的浏览器和网络连接即可访问Windchill数据和执行基本任务。 - **数据库服务器**:用于存储Windchill对象和其他数据。 - **可选服务器**:包括索引服务器、企业目录服务器、可视化工作站、...

    Windchill工程师面试.pdf

    4. Windchill的版本:文件中提到了Windchill 8.0、9.0版本,不同版本的Windchill在功能和操作上可能有所差异,工程师需要熟悉当前使用或计划升级到的版本的相关特性。 5. JSP、JCA与JavaScript:JSP(Java Server ...

    WindChill 10操作步骤.docx

    5. **创建组**:组是管理用户权限和访问控制的有效手段。创建组后,可以将多个用户添加到同一组中,然后为组分配特定的权限,简化权限管理。 6. **创建更改请求**:在产品开发过程中,更改是常见的需求。创建更改...

Global site tag (gtag.js) - Google Analytics