PSPCommunity.org ورود | ثبت نام | كمك

رامین احمدی

SharePoint Development

بيشترين بازديد شده

اشتباهات رایج برنامه نویسی در شیرپوینت – قسمت دوم

در مقاله قبلی 5 مورد از اشتباهات رایج برنامه نویسی در شیرپوینت مطرح شد و در این مقاله قصد دارم به چند مورد دیگر از اشتباهات رایج برنامه نویسی در شیرپوینت بپردازم .

Null بودن مقادیر

حتما برای شما زیاد پیش آمده که بخواهید مقادیر یک آیتم از لیست را بخوانید و مورد استفاده قرار دهید ، اما موردی که همیشه باید به آن توجه کنید این است که زمانی که کاربر در هنگام وارد کردن اطلاعات ستونی را خالی بگذارد مقدار Null  در آن ستون ذخیره میشود و اگر شما تلاش کنید تا به مقدار آن ستون دسترسی پیدا کنید با خطا مواجه خواهید شد . در هنگام کار با آیتم ها برای دریافت مقادیر ذخیره شده بهتر یا از Try ، Catch به صورت زیر استفاده کنید :

String FullName = String.Empty;

SPList ContactList = web.Lists["Contacts"];

SPListItem item = ContactList.GetItemById(1);

try

{

    FullName = item["FullName"];

}

catch(Exception error)

{

    SPUtility.TransferToErrorPage(error.Message);

}

و یا قبل از مقدار دهی Null بود را چک کنید :

if(item["FullName"]!=null)

{

    FullName=Convert.ToString(item["FullName"]);

}

همچنین زمانی که قصد مقدار دهی یک ستون از آیتمی را دارید نیز همیشه از try ، Catch استفاده کنید ، زیرا ممکن است نوع ستون با مقداری که وارد میکنید متفاوت باشد و باعث بروز خطا شود و یا نام ستون را اشتباه وارد کرده باشید و یا ستونی که قصد مقدار دهی دارید اصلا وجود نداشته باشد.

SPList ContactList = web.Lists["Contacts"];

SPListItem item = ContactList.Items.Add();

try

{

    item["Title"] = "Ahmadi";

}

catch { }

try

{

    item["Name"] = "Ramin";

}

catch { }

try

{

    item["FullName"] = "Ramin Ahmadi";

}

catch { }

Null بودن لیست ها

اگر در شیرپوینت 2007 بخواهید به لیستی دسترسی پیدا کنید که وجود نداشته باشد با پیغام خطا مواجه میشوید و در ضمن نمیتوانید Null بودن ( وجود لیست ) را نیز بررسی کنید مگر اینکه ازtry ، catch استفاده کنید ، در شیرپوینت 2010 متدی به آبجکت SPList   با عنوان TryGetList  اضافه گردیده که با استفاده از آن میتوانید از وجود یک لیست با خبر شوید :

SPList ContactList = web.Lists.TryGetList("Contacts");

if (ContactList != null)

{

    // do something

}

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

استفاده از نام های فارسی برای ستون ها

هنگام برنامه نویسی لیست ها همیشه سعی کنید برای عنوان ستون ها  از نام های لاتین استفاده کنید تا مشکلی در دسترسی به ستون ها نداشته باشید زیرا زمانی که از نام های فارسی استفاده کنید در دیتابیس با فرمت خاصی ذخیره میشود که دسترسی را برای شما سخت خواهد کرد ، هنگامی که ستونی ایجاد میشود Static Name آن با عنوانی که وارد کردید ذخیره میشود و پس از آن با هر بار تغییر عنوان ، Display Name  تغییر کرده و Static Name به همان شکل باقی خواهد ماند که میتوانید از آن در کدنویسی و دسترسی به ستون استفاده کنید .

list.Fields.Add("ProductName", SPFieldType.Text, true);

SPField field = list.Fields["ProductName"];

field.Title = "نام محصول";

field.Update();

string productName = list.GetItemById(1)["ProductName"].ToString();

                           

استفاده نادرست از Disposal Object

یکی دیگر از اشتباهات رایج در بین برنامه نویسان استفاده از آبجکت های Disposal به عنوان خروجی توابع میباشد و یا Dispose کردن این آبجکت ها قبل از استفاده ! به مثال زیر توجه کنید :

public static SPWeb GetSPWeb(string url)

{

using (var site = new SPSite(url))

{

    using (SPWeb web = site.OpenWeb())

    {

        return web;

    }

}

}

در این تابع آبجکت SPWeb قبل از بازگشت به کد اصلی برنامه Dispose شده است و برنامه را با خطا مواجه خواهد کرد .

استفاده از ViewFields در کوئری

همانطور که قبلا هم طی مقالاتی خدمت شما دوستان عزیز مطالبی رو در مورد بهبود سرعت عملیات در شیرپوینت اشاره کردم بودم بهتر است برای دریافت داده ها از لیست های شیرپوینتی از ViewFields و RowLimit استفاده کنید ، اما مشکلی که ممکن در استفاده از ViewFields برای شما به وجود آید دسترسی به داده هایی است که در کالکشن داده های کوئری وجود ندارند ! به طور مثال به کد زیر توجه کنید :

SPList UsersList = web.Lists["لیست کاربران"];

SPQuery search = new SPQuery();

search.Query = @"<Where><Eq><FieldRef Name='Account' LookupId='TRUE'/><Value Type='Integer'>2</Value></Eq></Where>";

search.RowLimit = 2;

search.ViewFields = "<FieldRef Name='Title'/><FieldRef Name='ID'/>";

SPListItemCollection result = UsersList.GetItems(search);

if (result.Count > 0)

{

string FullName = result[0]["FullName"].ToString();

}

با اجرای این کد با خطا مواجه خواهید شد زیرا ستون FullName  را در ViewFields قرار نداده اید ! اما نحوه صحیح استفاده از این کد :

SPList UsersList = web.Lists["لیست کاربران"];

SPQuery search = new SPQuery();

search.Query = @"<Where><Eq><FieldRef Name='Account' LookupId='TRUE'/><Value Type='Integer'>2</Value></Eq></Where>";

search.RowLimit = 2;

search.ViewFields = "<FieldRef Name='FullName'/><FieldRef Name='ID'/>";

SPListItemCollection result = UsersList.GetItems(search);

if (result.Count > 0)

{

string FullName = result[0]["FullName"].ToString();

}

در ضمن به خاطر داشته باشید که ستونهایی که قصد دارید آنها را در قسمت شرط جستجو استفاده کنید لازم نیست در ViewFields آورده شوند ، در مثال بالا ما Account  را در قسمت ViewFields وارد نکردیم و این مشکلی برای جستجو ایجاد نخواهد کرد .

موفق و پیروز باشید .

تولید نرم افزار تحت شیرپوینت

یکی از مباحثی که این روز ها در تمام شرکت های مرتبط با شیرپوینت بسیار جدی دنبال میشود تولید نرم افزار تحت شیرپوینت است ، از تولید نرم افزارهای کوچک مثل ستون های سفارشی ، وب پارت ها و Add-on ها گرفته تا نرم افزارهای بزرگ مثل مدیریت پروژه ، اتوماسیون اداری ، مدیریت ایده ها ، کنترل مستندات و ....

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

سوالات و مشکلات زیادی هستند که برنامه نویسان شیرپوینت باید قبل از هر کاری آنها را بررسی کنند مثل :

  • استفاده از لیست های شیرپوینت یا دیتابیس ؟
  • یک مجموعه سایت یا مجموعه ای از سایت ها ؟
  • بدون کد ، sandboxed solution یا full-trust solution ؟
  • SharePoint Foundation یا SharePoint Server ؟

همچنین شما به عنوان یک توسعه دهنده باید از تمام امکاناتی که شیرپوینت در اختیار شما قرار میدهد باخبر باشید ، به تصویر زیر توجه کنید :

شیرپوینت امکانات توسعه کاملی در اختیار شما قرار داده است ، در قسمت Content  یا محتوا شما امکاناتی نظیر مجموعه سایت ، سایت ها ، لیست ها ، پوشه ها و آیتم در اختیار دارید که میتوانید با استفاده از آنها داده ها و تراکنش های نرم افزار را مدیریت کنید ، در یک سطح بالاتر و در قسمتAdministration  آبجکت هایی برای توسعه مدیریت و فارم در اختیار دارید و همچنین آبجکتی مثل SPPersistedObject که با استفاده آن میتوانید تنظیمات دلخواه و جدیدی را توسعه داده و به شیرپوینت بیافزایید ، همچنین با امکاناتی نظیر SPJobDefinition میتوانید اکشن های خاصی را تولید کنید که به صورت اتوماتیک و در زمان های مشخص عملیاتی را انجام دهند .

در قسمت ماشین و در صورتی که نیاز داشته باشید به سطوح پایین تری از نرم افزار دسترسی داشته باشید میتوانید از امکانات ASP.Net  مثل HTTP Modules و یا Web.Config و وب سرویس استفاده کنید .

همچنین امکانات جدید و قابل توجه ای که در سرویس ها بوجود آمده که به شما این امکان را میدهد تا بهره وری بهتری از منابع سیستم داشته باشید و تا حد امکان از کند شدن سیستم جلوگیری کنید .

البته امکاناتی که در نسخه 2010 اضافه گردیده بسیار گسترده است که در این بحث نمیگنجد و پیشنهاد میکنم حتما آنها را بررسی کنید ، امکاناتی مثل روابط بین لیست ها ، امکان Join کردن آنها ، LINQ ، استفاده از Silverlight و امکانات Client Object Model ، توجه به امکانات جدید اضافه شده در Event Receiver ها و Workflow ها و ....

خوب ، کمی در مورد امکانات صحبت کردیم حالا میخواهیم بررسی کنیم که چه زمانی باید از این امکانات استفاده کنیم ، آیا باید از تمام این امکانات در نرم افزار استفاده کرد ؟

پکیج یا طراحی

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

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

محتوا

همیشه یکی از سوالاتی که در کار با شیرپوینت برای شما پیش می آید این است که از چه نوع سایتی استفاده کنیم ؟ آیا یک سایت از نوع Blank  باشد یاTeam Site ؟ آیا نیاز به Document Center  و یا Record Center دارید ؟ آیا یک سایت نیاز است یا میبایست یک مجموعه سایت همراه چندین زیر سایت ساخته شود ؟ آیا نیاز به ایجاد مجموعه سایت های جداگانه با قابلیت ارتباط وجود دارد ؟

اینها سوالات مهمی است که میبایست در ابتدا پروژه مطرح شود زیرا زیر ساخت آن را تشکیل میدهند .

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

  • به یک Administrator  نیاز است یا نیاز به مدیران بیشتری میباشد ؟
  • سطح دسترسی کاربران به سایت و لیست ها چگونه خواهد بود ؟
  • آیا در تولید کد نیاز به قسمت هایی هست که به دسترسی بالاتر نیاز داشته باشد ؟
  • آیا نیاز به تولید یک Template  جدید میباشد یا Template های موجود کفایت میکند ؟
  • آیا میبایست امکاناتی به سایت مورد استفاده افزوده شود ؟
  • ارتباط این سایت با دیگر سایت ها و قسمت های شیرپوینت چگونه است ؟
  • آیا نیاز به کنترل رویدادهای سایت ، لیست و آیتم ها میباشد ؟
  • فرایندهای مرتبط با نرم افزار چیست و مراحل انجام کار مشخص میباشد ؟

وقتی در نرم افزار خود از سایت ها و Template های مختلفی استفاده میکنید باید توجه داشته باشید که هر سایت دارای زبان ، مجوزها ، لیست ها و امکانات مختص به خود است و در توسعه میبایست به این موضوع بسیار اهمیت داد .

البته با توجه به نرم افزار و امکاناتی که قصد تولید آن را دارید سوالات میتواند متفاوت باشد اما مهم این است که قبل از تولید تمام جوانب را در نظر بگیرید تا نرم افزار بهترین کارایی را داشته باشد .

سرویس ها

اجازه بدید از سرویس ها شروع کنیم ، چه زمانی باید از سرویس ها استفاده کرد ؟

  • زمانی که بخواهیم به اطلاعات مشترکی خارج از محدوده برنامه یا سایت دسترسی داشته باشیم.
  • استفاده از ابزارهایی مثل آفیس و ارتباط با مجموعه نرم افزارهای آن.
  • جستجوی اطلاعات
  • انجام عملیاتی که بالای 5 دقیقه زمان نیاز داشته باشد.

همچنین پیشنهاد میشه از امکاناتی مثل WCF  بیشتر استفاده نمایید که علاوه بر اینکه بسیار کار با آن ساده میباشد بلکه کارایی صفحات را هم بالا میبرد ، فرض کنید وب پارتی دارید که حجم عظیمی از اطلاعات را با هر بار Refresh کاربر فراخوانی میکند ، به طور معمول استفاده از امکانات آبجکت مدل در اولویت قرار دارد در صورتی که استفاده از WCF میتواند بسیار به بهبود کارایی وب پارت کمک کند .

نرم افزارهایی با حجم اطلاعات زیاد

ممکن است در مواقعی نیاز به تولید نرم افزارهایی باشد که اطلاعات بسیار زیادی در آن رد و بدل میشود مثل اتوماسیون اداری ، BPMS ، کنترل کیفیت و کنترل مستندات ، انبار ، منابع انسانی و ....

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

  • استفاده از صفحات مدیریتی ( _layouts Pages ) و یا وب پارت ها برای نمایش داده ها
  • استفاده از Web Application های جداگانه برای استقرار سیستم و بهبود کارایی
  • ارائه راهکارهایی بر روی دیتابیس های موجود در SQL Server برای عدم افت کارایی سیستم زمانی که حجم اطلاعات رو به افزایش است
  • کاهش افراد با دسترسی Designer و Admin و استفاده بیشتر از دسترسی Contribute

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

امنیت

امنیت یا Security  در شیرپوینت یکی از مشکلات دائمی برنامه نویسان شیرپوینتی است ! به همین خاطر میبایست همیشه در مورد آن به دقت برنامه ریزی کنید ، مواردی که میبایست در این ضمینه در نظر بگیرید عبارتند از :

  • استفاده از امکاناتی مثل Break Inheritance  و Item Level Permisions در درجه بسیار خطرناک بوده زیرا باید مطمئن باشید که حتما این کار به درستی انجام شود وگرنه نرم افزار از کار خواهد افتاد و همچنین هزینه بسیار برای شما خواهد داشت و باعث کاهش کارایی خواهد شد .
  • همیشه زمانی که نیاز به ایجاد ، بروز رسانی و یا فراخوانی داده ها دارید بحث امنیت را خواهید داشت ، همیشه باید چک کنید که کاربر مجوز این عملیات را دارد یا خیر ؟ چه کاربرانی باید به این داده ها دسترسی داشته باشند و اگر دسترسی ندارند چه پیغامی میبایست دریافت کنند ؟
  • استفاده از آبجکت هایی مثل SPSecurity و یا Impersonation بسیاری از مشکلات امنیتی شما را برطرف خواهد کرد اما باید به خاطر داشته باشید استفاده مکرر از آنها خطراتی را نیز به همراه خواهد داشت !
  • منابع و داده هایی که به صورت عمومی در دسترس همه قرار میگیرند را از داده هایی که فقط گروهی میبایست به آنها دسترسی داشته باشند جدا کنید تا کنترل بهتری بر روی امنیت داده ها داشته باشید.
  • جستجو ( Search ) شیرپوینت از نا امن ترین جستجوهاست ! ممکن هر اطلاعاتی را به کاربر نمایش دهد ، همیشه زیرساخت جستجو را بررسی کرده و مطمئن شوید اطلاعات حساس در جستجوها به کاربر نمایش داده نمیشود !

Feature ها

در تمام نرم افزارهای کوچک و بزرگی که تولید میکنید ردپایی از Feature ها به چشم میخورد ، Feature ها به شما کمک میکنند تا نرم افزار را به قطعات کوچک تری تبدیل کرده و کنترل نرم افزار را بهتر در دست داشته باشید ، میتوانید Field ها ،  Content Type ها ، لیست ها ، مخازن اسناد ، فرایندها و هر چیز دیگری را در قالب Feature به شیرپوینت معرفی کنید ، این کار مزایای بسیار برای شما دارد و مهمترین آن استفاده از امکانات جدیدی است که در شیرپوینت 2010 برای Upgrade  کردن و نسخه گذاری Feature  ها اضافه گردیده .

همچنین باید این نکته را هم در نظر داشته باشید که هنگام فعال و غیرفعال کردن Feature ها میبایست پیش نیازها را چک کنید تا مشکلی در استفاده از آنها ایجاد نشود ، به طور مثال قبل از اینکه لیستی را فعال کنید که دارای ستون ها و Content Type هایی است که در Feature  های دیگری معرفی شده اند میبایست از فعال بودن Feature  های پیش نیاز اطمینان حاصل نمایید .

لیست یا دیتابیس

برای ذخیره داده ها از لیست استفاده کنیم یا دیتابیس ؟ هرکدام چه مزایا و معایبی دارند ؟ جواب این سوالات را در این قسمت میخواهیم بررسی کنیم ، ابتدا نگاهی به مزایا و معایب هر یک خواهیم انداخت .

لیست های شیرپوینت

  • پشتیبانی از اسناد ( Document Libraries )
  • یادآوری ها (Alerts )
  • فرایندها
  • امنیت
  • RSS
  • تعریف و پیاده سازی سریعتر

دیتابیس

  • تجمع
  • Transaction
  • کارایی و سرعت بیشتر
  • تناسب بیشتر
  • انعطاف پذیری بیشتر با کد

اما چه زمانی از لیست ها استفاده کنیم و چه زمانی از دیتابیس ؟

زمانی که نیاز است تا داده ها در دیتابیس ذخیره شوند میتوانید از راهکارهایی مثل لیست های خارجی ( External lists ) استفاده کنید .

زمانی از دیتابیس استفاده کنید که میخواهید داده هایی را بین سایت ها به اشتراک بگذارید و یا از کوئری های پیچیده استفاده کنید .

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

چند نکته مهم هم در ضمینه ایجاد لیست ها وجود دارد ، چه زمانی لیستی را در ریشه استفاده کنید و چه زمانی لیست هایی در سایت های مختلف ایجاد کنید .

زمانی که نیاز به اطلاعاتی در تمام سایت ها باشد ( بیشتر شبیه تنظیمات نرم افزار یا تنظیمات عمومی ) و یا استفاده از قابلیت های ثابت مثل نماها برای نمایش داده های در سایت های مختلف لیستی را در سایت ریشه قرار دهید .

اگر نیاز به امنیت منحصر به فرد برای لیست دارید و یا ممکن است لیست در هر سایت سفارشی سازی شود ( فیلد ها و یا نماهایی به آن اضافه شود ) در هر سایت لیستی بسازید .

نکته دیگر این است که با حذف هر سایت لیست های آن نیز حذف میشود ! این مسئله را دست کم نگیرید زیرا ممکن است تاثیر به سزایی بر کل نرم افزار شما بگذارد .

برای Sync  کردن داده های لیست با سایر لیست ها میتوانید از امکاناتی مثل ChangeLog یا آبجکت GetListItemsChanges استفاده کنید .

جریان های کاری در مقابل رویدادها

امکانات رویدادها :

  • پشتیبانی از Validation
  • کاهش سربار
  • سرعت اجرای بیشتر
  • محدودیت اجرای یک رویداد در یک زمان
  • پشتیبانی از لیست و عملیات سایت و تغییرات

امکانات جریان های کاری

  • پشتیبانی بهتر برای عملیات طولانی
  • انعطاف پذیری بیشتر در تغییرات
  • ارتباط و هماهنگی بیشتر با کارمندان ( ارسال ایمیل ، ایجاد وظیفه و ... )
  • قابل ایجاد و استفاده در سایت های متفاوت

بدون کد یا کدنویسی

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

بدون کد نویسی امکانات زیر در اختیار شما قرار دارد :

  • XML Definitions
  • استفاده از Ajax ، جاوا اسکریپت و Jquery
  • Silverlight
  • Re-Usable WorkflowS

امکانات Sandbox Solutions

  • Webparts
  • Workflow Actions
  • Infopath
  • Features
  • Events

امکانات Full Trust

  • Timer Jobs
  • Custom Field Types
  • Document Convertors
  • Central Administration Development
  • Service Applications

استفاده از امکانات No Code Solution یا بدون کد انعطاف در اجرا دارد ولی وابسته به امکانات پایه است که با استفاده از امکانات مثل Client Object Model  و Silverlight میتوانید ضعف های آن را بپوشانید. همچنین میتوانید از اسکریپت ها و Custom Master Page ها برای سفارشی کردن استفاده کنید . همچنین با استفاده از امکاناتی مثل XSLTListView و ContentEditorWebpart میتوانید صفحات و لیست ها را نیز سفارشی کنید .

استفاده از Sandbox Solution بسیار توسط مایکروسافت و برنامه نویسان حرفه ای پیشنهاد میشود زیرا میتواند بیشتر نیازهای شما را برآورده کند و همچنین نصب و پیاده سازی آن ساده تر بود و سربار زیادی برای سیستم ندارد ( در مورد Sandbox Solution در پست های بعدی مطالب بیشتر ارائه خواهم کرد )

اما تمام کدها و نیازهایی که یک برنامه نویس داشته باشد در پروژه های Full Trust قابل دسترس است و شما میبایست تصمیم بگیرید که چه زمانی از این 3 نوع راهکار استفاده کنید .

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

در آخر پیشنهاد میکنم پست های زیر را با دقت مطالعه کنید :

Developing Applications for SharePoint 2010

patterns & practices SharePoint Guidance

Application Lifecycle Management in SharePoint 2010

موفق و پیروز

اشتباهات رایج برنامه نویسی در شیرپوینت – قسمت اول
در این مقاله قصد دارم اشاره ای به برخی از  اشتباهات رایجی که در بین برنامه نویسان شیرپوینت وجود دارد ، داشته باشم . در این مقاله به صورت کوتاه به برخی از این موارد خواهم پرداخت و در مقالات بعدی به طور کامل در مورد آنها مطالبی را خدمت شما عزیزان ارائه خواهم کرد .
خطاهای Disposing
زمانی که شما با .Net  برنامه نویسی میکنی نگرانی در مورد آزاد کردن آبجکت ها از حافظه ندارید چون میدانید که Grabage Collector  بخوبی این وظیفه را برای شما انجام میدهد اما در مورد شیرپوینت کمی قضیه متفاوت است و شما میبایست حواستان به برخی از آبجکت ها در شیرپوینت باشد وگرنه باعث خطاهای بسیاری خواهند شد.
دو نوع از پرکاربردترین این آبجکت ها SPSite  و SPWeb  میباشد که تقریبا در تمام کدهایی که مینویسید از آن استفاده میکنید ، پیشنهادی که در مورد این آبجکت ها شده به کار بردن Using  در هنگام استفاده از این آبجکت هاست ولی در برخی از موارد همDispose  کردن این آبجکت ها مشکلاتی را برای بقیه قسمت های برنامه به وجود می آورد و شما باید متوجه باشید که چه هنگام میبایست این آبجکت ها را Dispose  کنید ، برای اطلاعات بیشتر در این ضمینه میتوانید به این لینک های زیر مراجعه کنید :
خطاهای دسترسی
یکی از بزرگترین چالش هایی که برنامه نویسان شیرپوینت با آن روبرو هستند خطاهای دسترسی است ، زمانی که شما وب پارتی مینویسید و یا کدی که میبایست به یک سری از لیست ها و یا مخازن اسناد دسترسی پیدا کند ، اگر کاربر دسترسی لازم برای این کار را نداشته باشد با خطاهای دسترسی مواجه میشود ، برای جلوگیری از این خطاها راه های متفاوتی وجود دارد ، به طور مثال استفاده از کلاس هایی مثل SPSecurity  یا WindowsIdentity و یا استفاده از SPUserToken  به شما کمک میکند تا از خطاهای احتمالی در این ضمینه جلوگیری کنید ،البته متدهای بسیاری در این ضمینه وجود دارد ولی معمول ترین آنها این سه روش است . برای اطلاعات بیشتر میتوانید به لینک های زیر مراجعه کنید :
عدم فراخوانی متد Update
همانطور که میدانید آبجکت مدل شیرپوینت امکاناتی را برای شما فراهم کرده که بتوانید به راحتی به تمام قسمت های شیرپوینت دسترسی داشته باشید ، این کلاس ها به شما کمک میکنند بتوانید اقدام به ایجاد ، بروز رسانی و یا حذف آبجکت هایی مثل وب ، لیست ، آیتم و ... کنید .
اما وقتی شما از این کلاس ها استفاده میکنید باید به خاطر داشته باشید که در اکثر مواقع پس از انجام تغییرات میبایست از متد Update استفاده کنید تا تغییرات مورد نظر شما اعمال شود ، برخی مواقع فراموش کردن این موضوع باعث سردرگمی خود شما خواهد شد زیرا به نظر شما همه چیز درست است ولی نکته اینجاست که بدون فراخوانی این متد هیچ اتفاقی نخواهد افتاد !
عدم استفاده از AllowUnsafeUpdates
تغییرات در شیرپوینت گاهی اوقات به صورت مستقیم بر روی دیتابیس اعمال میشود ، برخی مواقع این دسترسی به دیتابیس به صورت امن انجام نمیشود و اگر نیازمند این باشید که حتما این تغییر صورت گیرد باید از AllowUnsafeUpdates از کلاسSPWeb  استفاده کنید تا بتوانید تغییرات لازم را اعمال کنید . برای اطلاعات بیشتر میتوانید به این لینک مراجعه کنید .
جلوگیری از خطاهای زمان اجرا
یکی از مواردی که همیشه در هنگام برنامه نویسی در شیرپوینت باید به خاطر داشته باشید این است که خطاهایی که در زمان اجرا رخ میدهد بسیار زیاد است ! علت آن هم این است که شیرپوینت محصولی است که شما آنرا ننوشته اید و حتی اگر 100 درصد هم به کدی که نوشتید اطمینان داشته باشید همیشه عامل هایی وجود دارد که باعث خطا خواهد شد ، پس پیشنهاد میکنم حتما از امکاناتی مثل Try ،  Catch استفاده کنید تا درصد خطاهایی که در برنامه های شما به وجود می آید جلوگیری کنید .
موفق و پیروز باشید.
10 اشتباه رایج راهبران شیرپوینت
با سلام
در این پست قصد دارم به برخی از اشتباهات رایج بین راهبران شیرپوینت ( SharePoint Administrators  ) بپردازم که میتواند مشکلات بسیاری را برای سازمان به وجود آورد .
در سالهای اخیر شیرپوینت در کشور ما بسیار رایج شده ولی متاسفانه به دلیل اینکه به درستی نصب و پیاده سازی نمیشود همیشه مشکلات بسیار زیادی را به وجود می آورد که باعث شکست شیرپوینت در سازمان ها میشود .
اما یکی از مهمترین دلایلی که باعث بروز این مشکلات میشود این است که افراد غیرمتخصصی شروع به پیاده سازی آن میکنند که پس از گذشت مدتی با بزرگ شدن آن دچار مشکلات فراوانی میشوند ، نقش راهبران شیرپوینت در سازمان ها بسیار مهم است و این افراد هستند که با مدیریت صحیح باعث رشد شیرپوینت و افزایش بهره وری آن برای سازمان ها میشوند .
در این قسمت میخوام 10 مورد از اشتباهات رایج بین راهبران شیرپوینت را ذکر کنم تا از بروز آنها در سازمان ها کاسته شود .
 
1 -  نداشتن شیرپوینت در عنوان شغلی

 

یکی از مهمترین و رایج ترین اشتباهات در سازمان ارجاع دادن وظایف شیرپوینت به کسانی است که تخصص شیرپوینت ندارند .
واضح است که این یک قانون نیست که حتما باید دوره های لازم برای راهبری شیرپوینت را گذرانده باشید تا بتوانید آن را تحت تسلط خود بگیرید ، اما موضوع اینجاست که مدیران شبکه یک سازمان نمیتوانند یک شبه تمام مفاهیم شیرپوینت را آموزش ببینند . البته اشتباه برداشت نکنید ، مسلما مدیران سیستم و شبکه اطلاعات بسیاری در مورد شیرپوینت میتوانند داشته باشند با این وجود اگر در سازمان شما نقشی به عنوان راهبر یا توسعه دهنده شیرپوینت داده شد به شما پیشنهاد میکنم حتما از مدیر خود درخواستی برای گذراندن دوره های لازم را بدهید .
این یک محصول بزرگ و در عین حال ترسناک میباشد ، نباید اینگونه تصور کنید که یک وب سایت دیگر به مجموعه سایت های IIS  شما اضافه شده و میتوانید آن را به راحتی مدیریت کنید ، به خاطر داشته باشید که اگر شما مسئولیت این محصول بزرگ را در کنار سایر مسئولیت های که به عنوان مدیر شبکه و یا سیستم برعهده دارید قبول کنید در آینده خیلی نزدیک میبایست زمان های بسیاری را بر روی آن کار کنید و طولی نمیکشد که نیاز به کمک افراد دیگر پیدا میکنید .
 
2 – ایجاد بیش از حد Web Applications
 
حتما برای شما هم بارها پیش آمده که وقتی به مرکز مدیریت شیرپوینت مراجعه میکنید لیستی بلندی از Web Application  ها رو میتونید ببینید ، اما ایجاد بیش از حد Web Application  ها مشکلات بسیاری برای شما از لحاظ کنترل کردن و همچنین کارایی به وجود می آورد ، به شما پیشنهاد میکنم قبل از اینکه بخواهید تصمیم بگیرید برای هر واحد ، هر پروژه و یا قسمت های دیگر سازمان خود Web Application جدیدی ایجاد کنید خوب راجع به اینکار فکر کنید و تمام جوانب آن از جمله اینکه آیا واقعا نیاز است که Web application  جدیدی برای آن ایجاد شود را در نظر بگیرید . سعی کنید محدودیت هایی که در این ضمینه وجود دارد را در نظر بگیرید ( برای اطلاعات بیشتر در مورد محدودیت های شیرپوینت به این لینک مراجعه کنید )
 
3 – ایجاد تغییرات دستی در IIS
 
اگر امکانی برای شما در مرکز مدیریت شیرپوینت وجود دارد هیچوقت به صورت دستی تغییراتی در IIS  ایجاد نکنید !
شیرپوینت محصولی است که سعی میکند تمام اطلاعات تنظیمات مورد نیاز را در دیتابیس ذخیره کند به طور مثال تمام سایت ها و Web Application  ها ،  Alternate Access Mappings و Authentication Providers ، این کار از بروز بسیاری از مشکلات جلوگیری میکند .
اما گاهی اوقات مسائلی هست که حتما باید از طریق IIS  تنظیم شود مثل SSL Certification  و یا تنظیمات Logging  .
فقط به خاطر داشته باشید قبل از اینکه به ایجاد تغییرات در IIS  فکر کنید چک کنید که آیا امکاناتی برای این کار در مرکز مدیریت فراهم شده یا خیر .
 
4 – ناکامی در استفاده از پکیج های شیرپوینت
این مورد در واقع همپوشانی فضای بین راهبر سیستم و توسعه دهنده آن است .  وقتی که برنامه نویس شیرپوینت مجموعه ای از فایل هایی که تحت WSP پکیج نشده اند را به شما میدهد هیچوقت آن را در سرور نصب نکنید !
وقتی که شما تغییراتی را به صورت دستی در پوشه های شیرپوینت میدهید ممکن است با دنیایی از مشکلات روبرو شوید ، خطاهایی از جمله خطای دسترسی و یا عدم وجود فایل و یا تاثیر در کارایی و استفاده بی رویه از منابع سیستم از جمله این مشکلات میباشند .
سعی کنید هیچوقت DLL ، Feature  ، Solution  و یا هر فایل و پکیج دیگری را به صورت دستی در سرور نصب نکنید تا از بروز مشکلات بعدی جلوگیری کنید .


5 – نصب شیرپوینت در یک سرور به صورت مستقل

بیشتر راهبران شیرپوینت این اشتباه را مرتکب میشوند که شیرپوینت را بر روی یک سرور به صورت مستقل نصب میکنند تنها به این دلیل که نیازهای سازمان بسیار کم است و نیاز به سرورهای جداگانه و پیاده سازی به صورت فارم را ندارد !
نصب شیرپوینت در حالت مستقل ( Standalone  ) محدودیت های بسیار زیادی برای شما ایجاد خواهد کرد زیرا SQL Server Express محدودیت های بسیار برای شما به وجود خواهد آورد (برای اطلاعات بیشتر این پست را بخوانید )
هیچگاه تنظیمات پیشفرض را انتخاب نکنید ، قبلا از اینکه بر روی Next  کلیک کنید بیشتر در مورد آن فکر کنید تا در آینده مشکلات شما کمتر شود .

 

6 – استفاده از تنظیمات پیشفرض Content Database
 

 

راهبران شیرپوینت به صورت پیشفرض از محیط Central Administration  اقدام به ایجاد Content Database  میکنند ، با این کار زمانی که شیرپوینت شروع به استفاده از این Content Database  میکند SQL Server  با توجه به فضاهای پیشفرض از تاریخ گذشته و تنظیمات رشد ( Growth Settings ) محدود خواهد شد !
در واقع این حقیقت را در نظر بگیرید که با هر بار استفاده ،به ازای هر مگابایت Content Database  شما رشد خواهد کرد . به طور مثال  با آپلود یک فایل 10 مگابایتی Content Database  شما 10 برابر بزرگتر خواهد شد !!
به یاد داشته باشید که شیرپوینت برای دریافت ( Download  ) بهینه سازی شده است نه آپلود ! با بهینه سازی این تنظیمات میتوانید به افزایش کارایی و بهره وری در شیرپوینت برسید .( در پست های بعدی مطلب جامعی در مورد تنظیمات دیتابیس برای بهبود کارایی در شیرپوینت 2010 خواهم نوشت )

 

7 – عدم مستند سازی تنظیمات farm
 
شما یک برنامه زمان بندی مناسب برای ایجاد نسخه پشتیبان از شیرپوینت در SQL Server  ایجاد میکنید . این بدین معنی است که تمامfarm  شما امن است و به خوبی پشتیبانی میشود ؟ خیر !
یکی از اشتباهات متداول این است که شما تصور میکنید به راحتی میتوانید اقدام به Restore  کردن دیتابیس کنید ، این افسانه ایست که به طور کامل در این پست شرح داده شده است .
به طور خلاصه ، گرفتن یک نسخه پشتیبان کاربرپسند ، راحت و کامل از farm  بدون استفاده از ابزارهای جانبی امکان پذیرنیست و اگر شما این ابزارها رو ندارید حتما تنظیمات و امکانات نصب شده بر روی فارم خود مستند کنید تا از بروز مشکلات جلوگیری شود .

 

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

 

9 – PowerShell  تنها مختص برنامه نویسان نیست !

 

PowerShell  یکی از ابزارهای جدید در نسخه 2010 میباشد ، ممکن است در ابتدا این ابزار بسیار ترسناک جلوه کند ولی پس از کمی استفاده از آن متوجه میشوید که ابزاری فوق العاده کاربردی برای شما  میباشد .
با استفاده از این ابزار میتوانید به سرعت عملیات خود را انجام دهید ، سعی کنید زمانی را برای یادگیری این ابزار صرف کنید و مطمئنم که در زمان کوتاهی عاشق اون خواهید شد  . برای اطلاعات بیشتر در مورد مزایای powershell  به این پست نگاهی بیندازید .

 

10 – بی توجهی به توصیه های برنامه ریزی ظریفیت شیرپوینت
 
قبل از اینکه اقدام به ایجاد web application  ، مجموعه سایت ، لیست ، مخازن اسناد و یا هر ویژگی دیگری در شیرپوینت کنید محدودیت های آن را بررسی کنید تا با افزایش حجم مشکلی به وجود نیاورد ، بار دیگر به شما توصیه میکنم این مطلب را بخوانید قبل از اینکه تصمیمی در مورد ایجاد یک امکان در شیرپوینت بگیرید .
امیدوارم که این اطلاعات برای شما مفید بوده باشد ، در مقالات بعدی در مورد افزایش کارایی در شیرپوینت مطالبی را خدمت شما ارائه خواهم کرد .
موفق و پیروز باشید
 
منبع
وب پارت رایگان اوقات شرعی

با سلام و آرزوی قبولی طاعات و عبادات
به مناسبت فرا رسیدن ماه مبارک رمضان وب پارتی با نام اوقات شرعی تهیه کردم که میتوانید به صورت رایگان آنرا دریافت و نصب نمایید .
owghat.jpg

مراحل نصب :
1 – ابتدا فایل نصب را از سایت codeplex دریافت کنید .
2 – فایل setup.exe  را اجرا نمایید تا وب پارت نصب شود .
3 – پس از نصب به صفحه مورد نظر رفته و وب پارت را انتخاب کرده و به صفحه خود اضافه کنید .
موفق و پیروز باشید.
Posted: Saturday, August 06, 2011 7:04 PM توسط ramin | پيام 7
در زمینه:
راه اندازی Reporting Services در شیرپوینت 2010
با سلام خدمت دوستان عزیز
در این مقاله قصد دارم نحوه راه اندازی سرویس گزارش گیری یا همان Reporting Service  را خدمت شما ارائه دهم .
در ابتدا ما تنظیمات لازم در سرور دیتابیس را انجام خواهیم داد و سپس تنظیمات نهایی را در مرکز مدیریت شیرپوینت برای ارتباط با این سرویس انجام خواهیم داد .
تنظیمات سرور دیتابیس
 
اگر در هنگام نصب SQL Server  ویژگی Reporting Service  را فعال کرده اید میتوانید به مرحله بعد بروید در غیر اینصورت اولین مرحله نصب این سرویس میباشد ، فایل اجرایی نصب SQL Server 2008  را اجرا کرده و پس از گذراندن مراحل اولیه در صفحه Feature Selection  گزینهReporting Services  را فعال کنید و ادامه مراحل را طی کنید تا این سرویس نصب شود :

 

پس از نصب این سرویس ، Reporting Services Configuration Manager  را باز کنید :

به قسمت Web Services Url  بروید و بر روی URLs  کلیک کنید تا از صحت عملکرد وب سرویس مطمئن شوید :

 

پس از انجام مراحل بالا شما میتوانید به سرور شیرپوینت رفته و این سرویس را برای استفاده پیکربندی کنید .

 

تنظیمات سرور شیرپوینت

وارد سرور شیرپوینت شده و به مرکز مدیریت بروید ، به قسمت General Application Settings  رفته و بر روی Reporting Service Integration کلیک کنید :

نکته : اگر این گزینه در تنظیمات شما وجود ندارد Add-in  زیر را دریافت و بر روی سرور شیرپوینت خود نصب کنید :

SQL Server® 2008 R2 Reporting Services Add-in for Microsoft SharePoint® Technologies 2010

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

 

 

 

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

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

 

نمایش گزارشات در صفحات شیرپوینت

پس از تنظیمات بالا شما میتوانید گزارشات خود را در شیرپوینت نمایش دهید ، برای این کار ابتدا فایل گزارش خود را در یکی از مخازن اسناد شیرپوینت بارگزاری نمایید ، سپس یک صفحه جدید ساخته و یا به یکی از صفحات موجود رفته و بر روی ویرایش صفحه کلیک کنید ، سپس از قسمت Insert  گزینه WebPart  رو انتخاب کنید :

 

 

به گروه SQL Server Reporting  رفته و SQL Server Reporting Services Report Viewer  را انتخاب کنید :

 

سپس به قسمت Edit Webpart  بروید :

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

 

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

 

موفق و پیروز باشید .
 
سرویس پک 1 شیرپوینت منتشر شد !
با سلام
بالاخره انتظارها به پایان رسید و سرویس پک 1 شیرپوینت منتشر شد .
یک نکته مهم که باید توجه داشته باشید نصب  June 2011 Cumulative Update  بعد از نصب سرویس پک 1 میباشد ، این آپدیت چند باگ مهم امنیتی رو برطرف خواهد کرد . ( این آپدیت در پکیج سرویس پک 1 موجود نمیباشد )
 
برای نصب سرویس پک حتما این مطلب را بخوانید تا از مشکلاتی که در نصب و یا بعد از نصب ممکن است به وجود آید  مطلع شوید :
 
 http://support.microsoft.com/kb/2532126
 
برای اطلاعات بیشتر به این لینک مراجعه کنید :
http://sharepoint.microsoft.com/blog/Pages/BlogPost.aspx?pID=984
 
دریافت سرویس پک :
 

1. Service Pack 1 for SharePoint Foundation 2010

2. Service Pack 1 for SharePoint Foundation 2010 Language Pack (if applicable)

3. Service Pack 1 for SharePoint Server 2010

4. Service Pack 1 for SharePoint Server 2010 Language Pack (if applicable)

 

استراتژی های برای تبدیل شدن به یک برنامه نویس موفق !
 برنامه نویسی یکی از سخت ترین شغل های دنیاست ، آدم های زیادی قدم به کدنویسی میگذارند ولی بعد از مدتی سر از شغل دیگه ای در میاورند ،چون برنامه نویسی انگیزه ای بسیار بالا میخواهد . اگر شما تازه برنامه نویسی رو شروع کردید و یا فکر میکنید هنوز خیلی چیزها هست که باید یاد بگیرید تا آخر این مقاله رو بخونید ، سعی میکنم بیشتر تجاربی که در این چند سال در پروژه های مختلف و تدریس های خودم بدست آوردم در اختیار شما قرار بدم تا بتونید برنامه نویس بهتری باشید  .

داشتن پشتکار

یکی از خصلت های ویژه هر برنامه نویس موفقی داشتن عشق و علاقه به کدنویسی است که باعث میشه از پس هر کد و برنامه ای بربیاد ، برنامه نویس هیچ وقت از شکست ناامید نمیشه ، برنامه نویسان جزو معدود افرادی هستند که همیشه تو زندگی ریسک های زیادی میکنند چون همیشه از هر شکستی تجربه های گرانبهایی برای از نو بنا کردن بدست میارند ، در واقع اگر میخواهید برنامه نویس خوبی بشوید اول از همه باید بدونید که تو این راه هیچ وقت کدی که مینویسید کد نهایی شما نیست و باید بارها اون رو اصلاح کنید و یا حتی همه اون کدها رو پاک کنید و دوباره از نو شروع کنید ! گاهی وقتها پس از ماه ها کدنویسی متوجه میشید که راهی که رفتید اشتباه بوده و باید برگردید به نقطه شروع ، اگر چنین روحیه ای ندارید ممکنه در آینده به مشکلات زیادی برخورد کنید .

برای پیشرفت و پیروزی 3 چیز لازم است : اول پشتکار ، دوم پشتکار و سوم پشتکار ! لرد بایرون

همیشه با آخرین تکنولوژی پیش بروید

شاید تو کمتر شغلی این همه تغییر رو ببینید ، هر سال نسخه جدید ، تکنولوژی جدید ، ابزارهای جدید و راه های جدیدی معرفی میشوند و شما باید اطلاعات و دانش خودتون رو هر ساله ارتقاء بدید ، اگر اول راه باشید همیشه این مورد یکی از دغدغه های اصلی شما خواهد بود و فکر میکنید این راه پایانی ندارد و هر ساله باید چیزهایی که یاد گرفته بودید رو کنار بگذارید و اطلاعات جدیدی جایگزین کنید ، ولی این را به خاطر داشته باشید که بعد از چندین سال اگر به درستی و به موقع خود را بروز کنید دیگر لازم نیست همه اطلاعات خود را از نو بسازید ! جایی میرسید که با استفاده از همه تجربیاتی که بدست آوردید با سرعت بیشتری اطلاعات خود را ارتقاء میدهید پس نگران این موضوع نباشید و به خاطر داشته باشید که هرگز در یک نقطه توقف نکنید ، همیشه از ابزارهای جدید استقبال کنید و آنها را کمکی برای بهبود کار خود ببینید .

پس زمان رو از دست ندهید ، Silverlight  ، Jquery  ، AJAX  ، MVC  ، LINQ و .... برای بهبود کار شما ساخته شده اند ، اگر کمی از وقت خود را صرف یادگیری آنها کنید میتوانید برنامه نویس بهتری شوید .

 

محیط Code به جای Design

شاید شما هم جزو برنامه نویسانی باشید که بیشتر از محیط Design  استفاده میکنید و کمتر سراغ کدنویسی میروید ، این کار فقط مهارت کدنویسی شما رو کاهش میدهد و از شما برنامه نویسی خواهد ساخت که بدون ابزاری مثل ویژوال استودیو هیچ کاری نمیتوانید انجام دهد ، سعی کنید از محیط کد استفاده کنید و هرچند که برای شما سخت باشد تمام کنترل ها رو به خاطر بسپارید ، خصوصیات و متدهای آن ها را بشناسید تا حتی اگر یک Notepad  در اختیار شما قرار دادند بتوانید یک سایت تولید کنید !


Copy  ، Paste  ممنوع !

 ارسال ایمیل یا کوئری زدن به دیتابیس برای شما کدهای نامفهومی داره که به خاطر سپردنش سخته ؟

پس شما این کدها رو در جایی نگهداری میکنید و هر وقت به اونها احتیاج پیدا کردید در جای مربوطه قرار میدهید ؟

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

تکرار مادر یادگیریست ، آنتونی رابینز

 

گوگل بهترین دوست شماست !

خیلی وقت ها کسانی رو میبینم که برنامه نویسی میکنند ولی وقتی به مشکلی بر میخورند دست به دامان سایر برنامه نویسان و سایت های مختلفی میشوند که در نهایت هم هیچ جوابی نمیگیرند و وقتی از آنها میپرسی آیا در مورد مشکلت جستجو کرده ای ؟ میگویند جستجو .... !

شما دوستانی که در ابتدای راه هستید این را به خاطر داشته باشید که گوگل بهترین دوست شماست ، بهترین استادی که میتوانید ازش یاد بگیرید و مشکلاتتان را حل کنید . ( البته چون گوگل تو کشور و حتی جهان طرفدار بیشتری داره من اینجا از گوگل نام بردم ولی شما میتوانید از موتورهای جستجوی دیگری استفاده کنید ).

همیشه به خاطر داشته باشید آدم های زیادی هستند که دقیقا همین مشکلی که شما دارید رو داشته اند و همیشه کسانی هستند که راه کاری برای مشکل شما ارائه کرده باشند .

اگر به خطایی برخورد کردید کافیست همان خطا را در گوگل جستجو کنید تا نتایج را ببینید ، اگر احتیاج به کدی دارید فقط کافیست چند کلیدواژه رو در گوگل وارد کرده و زبان کد مورد نظر مثل VB  ، C#  ، جاوا اسکریپت و ... رو در انتهای آن وارد کنید تا به کدی که میخواهید برسید .

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

تحصیل کرده ها معمولا آن قدر سرگرم آموختن تفکرات دیگران هستند که خود وقت فکر کردن ندارند . ادوارد دبونو

برنامه های کدباز  ، بهترین منابع آموزشی

اگر میخواهید تو برنامه نویسی پیشرفت کنید برنامه های کدباز بهترین منابع آموزشی برای شما هستند ، این برنامه ها که در سایت های زیادی میتونید پیدا کنید مثل Codeplex  و یا Code Gallery  مایکروسافت میتواند ایده های خیلی خوبی برای کدنویسی به شما بدهند ، کافیست سورس برنامه ها رو به دقت مرور کنید و از کدهایی که برنامه نویسان حرفه ای تولید کرده اند بهره ببرید .

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

کار خود را تحلیل کنید

قبل از اینکه آستین های خود را برای کدنویسی بالا بزنید و بدون وقفه و نگاه کردن به زمان ساعت های زیادی مشغول کد نویسی شوید سعی کنید در مورد برنامه ای که میخواهید بنویسید تحقیق کنید ، از کارفرمای خود بپرسید از برنامه چه توقعاتی دارد  ، خروجی هایی که نیاز دارد چیست ؟

چند وقت پیش عکسی دیدم که کامل این موضوع رو نشون میده :

2.jpg
مش​اهده تصویر در سایز بزرگتر

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

 

 

 

 

اگر 10 ساعت زمان برای بریدن یک درخت داشته باشم ، 9 ساعت آن را صرف تیز کردن اره خواهم کرد ، ناشناس

مستندسازی

بعد از یک مدت طولانی به سراغ کدی میروید که قبلا آنرا نوشته اید ، هر چقدر کد را بالا و پایین میکنید قسمتی که میخواهید تغییر دهید را پیدا نمیکنید ! این اتفاق برای خیلی از برنامه نویس ها پیش می آید ، اما مشکل کجاست ؟

سعی کنید با مستند سازی کدهای خود ، هم خوانایی آن ها را بالا ببرید و هم پیدا کردن کدهای مورد نظر را راحت تر کنید ، شاید در ابتدای شروع یک پروژه به این فکر کنید که من برنامه را نوشتم و از آن سردر میاورم و احتیاجی به مستندسازی نیست ولی هر چقدر جلوتر میروید ، گوگلینگ شما بیشتر شده ، از کدهایی استفاده میکنید که بعضا فقط برای پیش بردن پروژه از آنها استفاده میکنید بدون اینکه آنها را بررسی کرده باشید و در آینده مشکلات بسیاری برای شما به وجود می آورد . مقالات زیر میتواند کمک بیشتری به شما برای مستندسازی کدهایتان کنند :

10 Minutes to document your code

C# Documenting and Commenting

Documenting VB.NET source code with XML Comments

یادتان باشد مستندسازی زمان زیادی از شما نمیگرد ، اما زمان های آینده شما را خریداری میکند !

مشتری شما یک برنامه نویس نیست !

میدونم که شما برنامه نویس هستید نه یک طراح ! اما حتی خیلی از برنامه نویسان خارجی هم طراحی برنامه و صفحات وب خود را به تنهایی انجام میدهند ، مشتری تنها ظاهر را مشاهده میکند و خبر ندارد پشت این طراحی چه کدهایی نوشته شده و چقدر زمان صرف شده ، اگر طراحی شما ضعیف باشد تمام زحمات شما را خراب خواهد کرد . به نظر شما کاربر با دیدن چنین فرمی چه عکس العملی نشون میده :

3.png

سعی کنید اندازه کنترل ها رو بر اساس نیاز آنها طراحی کنید ، اگر قراره در یک کادر یک عدد 4 رقمی نوشته بشه یک Textbox  با طول 100 کاراکتر قرار ندهید ! یا اگر فرم شما کنترهای بسیاری را شامل میشود سعی کنید آن را در 2 صفحه و با ظاهر بهتری پیاده سازی کنید .

یادتان باشد ظاهر از کدی که مینویسید مهتر است !

Don’t design like a programmer

اعتبارسنجی کنید

یکی از مواردی که بیشتر برنامه نویسان رعایت نمیکنند اعتبار سنجی کنترلهای درون فرم هاست ، کاربر بجای وارد کردن عدد یک متن را وارد میکند ، دکمه تایید را کلیک میکند و .....

فکر کنم خودتان میدانید چه اتفاقی می افتد ، با خطایی مواجه میشود که حس بدبینی او را نسبت به برنامه بر می انگیزد !

4.gif

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

همچنین سعی کنید به جای نمایش صفحات عجیب و غریب خطا که به کاربر نمایش داده میشود صفحات و یا فرم هایی را طراحی کنید که کاربر به آن منتقل شود و با یک پیغام مناسب روبرو شود تا اطلاعاتی در مورد خطایی که فقط خود شما میفهمید !

5.jpg
در لینک های زیر میتوانید انواعی از صفحات جالب طراحی شده برای این منظور را مشاهده کنید :

404 Error Pages, One More Time

49 Nice And Creative Error Pages

همچنین سعی کنید از بلاک های Try  ، Catch  ،  Finally  در کدهای خود استفاده کنید تا بتوانید در هنگام رخ دادن خطا عکس العمل مناسبی انجام دهید و پیام درستی به کاربر نشان دهید .

try-catch-finally

try-catch

از استانداردها استفاده کنید

 

آیا با معماری چند لایه آشنا هستید ؟

 آیا چیزی در مورد Design Pattern  ها شنیده اید ؟

آیا میدانید به جای نوشتن Store Procedure  ها طولانی میتوانید از LINQ  استفاده کنید ؟

و ..........

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

توانایی های خود را محک بزنید

حتما تصور میکنید برنامه نویس بسیار مسلط و حرفه ای هستید ؟ یا فکر میکنید تو شهر خود جزو 10 نفر اول هستید و یا حتی از همه بهترید ؟

خوب این خیلی خوبه که اعتماد به نفس به این بالایی دارید ، در اولین فرصت کمی از کدنویسی کردن خود را خارج کنید ، کمی ریلکس شوید ، فکر خود را از هرگونه کدهای زاءد رها کنید ، خوب حالا زمان آن رسیده که به فکر گرفتن یک مدرک تخصصی و یا بین المللی باشید ، به یکی از موسسات برگزار کننده آزمون بروید و سطح مهارت خود را بسنجید ، با آزمون هایی که میدهید میتوانید از سطح مهارت خود مطلع شوید و ببینید در کجاها ضعف دارید . همچنین سایت های بسیار زیادی هستند که گنجینه ای از سوالات هستند که میتوانید از آنها استفاده کنید برای محک زدن خود .

سعی کنید با افراد متخصص بیشتر در ارتباط باشید و یا در محیطی کار کنید که افراد متخصصی در آن مشغول به کار هستند ، اینکار به شما کمک میکند سطح توانایی های خود را بالا ببرید و از تجربیات انها برای پیشرفت خود استفاده کنید . طبق آمارهای جهانی هر شخص هر 3 یا 4 سال محل کار خود را تغییر میدهد که این رقم در حال کاهشه ! سعی کنید در یک شرکت سال ها وقت خود را هدر ندهید و تبدیل به فسیل سازمانی نشوید ! یک برنامه نویس باید همیشه خود را به روز نگه دارد ، اگر شرکت شما مایل به ارتقا نیست و از همان روش های سنتی استفاده میکند بهتره به فکر شرکت جدید برای خود باشید !

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

در آخر میخواهم جمله ای خدمت شما عرض کنم که 2 سال پیش در کتابی خوندم و واقعا تو پیشرفت به من کمک بسیار زیادی کرد :

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

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

موفق و پیروز باشید.


مقایسه نسخه های مختلف شیرپوینت 2010

با سلام

در این پست قصد دارم تفاوت بین نسخه های مختلف شیرپوینت 2010 را تشریح کنم .

شیرپوینت 2010 در 3 نسخه عرضه شده است :

 

  • SharePoint 2010 Foundation
  • SharePoint Server 2010 Standard
  • SharePoint Server 2010 Enterprise​
SP 2010 Logo.png

مهمترین تفاوتی که بین نسخه های مختلف شیرپوینت وجود داره رایگان بودن نسخه Foundation میباشد که بستری است برای تولید نرم افزار و راهکارهای تحت وب و دو نسخه دیگر دارای لیسانس بوده و برای استفاده از آنها می بایست بهای لیسانس رو بپردازید .
اما امکاناتی که این سه نسخه دارند با یکدیگر متفاوته که اگر بخواهیم مقایسه ای بین این امکانات داشته باشیم میتونیم اونها رو به 4 دسته سرویس ها ، قالب های سایت ، امکانات مجموعه سایت و امکانات سایت تقسیم نماییم که در زیر امکانات هر یک را میتوانید مشاهده نمایید :
 
SharePoint 2010 Foundation
 
سرویس ها

  • ​BCS
  • User and Health
  • Security Token Service (STS)
  • Claims to Windows Token Service
  • Application Discovery and Load Balancer Service
  • Subscription Settings Service
  • Sandboxed Code Service
  • SharePoint Foundation Search Service
  • Workflow Timer Service
  • State Service 
قالب های سایت

  • ​Team
  • Blank
  • Document Workspace
  • Blog
  • Group Work Site
  • Basic Meeting Workspace
  • Blank Meeting Workspace
  • Decision Meeting Workspace
  • Social Meeting Workspace
  • Multipage Meeting Workspace 
امکانات مجموعه سایت

  • ​Custom Site Collection Help
  • Open Documents in Client Applications by Default
  • Report Server Integration Feature
  • Three-state Workflow 
امکانات سایت 

  • ​Group Work Lists
  • Report Server File Synch
  • Team Collaboration Lists
  • Wiki Page Home Page 
​SharePoint Server 2010 Standard
 
 سرویس ها

  • ​Managed Metadata Service
  • Secure Store Service
  • Word Automation Service
  • User Profile Service
  • Web Analytics Service​  
قالب های سایت 

  • ​Records Center
  • Enterprise Search Center
  • My Site Host
  • Basic Search Center
  • Publishing Portal
  • Enterprise Wiki 
امکانات مجموعه سایت

  • ​SharePoint Server Standard Site Collection Features
  • SharePoint Server Publishing Infrastructure
  • Publishing approval Workflow
  • Content Type Syndication Hub
  • Disposition Approval Workflow
  • Document ID Service
  • Document Sets
  • In Place Records Management
  • Library and Folder Based Retention
  • Reporting
  • Search Server Web Parts
  • Workflows
  • SharePoint 2007 Workflows 
امکانات سایت

  • ​SharePoint Server Standard Site Features
  • SharePoint Server
  • Content Organizer
  • E-mail integration with Content Organizer
  • Hold and eDiscovery
  • Metadata Navigation and Filtering
  • Offline Synchronization for External Lists 
SharePoint Server 2010 Enterprise

سرویس ها

  • ​Access Service
  • Excel Service
  • PerformancePoint Service
  • Visio Graphics Service
  • Lotus Notes Connector Service
  • Application Registry Service 
قالب های سایت

  • ​​Business Intelligence Center
  • FAST Search Center
  • Visio Process Repository 
امکانات مجموعه سایت

  • ​​SharePoint Server Enterprise Site Collection Features
  • Performance Point Service Site Collection Features 
امکانات سایت

  • ​SharePoint Server Enterprise Site Features
 
نسخه Foundation  بیشتر امکانات لازم برای پیاده سازی یک راهکار تحت وب را دارا میباشد و حتی برای تولید نرم افزارها و یا سرویس های تحت شیرپوینت نیز میتوانید از این نسخه استفاده نمایید ولی اگر در شرکتی هستید که نیاز به سرویس های پیشرفته تر دارید میتوانید یکی از نسخه های استاندارد و یا سازمانی را برای سازمان خود انتخاب نمایید .

موفق و پیروز باشید.
 
ستون وضعیت پیشرفت
با سلام
فیلد نمایشگر وضعیت پیشرفت در واقع نوع توسعه یافته ای از فیلد عددی شیرپوینت می باشد و به کاربران این امکان را می دهد تا نمایی از میزان پیشرفت مورد را به صورت یک سیلندر مشاهده نمایند. این فیلد به شما امکان ایجاد نماهای مناسب را به خصوص در زمان تخصیص وظایف و موارد مشابه که نیاز به ثبت درصد تکمیل دارند می دهد. 
موفق و پیروز باشید
فارسی ساز رایگان شیرپوینت 2010 !
 با سلام خدمت دوستان عزیز

 شما میتوانید فارسی ساز شیرپوینت 2010 نسخه foundation  را از لینک زیر دریافت کنید :
با توجه به اینکه برای تولید این پکیج زحمات زیادی کشیده شده خواهشمندیم حق کپی رایت را رعایت فرمایید .
دریافت رایگان فارسی ساز شیرپوینت 2010 

 
 
فارسی ساز شیرپوینت 2010
 
فارسی ساز شیرپوینت 2010
 
فارسی ساز شیرپوینت 2010
 
دانلود فارسی ساز شیرپوینت 2010
 
موفق و پیروز باشید .
وب پارت نکته روز برای شیرپوینت 2010
 با سلام
با توجه به اینکه تقاضاهای زیادی برای این وب پارت برای شیرپوینت 2010 وجود داشت تصمیم گرفتم نسخه ای برای شیرپوینت 2010 ایجاد کنم که البته در این نسخه علاوه بر دو زبانه بودن وب پارت شما میتوانید رنگ وب پارت رو هم به دلخواه تنظیم نمایید .
 
quotes webpart
 
quotes webpart
 
نکته روز
 
نکته روز
 
لطفا بعد از دریافت و نصب ، به central administration رفته و بر روی system setting از سمت چپ کلیک کنید ، سپس بر روی manage farm solutions  کلیک کرده و  vistarayan.webparts.wsp را deploy نمایید.
 
نکته : شما میتوانید نکته های مورد نظر خود را در لیست Quotes  وارد نمایید ، توجه کنید که برای نکته های فارسی language را بر روی fa  و برای نکته های انگلیسی language  را بر روی en تنظیم کنید .
 
 
با تشکر
رامین احمدی
افزایش سرعت و کارایی برنامه نویسی در شرپوینت ( بخش چهارم )
 

با سلام خدمت دوستان و همراهان عزیز و گرامی .

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

در مقاله امروز زیاد با برنامه نویسی کاری نداریم و نحوه بهینه سازی محتوای صفحات شرپوینت قبل از ارسال به مرورگر را بررسی خواهیم کرد( admin  های عزیز شرپوینت حتما این مقاله را بخوانند ! ) ، در بیشتر موارد این کار بین 50 تا 80 درصد کاهش ترافیک و تقریبا 30 درصد افزایش سرعت را در بر خواهد داشت !

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

1 – فعال کردن Blob Caching

2 – فعال کردن فشرده سازی ( بیشتر برنامه نویسان دات نت خوب با این موضوع آشنایی دارند )

 

-  فعال کردن Blob Caching

Blob یا Binary Large Objects Cache  یکی از مهمترین امکانات برای کش کردن آبکجت هایی مثل تصاویر ، صداها و ویدئو ها می باشد که این اطلاعات را یکبار از دیتابیس فراخوانی کرده و بر روی سرور و یا کلاینت ذخیره میکند ، در واقع Blob Caching  توانایی انجام کارهای زیر را دارد :

1-  ذخیره آبجکت ها بر روی هارد دیسک سرور ( به منظور کاهش فراخوانی های دیتابیس )

2- کش کردن آیتم ها در کلاینت ( برای کاهش درخواست ها به سرور )

اما چطور میتونیم این امکان رو در شرپوینت فعال کنیم ؟

ابتدا یک کپی از فایل Web.config   سایت مورد نظر بگیرید و سپس آن را باز کنید و در قسمت configSections به دنبال <sectionGroup name="SharePoint"> بگردید ، و در این تگ و قبل از بسته شدن آن تگ زیر را وارد کنید ( البته اگر این تگ وجود داشت این مرحله را نادیده گرفته و به مرحله بعدی بروید ) :

<section name="BlobCache" type="System.Configuration.SingleTagSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089″ />

سپس به دنبال تگ BlobCache  بگردید ، BlobCach  به صورت پیش فرض غیرفعال می باشد و برای فعال کردن ان شما می بایست مقدار Enable  را به True  تغییر دهید :

<BlobCache location="C:\blobCache" path="\.(gif|jpg|png|css|js)$" maxSize="10" max-age="86400" enabled="true"/>

 

Location  محل ذخیره سازی فایل های کش شده می باشد .

Path  فیلتری است برای مشخص کردن فایل هایی که می خواهید کش شوند .

maxSize مقدار فضایی است که میخواهید برای کش کردن اطلاعات اختصاص دهید ( به گیگابایت ) .

Max-age  : ماکسیمم زمانی است که مرورگر کلاینت اطلاعات کش شده را دریافت میکند ( به ثانیه )

Enable  برای فعال و یا غیرفعال کردن این ویژگی به کار میرود .

- فعال کردن فشرده سازی

فشرده سازی یکی از امکانات بسیار خوب IIS  نسخه 6 می باشد که به صورت پیش فرض غیر فعال است .

با فعال کردن فشرده سازی IIS  فقط فایل های زیر را میتواند فشرده سازی کند :

- فایل های استاتیک مثل HTM ، CSS  ، txt

- فایل های داینامیک مثل asp ، dll  و یا exe

به خاطر داشته باشید که شرپوینت هم فایل های استاتیک و هم فایل های داینامیک را رندر میکند ، تقریبا تمام فایل هایی که از _Layouts  و _Vti_bin  رندر می شوند استاتیک هستند . تمام فایل هایی که در ریشه قرار دارند داینامیک هستند و با فعال کردن فشرده سازی ، این امکان برای فایل های استاتیک و داینامیک در شرپوینت فعال می شود .

قبل از اینکه این امکان را فعال کنیدحتما یک نسخه پشتیبان از سایت خود بگیرید ، Command Prompt  را باز کنید و به آدرس به systemdrive%\inetpub\AdminScripts تغییر دهید .

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

  • CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/GZIP/HcFileExtensions "css" "htc" "htm" "html" "js" "txt"
  • CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/DEFLATE/HcFileExtensions "css" "htc" "htm" "html" "js" "txt"

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

  • CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/DEFLATE/HcScriptFileExtensions "asp" "asmx" "aspx" "dll"
  • CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/GZIP/HcScriptFileExtensions "asp" "asmx" "aspx" "dll"

در برخی موارد اضافه کردن فایل های dll  ممکن است کارایی شما را کاهش دهد ، برای درک بهتر مفهوم فشرده سازی و استفاده بهتر از آن پیشنهاد میکنم مقالات Analyzing the use of HTTP compression و Things to consider  را مطالعه کنید .

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

  • CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/GZIP/HcDynamicCompressionLevel "9"
  • CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/DEFLATE/HcDynamicCompressionLevel "9"

مقدار فشرده سازی بین 0 تا 10 است ( به صورت پیش فرض 0 می باشد ) ، اگر میزان آنرا بر روی مقادیر کمتر تعیین کنید منابع پردازنده و حافظه کمتر اشغال می شوند و اگر بر روی مقادیر بالا تنظیم شود میزان استفاده از پردازنده و حافظه بیشتر میشوند و فایل های کوچک نیز فشرده میشوند در حالی که در مقادیر پایین تر بیشتر فایلهای بزرگ فشرده سازی میشوند .

و در آخرین مرحله می بایست دستور IISReset  را اجرا کنید .

اگر مشکلی با دریافت فایلهای Zip  در شرپوینت به وجود آمد میتوانید این راهنما را بخوانید .

- اصلاح MasterPage  و Page Layouts  

این کار کمی سخت تر و زمان گیر تر میباشد اما نتایج بسیار مثبتی دارد ، آیا تاکنون به وجود تعداد بسیار زیاد آیکون ها توجه کرده اید ؟ شما می بایست فایل های اضافی Layouts  را پاک کنید ، در گوگل به دنبال عباراتی مثل page speed و yslow بگردید و بینید در مقالاتی که مطرح شده چه کارهایی را انجام دادند ، به طور مثال کارهایی که میتوانید در طراحی مجدد صفحات انجام دهید شامل موارد زیر است :

- پاک کردن وب پارت های مخفی از صفحات ( بعضی از صفحات ممکن است بیش از 20 مگابایت اطلاعات را لود کنند ! و این ممکن است به شدت کارایی شرپوینت را کاهش دهد )

- حذف وب پارت مدیریت محتوا ( content editor webpart  ) – در این مقاله میتوانید دلیل آن را بخوانید .

- تعداد master Page  های سایت خود را به 1 کاهش دهید ( بله ، این نکته هم بسیار تاثیر گذار است ، مخصوصا در سایت های اینترنتی )

اما نتایجی که شما بعد از عملیات 1 و 2 ( به جز مورد آخر ) به دست می آورید شبیه این موارد خواهد بود :

 

Original

Optimised

Improvement

Request Count

32

5

84%

Bytes Sent

16,969

3,360

80%

Bytes Received

172,899

31,223

82%

Aggregate Session time

00:00:01:4420

00:00:00:9213

36%

 

منابع و مقالات مرتبط :

msdn.microsoft.com/en-us/library/ms533020(VS.85).aspx#Use_Cache-Control_Extensions

blog.thekid.me.uk/archive/2007/07/17/speed-up-your-sharepoint-site-using-cache-control.aspx

www.bluedoglimited.com/SharePointThoughts/ViewPost.aspx?ID=63

msdn.microsoft.com/en-us/library/bb727371.aspx

http://weblogs.asp.net/hiransalvi/archive/2008/02/10/configuring-blob-caching-for-sharepoint-web-application.aspx

http://blogs.msdn.com/ecm/archive/2006/11/08/how-to-make-your-moss-2007-web-site-faster-with-caching.aspx

http://msdn.microsoft.com/en-us/library/aa604896.aspx

 

منتظر نظرات شما هستم .

موفق و پیروز باشید
Backup و Restore از طریق آبجکت مدل
 

با سلام خدمت دوستان عزیز و گرامی

امروز میخواهم برای شما مطالبی در مورد Backup  و Restore  از طریق آبجکت مدل شرپوینت ارائه کنم .

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

- استفاده از امکانات Backup  و Restore  موجود در Central Administration

- استفاده از stsadm  و دستور backup و Restore

- استفاده از شرپوینت دیزاینر و امکاناتی که در این نرم افزار برای Backup  و Restore  در نظر گرفته شده

در هر کدام از موارد بالا محدودیت ها و مشکلاتی در پیشروی شما قرار دارد ، به عنوان مثال با استفاده از امکانات Central Administration  شما نمیتوانید از سایت ها و وب ها به صورت  تکی نسخه پشتیبان تهیه کنید و حتما میبایست یک Web Application  را به صورت کامل backup  بگیرید .

یا در استفاده از دستورات stsadm  مشکلاتی در ضمینه حجم backup  گیری وجود دارد که شما نمیتوانید سایتی که بیش از 15 گیگابایت حجم داشته باشد را backup  بگیرید و یا اگر از سرویس پک 2 استفاده میکنید باید از  setsitelock استفاده کنید که در این صورت سایت شما تا انتهای عملیات به صورت فقط خواندنی تغییر خواهد یافت ، در ضمن Alert  و فرایند ها نیز در Backup  گیری نادیده گرفته می شوند ! و برای Restore  کردن هم مشکلات زیادی وجود خواهد داشت .

با استفاده از شرپوینت دیزاینر هم میتوانید عملیات Backup  و Restore  را انجام دهید که البته مشکلات کمتری هم نسبت به دو مورد بالا دارد ( البته بسیار عجیب است که این امکانات در شرپوینت دیزاینر 2010 حذف شده ! )

اما شما میتوانید از کلاسهای SPExport  و SPImport  نیز استفاده کنید ، این دو کلاس در فضای نام Microsoft.SharePoint.Deployment قرار دارد . این کلاس های به صورت پیش فرض توابعی را برای گرفتن Backup  و Restore  از سایت ، وب ، لیستها و بیشتر آبجکت های موجود در شرپوینت در خود دارند .

به مثال زیر توجه کنید :

SPExportSettings settings = new SPExportSettings();

settings.FileLocation = @"C:\SPBackup";

settings.SiteUrl = "http://myServer/mySite";

settings.FileCompression = true;

settings.OverwriteExistingDataFile = true;

settings.BaseFileName = "export";

SPExport export = new SPExport(settings);

export.Run();

برای تنظیمات مربوط به Backup  ما از کلاس SPExportSettings  استفاده میکنیم ، با اجرای کد بالا فایلی با نام export.cmp  در c:\SPBackup  ایجاد میشود که در واقع از سایتی با آدرس http:/myServer/mySite  یک نسخه پشتیبان گرفته میشود . با استفاده از FileCompression از تکنیکهای فشرده سازی نیز برای backup  استفاده میشود ، OverwriteExistingDataFile مشخص میکند که اگر فایلی با این وجود داشته باشد فایل جدید را جایگزین فایل قبلی کند و سایر تنظیمات مثل FileLocation  ، SiteUrl  و BaseFileName  نیز به ترتیب مشخص کننده محل ذخیره فایل Backup ، آدرس سایت و نام فایل می باشد .

در مثال زیر ما با استفاده از کلاس SPImport  سایتی را که از آن نسخه پشتیبان تهیه کرده بودیم ، Restore  میکنیم :

SPImportSettings settings = new SPImportSettings();

settings.FileLocation = @"C:\SPBackup";

settings.BaseFileName = "export";

SPImport import = new SPImport(settings);

import.Run();

در این مثال هم پارامترهای یکسانی برای تنظیمات نحوه Restore  وجود دارد ، اما تنظیمات دیگری هم برای این 2 کلاس وجود دارد ، مانند CommandLineVerbose که اگر مقدار True  داشته باشد مراحل اجرا را در کنسول به شما نمایش می دهد ، در واقع در این مثال ما از تنظیمات پیش فرض استفاده کردیم ، شما میتوانید با توجه به نیازهای خود این تنظیمات را اعمال کنید .

موفق و پیروز باشید .

افزایش سرعت و کارایی برنامه نویسی در شرپوینت ( بخش سوم )
 

با سلام

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

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

ASP.Net  یا شرپوینت ؟

برای ایجاد وب پارت شما 2 انتخاب متفاوت دارید ، وب پارت ASP.Net  و وب پارت شرپوینت !

اولی از فضای نام System.Web.UI.WebControls.WebParts استفاده میکند و دومی از فضای نام Microsoft.SharePoint.WebPartPages .

در واقع وب پارت های شرپوینت از زیر ساخت وب پارت های ASP.Net  به ارث میبرند که در شکل زیر کاملا مشخص شده است :

 

چه موقع از وب پارت های ASP.Net  استفاده می کنیم ؟

یکی از مهمترین مزیت هایی که این وب پارت ها برای ما دارند این است که شما میتوانید آنها را در پروژه های دات نت نیز به کار ببرید در واقع با یک تیر دو نشان بزنید . این مورد بیشتر زمانی استفاده می شود که شما بخواهید از وب پارتی که ایجاد میکنید برای مقاصد تجاری استفاده کنید و آن را محدود به شرپوینت نکنید . یکی دیگر از موارد استفده هنگامی است که میخواهید از این وب پارت برای کارهای ساده مثل کار با داده های لیست ها و سایر کامپوننت ها و امکانات شرپوینت استفاده کنید ، وقتی شما با استفاده از ویژوال استودیو و ابزار Visual Studio Extension for sharepoint  اقدام به ایجاد وب پارت میکنید به صورت پیش فرض از کلاس System.Web.UI.WebControls.WebParts استفاده میکند .

چه موقع از وب پارت های شرپوینت استفاده می کنیم ؟

این نوع وب پارت ها که به نوعی از کلاس System.Web.UI.WebControls.WebParts به ارث برده می شوند البته همراه با قابلیت هایی که به آن اضافه گردیده برای شما امکانات بیشتری را فراهم میکند و در موارد زیر از این نوع وب پارت ها استفاده میکنیم :

·         ارتباط بین وب پارت ها خارج از Webpart Zone

·         وب پارت هایی که فقط قابلیت اجرا در محیط شرپوینت را داشته باشند .

·         استفاده از ارتباطات کلاینت

·         استفاده از زیرساختهای کش کردن اطلاعات

کش کردن اطلاعات

اما مهمترین موضوع مورد بحث ما در مورد کش کردن اطلاعات در وب پارت ها می باشد ، موضوعی که کمتر به آن اهمیت داده می شود و در برخی از موارد مشاهده شده که علت اصلی کند شدن سیستم و گذاشتن بار زیاد بر روی سرور می باشد .

فرض کنید وب پارتی را طراحی کرده اید که به طور مثال تمام وظایف یک شخص را در سطح فارم جمع آوری کرده و در وب پارت نمایش می دهد ، با فرض این مسئله متوجه خواهید شد که با هر بار لود شدن صفحه چه باری بر روی سرور گذاشته خواهد شد ؟

اما راه حل این موضوع استفاده از استراتژی های کش کردن اطلاعات برای افزایش کارایی می باشد .

اما راه های مختلفی برای استفاده از این امکانات وجود دارد ، یکی از این موارد استفاده از Output Cache می باشد که میتوانید آنرا در فایل Master Page  قرار دهید تا برای تمام صفحات اعمال شود .

راه دیگر استفاده از کد در وب پارت با استفاده از آبجکت System.Web.Caching.Cache می باشد که در مورد این موضوع صحبت خواهیم کرد .

توابعی که برای کش کردن داده ها در اختیار شما قرار داده شده است شامل PartCacheRead ، PartCacheWrite و PartCacheInvalidate می باشد که به ترتیب برای خواندن داده ها از کش ، نوشتن بر روی آن و حذف اطلاعات از کش استفاده می شود .

در این قسمت ما وب پارتی ایجاد کرده و کدهای زیر را در قسمت Page Init  وارد می کنیم :

if (this.PartCacheRead(Storage.Shared, "MyKey") == null)

{

    this.PartCacheWrite(Storage.Shared, "MyKey", DateTime.Now.ToLongTimeString(), TimeSpan.FromSeconds(10));

}

 

در این مثال ما ابتدا چک میکنیم که درون کش مقداری ذخیره شده است یا خیر و اگر نباشد مقدار مورد نظر خود را درون کش ذخیره میکنیم .

متد PartCacheRead 2 پارامتر دارد که شامل موارد زیر است :

Storage  : این پارمتر شامل سه مقدار Shared  ، Personal  و None  می باشد که به ترتیب مقدار کش را برای همه کاربران ، به ازای هر کاربر و هیچ بر می پرگرداند که در مثال بالا مقدار کشی که برای همه کاربران ذخیره شده و به نوعی حالت عمومی دارد را در اختیار ما قرار میدهد .

Key   : نام مقداری که درون کش ذخیره شده و باید فراخوانی شود .

با استفاده متد PartCacheWrite نیز مقدار دلخواه خود را در کش قرار میدهیم که شامل 4 پارامتر می باشد ، پارامترهایStorage  و Key  مانند متد PartCacheRead می باشد ، علاوه بر این دو متد ، متدهای دیگر این متد عبارتند از :

Value  : آبجکتی است که میخواهیم درون کش ذخیره کنیم که از نوع System.Object  میباشد .

TimeOut  : زمانی بر اساس system.TimeSpan  میباشد که بازه زمانی که مقدار کش به روز میشود را مشخص میکند .

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

اما اگر بخواهید در بین زمان تعیین شده اطلاعات را به روز کنید چه ؟ فرض کنید قسمتی را در وب پارت خود در نظر گرفته اید که کاربر علاوه بر اینکه وظایف خود را میبیند بتواند وظیفه ی جدیدی از طریق وب پارت شما ایجاد کند و پس از ایجاد بتواند آن را در لیست وظایف خود ببیند ، برای این کار شما کافیست در قسمتی که میخواهید اطلاعات به روز شوند از متد PartCacheInvalidate استفاده کنید ، این متد نیز از دو پارامتر Storage  و Key  تشکیل می شود :

void Button1_Click(object sender, EventArgs e)

{

    this.PartCacheInvalidate(Storage.Shared, "MyKey");

}

 

پس از اجرای این متد مقدار MyKey  از بین رفته و با اطلاعات جدید به روز می شود .

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

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

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

Best Practices for Developing Web Parts for SharePoint Products and Technologies

Checklist for Testing SharePoint Web Parts

امیدوارم این مقاله برای شما مفید بوده باشه .

موفق و پیروز باشید .

پست هاي بيشتر صفحه بعدي »