Просмотр исходного кода

1、修复流程多版本后,视图根据指定流程查询只查询当前流程未查询同版本流程的问题,修改为视图根据流程条件查询时同时查询同版本其他流程的数据;
2、修复流程多版本后,列数流程应用的时候未过滤未启用版本的流程。

o2sword 5 лет назад
Родитель
Сommit
2a8d04d2c5
15 измененных файлов с 269 добавлено и 27 удалено
  1. 1 1
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_query_assemble_designer.java
  2. 1 1
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_query_assemble_surface.java
  3. 2 0
      o2server/x_processplatform_assemble_designer/src/main/java/com/x/processplatform/assemble/designer/jaxrs/application/ActionListSummary.java
  4. 2 0
      o2server/x_processplatform_assemble_designer/src/main/java/com/x/processplatform/assemble/designer/jaxrs/application/ActionListSummaryWithApplicationCategory.java
  5. 25 4
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/factory/element/ProcessFactory.java
  6. 71 0
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/process/ActionListWithProcess.java
  7. 20 5
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/process/ProcessAction.java
  8. 10 6
      o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/Business.java
  9. 41 0
      o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/factory/ProcessFactory.java
  10. 1 0
      o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/view/ActionBundle.java
  11. 1 0
      o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/view/ActionSimulate.java
  12. 19 0
      o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/view/BaseAction.java
  13. 10 4
      o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/Business.java
  14. 41 0
      o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/factory/ProcessFactory.java
  15. 24 6
      o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/view/BaseAction.java

+ 1 - 1
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_query_assemble_designer.java

@@ -15,7 +15,7 @@ import com.x.base.core.project.annotation.ModuleType;
 		"com.x.processplatform.core.entity.content.Review", "com.x.processplatform.core.entity.content.Work",
 		"com.x.processplatform.core.entity.content.WorkCompleted", "com.x.processplatform.core.entity.content.Task",
 		"com.x.processplatform.core.entity.content.TaskCompleted", "com.x.processplatform.core.entity.content.Read",
-		"com.x.processplatform.core.entity.content.ReadCompleted",
+		"com.x.processplatform.core.entity.content.ReadCompleted","com.x.processplatform.core.entity.element.Process",
 		"com.x.processplatform.core.entity.content.Attachment", "com.x.cms.core.entity.Document",
 		"com.x.cms.core.entity.AppInfo", "com.x.cms.core.entity.CategoryInfo", "com.x.cms.core.entity.Review",
 		"com.x.query.dynamic.entity.*" }, storageTypes = { StorageType.processPlatform }, storeJars = {

+ 1 - 1
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_query_assemble_surface.java

@@ -16,7 +16,7 @@ import com.x.base.core.project.annotation.ModuleType;
 		"com.x.processplatform.core.entity.content.Task", "com.x.processplatform.core.entity.content.TaskCompleted",
 		"com.x.processplatform.core.entity.content.Read", "com.x.processplatform.core.entity.content.ReadCompleted",
 		"com.x.processplatform.core.entity.content.Review", "com.x.processplatform.core.entity.content.Work",
-		"com.x.processplatform.core.entity.content.WorkCompleted",
+		"com.x.processplatform.core.entity.content.WorkCompleted","com.x.processplatform.core.entity.element.Process",
 		"com.x.processplatform.core.entity.content.Attachment", "com.x.cms.core.entity.Document",
 		"com.x.cms.core.entity.Review", "com.x.cms.core.entity.AppInfo", "com.x.cms.core.entity.CategoryInfo",
 		"com.x.query.dynamic.entity.*" }, storageTypes = { StorageType.processPlatform, StorageType.cms }, storeJars = {

+ 2 - 0
o2server/x_processplatform_assemble_designer/src/main/java/com/x/processplatform/assemble/designer/jaxrs/application/ActionListSummary.java

@@ -128,6 +128,8 @@ class ActionListSummary extends BaseAction {
 		CriteriaQuery<Process> cq = cb.createQuery(Process.class);
 		Root<Process> root = cq.from(Process.class);
 		Predicate p = root.get(Process_.application).in(applicationIds);
+		p = cb.and(p, cb.or(cb.isTrue(root.get(Process_.editionEnable)),
+				cb.isNull(root.get(Process_.editionEnable))));
 		cq.select(root).where(p);
 		List<Process> os = em.createQuery(cq).getResultList();
 		List<WoProcess> wos = WoProcess.copier.copy(os);

+ 2 - 0
o2server/x_processplatform_assemble_designer/src/main/java/com/x/processplatform/assemble/designer/jaxrs/application/ActionListSummaryWithApplicationCategory.java

@@ -118,6 +118,8 @@ class ActionListSummaryWithApplicationCategory extends BaseAction {
 		CriteriaQuery<Process> cq = cb.createQuery(Process.class);
 		Root<Process> root = cq.from(Process.class);
 		Predicate p = cb.equal(root.get(Process_.application), application.getId());
+		p = cb.and(p, cb.or(cb.isTrue(root.get(Process_.editionEnable)),
+				cb.isNull(root.get(Process_.editionEnable))));
 		cq.select(root).where(p);
 		return em.createQuery(cq).getResultList();
 	}

+ 25 - 4
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/factory/element/ProcessFactory.java

@@ -6,10 +6,7 @@ import java.util.List;
 import java.util.stream.Collectors;
 
 import javax.persistence.EntityManager;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
+import javax.persistence.criteria.*;
 
 import com.x.base.core.project.cache.ApplicationCache;
 import com.x.base.core.project.http.EffectivePerson;
@@ -299,4 +296,28 @@ public class ProcessFactory extends ElementFactory {
 				.collect(Collectors.toList());
 		return list;
 	}
+
+	/* 根据processList获取同版本的所有流程或者仅获取processList的流程 */
+	public List<Process> listObjectWithProcess(List<String> processList, boolean includeEdition) throws Exception {
+		EntityManager em = this.entityManagerContainer().get(Process.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Process> cq = cb.createQuery(Process.class);
+		Root<Process> root = cq.from(Process.class);
+		Predicate p = cb.conjunction();
+		p = cb.and(p, root.get(Process_.id).in(processList));
+		if(includeEdition){
+			p = cb.and(p, cb.isNull(root.get(Process_.editionEnable)));
+			Subquery<Process> subquery = cq.subquery(Process.class);
+			Root<Process> subRoot = subquery.from(Process.class);
+			Predicate subP = cb.conjunction();
+			subP = cb.and(subP, cb.equal(root.get(Process_.edition), subRoot.get(Process_.edition)));
+			subP = cb.and(subP, subRoot.get(Process_.id).in(processList));
+			subP = cb.and(subP, cb.isNotNull(root.get(Process_.edition)));
+			subquery.select(subRoot).where(subP);
+			p = cb.or(p, cb.exists(subquery));
+		}
+
+		cq.select(root).where(p);
+		return em.createQuery(cq).getResultList();
+	}
 }

+ 71 - 0
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/process/ActionListWithProcess.java

@@ -0,0 +1,71 @@
+package com.x.processplatform.assemble.surface.jaxrs.process;
+
+import com.google.gson.JsonElement;
+import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.container.factory.EntityManagerContainerFactory;
+import com.x.base.core.project.annotation.FieldDescribe;
+import com.x.base.core.project.bean.WrapCopier;
+import com.x.base.core.project.bean.WrapCopierFactory;
+import com.x.base.core.project.gson.GsonPropertyObject;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.tools.ListTools;
+import com.x.processplatform.assemble.surface.Business;
+import com.x.processplatform.core.entity.element.Process;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+class ActionListWithProcess extends BaseAction {
+
+	ActionResult<List<Wo>> execute(EffectivePerson effectivePerson, JsonElement jsonElement) throws Exception {
+		ActionResult<List<Wo>> result = new ActionResult<>();
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			Business business = new Business(emc);
+			List<Wo> wos = new ArrayList<>();
+			Wi wi = this.convertToWrapIn(jsonElement, Wi.class);
+			if(ListTools.isEmpty(wi.getProcessList())){
+				result.setData(wos);
+				return result;
+			}
+			wos = Wo.copier.copy(business.process().listObjectWithProcess(wi.getProcessList(), wi.isIncludeEdition()));
+			result.setData(wos);
+			return result;
+		}
+	}
+
+	public static class Wi extends GsonPropertyObject {
+		@FieldDescribe("流程(多值逗号隔开)")
+		private List<String> processList;
+
+		@FieldDescribe("是否同时查询同版本的流程(true|false)")
+		private boolean includeEdition;
+
+		public List<String> getProcessList() {
+			return processList;
+		}
+
+		public void setProcessList(List<String> processList) {
+			this.processList = processList;
+		}
+
+		public boolean isIncludeEdition() {
+			return includeEdition;
+		}
+
+		public void setIncludeEdition(boolean includeEdition) {
+			this.includeEdition = includeEdition;
+		}
+	}
+
+	public static class Wo extends Process {
+
+		private static final long serialVersionUID = -4124351386819473248L;
+
+		static WrapCopier<Process, Wo> copier = WrapCopierFactory.wo(Process.class, Wo.class,
+				Arrays.asList(Process.id_FIELDNAME, Process.name_FIELDNAME, Process.alias_FIELDNAME,
+						Process.edition_FIELDNAME, Process.editionNumber_FIELDNAME), null);
+	}
+
+}

+ 20 - 5
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/process/ProcessAction.java

@@ -3,16 +3,13 @@ package com.x.processplatform.assemble.surface.jaxrs.process;
 import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
+import javax.ws.rs.*;
 import javax.ws.rs.container.AsyncResponse;
 import javax.ws.rs.container.Suspended;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
 
+import com.google.gson.JsonElement;
 import com.x.base.core.project.annotation.JaxrsDescribe;
 import com.x.base.core.project.annotation.JaxrsMethodDescribe;
 import com.x.base.core.project.annotation.JaxrsParameterDescribe;
@@ -143,4 +140,22 @@ public class ProcessAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
+	@JaxrsMethodDescribe(value = "根据流程id查询流程简要信息.", action = ActionListWithProcess.class)
+	@POST
+	@Path("list/ids")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void ListWithIds(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+						JsonElement jsonElement) {
+		ActionResult<List<ActionListWithProcess.Wo>> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionListWithProcess().execute(effectivePerson, jsonElement);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, jsonElement);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+
 }

+ 10 - 6
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/Business.java

@@ -15,6 +15,7 @@ import javax.tools.StandardJavaFileManager;
 import javax.tools.StandardLocation;
 import javax.tools.ToolProvider;
 
+import com.x.query.assemble.designer.factory.*;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.filefilter.DirectoryFileFilter;
@@ -37,12 +38,6 @@ import com.x.base.core.project.tools.JarTools;
 import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.StringTools;
 import com.x.organization.core.express.Organization;
-import com.x.query.assemble.designer.factory.QueryFactory;
-import com.x.query.assemble.designer.factory.RevealFactory;
-import com.x.query.assemble.designer.factory.StatFactory;
-import com.x.query.assemble.designer.factory.StatementFactory;
-import com.x.query.assemble.designer.factory.TableFactory;
-import com.x.query.assemble.designer.factory.ViewFactory;
 import com.x.query.assemble.designer.jaxrs.table.ExceptionCompileError;
 import com.x.query.core.entity.Query;
 import com.x.query.core.entity.schema.Enhance;
@@ -128,6 +123,15 @@ public class Business {
 		return reveal;
 	}
 
+	private ProcessFactory process;
+
+	public ProcessFactory process() throws Exception {
+		if (null == this.process) {
+			this.process = new ProcessFactory(this);
+		}
+		return process;
+	}
+
 	public boolean controllable(EffectivePerson effectivePerson) throws Exception {
 		boolean result = false;
 		if (effectivePerson.isManager() || (this.organization().person().hasRole(effectivePerson,

+ 41 - 0
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/factory/ProcessFactory.java

@@ -0,0 +1,41 @@
+package com.x.query.assemble.designer.factory;
+
+
+import com.x.processplatform.core.entity.element.Process;
+import com.x.processplatform.core.entity.element.Process_;
+import com.x.query.assemble.designer.AbstractFactory;
+import com.x.query.assemble.designer.Business;
+
+import javax.persistence.EntityManager;
+import javax.persistence.criteria.*;
+import java.util.List;
+
+public class ProcessFactory extends AbstractFactory {
+
+	public ProcessFactory(Business business) throws Exception {
+		super(business);
+	}
+
+	public List<Process> listObjectWithProcess(List<String> processList, boolean includeEdition) throws Exception {
+		EntityManager em = this.entityManagerContainer().get(Process.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Process> cq = cb.createQuery(Process.class);
+		Root<Process> root = cq.from(Process.class);
+		Predicate p = cb.conjunction();
+		p = cb.and(p, root.get(Process_.id).in(processList));
+		if(includeEdition){
+			p = cb.and(p, cb.isNull(root.get(Process_.editionEnable)));
+			Subquery<Process> subquery = cq.subquery(Process.class);
+			Root<Process> subRoot = subquery.from(Process.class);
+			Predicate subP = cb.conjunction();
+			subP = cb.and(subP, cb.equal(root.get(Process_.edition), subRoot.get(Process_.edition)));
+			subP = cb.and(subP, subRoot.get(Process_.id).in(processList));
+			subP = cb.and(subP, cb.isNotNull(root.get(Process_.edition)));
+			subquery.select(subRoot).where(subP);
+			p = cb.or(p, cb.exists(subquery));
+		}
+
+		cq.select(root).where(p);
+		return em.createQuery(cq).getResultList();
+	}
+}

+ 1 - 0
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/view/ActionBundle.java

@@ -61,6 +61,7 @@ class ActionBundle extends BaseAction {
 				break;
 			case View.TYPE_PROCESSPLATFORM:
 				ProcessPlatformPlan processPlatformPlan = gson.fromJson(view.getData(), ProcessPlatformPlan.class);
+				this.setProcessEdition(business, processPlatformPlan);
 				processPlatformPlan.runtime = runtime;
 				os = processPlatformPlan.fetchBundles();
 				break;

+ 1 - 0
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/view/ActionSimulate.java

@@ -65,6 +65,7 @@ class ActionSimulate extends BaseAction {
 
 			case View.TYPE_PROCESSPLATFORM:
 				ProcessPlatformPlan processPlatformPlan = gson.fromJson(view.getData(), ProcessPlatformPlan.class);
+				this.setProcessEdition(business, processPlatformPlan);
 				processPlatformPlan.runtime = runtime;
 				processPlatformPlan.access();
 				result.setData(processPlatformPlan);

+ 19 - 0
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/view/BaseAction.java

@@ -6,6 +6,10 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
+import com.google.gson.reflect.TypeToken;
+import com.x.base.core.project.tools.ListTools;
+import com.x.processplatform.core.entity.element.Process;
+import com.x.query.core.express.plan.ProcessPlatformPlan;
 import org.apache.commons.lang3.math.NumberUtils;
 
 import com.x.base.core.project.jaxrs.StandardJaxrsAction;
@@ -14,6 +18,8 @@ import com.x.query.core.entity.Query;
 import com.x.query.core.entity.View;
 import com.x.query.core.entity.View_;
 
+import java.util.List;
+
 abstract class BaseAction extends StandardJaxrsAction {
 
 	protected boolean idleName(Business business, View view) throws Exception {
@@ -44,4 +50,17 @@ abstract class BaseAction extends StandardJaxrsAction {
 		return NumberUtils.min(viewCount, wiCount);
 	}
 
+	protected void setProcessEdition(Business business, ProcessPlatformPlan processPlatformPlan) throws Exception {
+		if(!processPlatformPlan.where.processList.isEmpty()){
+			List<String> _process_ids = ListTools.extractField(processPlatformPlan.where.processList, Process.id_FIELDNAME, String.class,
+					true, true);
+			List<Process> processList = business.process().listObjectWithProcess(_process_ids, true);
+			List<ProcessPlatformPlan.WhereEntry.ProcessEntry> listProcessEntry = gson.fromJson(gson.toJson(processList),
+					new TypeToken<List<ProcessPlatformPlan.WhereEntry.ProcessEntry>>(){}.getType());
+			if(!listProcessEntry.isEmpty()) {
+				processPlatformPlan.where.processList = listProcessEntry;
+			}
+		}
+	}
+
 }

+ 10 - 4
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/Business.java

@@ -2,6 +2,7 @@ package com.x.query.assemble.surface;
 
 import java.util.List;
 
+import com.x.query.assemble.surface.factory.*;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 
@@ -12,10 +13,6 @@ import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.organization.OrganizationDefinition;
 import com.x.base.core.project.tools.ListTools;
 import com.x.organization.core.express.Organization;
-import com.x.query.assemble.surface.factory.QueryFactory;
-import com.x.query.assemble.surface.factory.RevealFactory;
-import com.x.query.assemble.surface.factory.StatFactory;
-import com.x.query.assemble.surface.factory.ViewFactory;
 import com.x.query.core.entity.Query;
 import com.x.query.core.entity.Reveal;
 import com.x.query.core.entity.Stat;
@@ -90,6 +87,15 @@ public class Business {
 		return reveal;
 	}
 
+	private ProcessFactory process;
+
+	public ProcessFactory process() throws Exception {
+		if (null == this.process) {
+			this.process = new ProcessFactory(this);
+		}
+		return process;
+	}
+
 	@SuppressWarnings("unchecked")
 	public <T extends JpaObject> T pick(String flag, Class<T> cls) throws Exception {
 		String cacheKey = ApplicationCache.concreteCacheKey(cls, flag);

+ 41 - 0
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/factory/ProcessFactory.java

@@ -0,0 +1,41 @@
+package com.x.query.assemble.surface.factory;
+
+
+import com.x.processplatform.core.entity.element.Process;
+import com.x.processplatform.core.entity.element.Process_;
+import com.x.query.assemble.surface.AbstractFactory;
+import com.x.query.assemble.surface.Business;
+
+import javax.persistence.EntityManager;
+import javax.persistence.criteria.*;
+import java.util.List;
+
+public class ProcessFactory extends AbstractFactory {
+
+	public ProcessFactory(Business business) throws Exception {
+		super(business);
+	}
+
+	public List<Process> listObjectWithProcess(List<String> processList, boolean includeEdition) throws Exception {
+		EntityManager em = this.entityManagerContainer().get(Process.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Process> cq = cb.createQuery(Process.class);
+		Root<Process> root = cq.from(Process.class);
+		Predicate p = cb.conjunction();
+		p = cb.and(p, root.get(Process_.id).in(processList));
+		if(includeEdition){
+			p = cb.and(p, cb.isNull(root.get(Process_.editionEnable)));
+			Subquery<Process> subquery = cq.subquery(Process.class);
+			Root<Process> subRoot = subquery.from(Process.class);
+			Predicate subP = cb.conjunction();
+			subP = cb.and(subP, cb.equal(root.get(Process_.edition), subRoot.get(Process_.edition)));
+			subP = cb.and(subP, subRoot.get(Process_.id).in(processList));
+			subP = cb.and(subP, cb.isNotNull(root.get(Process_.edition)));
+			subquery.select(subRoot).where(subP);
+			p = cb.or(p, cb.exists(subquery));
+		}
+
+		cq.select(root).where(p);
+		return em.createQuery(cq).getResultList();
+	}
+}

+ 24 - 6
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/view/BaseAction.java

@@ -5,6 +5,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
+import com.google.gson.reflect.TypeToken;
+import com.x.base.core.project.gson.XGsonBuilder;
+import com.x.processplatform.core.entity.element.Process;
 import org.apache.commons.lang3.BooleanUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.math.NumberUtils;
@@ -42,16 +45,16 @@ abstract class BaseAction extends StandardJaxrsAction {
 			if ((null != element) && (null != element.getObjectValue())) {
 				plan = (Plan) element.getObjectValue();
 			} else {
-				plan = this.accessPlan(view, runtime);
+				plan = this.dealPlan(business, view, runtime);
 				business.cache().put(new Element(cacheKey, plan));
 			}
 		} else {
-			plan = this.accessPlan(view, runtime);
+			plan = this.dealPlan(business, view, runtime);
 		}
 		return plan;
 	}
 
-	private Plan accessPlan(View view, Runtime runtime) throws Exception {
+	private Plan dealPlan(Business business, View view, Runtime runtime) throws Exception {
 		Plan plan = null;
 		switch (StringUtils.trimToEmpty(view.getType())) {
 		case View.TYPE_CMS:
@@ -62,6 +65,7 @@ abstract class BaseAction extends StandardJaxrsAction {
 			break;
 		default:
 			ProcessPlatformPlan processPlatformPlan = gson.fromJson(view.getData(), ProcessPlatformPlan.class);
+			this.setProcessEdition(business, processPlatformPlan);
 			processPlatformPlan.runtime = runtime;
 			processPlatformPlan.access();
 			plan = processPlatformPlan;
@@ -73,7 +77,20 @@ abstract class BaseAction extends StandardJaxrsAction {
 		return plan;
 	}
 
-	private List<String> fetchBundle(View view, Runtime runtime) throws Exception {
+	private void setProcessEdition(Business business, ProcessPlatformPlan processPlatformPlan) throws Exception {
+		if(!processPlatformPlan.where.processList.isEmpty()){
+			List<String> _process_ids = ListTools.extractField(processPlatformPlan.where.processList, Process.id_FIELDNAME, String.class,
+					true, true);
+			List<Process> processList = business.process().listObjectWithProcess(_process_ids, true);
+			List<ProcessPlatformPlan.WhereEntry.ProcessEntry> listProcessEntry = gson.fromJson(gson.toJson(processList),
+					new TypeToken<List<ProcessPlatformPlan.WhereEntry.ProcessEntry>>(){}.getType());
+			if(!listProcessEntry.isEmpty()) {
+				processPlatformPlan.where.processList = listProcessEntry;
+			}
+		}
+	}
+
+	private List<String> dealBundle(Business business, View view, Runtime runtime) throws Exception {
 		List<String> os = null;
 		switch (StringUtils.trimToEmpty(view.getType())) {
 		case View.TYPE_CMS:
@@ -83,6 +100,7 @@ abstract class BaseAction extends StandardJaxrsAction {
 			break;
 		default:
 			ProcessPlatformPlan processPlatformPlan = gson.fromJson(view.getData(), ProcessPlatformPlan.class);
+			this.setProcessEdition(business, processPlatformPlan);
 			processPlatformPlan.runtime = runtime;
 			os = processPlatformPlan.fetchBundles();
 			break;
@@ -99,11 +117,11 @@ abstract class BaseAction extends StandardJaxrsAction {
 			if ((null != element) && (null != element.getObjectValue())) {
 				os = (List<String>) element.getObjectValue();
 			} else {
-				os = this.fetchBundle(view, runtime);
+				os = this.dealBundle(business, view, runtime);
 				business.cache().put(new Element(cacheKey, os));
 			}
 		} else {
-			os = this.fetchBundle(view, runtime);
+			os = this.dealBundle(business, view, runtime);
 		}
 		return os;
 	}