camunda Connector连接器 发送POST接口
连接器使用
连接器可向其他服务发送Http Rest或SOAP请求,调用其他服务。
地址可使用${} 读取流程变量;
调用Http接口返回值可通过 camunda spin 解析JSON或XML数据。
项目添加依赖
<!--添加连接器插件后,连接器 就可以使用了-->
<dependency>
<groupId>org.camunda.bpm</groupId>
<artifactId>camunda-engine-plugin-connect</artifactId>
<version>7.15.0</version>
</dependency>
<!--Spin和Json Rest Http中解析; parse http response variable with camunda-spin-->
<dependency>
<groupId>org.camunda.bpm</groupId>
<artifactId>camunda-engine-plugin-spin</artifactId>
<version>7.15.0</version>
</dependency>
<dependency>
<groupId>org.camunda.spin</groupId>
<artifactId>camunda-spin-dataformat-json-jackson</artifactId>
<version>1.10.1</version>
</dependency>
<dependency>
<groupId>org.camunda.spin</groupId>
<artifactId>camunda-spin-core</artifactId>
<version>1.10.1</version>
</dependency>
<dependency>
<groupId>org.camunda.spin</groupId>
<artifactId>camunda-spin-dataformat-all</artifactId>
<version>1.10.1</version>
</dependency>
连接器的使用案例
流程图 conn/conn3.bpmn
<bpmn:process id="Process_Conn3" name="连接器综合使用" isExecutable="true">
<bpmn:startEvent id="StartEvent_1">
<bpmn:outgoing>Flow_00brudk</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:sequenceFlow id="Flow_00brudk" sourceRef="StartEvent_1" targetRef="Activity_0ctwdoc" />
<bpmn:serviceTask id="Activity_0ctwdoc" name="Http连接器">
<bpmn:extensionElements>
<camunda:connector>
<camunda:inputOutput>
<camunda:inputParameter name="url">${myHost}conn/three?id=${id}</camunda:inputParameter>
<camunda:inputParameter name="method">POST</camunda:inputParameter>
<camunda:inputParameter name="headers">
<camunda:map>
<camunda:entry key="Content-Type">text/plain</camunda:entry>
<camunda:entry key="Accept">application/json</camunda:entry>
</camunda:map>
</camunda:inputParameter>
<camunda:outputParameter name="response">${response}</camunda:outputParameter>
<camunda:outputParameter name="gtTen">
<camunda:script scriptFormat="Javascript" resource="conn/ParseConn3.js" />
</camunda:outputParameter>
</camunda:inputOutput>
<camunda:connectorId>http-connector</camunda:connectorId>
</camunda:connector>
</bpmn:extensionElements>
<bpmn:incoming>Flow_00brudk</bpmn:incoming>
<bpmn:outgoing>Flow_125sykj</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:exclusiveGateway id="Gateway_1do8rdj">
<bpmn:incoming>Flow_125sykj</bpmn:incoming>
<bpmn:outgoing>Flow_1iixae2</bpmn:outgoing>
<bpmn:outgoing>Flow_0z8s3nm</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:sequenceFlow id="Flow_125sykj" sourceRef="Activity_0ctwdoc" targetRef="Gateway_1do8rdj" />
<bpmn:sequenceFlow id="Flow_1iixae2" name="大于10" sourceRef="Gateway_1do8rdj" targetRef="Activity_1mqxjiv">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${gtTen}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_0z8s3nm" name="小于10" sourceRef="Gateway_1do8rdj" targetRef="Activity_1350wct">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${!gtTen}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:userTask id="Activity_1350wct" name="小于等于10审核" camunda:assignee="30125">
<bpmn:incoming>Flow_0z8s3nm</bpmn:incoming>
<bpmn:outgoing>Flow_0evvkht</bpmn:outgoing>
</bpmn:userTask>
<bpmn:userTask id="Activity_1mqxjiv" name="大于10审核" camunda:assignee="30125">
<bpmn:incoming>Flow_1iixae2</bpmn:incoming>
<bpmn:outgoing>Flow_1np2tdl</bpmn:outgoing>
</bpmn:userTask>
<bpmn:endEvent id="Event_1erz8ga">
<bpmn:incoming>Flow_1np2tdl</bpmn:incoming>
<bpmn:incoming>Flow_0evvkht</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_1np2tdl" sourceRef="Activity_1mqxjiv" targetRef="Event_1erz8ga" />
<bpmn:sequenceFlow id="Flow_0evvkht" sourceRef="Activity_1350wct" targetRef="Event_1erz8ga" />
</bpmn:process>
解析接口返回值 conn/ParseConn3.js
//解析Http返回结果JSON,获取返回的学生年龄到变量
var response = connector.getVariable("response");
// parse response variable with camunda-spin
var student = S(response);
var ageProp = student.prop("age")
//脚本最后1行会作为返回值用于流程变量
ageProp.value()>10
流程部署、启动流程
@Test
public void deploy(){
Deployment deploy = repositoryService.createDeployment()
.name("综合连接器测试")
.source("综合连接器测试")
.addClasspathResource("conn/conn3.bpmn")
.addClasspathResource("conn/ParseConn3.js")
.deploy();
log.info("流程部署完成:{}",deploy.getId());
start();
}
@Test
public void start(){
String processKey="Process_Conn3";
Map<String,Object> variables=new HashMap<>();
variables.put("myHost","http://localhost:8010/");
variables.put("id","12");
//流程启动时,向连接器传递变量
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processKey,variables);
log.info("流程开启:{}",processInstance.getId());
}
Rest接口案例
@RestController
@RequestMapping("/conn")
@Slf4j
public class ConnectionController {
//连接器综合使用
@PostMapping("/three")
public Student connTest3(String id){
log.info("{连接器综合使用 ID :{}}",id);
Student stu=new Student();
stu.setAge(RandomUtil.randomInt(5,15));
stu.setId(id);
stu.setName("jake"+id);
return stu;
}
}