آی تی نرد

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

استفاده از ماژول 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 هم آدرس پوشه ی مقصد هست.

بیشتر...



انتقال یک یا چند مجموعه سایت به دیتابیس دیگر و یا وب اپلیکیشن دیگر

سلام به دوستان

یه روزی به دلایلی نیاز داشتم که که چندتا مجموعه سایت رو که داخل یک دیتابیس بودند رو به یک وب اپلیکیشن دیگه منتقل کنم چندتا سرچ که کردم مطالبی که پیدا میشد مربوط به انتقال یک یا چند مجموعه سایت به یک دیتابیس دیگه بود. که دستوراتش به صورت زیر بود : (دستور زیر برای انتقال یک مجموعه سایت به دیتابیس میباشد)

Move-SPSite <http://ServerName/Sites/SiteName> -DestinationDatabase <DestinationContentDb>

 

که پارامتر اول نام مجموعه سایت و پارامتر دوم نام دیتابیسی که قصد انتقال به اون رو دارید هست.

برای انتقال چند مجموعه سایت به یک دیتابیس میتونید از دستور زیر هم استفاده کنید:

Get-SPSite -ContentDatabase <SourceContentDb> | Move-SPSite -DestinationDatabase <DestinationContentDb>

 

بخش اول دستور تمام مجموعه سایت هایی که داخل دیبتابیس <SourceContentDb> باشه رو برمیگردونه و به بخش دوم دستور پاس میده از اونجایی که پارامتر پیشفرض دستور Move-SPSite نام مجموعه سایت یا آبجکت SPSite هست به ازای هر مجموعه سایت اونها رو به دیتابیس <DestinationContentDb> منتقل میکنه.

با تمام توضیحات که دادم هنوز مشکل من حل نشده بود چون من میخواستم چند تا مجموعه سایت رو به یک وب اپلیکیشن (WebApplication) دیگه منتقل کنم.

اگه دستورات بالا رو برای این منظور استفاده کنید به خطای زیر بر میخورید :

 The site collection being moved and the destination content database must be within the same Web application.

 

این پیغام میگه که مجموعه سایت و دیتابیس مقصد باید در یک وب اپلیکیشن باشند!

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

راه حلی که به ذهن من رسید این بود : 

بیشتر...

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

یکی از مشکلاتی که یک برنامه نویس شرپوینت باهاش زیاد مواجه میشه دسترسی و استخراج یا یافتن یک آبجکت شرپوینتی مانند لیست یا فیلد هست.
یه مفهومی که همیشه وجود داره این هست که اضافه کردن لایه های مختلف و دور کردن برنامه نویس از لایه های پایین هم باعث راحتی برنامه نویس و هم سختی بیش از حد اون خواهد شد.
برای مثال در 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

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