مثالی برای واکشی اطلاعات از پایگاه داده و درج اطلاعات فرم‌ها در پایگاه داده در رویدادهای مرتبط با فرم (OnCreate – OnSave)

نحوه استفاده از رویداد ها (Event) در هنگام کار با فرم‌ها

در بسیاری از مواقع لازم است در هنگام فراخوانی یا ثبت نهایی اطلاعات فرم محاسباتی انجام پذیرد یا نتیجه ورود اطلاعات توسط کاربر در اختیار سایر سامانه‌ها قرار گیرد.

فرض کنید بخواهیم در یک فرم درخواست مرخصی در هنگام ایجاد فرم توسط کاربر مانده مرخصی کاربر را از پایگاه داده یک سامانه دیگر فراخوانی نماییم و روی فرم نمایش دهیم و همچنین مدت زمان مرخصی درخواست شده را بعد از ثبت فرم در یک پایگاه داده دیگر ذخیره نماییم برای این کار می توانیم از رویداد ها (Event) های فرم استفاده کنیم.

فرم های حاوی دو رویداد ذیل می باشند :

·      Create
·      Save

رویداد create در هنگام ایجاد فرم و رویداد Save در هنگام ثبت نهایی اطلاعات فرم (Submit Form) فراخوانی می‌گردند.

وارد محیط ویرایش فرم می‌شویم و به بخش رویداد مراجعه می‌کنیم.

با کلیک روی دکمه جدید وارد فرم تعریف رویدادهای می‌شویم.

یک توضیح برای رویداد وارد می‌کنیم سپس مشخص می‌کنیم رویداد در زمان ایجاد فرم فراخوانی گردد (Create) یا در زمان ثبت نهایی اطلاعات فرم (Save) . ما می‌خواهیم مشابه مثال ذکر شده در هنگام ورود به فرم مانده مرخصی کاربر را از طریق یک WebApi فراخوانی کنیم و آنرا نمایش دهیم لذا گزینه Create را در بخش On Event انتخاب می‌کنیم. همانطور که در بخش “یکپارچه سازی با سایر منابع اطلاعاتی” توضیح داده شد. WebApi لازم برای این کار را به سیستم معرفی می‌کنیم. اولویت اجرای WebApi را برابر با عدد 1 می‌گذاریم. دقت کنید که در صورت لازم به اجرای چند WebApi در یک رویداد می‌توانید ترتیب اجرای آن‌ها را با تعیین اولویت مشخص کنید.

در ذیل مثالی از WebApi مورد نظر که وظیفه آن بازگرداندن مانده مرخصی کاربر می‌باشد را آورده‌ایم.

به همین ترتیب یک رویداد دیگر برای هنگام ثبت اطلاعات فرم ایجاد می‌کنیم وApi  Web ذیل را برای بروزرسانی مدت مرخصی کاربر در آن فراخوانی می‌کنیم.

حال ما دو رویداد یکی برای ابتدای فرخواین فرم و دیگری در هنگام ثبت نهایی فرم در اختیار داریم.

همانطور که در نمونه api  ذکر شده برای بازگردادن مانده مرخصی مشاهده می‌شود مقداد مانده مرخصی در پارامتر Leave قرار داده شده است. برای همین جهت چاپ مانده مرخصی در هنگام ورود کاربر به فرم کافیست مشابه نمونه تصویر ذیل مقدار {{ Leave}}  قرار می‌دهیم.

و همانطور که در نمونه api ذکر شده برای بروزرسانی مدت مرخصی مشاهده می‌شود دو مقدار startDate و endDate از پارامتر‌های فرم همراه با username باید در اختیار api قرار گیرد تا محاسبات بعدی بر اساس آنها انجام پذیرد و مدت زمان مرخصی درخواست شده برای آن کاربر در پایگاه داده مقصد بروزرسانی گردد. لذا علاوه بر پارارمتر username که توسط سیستم ارسال خواهد شد دو کنترل تاریخ با نام‌های startDate و endDate مشابه نمونه ذکر شده در تصویر ذیل بر روی فرم قرار خواهیم داد.

نتیجه کار بداین صورت خواهد بود که با اجرای فرم در اتوماسیون اداری در ابتدا و توسط api اول مانده مرخصی کاربر در اختیار او قرار خواهد گرفت و سپس با تعیین تاریخ شروع و پایان مرخصی مدت آن در اختیار api دوم قرار داده خواهد شد و درپایگاه داده ثبت می‌گردد.

نمونه کد Api برای رویداد Create از نوع #C:

[System.Web.Http.HttpPost]
[System.Web.Http.Route("users/remain")]
public JObject remain([FromBody] dynamic data)
{
   var userName = data._user.employee_username;
   using (var db = new rockfaEntities())
   {
       var query = string.Format(@"SELECT      [id], [fullName], [username], [leave]
                                              FROM [faragostar_io].[dbo].[users]
                                              where username = '{0}'", userName);
      var result = (db.Database.SqlQuery<user>(query));
      var re = JsonConvert.SerializeObject(result, null, new JsonSerializerSettings() { Formatting = Formatting.None });
      JArray jsonArray = JArray.Parse(re);
      return  JObject.Parse(jsonArray[0].ToString());
   }
}

نمونه کد Api برای رویداد Save از نوع #C:

[System.Web.Http.HttpPost]
[System.Web.Http.Route("users/leave")]
public IHttpActionResult leave([FromBody] dynamic data)
{
   DateTime startTime = data.startDate;
   DateTime endTime = data.endDate;
   var leave = endTime.Subtract(startTime).Days;
   var userName = data._user.employee_username;
   using (var db = new rockfaEntities())
   {
       var query = string.Format(@"update [dbo].[users]
                                                   set [leave] =  leave - '{1}'
                                                    WHERE username = '{0}'", userName, leave);
      var result = (db.Database.ExecuteSqlCommand(query));
      var jsonResult = new
       {
              result = true,
      };
      return Ok(jsonResult);
       }
}