Developer Logs

odoo multiple db API call, print PDF config tips

odoo
config

เรื่องง่าย ๆ ที่จะช่วยลดเวลาที่ต้องไปงมกับปัญหาที่ไม่ค่อยมีใครพูดถึง

Days: 16 | Publish : 27/04/2025

odoo tips on api and print pdf
              

วันนี้คุยกันแบบเบา ๆ เป็นเรื่องที่ไม่ได้ซับซ้อน หรือยุ่งยากอะไร แต่เป็นปัญหาที่ถ้าไม่รู้ ก็จะต้องไปงมเสียเวลาอยู่นานพอสมควรเลยล่ะ

เคยมั้ยครับ ? หลังจากที่ Setup odoo รันขึ้นมาได้หมดแล้ว แล้วไปลอง print pdf ดู แล้วก็พบว่า report ที่ออกมา เป็นหน้าขาวโล่ง ๆ ทั้งที่จริงแล้วมันควรจะต้องมีเส้นแบ่ง มี style ที่แต่งไว้ หรือแม้กระทั่งโลโก้ ซ้ำหนักไปกว่านั้น บางทีมันยังโหลดนานเอาซะมาก ๆ และที่ตลกขึ้นไปอีก คือมีบางทีที่มันก็โหลดมาได้ และบางครั้งก็โหลดไม่ได้เอาซะด้วยนี่สิ …

ซึ่งปัญหานี้มักจะมาจากหลังที่เราทำการ setup NGINX และเข้า app ผ่าน domain name เป็นที่เรียบร้อยไปแล้ว

ถึงจุดนี้ เราอาจจะตรวจสอบไปถึงการ install ว่าขาดอะไรไป หรือชี้ addons path ไม่ถูกต้อง

แต่ ๆ ๆ … ถ้าทำทั้งหมดที่ว่ามานี้ แต่ยังไม่มีอะไรดีขึ้น อาจจะลืมทำสิ่งนี้ไปครับ

ให้เข้าไปที่ system parameters ใน config ของ odoo app หลังจากนั้นให้ทำการ create/edit parameters 2 ตัว ให้เป็นค่าตามนี้ครับ


  web.base.url = {web_url}
  report.url = http://0.0.0.0:8069 # based on port usage

เมื่อเซ็ตตามนี้เรียบร้อย หลังจากนั้นก็ลอง print ดูอีกครั้งได้เลยครับบบบบบ xD


API call on multiple DB

อันนี้เป็นอีกปัญหานึง โดยเฉพาะในตอนที่ยังอยู่ใน development phase แล้วต้องมีการทดสอบระบบกันค่อนข้างหลากหลาย อาจจะมีทั้ง Tester ที่เป็น functional คอยทดสอบงานผ่านหน้า app พร้อมกันนั้น ยังมีการทดสอบ API ที่อาจจะยิงมาจาก application หรือไม่ก็ client อย่าง Postman หรือจะผ่าน Swagger มาก็ตามที

ถ้ามีแค่ db เดียว ก็อาจจะไม่ได้มีปัญหาอะไร แต่ถ้าการทดสอบฟีเจอร์ต่าง ๆ ที่พัฒนามาทั้งหมด มีการทดสอบอยู่คนละ db กันด้วย ความวุ่นวาย จะบังเกิดกับฝั่ง API ทันที เพราะถ้าใครเคยเล่นกับ API ของ odoo จะพอรู้ได้ในทันทีว่า เราจำเป็นจะต้องระบุ db ไว้ตอนที่สั่งรัน ไม่งั้นจะไม่สามารถทดสอบ API ได้ เหตุมันก็มาจากการที่ไม่สามารถระบุได้ว่าต้องการยิงเข้าไปที่ db ไหนนั่นแหละ

ปัญหานี้แก้ได้ง่าย ๆ โดยการที่เราทำการระบุ db เข้าไปผ่าน URL ตรง ๆ ได้เลย


  {url}/?db={db_name}
  # http://localhost:8069/?db=test_api_db

ทีนี้เราก็ไม่จำเป็นจะต้องใส่ command ระบุ db เอาไว้ ในทุกครั้งที่รัน แล้วก็ยังสามารถให้ทีมอื่น ๆ ทดสอบใน db อื่นได้ โดยไม่ต้องทำการ down server เพื่อกำหนด run command เอาใหม่ทุกครั้งอีกด้วย เรียกได้ว่าเป็นปัญหาปลายจมูกเลยก็ว่าได้ …

>_JV