您的位置:首页 > 其它

解决ACTIVITI流程图设置字体不生效的问题

2014-04-16 12:11 585 查看
在ACTIVITI 5.15的版本中,有一个设置流程图的字体配置。

配置如下:

<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<property name="dataSource" ref="dataSource" />
<property name="databaseType" value="${jdbc.dbType}" />
<property name="dbIdentityUsed" value="false" />
<property name="history" value="audit" />
<property name="transactionManager" ref="transactionManager" />
<property name="databaseSchemaUpdate" value="true" />
<property name="jobExecutorActivate" value="false" />
<property name="idGenerator" ref="activitiIdGenerator" />
<property name="processDefinitionCache">
<bean class="com.hotent.bpmx.activiti.cache.ActivitiDefCache"></bean>
</property>
<property name="labelFontName" value="宋体"></property>
<property name="activityFontName" value="宋体"></property>

</bean>


但是我通过代码生成流程图时,发现配置无效。

BpmnModel bpmnModel= repositoryService.getBpmnModel("流程定义ID");

InputStream inputStream= ProcessDiagramGenerator.generatePngDiagram(bpmnModel);

这样生成的流程图中是中文出现乱码。

跟踪了一下:

发现ProcessDiagramCanvas代码中的ProcessEngineConfiguration conf=Context.getProcessEngineConfiguration(); 这个配置为空,那么这个配置当然是无效的了。

如果单纯解决这个问题很好办直接修改代码:

protected String activityFontName = "宋体";
protected String labelFontName = "宋体";

就可以了。

但是需要我们需要解决的是为什么获取这个流程配置为空的问题,让流程配置文件生效。

分析原因:

为什么这个Context.getProcessEngineConfiguration();获取为空呢,这个是这样,这个需要有值的话,是需要经过activiti的拦截器的。

我使用上面代码生成的时候,那么他就不会经过他的拦截器了,那么这个获取的这个值一定为空。

解决方法:

我们让这个代码在流程引擎的拦截器下执行。

在activiti中可以使用命令的方式执行代码。

具体做法如下:

1.实现类让他注入commandExecutor。

public class BaseServiceImpl  extends ServiceImpl implements InitializingBean {

@Resource
ProcessEngine processEngine;

@Override
public void afterPropertiesSet() throws Exception {

ProcessEngineImpl engine = (ProcessEngineImpl)processEngine;

this.setCommandExecutor(engine.getProcessEngineConfiguration().getCommandExecutor());

}

}


2.定义一个cmd生成流程图。

public class GenFlowImageCmd implements Command<InputStream> {

private String bpmnDefId="";

public GenFlowImageCmd(String bpmnDefId){
this.bpmnDefId=bpmnDefId;
}

@Override
public InputStream execute(CommandContext context) {

RepositoryService repositoryService=(RepositoryService) AppUtil.getBean("repositoryService");

BpmnModel bpmnModel= repositoryService.getBpmnModel(bpmnDefId);

InputStream inputStream=    ProcessDiagramGenerator.generatePngDiagram(bpmnModel);
return inputStream;
}

}


3.调用这个cmd。

实现一个类继承BaseServiceImpl 。

public class FlowImageService extends BaseServiceImpl {

public InputStream getProcessImage(String bpmnDefId){

InputStream inputStream= this.commandExecutor.execute(new GenFlowImageCmd(bpmnDefId));
return inputStream;

}
}


在spring文件中配置这个service,这样再次调用生成代码,那么就可以读取到配置的数据了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐