[Crystal Report] Formula ต่อ String

งานช่วงนี้ของผมมีแก้ Report บ้าง โดยใน Report อันนี้เป็นการบอกสถานะของ User ว่าต้องมี Message แจ้งเตือนอะไรบ้าง ได้แก่

  • แจ้ง Message "- User Suspend in 2014-DEC-12 12:23:00" เมื่อถูก Admin กำหนด, ไม่ได้ใช้งานระบบนานเกิน 20 วัน หรือมีการ Log in Fail เกิน 3 ครั้ง
  • แจ้ง Message "- User must change password at next login" เมื่อถูก Admin กำหนด
  • แจ้ง Message "- User back date transaction authorization." เมื่อถูก Admin กำหนด

จากข้อมูลคร่าวๆนี้ หลายๆคนตอนออกแบบ Layout อาจจะแยก 3 Message ออกเป็น 3 formula
1

ซึ่งมาถึงตรงนี้ อาจจะพบว่าปัญหาว่า User บางคน มีแต่ 2 Message ทำให้การแสดงผลมันดูแหว่งๆ และไม่สวยงามครับ (ตัวอย่างในรูปพบว่าพื้นที่สีเหลืองที่ hilight คือ พื้นที่ที่แหว่งไป ถ้าไม่มีคำว่า "- User must change password at next login." แสดงผลอีกมันคงดูแปลกๆนะครับ)
2
ทางแก้ของผม คือ เวลาสร้าง Formula ก็ให้เก็บ Message แต่ละอันไว้ในตัวแปรก่อน แล้วค่อยนำมาแสดงผลทีเดียวครับ ดังนี้

3

//ประกาศตัวแปร Val เพื่อเก็บข้อความไว้
stringvar val;
//ตรวจสอบเงื่อนไขของ Messsage ที่ 1
if {USERINVEST.ISSUSPENDED} = 'Y' then
val := val + '- User Suspended in ' + ToText({USERINVEST.SUSPENDEDTIME} , "yyyy-MMM-dd hh:mm:ss") + "." + ChrW(13);
//ตรวจสอบเงื่อนไขของ Messsage ที่ 2
if (trim({USERINVEST.NEEDCHANGEPWD}) = 'Y' AND trim({USERINVEST.ISSUSPENDED}) = 'Y') or (trim({USERINVEST.ISSUSPENDED}) = 'N' AND trim({USERINVEST.NEEDCHANGEPWD}) = 'Y') then
val := val + '- User must change password at next login.' + ChrW(13);
//ตรวจสอบเงื่อนไขของ Messsage ที่ 3
if (trim({USERINVEST.BACKDATEAUTH}) = 'Y') then
val := val + '- User back date transaction authorization.'+ ChrW(13);
//Return ผลลัพธ์ที่ได้ไปแสดงผล
val

ผลลัพธ์ที่ได้ครับ ไม่มีบรรทัดว่างแล้วครับ

หมายเหตุ:

  • ChrW(13) = ขึ้นบรรทัดใหม่(Newline)
  • เวลาเขียนเงื่อนไขในรูปแบบนี้ เราควรเลือก property "can grow" ไว้ เพื่อให้ตัวรายงานช่วยปรับของ Field ตามข้อมูลทีมี
    5

Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.