Shark编程实例:启动一个流程,获得所有任务的列表,完成一个任务

import org.enhydra.shark.corba.WorkflowService.*;
import org.enhydra.shark.corbaclient.workflowadmin.*;
import org.enhydra.shark.corbaclient.workflowadmin.instantiation.*;
import org.omg.WfBase.*;
import org.omg.WorkflowModel.*;

……

    public ProcessInstantiatorInterface getProcessInstantiator() {
        if (processInstantiator == null) {
            if (SharkClient.POA) {
                processInstantiator = new ProcessInstantiatorPOA();
            } else {
                processInstantiator = new ProcessInstantiatorCORBA();
            }
        }
        return processInstantiator;
    }

    /**
     * 找到最新版本的流程,并启动
     *
     * @param sPkgID String: Package ID
     * @param sProcID String: Process ID
     * @return int --- 1 false, 0 success
     */
    public int startProc(String sPkgID, String sProcID) {
        SharkClient.findWorkflowServer("localhost","10123","Shark");

        ProcessInstantiatorInterface pi = getProcessInstantiator();
        WfRequester wfReq = null;

        if (SharkClient.POA) {
            wfReq = WfRequesterHelper.narrow(((ProcessInstantiatorPOA) pi).
                                             _this_object());
        } else {
            wfReq = WfRequesterHelper.narrow(((ProcessInstantiatorCORBA) pi));
        }
        try {
            WfProcessMgr mgr = SharkClient.getExecAmin().
                               getProcessMgrByXPDLDefinition(sPkgID, sProcID);

            System.out.println("启动流程: " + mgr.name());
            WfProcess proc = mgr.create_process(wfReq);
            proc.start();
        } catch (RequesterRequired ex1) {
            return 1;
        } catch (InvalidRequester ex1) {
            return 1;
        } catch (NotEnabled ex1) {
            return 1;
        } catch (BaseException ex1) {
            return 1;
        } catch (AlreadyRunning ex) {
            System.out.println("启动流程错误: 流程正在运行!");
            return 1;
        } catch (CannotStart ex) {
            System.out.println("启动流程错误: 流程无法启动!");
            return 1;
        } catch (Exception ex) {
            System.out.println("寻找流程错误: " + ex.getMessage());
            return 1;
        }

        return 0;
    }
    /**
     * 获得任务项
     *
     * @param sUser String
     * @param sPass String
     * @return WfAssignmentIterator
     */
    public WfAssignmentIterator getWorkList(String sUser, String sPass) {
        SharkConnection sc;
        sc = connect(sUser,sPass);
        WfAssignmentIterator wai = null;
        try {
            WfResource res = sc.getResourceObject();
            wai = res.get_iterator_work_item();
        } catch (NotConnected ex) {
            ex.printStackTrace();
        } catch (BaseException ex) {
            ex.printStackTrace();
        } finally {
            disconnect();
        }

        return wai;
    }

    /**
     * findWfActivety
     *
     * @param wfaKey String
     * @param sUserName String
     * @return WfActivity
     */
    private WfActivity findWfActivety(String wfaKey, String sUserName) {
        WfAssignmentIterator wfaIt = null;
        WfResource wfr = null;
        if (!SharkClient.isInitiated())
            SharkClient.initiate("admin", "enhydra", "localhost", "10123", "Shark");
        //SharkClient.setPassword("enhydra");
        //SharkClient.setUsername("admin");
        try {
            WfResource[] wfri = SharkClient.getExecAmin().get_sequence_resource(
                    0);
            for (int i = 0; i < wfri.length; i++) {
                if (wfri[i].resource_key().compareToIgnoreCase(sUserName) == 0) wfr =
                        wfri[i];
            }
        } catch (NotConnected ex) {
            System.out.println(ex.getMessage());
        } catch (BaseException ex) {
            System.out.println(ex.getMessage());
        }
        try {
            wfaIt = wfr.get_iterator_work_item();
        } catch (BaseException ex) {
            System.out.println(ex.getMessage());
        }
        WfActivity wa = null;
        try {
            WfAssignment[] wfa = wfaIt.get_next_n_sequence(0);
            for (int i = 0; i < wfa.length; i++) {
                if (wfa[i].activity().key().compareToIgnoreCase(wfaKey) == 0) {
                    wa = wfa[i].activity();
                    break;
                }
            }
        } catch (BaseException ex) {
            System.out.println(ex.getMessage());
        }
        return wa;
    }

    /**
     * commitInquery 将产品代码prod_id赋值给流程相关变量“price001_prod_id”,然后完成活动
     *
     * @param prod_id String
     * @param wfaKey String
     */
    public void commitInquery(String prod_id, String wfaKey) {

        WfActivity wa = findWfActivety(wfaKey,"john");
        if(wa==null)return;//To do
        try {
            WfAssignment[] wfas = wa.get_sequence_assignment(0);
            for (int i = 0; i < wfas.length; i++) {
                wfas[i].set_accepted_status(true);
            }
        } catch (BaseException ex) {
            System.out.println(ex.getMessage());
        } catch (CannotAcceptSuspended ex) {
            System.out.println(ex.getMessage());
        }

        NameValue[] updContext=new NameValue[1];
        NameValue[] procContext=null;
        try {
            procContext = wa.process_context();
        } catch (BaseException ex) {
            System.out.println(ex.getMessage());
        }
        //updContext[0]=new NameValue("price001_prod_id",null);
        try {
            //updContext[0].the_name="price001_prod_id";
            for (int i = 0; i < procContext.length; i++) {
                if(procContext[i].the_name.compareToIgnoreCase("price001_prod_id")==0){
                    updContext[0]=procContext[i];
                    WorkflowUtilities.insertValueIntoAnyObject(updContext[0].the_value,prod_id,WorkflowUtilities.STRING_KEY);
                }
            }
            wa.set_process_context(updContext);
            wa.set_result(updContext); //更新本活动对应的流程相关信息
            wa.complete(); //将本活动标志为“完成”
        } catch (InvalidData ex) {
            System.out.println(ex.getMessage());
        } catch (BaseException ex) {
            System.out.println(ex.getMessage());
        } catch (CannotComplete ex) {
            System.out.println(ex.getMessage());
        } catch (UpdateNotAllowed ex) {
            System.out.println(ex.getMessage());
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值