Windchill实战-工作流

根据流程活动获取工作项

    /**
     * 获取activity关联的workitems
     * @param activity
     * @return
     * @throws WTException
     */
    public static Set<WorkItem> getWorkItems(WfAssignedActivity activity) throws WTException{
        QueryResult qr = PersistenceHelper.manager.navigate(activity, ActivityAssignmentLink.ROLE_BOBJECT_ROLE, ActivityAssignmentLink.class);
        Set<WorkItem> workitems = new HashSet<WorkItem>();
        while(qr.hasMoreElements()){
            WfAssignment assignment = (WfAssignment)qr.nextElement();
            QueryResult qr1 = PersistenceHelper.manager.navigate(assignment, WorkItemLink.ROLE_BOBJECT_ROLE, WorkItemLink.class);
            workitems.addAll(qr1.getObjectVectorIfc().getVector());
        }
        return workitems;
    }

完成工作流任务

    /**
     * 完成任务
     * @param activity
     * @throws WTException
     */
    public static void completeActivity(WfAssignedActivity activity) throws WTException{
        Vector<Object> vector = new Vector<Object>();
        vector.addElement("");
        WfEngineHelper.service.complete(activity, vector);
    }

获取流程活动

    /**
   * 通过process下的activity节点
   * @param wfp process对象
   * @param activityName activity节点名称
   * @return activity对象
   * @throws WTException
   */
  public static WfAssignedActivity getActivityByName(WfProcess wfp,String activityName) throws WTException {

      QueryResult result = wfp.getContainerNodes();
      while (result.hasMoreElements()) {
          Object obj = result.nextElement();
          if (obj instanceof WfAssignedActivity && StringUtils.equals(activityName,((WfAssignedActivity) obj).getName())) {
              return (WfAssignedActivity) obj;
          }
      }
      return null;
  }

获取活动对象

    /**
     * 返回进程对象
     *
     * @param obj
     * @return
     */
    public static WfProcess getProcess(Object obj) {
        if (obj == null) {
            return null;
        }
        try {
            Persistable persistable = null;
            if (obj instanceof Persistable) {
                persistable = (Persistable) obj;
            } else if (obj instanceof ObjectIdentifier) {
                persistable = PersistenceHelper.manager.refresh((ObjectIdentifier) obj);
            } else if (obj instanceof ObjectReference) {
                persistable = ((ObjectReference) obj).getObject();
            }
            if (persistable == null) {
                return null;
            }
            if (persistable instanceof WorkItem) {
                persistable = ((WorkItem) persistable).getSource().getObject();
            }
            if (persistable instanceof WfActivity) {
                persistable = ((WfActivity) persistable).getParentProcess();
            }
            if (persistable instanceof WfConnector) {
                persistable = ((WfConnector) persistable).getParentProcessRef()
                        .getObject();
            }
            if (persistable instanceof WfBlock) {
                persistable = ((WfBlock) persistable).getParentProcess();
            }
            if (persistable instanceof WfProcess) {
                return (WfProcess) persistable;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

重置流程活动

    public static void restart(Object obj) {
      WfProcess process = getProcess(obj);
      try {
          System.out.println(process.getName());
          String oid = FACTORY.getReferenceString(ObjectReference.newObjectReference(process));
          delectExamineRecord(oid);
          addMethodToScheduleQueue("WfRestartQueue", RevocationProcessHelper.class.getName(), "resetWfProcess",
                  new Class[] { String.class }, new Object[] { oid });
      } catch (Exception e) {
          e.printStackTrace();
      }
  }
  public static void resetWfProcess(String oid) {
      if (oid == null || "".equals(oid)) {
          return;
      }
      try {
          WTReference wtref = FACTORY.getReference(oid);
          WfProcess obj = (WfProcess) wtref.getObject();

          if(obj == null ){
              return;
          }
          Thread.sleep(10 * 1000);//等待10秒

          obj = (WfProcess) PersistenceHelper.manager.refresh(obj);
          ProcessData context = obj.getContext();
          obj.changeState(WfTransition.RESET);
          obj = (WfProcess) PersistenceHelper.manager.refresh(obj);
          obj.start(context, true, obj.getContainerReference());
      } catch (WTException e) {
          e.printStackTrace();
      } catch (InterruptedException e) {
          e.printStackTrace();
      }
  }

  public static void addMethodToScheduleQueue(String queueName,
                                              String classname, String method, Class argsClasses[],
                                              Object argsObjects[]) throws WTException {
      WtQueue queue = null;
      Enumeration allqueues = QueueHelper.manager.queues(ProcessingQueue.class);
      while (allqueues.hasMoreElements()) {
          WtQueue aqueue = (WtQueue) allqueues.nextElement();
          if (aqueue.getName().equals(queueName)) {
              queue = aqueue;
              break;
          }
      }
      if (queue == null) {
          queue = QueueHelper.manager.createQueue(queueName);
          if (queue instanceof ProcessingQueue) {
              QueueHelper.manager.enableQueue((ProcessingQueue)queue, true);
              QueueHelper.manager.startQueue((ProcessingQueue)queue);
          }
      }
      if (queue instanceof ProcessingQueue) {
          ProcessingQueue pQueue = (ProcessingQueue) queue;
          pQueue.addEntry(SessionHelper.manager.getAdministrator(), method, classname, argsClasses, argsObjects);
      }
  }

根据PBO获取关联的流程

WfEngineHelper.service.getAssociatedProcesses()

重新分配工作项给新的用户

ObjectIdentifier oid = ObjectIdentifier.newObjectIdentifier("wt.workflow.work.WorkItem:319469");
WorkItem wi = (WorkItem) PersistenceHelper.manager.refresh(oid);
System.out.println("WorkItem Name: " + wi.getIdentity());
		
System.out.println(" Workitem Owner (Before delegate): " + wi.getOwnership().getOwner().getIdentity());
		
WTUser user = wt.org.OrganizationServicesHelper.manager.getAuthenticatedUser("shirish");
WTPrincipal principal = (WTPrincipal) user;
wt.workflow.work.WorkflowHelper.service.delegate(wi, principal); 

System.out.println(" Workitem Owner (After delegate): " + wi.getOwnership().getOwner().getIdentity());
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值