Update File ใน SmartObject ผ่าน SmartFileProperty

สวัสดีครับ พอดีมี Code Review กันในกลุ่มน้องๆ เลยเอา Solution นี้มาแชร์ครับ เป็นการ update เนื้อไฟล์ ผ่าน SmartFileProperty อันนี้เป็นวิธีที่เราใช้แปะ Signature และเขียน Activity log ไว้ในเนื้อเอกสารครับหลังจากการอนุมัติ  เนื้อหาต้นฉบับ

สำหรับ SmartObject ที่มีการเก็บ File เป็นหนึ่งใน Property ของ SmartObject นั้น เราสามารถดึง File ผ่าน SmartFileProperty มาแก้ไขเนื้อไฟลได้ในระหว่าง Workflow ยกตัวอย่าง Business Scenario ที่น่าจะเกิดขึ้นได้ดังนี้

  • ต้องการสร้างหน้าสรุปผล หลังจากเอกสารผ่านการอนุมัติเป็นที่เรียบร้อย เช่น มีการแปะ Log Activity ที่หน้าแรกว่า เอกสารผ่านการอนุมัติเมื่อวันไหน, Flow ในการเดินของเอกสารเป็นอย่างไร, ใครเป็นผู้อนุมัติในแต่ละขั้น
  • ต้องการ Stamp Signature หลังจากที่เอกสารผ่านการอนุมัติ

โดยวิธีที่เราจะเข้าไปแก้เนื้อไฟล์ของ SmartObject นั้น สามารถทำได้ผ่าน SmartFileProperty โดยมีขั้นตอนดังนี้

  • เริ่มต้นที่การไปดึงค่า file ออกมาจาก SmartObject  โดยอ้างอิงจาก path
  • แปลง file เป็น byte (ตัวอย่างคือ แปลงแล้ว parse เป็น pdfDocument)

byte[] pdfBytes = File.ReadAllBytes(@path);
PdfDocument pdf = new PdfDocument(pdfBytes);

  • เมื่อเราได้ Object File มาแล้วเราก็สามารถแก้ไขเนื้อใน pdf ได้ โดยในตัวอย่างนี้จะเป็นการแปะรูปลายเซ็นไปที่ตำแหน่งที่ต้องการ

Image firstApproverSignature = new Image(@firstApproverSignaturePath, 0, height – 50, 0.5f);
page.Elements.Add(firstApproverSignature);
//get approver timestamp from Activity Instance Destination
DateTime ts = DateTime.Parse(getProcessTimestamp(smoServer, processID, “First level Review”));
page.Elements.Add(new Label(ts.ToString(“G”, thInfo), 10, height – 30, 100, 20, Foxit.PDF.Font.LoadSystemFont(“leelawadee”)));

  • เมื่อเราเพิ่มเนื้อหาใน File เสร็จแล้ว เราก็ Update กลับไปที่ SmartObject เหมือนเดิมผ่าน SmartFileProperty

SmartFileProperty smartFile = (SmartFileProperty)smo.Properties[“File”];
byte[] stampFile = document.Draw();
smartFile.Content = System.Convert.ToBase64String(stampFile);
smo.MethodToExecute = “Save”;
smoServer.ExecuteScalar(smo);

เท่านี้เราก็สามารถ Update File ที่เก็บอยู่ใน SmartObject ได้ ซึ่งใน K2 Version 4.7 จะมี REST Service ขึ้นมา จึงคาดว่าน่าจะใช้ประโยชน์ในรูปแบบ Word Event ได้อีกด้วย เช่น มีการแปะ Word Control แล้วก็ update ผ่าน SmartObject ได้ เช่น เลขที่หนังสือหลังจากการอนุมัติเป็นต้น

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s