Archive

reporting service


ปัญหาต่อมาถ้าเราทำการกำหนด ค่า parameter มี type datetime แล้วเรากำหนดค่า default value เป็นปี ค.ศ. (กรณีที่ report server เป็น en ซึ่งส่วนใหญ่ก็เป็นแบบนั้น) แต่ ในหน้าเว็บเราใช้ culture เป็น th-TH default value ที่ได้จะเป็นค่า ปี ค.ศ. แต่ culture เป็นไทย พอส่งเข้า report server ก็จะทำให้ date ผิด

ยกตัวอย่าง

default value  –   get parameter value – set to report server
1-1-1900                 1-1-1900                   1-1-1357          – Min value datetime ของ sql server 1900

คือตอน get มาทำไมไม่ดู culture ไปด้วยละไอ้กาก

เห็นไหมว่า default เป็นอะไรมันก็ขึ้นมาแบบนั้นไม่ได้สนใจ culture

ปัญหาแก้ไขโดยการ ก่อนส่ง parameter value จาก code behind ก็กำหนดค่า default ซะก็จบ


resolve this issue u pass all value parameter
u allow blank or null parameter it complete in report server web
but not enough in asp page u pass default value from code behind can’t pass null to paramter

ปัญหาคือ ต่อให้เรา set parameter เป็น Allow Blank และ Allow Null แล้ว แต่ถ้าเราไม่กำหนดค่า default ให้กับ parameter ตัวนั้น มันก็จะไม่สามารถ render จากฟังก์ชั่น refresh ได้ต้องกด view report จาก Report Viewer Control เอา


เวลาเราส่ง parameter เข้า reporting service นั้นจากที่เราเลือกวันที่ในหน้า report เหมือนมันจะ text แต่จริงมันส่ง object type เป็น datetime นะจ๊ะ

ประเด็นที่ทำให้เราสับสนคือ

New ReportParameter(objitem.paraName, objitem.paraValue.ToString())

มันรับแต่ value ที่เป็น string คือมันรับ value อย่างเดียวจริงๆ อะไม่ได้ดู object type
สิ่งที่ต้อง concern คือ ถ้าใน store procedure เรารับ parameter เป็น datetime แล้วไซร้
ไอ้ตรงที่เราส่ง parameter จาก code behind นั้นมึงต้องคำนึงว่า store procedure สามารถ convert
ค่านั้นไปเป็น datetime object ได้หรือไม่

แต่ถ้าเลือกจากหน้า web report server ก็ชิวๆ เพราะเหมือน string ก็จริงแต่มันให้ค่า object type เป็น
datetime

ไม่ต้องงง ประเด็นเลยทำไม microsoft ไม่ทำให้ ReportParameter สามารถระบุไปได้เลยว่า ค่าที่จะส่งนั้น Object Type เป็นอะไร เพราะใน reporting service แม่งเสือกระบุได้ไง ตามภาพเลย

ที่เครื่อง setting region date เป็น United Kingdom และ custom format เป็น dd-MM-yyyy ด้วย
แต่ในโปรแกรมบังคับ format ไว้ เป็น dd/MM/yyyy และเป็น th-TH
หน้าเว็บเลยได้แบบนี้
 แอบฉลาดนะนิรับ parameter ตาม culture นั้นเลยถ้าใส่เป็น 2012 แบบนี้ error ด้วยนะ
ที่นี้มาดูบน report server บ้าง
เห็นไหมว่าเราสามารถใส่ได้ตาม culture บน server เลย 

เป็นการยืนยันว่ามันส่ง parameter แบบมี object type จริงๆ นะเธออออ
ปล. เพราะใน object datetime มันจะเก็บ culture ไว้ให้ด้วยว่ามี culture เป็นอะไรที่มันฉลาดอีกนิดคือถ้าไม่ใช่ ค.ศ. มัน convert ให้ด้วย เลิฟๆ ไม่งั้นกูคงปวดกบาลอีกพอสมควร