[BPMN] Service Task with REST-API (PATCH) Example

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

เตรียมตัวครับ

กระบวนการที่สร้างกันก่อนครับ

สำหรับกระบวนการที่สร้างคราวนี้ผมทั้ง 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 มีค่าตามตารางด้านล่างครับ
NameTypeScript FormatData
urlscriptgroovy"http://localhost:3000/requests/${RequestId}".toString()
methodtext-GET
headermap-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 มีค่าตามตาราง
NameTypeScript FormatData
urlscriptgroovyhttp://localhost:3000/requests/${RequestId}".toString()
methodtext-GET
headermap-Key = "Accept"
Value = "application/json"

Key ="Content-Type"
Value = "application/json"
payloadscriptgroovyimport groovy.json.JsonOutput;
def payload = [ 'requeststatus': 'completed' ]; JsonOutput.toJson(payload);
- 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.