1.指定包下创建队列方法类--CreateQueueForTest;
2.定义队列执行业务类--TestCreateQueue,编写具体业务方法;
3.启动windchill服务,在windchill shell中执行以下命令,创建排程队列并启动生效;
执行以下命令:
windchill com.cn.common.queue.CreateQueueForTest test
附具体类demo:
package cn.com.common.queue;import java.sql.Timestamp;
import java.util.Enumeration;import org.apache.log4j.Logger;import wt.fc.PersistenceHelper;
import wt.fc.QueryResult;
import wt.log4j.LogR;
import wt.org.OrganizationServicesHelper;
import wt.org.WTPrincipalReference;
import wt.org.WTUser;
import wt.pds.StatementSpec;
import wt.query.QuerySpec;
import wt.query.SearchCondition;
import wt.scheduler.ScheduleItem;
import wt.scheduler.SchedulingHelper;
import wt.util.WTException;/*** @description 创建定时队列--排程* @author zhenqingshi** @date 2020年10月24日*/
public class CreateQueueForTest {private static final Logger logger = LogR.getLogger(TestCreateQueue.class.getName());/*** @description* @author Lin* @date 2020年10月24日* @param args* @throws WTException*/public static void main(String[] args) throws WTException {// RemoteMethodServer rms = RemoteMethodServer.getDefault();// GatewayAuthenticator auth = new GatewayAuthenticator();// auth.setRemoteUser("wcadmin");// rms.setAuthenticator(auth);if ("test".equals(args[0])) {QueryResult queryResult1 = getScheduleItem("update kucun", "sap1");while (queryResult1.hasMoreElements()) {ScheduleItem scheduleItem = (ScheduleItem) queryResult1.nextElement();// 删除系统中已存在的队列PersistenceHelper.manager.delete(scheduleItem);}createScheduleQueue1();}}public static QueryResult getScheduleItem(String schedule_item_name, String Schedule_queque_name)throws WTException {QuerySpec queryspec = new QuerySpec(ScheduleItem.class);queryspec.appendWhere(new SearchCondition(ScheduleItem.class, ScheduleItem.ITEM_NAME, SearchCondition.EQUAL,schedule_item_name), new int[] { 0 });queryspec.appendAnd();queryspec.appendWhere(new SearchCondition(ScheduleItem.class, ScheduleItem.QUEUE_NAME, SearchCondition.EQUAL,Schedule_queque_name), new int[] { 0 });// queryspec.appendOrderBy(ScheduleItem.class, ScheduleItem.START_DATE,// true);QueryResult queryResult = PersistenceHelper.manager.find((StatementSpec) queryspec);logger.info(">>>" + queryspec);logger.info(">>>" + queryResult.size());return queryResult;}public static void createScheduleQueue1() throws WTException {System.out.println("开始创建计划执行队列... ...");// 创建计划队列对象ScheduleItem si = ScheduleItem.newScheduleItem();// 设置该队列的描述信息si.setItemName("lqtCreateQueueTest");si.setItemDescription("测试计划队列执行");// 设置队列的名称,一般以英文命名si.setQueueName("timingQueueTest");// 设置要执行的类和方法// 类名si.setTargetClass(TestCreateQueue.class.getName());// 方法名si.setTargetMethod("queueTest");si.setToBeRun(-1l);// 设置开始时间,在这里我设置为队列创建后立即执行Timestamp timestamp = Timestamp.valueOf("2020-10-24 00:00:00.000"); // 设置2020年10月24号// 2点开始执行si.setStartDate(timestamp);// 设置执行周期,这里设置为每隔24小时执行一次 86400si.setPeriodicity(300);// 设置执行该任务的用户,如果是操作Windchill对象的话会牵扯到权限控制,这里设置为管理员执行WTUser administrator = getUserFromName("Administrator");si.setPrincipalRef(WTPrincipalReference.newWTPrincipalReference(administrator));// 最后,将计划任务对象添加到队列si = SchedulingHelper.service.addItem(si, null);logger.info("计划执行队列创建完毕... ..." + "'启动时间为'" + si.getStartDate() + "',间隔为'" + si.getPeriodicity() + "'!");}@SuppressWarnings("deprecation")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;}
}
package com.cn.common.queue;import java.util.Date;import org.apache.log4j.Logger;import wt.log4j.LogR;public class TestCreateQueue {private static final Logger logger = LogR.getLogger(TestCreateQueue.class.getName());public static void queueTest() {Date date = new Date();logger.info("======计划队列正在执行====" + date);}
}