หลังจาก 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.