หลังจาก Blog ตอนก่อน ผมได้ลอง Service Task เชื่อมกับ Web Service ผ่านวิธีการ GET เพื่อที่ดึงข้อมูลมาแสดงผลครับ คราวนี้หลังจาก GET ข้อมูลไปแล้วคราวนี้ เราลองมาทำการแก้ไขข้อมูลครับ ซึ่งการแก้ไขข้อมูลบางส่วน อันนี้ทาง Web Service (REST API) เค้ามีวิธีการที่เรียกว่า PATCH ครับ ส่วนจะทำอย่างไรนั้นมาลุยกันเลยครับ
เตรียมตัวครับ
- Camunda BPMN Engine - Blog ผมมีเขียนนะ อิอิ
- JSON-Server - ตัว Mock API ครับ ถ้าสนใจ ผมก็มีเขียน Blog ไว้ครับ ^__^
กระบวนการที่สร้างกันก่อนครับ

สำหรับกระบวนการที่สร้างคราวนี้ผมทั้ง JSON Server ขึ้นมาเองครับ โดยใช้ข้อมูล Request ซึ่งผู้ใช้ต้องใส่ ID เพื่อให้ระบบดึงข้อมูล Request ขึ่นมาครับ หลังจากดูเสร็จ แล้วกด Complete ข้อมูลของ Request ในช่อง "requeststatus" ถูกแก้ไขค่าจาก "wait-for-review" เป็น "completed" ครับ
ลองมือทำ โดยมี Task ที่เกี่ยวข้อง ดังนี้
- Task "Enter Request Id"
เป็น User Task เอาไว้สำหรับกรอก Id ของ Request ครับ
- Task "Test REST-API (GET)"
เป็น Service Task ที่ติดต่อกับ Web Service โดยมี Config ดังนี้
- Connector Id = "http-connector"
- Input มีค่าตามตารางด้านล่างครับ
| Name | Type | Script Format | Data |
|---|---|---|---|
| url | script | groovy | "http://localhost:3000/requests/${RequestId}".toString() |
| method | text | - | GET |
| header | map | - | Key = "Accept" Value = "application/json" |
- Output เนื่องจากข้อมูลที่ได้เป็นอยู่ในรูปแบบ JSON จึงต้องมีการแปลงค่า และยัดลง Process ของ BPMN ได้แก่ id, projectid, requestid, requestby และ requeststatus ครับ โดยมี Code ดังนี้
import groovy.json.JsonSlurper;
jsonResponse= connector.getVariable("response");
out:println "jsonResponse :" + jsonResponse.getClass();
JsonSlurper jsonSlurper = new JsonSlurper();
Object result = jsonSlurper.parseText(jsonResponse);
//Convert to MAP
Map jsonResponseMap = (Map)result ;
//Step Value to Process Engine
connector.setVariable('id', jsonResponseMap.get("id"));
connector.setVariable('projectId', jsonResponseMap.get("projectId"));
connector.setVariable('requestId', jsonResponseMap.get("requestId"));
connector.setVariable('requestby', jsonResponseMap.get("requestby"));
connector.setVariable('requeststatus', jsonResponseMap.get("requeststatus"));
//Return JSON to outpur variable
S(result);- Task "View Result"
เป็น User Task ที่เอาผลลัพธ์ที่ได้จาก Task "Test REST-API (GET)" มาแสดงผลครับ
- Connector Id = "http-connector"
- Input มีค่าตามตาราง
| Name | Type | Script Format | Data |
|---|---|---|---|
| url | script | groovy | http://localhost:3000/requests/${RequestId}".toString() |
| method | text | - | GET |
| header | map | - | Key = "Accept" Value = "application/json" Key ="Content-Type" Value = "application/json" |
| payload | script | groovy | import groovy.json.JsonOutput; |
- Task "REST-API(PATCH) request status"
เป็น Service Task ที่ทำหน้าที่เปลี่ยน "requeststatus" ถูกแก้ไขค่าจาก "wait-for-review" เป็น "completed" ครับ โดยมี Config ดังนี้ครับ
เมื่อสร้าง Task เสร็จแล้ว นำไฟล์ BPMN ที่ได้เตรียมไป Deploy ครับ
ทดสอบ
เตรียมข้อมูลสำหรับ Mock Server กันก่อนครับ โดยข้อมูลที่ได้มีหน้าตา ดังนี้ (ถูกเก็บไว้ในไฟล์ db.json ครับ)
{
"requests": [
{
"id": 1,
"projectId": 123,
"requestId": "CUQ-5248",
"requestby": "mary",
"requesttime": "2018-05-23T18:25:43.511Z",
"requeststatus": "wait-for-review",
},
{
"id": 2,
"projectId": 124,
"requestId": "CUQ-5249",
"requestby": "mary",
"requesttime": "2018-05-23T18:25:43.511Z",
"requeststatus": "wait-for-review",
},
{
"id": 3,
"projectId": 124,
"requestId": "CUQ-52489",
"requestby": "mary",
"requesttime": "2018-05-23T18:25:43.511Z",
"requeststatus": "wait-for-review",
}
]
}Start JSON Server ด้วยคำสั่ง
json-server --watch db.json
เข้าไปที่ Camunda Task List จากนั้น Execute Task ชื่อ "HttpConnectorRequestPatch"
- กรอก Request Id = 2

- ดูรายการ Request จากนั้นกดปุ่ม Complete

- ลองไปดูที่ Console ครับ พบว่า ช่อง "requeststatus" ถูกแก้ไขค่าจาก "wait-for-review" เป็น "completed" แล้วครับ

Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.


