آی تی نرد

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

استفاده از ماژول Ninject.Extensions.Factory و الگوی Factory در زمان اعتبارسنجی Model در MVC

استفاده از الگوی Repository و پیاده سازی Dependency Injection با استفاده از کتابخانه ی Ninject برروی یک پروژه ی نسبتا بزرگ MVC بسیار کارامد خواهد بود.
به هرحال هر کدوم از این الگوها مزایای مربوط به خودش رو خواهد داشت. استفاده از الگوی اشاره شده به مراتب بیشتر از الگوهای دیگر در برنامه هایی که محوریت بیشتر آن برروی استفاده و تحلیل داده ها در بانک های اطلاعاتی هست می باشد، و استفاده از Ninject هم که مزایای خودش رو به این پروژه اضافه خواهد کرد.

بخش مهم اعتبارسنجی داده ها قبل از افزوده شدن به منبع ذخیره سازی نهایی مورد توجه است، در کلاس های Metadata که از طریق Attribute ها یا DataAnnotations اعتبار سنجی های اولیه صورت میگیرد زمانی نیاز به پیاده سازی یک اعتبارسنجی سفارشی و استفاده از Repository و استخراج داده های مورد نیاز به عنوان بخشی از این اعتبارسنجی می باشد. که متاسفانه عملیات ایجاد نمونه ی جدید کلاس Repository از طریق Field Injection یا هر نوع دیگری از Injection صورت نمی گیرد و با خطای null reference exception مواجه خواهید شد.

برای روشن کردن توضیحاتم یه مثال بزنم:
سناریویی رو در نظر بگیرید که در اون مشتری میخواد یک محصول رو خریداری کنه، اما باید بررسی بشه که اگر در لحظه ی خرید، تعداد محصول برابر با 0 هست پیغام خطای مناسب نمایش داده شود.
بنابراین ما یک کلاس Customer و یک کلاس Product که مربوط به اعتبارسنجی می باشد به شکل زیر خواهیم داشت،

بیشتر...

نصب و پیکره بندی Office Web Apps 2010 برروی ویندوز 7

توی این مطلب روش نصب OWA یا همان Office Web Apps رو روی ویندوز 7 شرح خواهم داد. تمام مراحل انجام شده در این مطلب به جز قسمت دستکاری فایل های کانفیگ ستاپ، قابل استفاده برای نصب به صورت معمولی و استاندارد در ویندوز سرور نیز خواهد بود.
توجه داشته باشید که این روش نصب برروی ویندوز 7 تنها می بایست در محیط های آزمایشی و تولید و توسعه استفاده شود و در محیط های سازمانی می بایست از همان روش استاندارد و معمولی استفاده کنید.

ابتدا خود نرم افزار OWA رو از سایت مایکروسافت به همراه سرویس پک 2 دانلود کنید البته من خودم از این نسخه استفاده نکردم ولی فکر نمیکنم تفاوتی داشته باشه، نسخه ی کامل به همراه سرویس پک 2 رو من توی رپیدباز توی این آدرس گذاشتم که البته باید حتما عضو باشید تا بتونید لینک اصلی دانلود رو ببینید:
دانلود از لینکدانی رپیدباز

ممکنه در نهایت شما دو نسخه ی ستاپ رو در دست داشته باشید یه نسخه ای که فقط یک فایل هست و دیگری هم یه فایل iso، فایل اولی رو باید با دستور زیر از حالت فشرده خارج کنید و دومی رو هم که فقط محتویات رو در مکانی کپی کنید.

"E:\Development\SharePoint 2010\OWA2010.exe" /extract:"E:\Development\OWA_Extracted"

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

بیشتر...



متد استخراج یا یافتن لیست و فیلد توسط مقادیر مختلف در شرپوینت

یکی از مشکلاتی که یک برنامه نویس شرپوینت باهاش زیاد مواجه میشه دسترسی و استخراج یا یافتن یک آبجکت شرپوینتی مانند لیست یا فیلد هست.
یه مفهومی که همیشه وجود داره این هست که اضافه کردن لایه های مختلف و دور کردن برنامه نویس از لایه های پایین هم باعث راحتی برنامه نویس و هم سختی بیش از حد اون خواهد شد.
برای مثال در Asp.Net Web Forms وجود لایه های بسیار برای راحتی کار برنامه نویس مثل داشتن کنترل های سروری به قیمت سختی یافتن مشکل و همچنین سنگین شدن برنامه ی نهایی تمام خواهد شد.

در این مورد برای دسترسی به یک لیست شرپوینت و عملیات برروی آن نیاز هست تا برنامه نویس مشخصاتی از قبیل نام نمایشی(DisplayName) یا نام ثابت(StaticName) و یا نام داخلی(InternalName) و یا شناسه ی لیست(ID or Guid) را داشته باشد.

وجود این موارد مطمئنا برای راحتی کار برنامه نویس بوده است اما به قیمت سختی کار برنامه نویس در جنبه های دیگر تمام میشود. برای مثال فرض کنید برنامه نویس راهکاری می نویسد که در آن می بایست کاربر نهایی نام لیست را برای کارهای بعدی در اینترفیس وارد نماید، خب کاربر نام نمایشی را می بیند و همان را هم وارد خواهد کرد. اما امکان دارد برنامه نویس دیگری در قسمتی از برنامه با نام داخلی کار کند(به دلیل غیرقابل تغییر بودن آن) و به آن نیاز داشته باشد و در صورتی که همین مقدار به کد این برنامه نویس دیگر ارسال شود برنامه متوقف خواهد شد زیرا این لیست را پیدا نخواهد کرد.

بیشتر...

حذف تمام رکوردها از تمام جداول دیتابیس در SQL Server

در صورتی که بنا به دلایلی نیاز به حذف تمام اطلاعات موجود در تمام جداول یک دیتابیس در Sql sever پیدا کردید میتوانید بدون نیاز به اجرای T-Sql برروی هر جدول به صورت یکجا همه ی این رکوردها یا اطلاعات رو حذف کنید.

برای مثال این اسکریپت کاربردی زمانی به درد من خورد که میخواستم یه دیتابیس رو که در نسخه ی 2012 sql بود به 2008 بیارم برای همین مجبور شدم اسکریپت دیتابیس رو در نسخه ی 2012 به همراه دیتا با سازگاری 2008 تهیه کنم و در 2008 اجرا کنم که در زمان اجرای اسکریپت با کلی خطا مواجه شد که واقعا خطایابی اون کلی وقت نیاز داشت. برای همین چون من اسکریپت اولیه ی ایجاد دیتابیس رو به همراه داده های نمونه داشتم، اون رو روی 2008 اجرا کردم و بعد تمام اطلاعات نمونه ی این دیتابیس رو با کمک این دستورات حذف و سپس از تمام داده های موجود در دیتابیس 2012 اسکریپت گرفتم و اون رو با موفقیت توی 2008 اجرا کردم.

بدین منظور میتونید از کد t-sql زیر استفاده کنید. البته ابتدا انتخاب دیتابیس مورد نظر فراموش نشود:

EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO
EXEC sp_MSForEachTable 'DELETE FROM ?'
GO
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
GO

در کد های بالا دو خط اول و آخر به منظور برداشتن کنترل وابستگی جداول و رکورد ها و سپس برگرداندن آن می باشد و در خط دوم هم رکوردها از تمام جداول حذف خواهند شد.

تاریخ و تقویم شمسی برای BlogEngine - Frontend

اصولا می بایست با تغییر فرهنگ(Culture) یک برنامه ی Asp.net که در زمان تغییر زبان برنامه صورت میگیرد، تمام محیط برنامه که از این فرهنگ پشتیبانی میکند به فرهنگ مورد نظر تغییر یابد.

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

این هم به این دلیل هست که کلاس PersianCalendar ی که مایکروسافت به صورت پیشفرض در دات نت قرار داده دچار مشکل هست یا به هر حال کامل نیست به همین دلیل با فیکس کردن این کلاس و اختصاص آن به فرهنگ fa-ir این مشکل یا ضعف برطرف خواهد شد.

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

ابتدا کلاس PersianCulture رو از انتهای پست دانلود کنید. بعد اون رو به پروژه ی وب و در پوشه ی برای مثال app_code اضافه کنید.

در مرحله ی بعد هم کلاس site.master.cs مربوط به تم مورد نظرتان را باز کرده و دو خط کد زیر رو به قسمت لود صفحه اضافه کنید(این کد چک میکنه که اگر فرهنگ برنامه به فارسی تغییر کرده، فرهنگ به همراه تاریخ اصلاح شده رو با فرهنگ جاری جایگزین میکنه):

بیشتر...