下面列出了org.springframework.core.io.ContextResource#org.activiti.engine.repository.ProcessDefinition 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* 读取流程资源
*
* @param processDefinitionId 流程定义ID
* @param resourceName 资源名称
*/
@RequestMapping(value = "/read-resource")
public void readResource(@RequestParam("pdid") String processDefinitionId,
@RequestParam("resourceName") String resourceName, HttpServletResponse response)
throws Exception {
ProcessDefinitionQuery pdq = repositoryService.createProcessDefinitionQuery();
ProcessDefinition pd = pdq.processDefinitionId(processDefinitionId).singleResult();
// 通过接口读取
InputStream resourceAsStream = repositoryService.getResourceAsStream(pd.getDeploymentId(), resourceName);
// 输出资源内容到相应对象
byte[] b = new byte[1024];
int len = -1;
while ((len = resourceAsStream.read(b, 0, 1024)) != -1) {
response.getOutputStream().write(b, 0, len);
}
}
protected FormDefinition getStartForm(ProcessDefinition processDefinition) {
FormDefinition formDefinition = null;
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId());
Process process = bpmnModel.getProcessById(processDefinition.getKey());
FlowElement startElement = process.getInitialFlowElement();
if (startElement instanceof StartEvent) {
StartEvent startEvent = (StartEvent) startElement;
if (StringUtils.isNotEmpty(startEvent.getFormKey())) {
formDefinition = formRepositoryService.getFormDefinitionByKeyAndParentDeploymentId(startEvent.getFormKey(),
processDefinition.getDeploymentId(), processDefinition.getTenantId());
}
}
if (formDefinition == null) {
// Definition found, but no form attached
throw new NotFoundException("Process definition does not have a form defined: " + processDefinition.getId());
}
return formDefinition;
}
@Test
@Deployment(resources = {"chapter6/leave-formkey/leave-formkey.bpmn", "chapter6/leave-formkey/leave-start.form"})
public void allPass() throws Exception {
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().singleResult();
// 读取启动表单
Object renderedStartForm = formService.getRenderedStartForm(processDefinition.getId(), "myformengine");
// 验证表单对象
assertNotNull(renderedStartForm);
assertTrue(renderedStartForm instanceof javax.swing.JButton);
javax.swing.JButton button = (JButton) renderedStartForm;
assertEquals("My Start Form Button", button.getName());
}
protected FormField getFormFieldFromRequest(String[] requestInfoArray, ProcessDefinition processDefinition, boolean isTableRequest) {
FormDefinition form = getStartForm(processDefinition);
int paramPosition = requestInfoArray.length - 1;
if (isTableRequest) {
paramPosition--;
}
String fieldVariable = requestInfoArray[paramPosition];
List<? extends FormField> allFields = form.listAllFields();
FormField selectedField = null;
if (CollectionUtils.isNotEmpty(allFields)) {
for (FormField formFieldRepresentation : allFields) {
if (formFieldRepresentation.getId().equalsIgnoreCase(fieldVariable)) {
selectedField = formFieldRepresentation;
}
}
}
if (selectedField == null) {
throw new NotFoundException("Field could not be found in start form definition " + fieldVariable);
}
return selectedField;
}
/**
* 根据流程定义 key 查询流程定义图
*/
public void definitionDiagramByKey() {
String processKey = getPara("key");
if (StringUtils.isEmpty(processKey)) {
renderFail("Key 参数为空");
return;
}
List<ProcessDefinition> definitions = ActivitiKit.getRepositoryService().createProcessDefinitionQuery()
.processDefinitionKey(processKey)
.orderByProcessDefinitionVersion().desc()
.list();
if (definitions.size() == 0) {
renderFail("Key 参数错误");
return;
}
InputStream in = ActivitiKit.getRepositoryService().getProcessDiagram(definitions.get(0).getId());
render(new ImageRender().inputStream(in));
}
public ObjectNode execute(CommandContext commandContext) {
if (processDefinitionId == null) {
throw new ActivitiIllegalArgumentException("process definition id is null");
}
ObjectNode resultNode = null;
DeploymentManager deploymentManager = commandContext.getProcessEngineConfiguration().getDeploymentManager();
// make sure the process definition is in the cache
ProcessDefinition processDefinition = deploymentManager.findDeployedProcessDefinitionById(processDefinitionId);
if (Activiti5Util.isActiviti5ProcessDefinition(commandContext, processDefinition)) {
Activiti5CompatibilityHandler activiti5CompatibilityHandler = Activiti5Util.getActiviti5CompatibilityHandler();
return activiti5CompatibilityHandler.getProcessDefinitionInfo(processDefinitionId);
}
ProcessDefinitionInfoCacheObject definitionInfoCacheObject = deploymentManager.getProcessDefinitionInfoCache().get(processDefinitionId);
if (definitionInfoCacheObject != null) {
resultNode = definitionInfoCacheObject.getInfoNode();
}
return resultNode;
}
protected void localize(HistoricProcessInstance processInstance, CommandContext commandContext) {
HistoricProcessInstanceEntity processInstanceEntity = (HistoricProcessInstanceEntity) processInstance;
processInstanceEntity.setLocalizedName(null);
processInstanceEntity.setLocalizedDescription(null);
if (locale != null && processInstance.getProcessDefinitionId() != null) {
ProcessDefinition processDefinition = commandContext.getProcessEngineConfiguration().getDeploymentManager().findDeployedProcessDefinitionById(processInstanceEntity.getProcessDefinitionId());
ObjectNode languageNode = Context.getLocalizationElementProperties(locale, processDefinition.getKey(),
processInstanceEntity.getProcessDefinitionId(), withLocalizationFallback);
if (languageNode != null) {
JsonNode languageNameNode = languageNode.get(DynamicBpmnConstants.LOCALIZATION_NAME);
if (languageNameNode != null && languageNameNode.isNull() == false) {
processInstanceEntity.setLocalizedName(languageNameNode.asText());
}
JsonNode languageDescriptionNode = languageNode.get(DynamicBpmnConstants.LOCALIZATION_DESCRIPTION);
if (languageDescriptionNode != null && languageDescriptionNode.isNull() == false) {
processInstanceEntity.setLocalizedDescription(languageDescriptionNode.asText());
}
}
}
}
protected void restoreSignalStartEvent(ProcessDefinition previousProcessDefinition, BpmnModel bpmnModel, StartEvent startEvent, EventDefinition eventDefinition) {
SignalEventDefinition signalEventDefinition = (SignalEventDefinition) eventDefinition;
SignalEventSubscriptionEntity subscriptionEntity = getEventSubscriptionEntityManager().createSignalEventSubscription();
Signal signal = bpmnModel.getSignal(signalEventDefinition.getSignalRef());
if (signal != null) {
subscriptionEntity.setEventName(signal.getName());
} else {
subscriptionEntity.setEventName(signalEventDefinition.getSignalRef());
}
subscriptionEntity.setActivityId(startEvent.getId());
subscriptionEntity.setProcessDefinitionId(previousProcessDefinition.getId());
if (previousProcessDefinition.getTenantId() != null) {
subscriptionEntity.setTenantId(previousProcessDefinition.getTenantId());
}
getEventSubscriptionEntityManager().insert(subscriptionEntity);
}
@Deployment(resources = { "org/activiti5/engine/test/api/oneTaskProcess.bpmn20.xml" })
public void testSubmitTaskFormData() {
List<ProcessDefinition> processDefinitions = repositoryService.createProcessDefinitionQuery().list();
assertEquals(1, processDefinitions.size());
ProcessDefinition processDefinition = processDefinitions.get(0);
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinition.getKey());
assertNotNull(processInstance);
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
assertNotNull(task);
Map<String, String> properties = new HashMap<String, String>();
properties.put("room", "5b");
formService.submitTaskFormData(task.getId(), properties);
task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
assertNull(task);
}
/**
* 查询已结束流程实例
*
* @param request
* @return
*/
@RequestMapping(value = "finished/manager")
public ModelAndView finishedProcessInstanceListForManager(HttpServletRequest request) {
ModelAndView mav = new ModelAndView("chapter13/finished-process-manager");
Page<HistoricProcessInstance> page = new Page<HistoricProcessInstance>(PageUtil.PAGE_SIZE);
int[] pageParams = PageUtil.init(page, request);
HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery().finished();
List<HistoricProcessInstance> historicProcessInstances = historicProcessInstanceQuery.listPage(pageParams[0], pageParams[1]);
// 查询流程定义对象
Map<String, ProcessDefinition> definitionMap = new HashMap<String, ProcessDefinition>();
for (HistoricProcessInstance historicProcessInstance : historicProcessInstances) {
definitionCache(definitionMap, historicProcessInstance.getProcessDefinitionId());
}
page.setResult(historicProcessInstances);
page.setTotalCount(historicProcessInstanceQuery.count());
mav.addObject("page", page);
mav.addObject("definitions", definitionMap);
return mav;
}
/**
* 读取流程资源
*
* @param processDefinitionId 流程定义ID
* @param resourceName 资源名称
*/
@RequestMapping(value = "/read-resource")
public void readResource(@RequestParam("pdid") String processDefinitionId, @RequestParam("resourceName") String resourceName, HttpServletResponse response)
throws Exception {
ProcessDefinitionQuery pdq = repositoryService.createProcessDefinitionQuery();
ProcessDefinition pd = pdq.processDefinitionId(processDefinitionId).singleResult();
// 通过接口读取
InputStream resourceAsStream = repositoryService.getResourceAsStream(pd.getDeploymentId(), resourceName);
// 输出资源内容到相应对象
byte[] b = new byte[1024];
int len = -1;
while ((len = resourceAsStream.read(b, 0, 1024)) != -1) {
response.getOutputStream().write(b, 0, len);
}
}
public void testParseTerminateEndEventDefinitionWithExtensions() {
org.activiti.engine.repository.Deployment deployment = repositoryService.createDeployment().addClasspathResource("org/activiti/engine/test/bpmn/event/end/TerminateEndEventTest.parseExtensionElements.bpmn20.xml").deploy();
ProcessDefinition processDefinitionQuery = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult();
BpmnModel bpmnModel = this.processEngineConfiguration.getProcessDefinitionCache()
.get(processDefinitionQuery.getId()).getBpmnModel();
Map<String, List<ExtensionElement>> extensionElements = bpmnModel.getProcesses().get(0)
.findFlowElementsOfType(EndEvent.class).get(0).getExtensionElements();
assertThat(extensionElements.size(), is(1));
List<ExtensionElement> strangeProperties = extensionElements.get("strangeProperty");
assertThat(strangeProperties.size(), is(1));
ExtensionElement strangeProperty = strangeProperties.get(0);
assertThat(strangeProperty.getNamespace(), is("http://activiti.org/bpmn"));
assertThat(strangeProperty.getElementText(), is("value"));
assertThat(strangeProperty.getAttributes().size(), is(1));
ExtensionAttribute id = strangeProperty.getAttributes().get("id").get(0);
assertThat(id.getName(), is("id"));
assertThat(id.getValue(), is("strangeId"));
repositoryService.deleteDeployment(deployment.getId());
}
public InputStream execute(CommandContext commandContext) {
ProcessDefinition processDefinition = commandContext
.getProcessEngineConfiguration()
.getDeploymentManager()
.findDeployedProcessDefinitionById(processDefinitionId);
String deploymentId = processDefinition.getDeploymentId();
String resourceName = processDefinition.getDiagramResourceName();
if (resourceName == null ) {
log.info("Resource name is null! No process diagram stream exists.");
return null;
} else {
InputStream processDiagramStream =
new GetDeploymentResourceCmd(deploymentId, resourceName)
.execute(commandContext);
return processDiagramStream;
}
}
/**
* 读取流程资源
*
* @param processDefinitionId 流程定义ID
* @param resourceName 资源名称
*/
@RequestMapping(value = "/read-resource")
public void readResource(@RequestParam("pdid") String processDefinitionId,
@RequestParam("resourceName") String resourceName, HttpServletResponse response)
throws Exception {
ProcessDefinitionQuery pdq = repositoryService.createProcessDefinitionQuery();
ProcessDefinition pd = pdq.processDefinitionId(processDefinitionId).singleResult();
// 通过接口读取
InputStream resourceAsStream = repositoryService.getResourceAsStream(pd.getDeploymentId(), resourceName);
// 输出资源内容到相应对象
byte[] b = new byte[1024];
int len;
while ((len = resourceAsStream.read(b, 0, 1024)) != -1) {
response.getOutputStream().write(b, 0, len);
}
}
@Deprecated
public ProcessInstance startProcessByName(String string) {
if (Context.getCommandContext() != null) {
throw new ActivitiCdiException("Cannot use startProcessByName in an activiti command.");
}
ProcessDefinition definition = processEngine.getRepositoryService().createProcessDefinitionQuery().processDefinitionName(string).singleResult();
if (definition == null) {
throw new ActivitiObjectNotFoundException("No process definition found for name: " + string, ProcessDefinition.class);
}
ProcessInstance instance = processEngine.getRuntimeService().startProcessInstanceById(definition.getId(), getAndClearCachedVariables());
if (!instance.isEnded()) {
setExecution(instance);
}
return instance;
}
/**
* 读取启动流程的表单字段
*/
@RequestMapping(value = "getform/start/{processDefinitionId}")
public ModelAndView readStartForm(@PathVariable("processDefinitionId") String processDefinitionId) throws Exception {
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
boolean hasStartFormKey = processDefinition.hasStartFormKey();
// 根据是否有formkey属性判断使用哪个展示层
String viewName = "chapter6/start-process-form";
ModelAndView mav = new ModelAndView(viewName);
// 判断是否有formkey属性
if (hasStartFormKey) {
Object renderedStartForm = formService.getRenderedStartForm(processDefinitionId);
mav.addObject("startFormData", renderedStartForm);
mav.addObject("processDefinition", processDefinition);
} else { // 动态表单字段
StartFormData startFormData = formService.getStartFormData(processDefinitionId);
mav.addObject("startFormData", startFormData);
}
mav.addObject("hasStartFormKey", hasStartFormKey);
mav.addObject("processDefinitionId", processDefinitionId);
return mav;
}
@RequestMapping(value="/processlist",method={RequestMethod.POST,RequestMethod.GET})
public ModelAndView processlist(HttpServletRequest request, HttpServletResponse response){
ModelAndView modelAndView=new ModelAndView("workflow/processlist");
/*
* 保存两个对象,一个是ProcessDefinition(流程定义),一个是Deployment(流程部署)
*/
List<Object[]> objects = new ArrayList<Object[]>();
List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list();
for (ProcessDefinition processDefinition : list) {
String deploymentId = processDefinition.getDeploymentId();
Deployment deployment = repositoryService.createDeploymentQuery().deploymentId(deploymentId).singleResult();
objects.add(new Object[]{processDefinition,deployment});
}
modelAndView.addObject("objects",objects);
return modelAndView;
}
@Test
@Deployment(resources = {"chapter6/leave-formkey/leave-formkey.bpmn", "chapter6/leave-formkey/leave-start.form"})
public void allPass() throws Exception {
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().singleResult();
// 读取启动表单
Object renderedStartForm = formService.getRenderedStartForm(processDefinition.getId(), "myformengine");
// 验证表单对象
assertNotNull(renderedStartForm);
assertTrue(renderedStartForm instanceof javax.swing.JButton);
javax.swing.JButton button = (JButton) renderedStartForm;
assertEquals("My Start Form Button", button.getName());
}
@Deprecated
public ProcessInstance startProcessByName(String string, Map<String, Object> variables) {
if (Context.getCommandContext() != null) {
throw new ActivitiCdiException("Cannot use startProcessByName in an activiti command.");
}
ProcessDefinition definition = processEngine.getRepositoryService().createProcessDefinitionQuery().processDefinitionName(string).singleResult();
if (definition == null) {
throw new ActivitiObjectNotFoundException("No process definition found for name: " + string, ProcessDefinition.class);
}
Map<String, Object> cachedVariables = getAndClearCachedVariables();
cachedVariables.putAll(variables);
ProcessInstance instance = processEngine.getRuntimeService().startProcessInstanceById(definition.getId(), cachedVariables);
if (!instance.isEnded()) {
setExecution(instance);
}
return instance;
}
/**
* 流程定义列表
*/
public Page<Object[]> processList(Page<Object[]> page, String category) {
ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery()
.latestVersion().orderByProcessDefinitionKey().asc();
if (StringUtils.isNotEmpty(category)){
processDefinitionQuery.processDefinitionCategory(category);
}
page.setCount(processDefinitionQuery.count());
List<ProcessDefinition> processDefinitionList = processDefinitionQuery.listPage(page.getFirstResult(), page.getMaxResults());
for (ProcessDefinition processDefinition : processDefinitionList) {
String deploymentId = processDefinition.getDeploymentId();
Deployment deployment = repositoryService.createDeploymentQuery().deploymentId(deploymentId).singleResult();
page.getList().add(new Object[]{processDefinition, deployment});
}
return page;
}
/**
* 查看流程定义图
* @param request
* @param processDefId 流程定义id
* @return
*/
@RequestMapping(value = "/viewprocessDefImage.do")
public String viewprocessDefImage(HttpServletRequest request,
HttpServletResponse response,
@RequestParam("processDefId") String processDefId) throws Exception{
//根据流程定义id查询流程定义
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefId).singleResult();
InputStream inputStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), processDefinition.getDiagramResourceName());
// // 输出资源内容到相应对象
// byte[] b = new byte[1024];
// int len;
// while ((len = inputStream.read(b, 0, 1024)) != -1) {
// response.getOutputStream().write(b, 0, len);
// }
response.getOutputStream().write(IoUtil.readInputStream(inputStream, "processDefInputStream"));
return null;
}
@Test
@Deployment(resources = {"chapter6/leave-formkey/leave-formkey.bpmn", "chapter6/leave-formkey/leave-start.form"})
public void allPass() throws Exception {
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().singleResult();
// 读取启动表单
Object renderedStartForm = formService.getRenderedStartForm(processDefinition.getId(), "myformengine");
// 验证表单对象
assertNotNull(renderedStartForm);
assertTrue(renderedStartForm instanceof javax.swing.JButton);
javax.swing.JButton button = (JButton) renderedStartForm;
assertEquals("My Start Form Button", button.getName());
}
public static void main(String[] args) throws Exception {
// 创建流程引擎
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 得到流程存储服务对象
RepositoryService repositoryService = engine.getRepositoryService();
// 部署一份流程文件与相应的流程图文件
Deployment dep = repositoryService.createDeployment()
.addClasspathResource("MyFirstProcess.bpmn").deploy();
// 查询流程定义
ProcessDefinition def = repositoryService
.createProcessDefinitionQuery().deploymentId(dep.getId())
.singleResult();
// 查询资源文件
InputStream is = repositoryService.getProcessDiagram(def.getId());
// 将输入流转换为图片对象
BufferedImage image = ImageIO.read(is);
// 保存为图片文件
File file = new File("resources/result.png");
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream fos = new FileOutputStream(file);
ImageIO.write(image, "png", fos);
fos.close();
is.close();
// 关闭流程引擎
engine.close();
}
@Test
@Deployment(resources = "chapter6/dynamic-form/leave.bpmn")
public void testJavascriptFormType() throws Exception {
// 验证是否部署成功
long count = repositoryService.createProcessDefinitionQuery().count();
assertEquals(1, count);
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey("leave").singleResult();
StartFormData startFormData = formService.getStartFormData(processDefinition.getId());
List<FormProperty> formProperties = startFormData.getFormProperties();
for (FormProperty formProperty : formProperties) {
System.out.println(formProperty.getId() + ",value=" + formProperty.getValue());
}
}
protected List<ProcessInstance> fetchProcessInstancesPage(CommandContext commandContext, ProcessDefinition processDefinition, int currentPageStartIndex) {
if (SuspensionState.ACTIVE.equals(getProcessDefinitionSuspensionState())) {
return new ProcessInstanceQueryImpl(commandContext).processDefinitionId(processDefinition.getId()).suspended()
.listPage(currentPageStartIndex, commandContext.getProcessEngineConfiguration().getBatchSizeProcessInstances());
} else {
return new ProcessInstanceQueryImpl(commandContext).processDefinitionId(processDefinition.getId()).active()
.listPage(currentPageStartIndex, commandContext.getProcessEngineConfiguration().getBatchSizeProcessInstances());
}
}
@Override
public ProcessDefinition findProcessDefinitionByKeyAndVersionAndTenantId(String processDefinitionKey, Integer processDefinitionVersion, String tenantId) {
if (tenantId == null || ProcessEngineConfiguration.NO_TENANT_ID.equals(tenantId)) {
return processDefinitionDataManager.findProcessDefinitionByKeyAndVersion(processDefinitionKey, processDefinitionVersion);
} else {
return processDefinitionDataManager.findProcessDefinitionByKeyAndVersionAndTenantId(processDefinitionKey, processDefinitionVersion, tenantId);
}
}
@Override
protected void initializeServices() {
super.initializeServices();
listener = new TestMultipleActivitiEventListener();
listener.setEventClasses(ActivitiEntityEvent.class);
listener.setEntityClasses(ProcessDefinition.class, TimerJobEntity.class);
processEngineConfiguration.getEventDispatcher().addEventListener(listener);
}
protected void removeRelatedJobs(ProcessDefinition processDefinition) {
List<JobEntity> timerJobs = getJobEntityManager()
.findJobsByProcessDefinitionId(processDefinition.getId());
if (timerJobs != null && timerJobs.size() > 0) {
for (JobEntity timerJob : timerJobs) {
if (getEventDispatcher().isEnabled()) {
getEventDispatcher().dispatchEvent(ActivitiEventBuilder.createEntityEvent(ActivitiEventType.JOB_CANCELED, timerJob, null, null, processDefinition.getId()));
}
getJobEntityManager().delete(timerJob);
}
}
}
public InputStream execute(CommandContext commandContext) {
ProcessDefinition processDefinition = commandContext.getProcessEngineConfiguration().getDeploymentManager().findDeployedProcessDefinitionById(processDefinitionId);
String deploymentId = processDefinition.getDeploymentId();
String resourceName = processDefinition.getResourceName();
InputStream processModelStream = new GetDeploymentResourceCmd(deploymentId, resourceName).execute(commandContext);
return processModelStream;
}
@Deployment(resources = { "org/activiti5/engine/test/api/oneTaskProcess.bpmn20.xml" })
public void testGetStartFormByProcessDefinitionIdWithoutStartform() {
List<ProcessDefinition> processDefinitions = repositoryService.createProcessDefinitionQuery().list();
assertEquals(1, processDefinitions.size());
ProcessDefinition processDefinition = processDefinitions.get(0);
Object startForm = formService.getRenderedStartForm(processDefinition.getId());
assertNull(startForm);
}