اگر در پروژه های تحت وب خود که با Asp.net Core مینویسید نیاز به گزارشگیری دارید قطعا یکی از بهترین گزینه ها استفاده از Stimulsoft می باشد. اما یکی از موارد و مشکلاتی که با آن مواجه میشوید نحوه ارسال پارامتر به گزارش در Stimulsoft در پروژه های Asp.net Core می باشد. در ادامه به بررسی ارسال پارامتر به گزارش های استیمول سافت می پردازیم.
برای ایجاد یک گزارش در پروژه های Asp Core خود با استفاده از Stimulsoft به شکل زیر عمل کنید:
مرحله اول : در View خود کد زیر را وارد کنید.
1 2 3 4 5 6 7 8 9 10 11 12 |
@using Stimulsoft.Report.Mvc; @Html.Stimulsoft().StiMvcViewer(new StiMvcViewerOptions() { Actions = { GetReport = "GetReport", PrintReport = "PrintReport", ViewerEvent = "ViewerEvent" } }) |
ارسال پارامتر به گزارش در Asp.net Core
حال در کنترلر خود اکشن زیر را بنویسید . این اکسن یک پارامتر id را از کاربر می گیرد تا اطلاعات مرتبط با این id را از بانک لود کرده و در گزارش نمایش دهد:
1 2 3 4 5 |
public async Task<IActionResult> PrintUserInfo() { return View(); } |
1 2 3 4 5 6 7 8 9 10 11 |
public async Task<ActionResult> GetReport() { var user= await _userService.GetUserInfo(); StiReport report = new StiReport(); report.Load(StiNetCoreHelper.MapPath(this, "wwwroot/Reports/PrintUser.mrt")); report.RegData("dt", user); return StiNetCoreViewer.GetReportResult(this, report); } |
ارسال پارامتر به گزارش Stimulsoft در Asp.net Core
متد فوق اطلاعات کاربران را از بانک لود کرده و به گزارش ارسال میکند.
و اکشن زیر نیز عمل پرینت کردن گزارش را انجام میدهد
1 2 3 4 5 6 7 |
public async Task<IActionResult> PrintReport() { return StiNetCoreViewer.PrintReportResult(this); } |
اما مشکل زمانی بوجود می آید که شما میخواهید یک پارامتر را برای گزارش ارسال کنید. یعنی میخواهید فرضا گزارش شما اطلاعات یک کاربر خاص را لود کرده و نمایش دهد و بعد هم پرینت کنید.
برای این کار شما نیاز دارید که مثلا ایدی کاربر را بعنوان پارامتر به اکشن های فوق ارسال کنید.
ارسال پارامتر به گزارش در Asp.net Core
یعنی اکشن های بالا به صورت زیر تغییر می یابند:
1 2 3 4 5 |
public async Task<IActionResult> PrintUserInfo(int id) { return View(); } |
و اکشن آماده سازی گزارش نیز باید اطلاعات کاربر مد نظر شما را لود کند
1 2 3 4 5 6 7 8 9 10 11 |
public ActionResult GetReport() { var user= await _userService.GetUserInfo(id); StiReport report = new StiReport(); report.Load(StiNetCoreHelper.MapPath(this, "wwwroot/Reports/PrintUser.mrt")); report.RegData("dt", user); return StiNetCoreViewer.GetReportResult(this, report); } |
و ممکن است شما بخواهید در زمان پرینت کردن گزارش مثلا وضعیت کاربر را به پرینت شده تغییر دهید یا پردازشی را روی کاربر انجام دهید که باز نیاز به ایدی کاربر در اکشن پرینت خواهید داشت
1 2 3 4 5 6 7 8 |
public async Task<IActionResult> PrintReport() { //Change State To Printed bool result = await _userService.ChangeToPrinted((int)id,User.Identity.Name); return StiNetCoreViewer.PrintReportResult(this); } |
حال سوال اصلی اینجاست که به چه شکل میتوان پارامتر id را به اکشن های مختلف در گزارش ارسال کرد؟؟؟
استفاده از سشن برای ارسال پارامتر به stimuloft در گزارش های پروژه asp.net core
یکی از راههای حل مشکل ارسال پارامتر به اکشن های گزارش در asp Core استفاده از سشن session ها می باشد. به این منظور که شما ایدی یا پارامترهای دیگری که مد نظرتان است را در سشن قرار دهید و در اکشن های بعدی مقدار پارامتر را از سشن بازخوانی کنید.
برای این کار کافی است که ما در اکش اول مقدار پارامتر را در سشن قرار دهیم و در اکشن های بعدی مقدار پارامتر را از سشن بخوانیم. یعنی که سه اکشن فوق به صورت زیر تغییر میکنند:
1 2 3 4 5 6 7 8 9 |
public async Task<IActionResult> PrintUserInfo(int id) { if (id > 0) { HttpContext.Session.SetInt32("userId", id); } return View(); } |
و اکشن آماده سازی گزارش نیز باید اطلاعات کاربر مد نظر شما را لود کند:
1 2 3 4 5 6 7 8 9 10 11 12 |
public ActionResult GetReport() { var id = HttpContext.Session.GetInt32("userId"); var user= await _userService.GetUserInfo(id); StiReport report = new StiReport(); report.Load(StiNetCoreHelper.MapPath(this, "wwwroot/Reports/PrintUser.mrt")); report.RegData("dt", user); return StiNetCoreViewer.GetReportResult(this, report); } |
و در اکشن پرینت هم داریم:
1 2 3 4 5 6 7 8 |
public async Task<IActionResult> PrintReport() { //Change State To Printed var id = HttpContext.Session.GetInt32("userId"); bool result = await _userService.ChangeToPrinted((int)id,User.Identity.Name); return StiNetCoreViewer.PrintReportResult(this); } |
به این ترتیب با استفاده از سشن ها میتوانیم ارسال پارامتر به گزارش های استیمول سافت در asp core را انجام دهیم.