package org.basuyi.xflow.core.actions; import java.util.HashMap; import java.util.Map; import org.basuyi.xflow.core.WorflowEngine; import org.basuyi.xflow.core.config.model.WorkflowContext; import org.basuyi.xflow.core.config.model.WorkflowDefination; import org.basuyi.xflow.core.config.model.WorkflowException; import org.basuyi.xflow.core.utils.StringUtils; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * �ӹ���������ִ�ж���,���������� * @author mashuai * @version 0.1 * @date 2009-10-23 */ public class SubflowAction implements WorkflowAction { public void execute(WorkflowContext context) throws WorkflowException { String subflowId = (String)context.get(WorkflowDefination.CONTEXT_KEY_SUBFLOW_ID); //DefaultWorkflowEngine engine = new DefaultWorkflowEngine(); ApplicationContext app_context = (ApplicationContext)(((Map)context.getPrivate(WorkflowDefination.IN_PARAMS)).get(WorkflowDefination.CONTEXT_KEY_APP_CONTEXT)); WorflowEngine engine = (WorflowEngine)app_context.getBean("workflow"); /*����������*/ Map<String, Object> params = new HashMap<String, Object>(); String upper_workflowId = StringUtils.trimToString(context.get(WorkflowDefination.CONTEXT_KEY_WORKFLOW_ID)); String upper_activityId = StringUtils.trimToString(context.get(WorkflowDefination.CONTEXT_KEY_UPPER_ACTIVITY_ID)); String workflowId = upper_workflowId + "." + subflowId; if (!upper_activityId.equals("")) { String activityId = upper_activityId + "." + context.getCurrentActivity().getActivityId(); params.put(WorkflowDefination.UPPER_ACTIVITY_ID, activityId); } else { params.put(WorkflowDefination.UPPER_ACTIVITY_ID, context.getCurrentActivity().getActivityId()); } params.put(WorkflowDefination.WORKFLOW_ID, workflowId); params.put(WorkflowDefination.USER_ID, context.get(WorkflowDefination.CONTEXT_KEY_USER_ID)); params.put(WorkflowDefination.POST_ID, context.get(WorkflowDefination.CONTEXT_KEY_POST_ID)); params.put(WorkflowDefination.ORG_ID, context.get(WorkflowDefination.CONTEXT_KEY_ORG_ID)); params.put(WorkflowDefination.IS_SUBFLOW, "1"); params.put(WorkflowDefination.UPPER_WORKFLOW, context.getWorkflow()); params.put(WorkflowDefination.UPPER_WF_PARAMS, context.getParams()); params.put(WorkflowDefination.UPPER_WORKFLOW_ID, context.getWorkflow().getWorkflowId()); Map<String, Object> out_params = engine.startWorkflow(params); WorkflowContext subContext = (WorkflowContext)out_params.get(WorkflowDefination.WORKFLOW_CONTEXT); context.setParams(subContext.getParams()); context.put(WorkflowDefination.CONTEXT_KEY_WORKFLOW_ID, upper_workflowId); context.put(WorkflowDefination.CONTEXT_KEY_UPPER_ACTIVITY_ID, upper_activityId); } }