1399-04-14 14:44 نمایش Notification به کاربر با تغییر جدول
naser_feb8646

 
سلام مهندس وققتون بخیر
من میخوام هر بار که تغییری روی جدولم انجام شد یه نوتیفیکیش به کاربر نمایش بدم اگر براتون ممکنه راهنمایی بفرمایید
1399-04-14 22:55
حاجی شریفی
مؤسس سایت
 
سلام
نقل قول نوشته شده توسط: naser_feb8646

من میخوام هر بار که تغییری روی جدولم انجام شد یه نوتیفیکیش به کاربر نمایش بدم اگر براتون ممکنه راهنمایی بفرمایید


اگر میخواهید بعد از Save ها به کاربر اطلاع رسانی کنید که عملیات موفق بوده یا خطا خورده که این باید در هر Save متدی فراخوانی شود.


اگر کل برنامه یک exe واحد است، میتوانید یک مکانیزم ساده رویداد گرایی داشته باشید که هر کدی که داده ها را تغییر میدهد ، تابع خاصی را هم Raise کند که در نهایت منجر به نمایش پیام شود.
try 
{
...
ef.SaveChanges();
objNotification.RaiseChange(true ); //OK
}
catch
{
objNotification.RaiseChange(true ); //Error
}


و در کلاس-شیء objNotification کدهای لازم جهت نمایش را قرار میدهید.
حتی میتوانید کل فرآیند فوق را در قالب یک متد یا کلاس کپسوله کنید ( مثلا ef.SaveAndNotify() ) که کد آن ، بستگی به ORM و معماری های پایه استفاده شده تان ( مانند DI ) دارد.

-- -- -- -- -- -- -- -- -- -- -- -- -- --

(
در همین راستا و در سطح معماری نرم افزار میتوان از معماری Observable هم استفاده کرد ، ولی حدس میزنم برایتان مشکل است
Microsoft Docs
Observer-Pattern
Observer-Pattern
)


-- -- -- -- -- -- -- -- -- -- -- -- -- --

برای ارتباط با SQLServer یک کلاس جداگانه به نام SqlServerDependency هم وجود دارد که میتواند تغییرات یک جدول را رسد کند و به ما اعلان کند
ولی این مکانیزم را بیشتر برای برنامه های تحت شبکه و Multi-Process پیشنهاد میکنم
بطور نمونه در شرایطی که نسخه های متعددی از برنامه شما در سطح شبکه و بطور همزمان در حال اجرا است و شما اطلاعاتی را در RAM خوانده و Cache کرده اید تا هربار از دیتابیس نخوانید
با مکانیزم SqlServerDependency میتوانید از تغییر اطلاعات توسط سایر کاربران در نقاط دیگر شبکه مطلع شوید و Cache خود را Dirty یا Refresh کنید

که قبل تر مثالش را در تاپیک زیر مشاهده کرده بودید
SqlServerDependency

البته میتوان برای Notification شما هم استفاده کرد ولی مطمئن نیستم Notification را برای چه میخواهید و شاید این بکارتان نیاید.
1399-04-16 12:53
naser_feb8646

 
ممنون از پاسخگویی شما
ببینید استاد من روی شبکه یه دیتابیس دارم و میخوام یه app ساده بنویسم که روی کلاینتهام نصب بشه (در حدود 500 کلاینت) و هر موقع رکوردی توی یک جدول خاص ثبت شد یه نوتیفیکیشن برای کلاینت ها نمایش داده بشه
از کد شما توی http://simorgh.pro/Forum/Home/Topic/37-System-Data-SqlClient-SqlDependency استفاده کردم ولی مشکلی که دارم اینه که کد درست اجرا میشه ولی نوتیفیکیشن نمایش داده نمیشه
1399-04-17 12:30
حاجی شریفی
مؤسس سایت
 
سلام مجدد
یک اطلاعاتی بدهید تا انشاا... بتوانم کمک تان کنم
اگر خطایی دارید ، متن خطا را بدهید
اگر خطا ندارد، کد کلاسی که مکانیزم SqlDependency را در آن پیاده سازی کرده اید، اینجا قرار دهید
برای نمایش صحیح کدهای برنامه نویسی میتوانید از دکمه CODE و تگ [ CODE ] استفاده کنید.

تا اگر نکته ای به چشم خورد ، کمک تان کنم