Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将Camunda业务错误排除在外?_Java_Spring Boot_Bpmn_Camunda - Fatal编程技术网

Java 如何将Camunda业务错误排除在外?

Java 如何将Camunda业务错误排除在外?,java,spring-boot,bpmn,camunda,Java,Spring Boot,Bpmn,Camunda,我关于抛出业务错误的问题。例如,我有一些图表,我从SpringREST控制器的方法开始这个过程。 如何在test()方法中捕获“Error CheckNoneAZNOperationIsExist”并将其抛出 @RestController 公共类测试点{ @自动连线 进程引擎进程引擎; @GetMapping(path=“帐户关闭”) 公共字符串测试(){ ProcessInstance ProcessInstance=processEngine.getRuntimeService().st

我关于抛出业务错误的问题。例如,我有一些图表,我从SpringREST控制器的方法开始这个过程。 如何在test()方法中捕获“Error CheckNoneAZNOperationIsExist”并将其抛出

@RestController
公共类测试点{
@自动连线
进程引擎进程引擎;
@GetMapping(path=“帐户关闭”)
公共字符串测试(){
ProcessInstance ProcessInstance=processEngine.getRuntimeService().startProcessInstanceByKey(“帐户\关闭\流”);
返回“hi”;
}
}
最后,我想在发生“错误结束事件”时向使用者抛出一个异常,例如JSON

{
    “errorMessage”: “CheckNoneAZNOperationIsExist”, 
    “errorCode”: 123 
}

最后,我找到了解决办法

1) 我将错误代码变量(例如globalError)添加到所有边界事件中

2) 执行流程后,我检查历史变量实例(Camunda Java API)

@RestController
公共类测试点{
@自动连线
进程引擎进程引擎;
@GetMapping(path=“x”)
公共字符串测试(){
ProcessInstance ProcessInstance=processEngine.getRuntimeService().startProcessInstanceByKey(“帐户\关闭\流”);
HistoricVariableInstanceEntity变量=(HistoricVariableInstanceEntity)processEngine.getHistoryService()
.createHistoricVariableInstanceQuery()
.processInstanceId(processInstance.getId())
.variableName(“全局错误”).singleResult();
if(变量!=null)
抛出新的ResponseStatusException(HttpStatus.BAD_请求,processInstance.getId()+“”+variable.getTextValue());
返回“hi”;
}
}
3) 发生错误时,全局错误由Camunda引擎填写“错误名称”

上述代码的结果

{
    "timestamp": "2019-08-18T10:34:49.928+0000",
    "status": 400,
    "error": "Bad Request",
    "message": "ce72ca30-c1a3-11e9-bb0b-0a0027000005 ErrorUserIsFrozen",
    "path": "/x"
}

最后,我找到了解决办法

1) 我将错误代码变量(例如globalError)添加到所有边界事件中

2) 执行流程后,我检查历史变量实例(Camunda Java API)

@RestController
公共类测试点{
@自动连线
进程引擎进程引擎;
@GetMapping(path=“x”)
公共字符串测试(){
ProcessInstance ProcessInstance=processEngine.getRuntimeService().startProcessInstanceByKey(“帐户\关闭\流”);
HistoricVariableInstanceEntity变量=(HistoricVariableInstanceEntity)processEngine.getHistoryService()
.createHistoricVariableInstanceQuery()
.processInstanceId(processInstance.getId())
.variableName(“全局错误”).singleResult();
if(变量!=null)
抛出新的ResponseStatusException(HttpStatus.BAD_请求,processInstance.getId()+“”+variable.getTextValue());
返回“hi”;
}
}
3) 发生错误时,全局错误由Camunda引擎填写“错误名称”

上述代码的结果

{
    "timestamp": "2019-08-18T10:34:49.928+0000",
    "status": 400,
    "error": "Bad Request",
    "message": "ce72ca30-c1a3-11e9-bb0b-0a0027000005 ErrorUserIsFrozen",
    "path": "/x"
}

一旦历史记录增加,依赖历史查询将成为性能问题。检查“executeWithVariablesInReturn”是否是解决问题的更好解决方案:完美!感谢您在历史记录增长后,历史记录查询将成为性能问题。检查“executeWithVariablesInReturn”是否是解决问题的更好解决方案:完美!非常感谢。