PDA

View Full Version : چطور متوجه بشیم کدام فیلد از یک کورد ویرایش شده(ثبت وقایع کاربر)



azam2005
دوشنبه 22 اسفند 1390, 14:21 عصر
با سلام و عرض ادب
من برای برنامه ام می خواستم جدول ثبت وقایع بگذارم یعنی ویرایش-حذف-اضافه کردن- و هر کاری که کاربر از لحظه ورود تا لحظه خروج انجام داده است.
و مدیر بتواند اطلاعات قبلی و اطلاعات جدید را ببیند
مثلا قسمتهای ویرایش شده: اگر یک فیلد تلفن تغییر کرده است در جدول اصلی ثبت شود ولی در جدول تغییرات مشخص شود که مقدار فیلد تلفن قبلی مثلا 12345678 و مقدار تلفن جدید 87654321 شده است و اگر مدیر خواست اطلاعات به حالت اولیه در آیا بتواند
لطفا در طراحی جدول ثبت وقایع کمک کنید؟
و چطوری می توانم ببینم کدام فیلد از رکورد نسبت به قبل تغییر کرده است و مقدار قبلی چه بوده است؟
آیا موقع ثبت ویرایش باید همه فیلدها را با شرط IF مقدار قبلی با جدید چک کنم؟

fakhravari
دوشنبه 22 اسفند 1390, 15:34 عصر
با سلام
کدی وجود دارد که اخرین ویرایش مطلب را تشخیص بده.
بهتر در بخش sql سوال کنید

alonemm
دوشنبه 22 اسفند 1390, 19:11 عصر
باسلام:

من در یک پروژه در قسمت ثب وقایع این موضوع رو به این شکل پیاده سازی کردم:
که یک جدول به نام Log وجود داشت که دارای چند ستون بود مثل :
شناسه کاربر - نام جدولی که تغییرات در آن ایجاد شده - شناسه رکورد اصلی - شناسه رکورد تغییر کرده - تاریخ و زمان ثبت و ...

و مدیر سیستم بر اساس کار با این جدول میتونست این اطلاعات رو به حالت اول برگردونه یا رکورد اصلی رو پاک کنه و ...
که اینارو بسته به نوع طراحی شما میتونید کد کنید.


موفق باشید.

fakhravari
دوشنبه 22 اسفند 1390, 19:34 عصر
ممنون alon
خوب هیچی بهتر مثال عملی نمیشه.

Mostafa_Dindar
دوشنبه 22 اسفند 1390, 19:41 عصر
با سلام و عرض ادب
من برای برنامه ام می خواستم جدول ثبت وقایع بگذارم یعنی ویرایش-حذف-اضافه کردن- و هر کاری که کاربر از لحظه ورود تا لحظه خروج انجام داده است.
و مدیر بتواند اطلاعات قبلی و اطلاعات جدید را ببیند
مثلا قسمتهای ویرایش شده: اگر یک فیلد تلفن تغییر کرده است در جدول اصلی ثبت شود ولی در جدول تغییرات مشخص شود که مقدار فیلد تلفن قبلی مثلا 12345678 و مقدار تلفن جدید 87654321 شده است و اگر مدیر خواست اطلاعات به حالت اولیه در آیا بتواند
لطفا در طراحی جدول ثبت وقایع کمک کنید؟
و چطوری می توانم ببینم کدام فیلد از رکورد نسبت به قبل تغییر کرده است و مقدار قبلی چه بوده است؟
آیا موقع ثبت ویرایش باید همه فیلدها را با شرط IF مقدار قبلی با جدید چک کنم؟

سلام ,

در صورتی که لازم نباشه ثبت کنید که کدام کاربر باعث آن عمل شده , میتونید براحتی با Trigger در سطح دیتابیس اینکار رو پیاده سازی کنید . ولی در صورتی که لازمه نام کاربری که این عمل رو انجام داده هم لاگ شود , این کار باید در سطح Application صورت بگیره .

در صورتی که از Entity Framework استفاده میکنید , این مقاله (http://www.codeproject.com/Articles/34491/Implementing-Audit-Trail-using-Entity-Framework-Pa)به شما کمک خواهد کرد .

موفق باشید

Ehsan Boorboor
دوشنبه 22 اسفند 1390, 20:11 عصر
سلام ,

در صورتی که لازم نباشه ثبت کنید که کدام کاربر باعث آن عمل شده , میتونید براحتی با Trigger در سطح دیتابیس اینکار رو پیاده سازی کنید . ولی در صورتی که لازمه نام کاربری که این عمل رو انجام داده هم لاگ شود , این کار باید در سطح Application صورت بگیره .

در صورتی که از Entity Framework استفاده میکنید , این مقاله (http://www.codeproject.com/Articles/34491/Implementing-Audit-Trail-using-Entity-Framework-Pa)به شما کمک خواهد کرد .

موفق باشید

توی این مقاله در سطح Table کار شده

ولی وقتی صحیت از ثبت وقایع کاربر می کنیم باید دید کاربر رو در نظر بگیریم این طور نیست؟

مثلا کاربر می گه مطلب جدید ایجاد کردم همین درج مطلب جدید شاید سه چهار تا جدول درگیر باشن که از دید کاربر پنهونه

در واقع دید کاربر تراکنش است نه Table

اینو چطور باید حل کرد

Mostafa_Dindar
دوشنبه 22 اسفند 1390, 20:25 عصر
توی این مقاله در سطح Table کار شده

ولی وقتی صحیت از ثبت وقایع کاربر می کنیم باید دید کاربر رو در نظر بگیریم این طور نیست؟

مثلا کاربر می گه مطلب جدید ایجاد کردم همین درج مطلب جدید شاید سه چهار تا جدول درگیر باشن که از دید کاربر پنهونه

در واقع دید کاربر تراکنش است نه Table

اینو چطور باید حل کرد

الان جمله
مثلا کاربر می گه مطلب جدید ایجاد کردم همین درج مطلب جدید شاید سه چهار تا جدول درگیر باشن که از دید کاربر پنهونه
با جمله
در واقع دید کاربر تراکنش است نه Table شما در تناقض هست .

اگر اون مقاله رو کامل مطالعه کرده باشید , درخواهید یافت که تمامی مقادیر رکوردهای قبلی و بعدی در ستون OldData و NewData ذخیره میشوند . حال اگر عمل کاربر یاعث چندین تراکنش بر روی چندین جدول شود , به همان تعداد رکورد در جدول DBAudit ذخیره خواهد شد .

Ehsan Boorboor
دوشنبه 22 اسفند 1390, 20:34 عصر
الان جمله
با جمله شما در تناقض هست .

اگر اون مقاله رو کامل مطالعه کرده باشید , درخواهید یافت که تمامی مقادیر رکوردهای قبلی و بعدی در ستون OldData و NewData ذخیره میشوند . حال اگر عمل کاربر یاعث چندین تراکنش بر روی چندین جدول شود , به همان تعداد رکورد در جدول DBAudit ذخیره خواهد شد .

بله با این که مشکلی نیست جناب

موقع واکشی از همین چندین رکورد از در جدول DBAudit

می خواهیم به کاربر چی نمایش دهیم این رکوردهای درج شده رو؟؟؟

یا توقع کاربر اینه که بهش بگیم کاربر 1 در فلان تاریخ این مطلب رو درج کرده می دونید دید منطقی و کلی نه کارهایی پشت سیستم انجام شده

Mostafa_Dindar
دوشنبه 22 اسفند 1390, 20:45 عصر
می خواهیم به کاربر چی نمایش دهیم این رکوردهای درج شده رو؟؟؟

یا توقع کاربر اینه که بهش بگیم کاربر 1 در فلان تاریخ این مطلب رو درج کرده می دونید دید منطقی و کلی نه کارهایی پشت سیستم انجام شده

برای مقاصد خاص باید به طور خاص برنامه نویسی کرد . مقاله اشاره شده دقیقا نیاز عمومی تغیرات در سطح دیتابیس بر روی رکوردها با مقادیر قبلی و بعدی رو پوشش میده که فردی مثل مدیر اون رو برسی میکنه نه کاربر . همانطور که دوست ایجاد کننده تاپیک خواسته بود :


من برای برنامه ام می خواستم جدول ثبت وقایع بگذارم یعنی ویرایش-حذف-اضافه کردن- و هر کاری که کاربر از لحظه ورود تا لحظه خروج انجام داده است.
و مدیر بتواند اطلاعات قبلی و اطلاعات جدید را ببیند
مثلا قسمتهای ویرایش شده: اگر یک فیلد تلفن تغییر کرده است در جدول اصلی ثبت شود ولی در جدول تغییرات مشخص شود که مقدار فیلد تلفن قبلی مثلا 12345678 و مقدار تلفن جدید 87654321 شده است و اگر مدیر خواست اطلاعات به حالت اولیه در آیا بتواند

موفق باشید

Ehsan Boorboor
دوشنبه 22 اسفند 1390, 20:56 عصر
برای مقاصد خاص باید به طور خاص برنامه نویسی کرد . مقاله اشاره شده دقیقا نیاز عمومی تغیرات در سطح دیتابیس بر روی رکوردها با مقادیر قبلی و بعدی رو پوشش میده که فردی مثل مدیر اون رو برسی میکنه نه کاربر . همانطور که دوست ایجاد کننده تاپیک خواسته بود :


بله خیلی ممنو مقاله اشاره شده شما کاملا جواب گوی نیاز دوستمون بود

اما در مورد سوال من هیچ ایده و نظری ندارید خیلی وقته که این مسئله رو بررسی می کنم و به راه حلی برای پیاده سازی نرسیدم

نیازم مرتبط با همین سوال است فقط برای کاربران عام حتی ممکنه که مدیر سایت هم یک کاربر غیر متخصص باشه

یا ترجیح میدین توی یه تاپیک جدید بحث بشه

azam2005
سه شنبه 23 اسفند 1390, 10:35 صبح
چطوری بفهمم کدام فیلد از کدام رکورد تغییر یافته ? لطفا مثال بزنید ممنون می شم
مثلا در جدول users رکورد 100 مقدار فیلد تلفن (Phone)قبلی 12345678 و مقدار فیلد ((Phone))تلفن جدید 87654321 شده است و بقیه فیلدهای رکورد 100 تغییری نیافته????????????????