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

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

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

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

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

در مقاله امروز زیاد با برنامه نویسی کاری نداریم و نحوه بهینه سازی محتوای صفحات شرپوینت قبل از ارسال به مرورگر را بررسی خواهیم کرد( 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

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

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

Drag and Drop Upload
 

با سلام

امروز میخوام کمی در مورد امکانات جالب آفیس 2010 صحبت کنم .

یکی از امکانات جالبی که پس از نصب آفیس 2010 ملاحظه خواهید کرد امکان آپلود اسناد به صورت Drag and Drop  می باشد ، جالب است بدانید این امکان بر روی شرپوینت 2007 نیز قابل استفاده می باشد .

به مخزن اسناد مورد نظر رفته و سپس بارگزاری چندین سند را انتخاب کنید ، همانطور که در شکل زیر ملاحظه میکنید شکل این صفحه تغییر پیدا کرده :

حال  اسناد خود را به داخل صفحه Drag  کنید :

پس از تایید ملاحظه خواهید کرد که این پنل با استفاده از Ajax  فایل ها را آپلود خواهد کرد :

بسیار جالب است ! تنها چیزی که شما نیاز دارید نصب Microsoft Workspace 2010  میباشد تا بتوانید از امکانات جالب آن که به زودی مطالب بیشتری خدمت شما ارائه خواهم کرد استفاده کنید .

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

با سلامی مجدد

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

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

در اوایل این مسابقات مایکروسافت Amber Johnson  و سپس Dylan Derryberry را برای انتقال تجربیات خود به این مسابقات فرستاده بود ...

ادامه این مطلب را میتوانید از اینجا دنبال کنید .

اما همانطور که میدانید قرار بود شرپوینت 2010 در تابستان سال بعد ارائه شود اما تاریخ عرضه این محصول به May  تغییر کرده و برخی از منابع خبری تاریخ دقیق آن را 12 می 2010 اعلام کرده اند .

ما هم بی صبرانه منتظر عرضه رسمی شرپوینت 2010 هستیم .

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

دسته بندی منوی Quick Lunch
 

با سلام

ممکن است شما هم با این موضوع مواجه شده باشید که لینک هایی که در Quick Lunch قرار داده میشوند بسیار زیاد می شود و پیدا کردن یک لینک در آن بسیار دشوار می شود ، برای حل این مشکل میتوان از Jquery استفاده کرد و منوها را به صورت مرتب تری سازماندهی کرد .

( Quick Lunch قبل از استفاده از Jquery )

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

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

<script src="/scripts/jquery-1.2.6.min.js" type="text/javascript" language="javascript"></script>

<script src="/scripts/accordion.js" type="text/javascript" language="javascript"></script>

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

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

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

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

با سلام

در این مقاله ادامه مبحث قبل در مورد سرعت و کارایی برنامه نویسی در شرپوینت را مورد بررسی قرار میدهیم .

4 – استفاده از Paging در جستجو ها

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

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

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

کلاس SPQuery مشخصه ای بنام ListItemCollectionPosition دارد که این امکان را برای شما فراهم میکند تا صفحه ی آغازین را مشخص کنید و همانطور که قبلا نیز گفته شد RowLimit مشخص میکند که در هر صفحه چند آیتم نمایش داده شود ، بیایید با هم نگاهی به یک مثال بیاندازیم :

SPQuery query = new SPQuery();

query.RowLimit = 10; // that is our page size

do

{

SPListItemCollection items = SPContext.Current.List.GetItems(query);

// do something with the page result

// set the position cursor for the next iteration

query.ListItemCollectionPosition = items.ListItemCollectionPosition;

} while (query.ListItemCollectionPosition != null)

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

image 1

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

5 – بروز رسانی تعداد زیادی آیتم

در مورد قبلی در مورد بهترین نحوه دسترسی به اطلاعات صحبت کردیم و حالا میخواهیم در مورد بهترین نحوه بروز رسانی آیتم ها را مورد بررسی قرار دهیم .برای اضافه کردن یا بروز رسانی آیتم ها راه های متفاوتی وجود دارد ، به طور مثال برای بروز رسانی از SPlistItem.Update و برای اضافه کردن آیتم از SPListItemCollection.Add استفاده میکنیم ، به طور مثال :

for (int itemIx = 0; itemIx < 100; itemIx++)

{

SPListItem newItem = items.Add();

// fill all the individual fields with values

newItem.Update();

}

اگر نگاه دقیقی به کدهایمان بنداریم متوجه خواهیم شد که با هر بار اجرا شدن متد Update یک متد داخلی به اسم SPListItem.AddOrUpdateItem نیز اجرا می شود که یک stored procedure برای انجام این عملیات را صدا میزند .

در این مثال اضافه کردن 100 آیتم به یک لیست 4.5 ثانیه طول می کشد .

اگر شما احتیاج دارید تا تعداد زیادی آیتم را بروز رسانی کنید بهتر است به جای استفاده از متد Update از تابعی به نام ProcessBatchData که توسط کلاس SPWeb قابل دسترسی می باشد استفاده کنید .

ProcessBatchData متدی که با فرمت XML ساخته می شود را اجرا میکند ( در این مقاله میتوانید توضیحات بیشتری در این ضمینه کسب کنید ) ، نگاهی به مثال زیر بیاندازید :

StringBuilder query = new StringBuilder();

for (int itemIx=0;itemIx<100;itemIx++) {

query.AppendFormat("<Method ID=\"{0}\">" +

"<SetList>{1}</SetList>" +

"<SetVar Name=\"ID\">New</SetVar>" +

"<SetVar Name=\"Cmd\">Save</SetVar>" +

"<SetVar Name=\"{3}Title\">{2}</SetVar>" +

"</Method>", itemIx, listGuid, someValue, "urn:schemas-microsoft-com:office:office#");

}

SPContext.Current.Web.ProcessBatchData(string.Format(

"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +

"<ows:Batch OnError=\"Return\">{0}</ows:Batch>", query.ToString()));

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

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

- حتما از StringBuilder استفاده کنید نه String .

- فراخوانی ها را به قطعات کوچک تر تقسیم کنید تا با خطای حافظه مواجه نشوید .

- به عنوان پیشنهاد دیگر شما میتوانید از متد UpdateListItems وب سرویس نیز استفاده کنید .

 

6 – کدام لیست ها کند هستند ، چرا از آنها استفاده میکنیم و چرا کند هستند ؟

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

اما سوال اصلی در اینجا اینه که : چطور میتونیم مشخص کنیم کدام لیست ها باعث کاهش کارایی می شوند و به صورت عادی چگونه مورد استفاده قرار می گیرند ؟

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

راه های زیادی برای بررسی عملکرد و نحوه دسترسی به داده ها در شرپوینت وجود دارد ، شما میتوانید از فایل های IIS Logs استفاده کنید ( برای اطلاعات بیشتر این مقاله را مطالعه کنید ) یا از SharePoint Usage Reporting Feature استفاده کنید .

بهترین راه برای مانیتور کردن کارایی لیست ها آنالیز زمان پاسخ دهی HTTP به آدرس لیست و نما ها میباشد . آدرس یک لیست شرپوینت فرمتی به صورت زیر دارد :

http://servername/site/{LISTNAME}/{VIEWNAME}.aspx.

شما میتوانید توسط ابزار های مختلفی به آنالیز این زمان بپردازید ، در اینجا ما از ابزار Business Transaction محصول شرکت DynaTrace  استفاده می کنیم ، در شکل زیر میتوانید نمایی از این سناریو را ملاحظه کنید :

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

ما میتوانیم این کار را توسط کلاس های شرپوینت مثل SPList  ، SPView  یا SPRequest.RenderViewAsHtml انجام بدیم . شکل زیر آنالیز لیست با استفاده از متد SPRequest  را نمایش می دهد :

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

http://servername/_layouts/listedit.aspx?List={GUID}

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

- تعداد زیادی آیتم در نمای لیست ها نمایش داده شود .

- بالا بودن تعداد آیتم ها بدون داشتن فیلترگذاری و ایندکس کردن ستون ها

- دسترسی نادرست به داده ها از طریق وب پارت

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

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

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

منبع : http://www.infoq.com
SharePoint 2010 Beta منتشر شد
 
با سلام
در کنفرانسی که چند هفته قبل در لاس وگاس برگزار شد ، استیو بالمر قول داده بود که در ماه نوامبر نسخه بتای شرپوینت را در دسترس عموم قرار دهد ، همانطور که در پست قبلی نیز ذکر کرده بودم شما میتوانستید برای دریافت آن ثبت نام کنید ، اما بالاخره استیو بالمر به قول خود عمل کرد و هم اکنون شما میتوانید شرپوینت 2010 ( SharePoint Foundation and SharePoint Server ) را از اینجا دریافت کنید .
 
SPS 2010
 
یه خبر دیگه اینکه به جز شرپوینت 2010 نسخه ی بتای Office 2010 ، SharePoint Designer 2010  و Visio 2010 نیز منتشر شده است .
SharePoint 2010 Beta 2
 
با سلام
همانطور که مطلع هستید شرپوینت 2010 بتا 2 در این ماه ( نوامبر ) در دسترس عموم قرار خواهد گرفت ، اگر هنوز برای دریافت این محصول ثبت نام نکرده اید میتوانید از این لینک ثبت نامه کنید تا پس از انتشار شرپوینت 2010 بتا جزئیات دریافت این نسخه برای شما ارسال شود .c
 
SharePoint 2010
SharePoint 2010 Beta 2
پوسترهای جدید شرپوینت 2010 منتشر شد
 
با سلام
چند روزیست مایکروسافت پوسترهای جدیدی از معماری ، راهبری و توسعه شرپوینت 2010 را منتشر کرده است ، پیش از این 4 پوستر در مورد ارتقا شرپوینت 2007 به 2010 منتشر شده بود ، این پوسترها با فرمت های مختلف از جمله PDF و VSD  و هچنین XPS موجود می باشند .
 

image imageimageimageimage imageimageimage

image image

imageimage imageimage

 

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

وب پارت نکته روز
 
با سلام
امروز برای شما وب پارتی را آماده کردم که به صورت روزانه و تصادفی یک جمله از بزرگان جهان را در صفحه شرپوینت شما نمایش می دهد .
 
Quote Webpart
 
میتوانید این وب پارت از اینجا دریافت کنید .
شما میتوانید جملات زیبایی که در اختیار دارید برای من ایمیل کنید تا در نسخه ی بعدی به این لیست اضافه شود .
 در ضمن شما میتوانید جملات خود را در لیست نکته روز که در سایتی که این وب پارت را در آن فعال کرده اید ، اضافه کنید .
همچنین منتظر پیشنهادات خوب شما نیز هستم .
موفق و پیروز باشید .
نگاهی به ویژگی های جدید ایجاد ورک فلو در SharePoint Designer 2010
 

در این مقاله نگاهی به امکانات جدید SharePoint Designer 2010 خواهیم داشت .

ظاهر Ribbon

همانند دیگر محصولات جدید مایکروسافت SharePoint Designer نیز از ویژگی Ribbon بهره مند است ، با باز کردن SharePoint Designer اولین ویژگی که با آن روبرو می شوید همین امکان است که منوهای اضافی از محیط برنامه حذف شده است .

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

تغییر در محیط ایجاد فرایند

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

همانطور که مشاهده میکنید دیگر برای ایجاد یک فرایند برای شما یک پنجره Popoup باز نمی شود و حالا شما میتوانید فرایندها را جزئی از ساختار محیط SharePoint Designer ببینید با ظاهری بسیار مرتب و همچنین قابلیت های بیشتر !

خوب ، مطمئنا نمی توان خیلی از ویژگی های جالب ورژن جدید را در شکل بالا دید ، با من همراه شوید تا به شما برخی از این امکانات جالب را نمایش دهم .

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

وقتی که شما ماوس را بر روی تکست باکس ها قرار میدهید ، به شما لیست کامل از تمام Action ها نمایش داده میشود ، کافی است چند کلمه از Action را تایپ و کلید Enter را فشار دهید :

این ویژگی تا حدی شبیه امکان IntelliSense در ویژوال استودیو می باشد ، اما تفاوت هایی وجود دارد ، مثلا شما باید حتما Enter را بزنید تا لیست برای شما نمایش داده شود در حالی که در ویژوال استودیو در هنگام تایپ میتوانید به کلاس ها و توابع دسترسی داشته باشید :

پیکربندی Action ها

یکی از مهمترین و بهترین ویژگی هایی که در این ورژن مشاهده میشود امکانات پیکربندی Action هاست ، دیگر از پنچره های تو در تو و گیج کننده ی ورژن قبل خبری نیست و این کار به سادگی و در یک پنجره ی کوچک قابل انجام است :

دکمه ویرایش مشخصات همانند همان پنجره ی آشنای ورژن قبلا است ، لینکی که با کلیک بر روی آن پنچره ی کوچکی برای ویرایش باز می شود ، اما یکی از امکانات جالب دیگر این است که در این ورژن شما میتوانید موضوع داینامیک برای Email Action بسازید :

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

تنظیمات فرایند ها

آخرین ویژگی که آن را در این مقاله مرور خواهیم کرد تنظیمات فرایند هاست :

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

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

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

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

با سلام

امکانات Object Model شرپوینت به شما این امکان را میدهند تا بتوانید نرم افزارهایی بر طبق این تکنولوژی ایجاد کنید ، در همین راستا مقالات بسیار زیادی هم در اینترنت در مورد نحوه استفاده صحیح از این امکانات وجود دارد ، به طور مثال Best Practices نمونه ای از این مقالات است که توسط مایکروسافت عرضه میشود و به برنامه نویسان شرپوینت این امکان را می دهد تا بتوانند نرم افزارهایی با قدرت و کارایی بالا ایجاد نمایند .

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

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

1 – چه تعداد آیتم در لیست ذخیره شده است ؟

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

int noOfItems = SPContext.Current.List.Items.Count;

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

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

اما راه حل چیست ؟

مایکروسافت یک ویژگی بسیار خوب را برای ما فراهم کرده است و آن ItemCount از شی ء SPList می باشد که در زیر میتوانید نحوه استفاده از آن را ملاحظه بفرمایید :

int noOfItems = SPContext.Current.List.ItemCount;

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

2 – نمایش تعداد آیتم های یک لیست با استفاده از SPList

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

برای اثبات این موضوع بیایید با هم نگاهی به کد زیر بیاندازیم که 100 آیتم اول لیست جاری را به ما نمایش میدهد :

SPList activeList = SPContext.Current.List;

for (int i = 0; i < 100 && i < activeList.Items.Count; i++)

{

SPListItem listItem = activeList.ItemsIdea;

htmlWriter.Write(listItem["Title"]);

}

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

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

صفت Items کش نمی شود و به همین خاطر با هر درخواست این عمل تکرار می شود ، در شکل میتوانید این موضوع را به خوبی ملاحظه نمایید :

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

راه حل چیست ؟

مسلما بهترین راه برای حل این مشکل استفاده از SPListItemCollection میباشد ، با استفاده از شی ء دیتابیس فقط یکبار کوئری میزند و با شمارش حلقه نتیجه در این کالکشن ذخیره می شود ، نمونه کد اصلاح شده را در زیر میتوانید مشاهده نمایید :

SPListItemCollection items = SPContext.Current.List.Items;

for (int i = 0; i < 100 && i < items.Count; i++)

{

SPListItem listItem = itemsIdea;

htmlWriter.Write(listItem["Title"]);

}

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

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

3 – استفاده از SPQuery و SPView برای دریافت اطلاعاتی که به آنها نیاز دارید

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

اگر با دقت به 2 مسئله قبلی نگاه کرده باشید متوجه میشوید که با هر کوئری که بر روی دیتابیس اجرا میکنید ، دیتابیس تمام اطلاعات را مورد پردازش قرار می دهد ، به دستور Select در دو مسئله قبلی توجه کنید ( Select Top 2147483648 )

راه حل چیست ؟

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

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

SPQuery query = new SPQuery();

query.RowLimit = 100;

SPListItemCollection items = SPContext.Current.List.GetItems(query);

for (int itemIx = 0; itemIx < items.Count; itemIx++)

{

SPListItem listItem = items[itemIx];

}

با اجرای این دستور میتوانید نتیجه متفاوتی را مشاهده نمایید :

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

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

1 – استفاده از کلاس SPView به صورت زیر :

SPQuery query = new SPQuery(SPContext.Current.CurrentView.View);

2 – استفاده از صفت SPQuery.ViewFields به صورت زیر :

SPQuery query = new SPQuery();

query.ViewFields = "<FieldRef Name='ID'/><FieldRef Name='Text Field'/><FieldRef Name='XYZ'/>";

با اجرای هر کدام از روشهای بالا کوئری شما محدوده کمتری از اطلاعات را مورد پردازش قرار داده و در نتیجه کارایی برنامه شما بالاتر می رود ، به شکل های زیر توجه کنید :

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

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

Remote Procedure Call Protocol
 

سلام

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

Remote Procedure Call که به اختصار آنرا RPC می نامیم در واقع پروتکلی است که به کاربر اجازه میدهد برنامه را از میزبان اجرا کند .

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

نکته : پروتکل ارتباطات ( Communications Protocol ) لایه ای است در بالای پروتکل HTTP که مرورگرها برای انجام فعل و انفعال با وب سرور از آن استفاده میکنند .

پروتکل RPC چگونه کار میکند ؟

این پروتکل با استفاده از HTTP Post Request ، متدها ( که همان درخواست های کاربر میباشد ) را به شرپوینت سرویس ارسال میکند ، این درخواست ها ( Requests ) ، این اجازه را به کاربر میدهد تا بتواند درخواست یک سند را بدهد ، یک وظیفه را به روز کند ،یک سند را در مخزن اسناد آپلود کند ، یک آیتم را ویرایش کند و ...

مقادیری که بازگشت داده میشوند شامل اطلاعاتی در مورد درخواست کاربر میباشند که در قالب یک فرم HTML به کلاینت تحویل داده میشود ، پس پروتکل RPC از دو بخش تشکیل میشود ، بخش اول متدهایی ( Methods ) است که شامل درخواست های کاربر میباشد و بخش دوم مقادیر بازگشتی ( Returns Value ) که نتایج درخواست را به کاربر نمایش میدهد.

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

دریافت اطلاعات لیست ها با استفاده از RPC Protocol

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

برنامه ما شامل 3 تکست باکس میباشد که اولی آدرس سایت که همان آدرس سرویس endpoint ما میباشد را از کاربر دریافت میکند ، تکست باکس دوم Request ما را دریافت و تکست باکس سوم پاسخی است که از سرور دریافت میکنیم :

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

HttpWebRequest objRequest = (HttpWebRequest)HttpWebRequest.Create(txtSiteUrl.Text);

objRequest.Method = WebRequestMethods.Http.Post;

objRequest.Credentials = CredentialCache.DefaultCredentials;

objRequest.Headers.Add("X-Vermeer-Content-Type", "application/x-www-form-urlencoded");

objRequest.ContentType = "application/x-www-form-urlencoded";

StreamWriter sw = new StreamWriter(objRequest.GetRequestStream());

sw.Write(txtRequest.Text);

sw.Close();

HttpWebResponse objResponse = objRequest.GetResponse() as HttpWebResponse;

StreamReader sr = new StreamReader(objResponse.GetResponseStream());

txtResponse.Text = sr.ReadToEnd();

sr.Close();

objResponse.Close();

همانطور که ملاحظه میکنید با استفاده از کلاسهای HttpWebRequest و HttpWebResponse اطلاعات مورد نظر را از سرور دریافت و در داخل تکست باکس سوم نمایش میدهیم .

در این مثال ما از متد List Documents استفاده میکنیم که شامل پارامترهای زیر میباشد :

method=list documents:server_extension_version

&service_name=/&listHiddenDocs=(true|false)&listExplorerDocs=

(true|false)

[&platform=client_os]&initialURL=url&listRecurse=(true|false)

&listLinkInfo=(true|false)&listFolders=(true|false)&listFiles=

(true|false)

&listIncludeParent=(true|false)&listDerived=(true|false)&listBorders= (true|false)

پس از اجرای برنامه ما متد List Documents را در قسمت Request وارد میکنیم ، همچنین آدرس سرویس را و نتیجه کار را میتوانید در شکل زیر ملاحظه نمایید :

همانطور که می بینید نتیجه در قالب HTML برگشت داده میشود .

از این پروتکل استفاده های بسیار زیادی میشود ، به ویژه در کار با برنامه های کلاینت / سرور ، شما میتوانید با این پروتکل با سرعت بسیار زیادی اطلاعات را دریافت یا ارسال کنید ، به طور مثال با استفاده از متد Put شما میتوانید در هر ثانیه اقدام به ارسال چندین فایل کنید که در بسیاری از پروژه ها بسیار کاربردی است .

کدهای مربوط به مطلب امروز را میتوانید از اینجا دریافت کنید .

همچنین لیست کامل متدهای پروتکل RPC  را از اینجا میتوانید مشاهده نمایید.

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

 

MVP Design Pattern
 

با سلام

امروز در مورد الگوی طراحی MVP مطالبی را خدمت شما ارائه کنم .

اما اجازه بدید قبل از اینکه به معرفی MVP بپردازیم ، تعریفی از الگوهای طراحی یا Design Patterns داشته باشیم.

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

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

به قول یکی از دوستان در سایت برنامه نویس : کسی که OOP رو خوب میدونه مثل کسی ست که اجزای تشکیل دهنده ی یک کیک رو میشناسه؛ اما کسی که الگوهای طراحی (Design Patterns ) رو میدونه دستور پخت دقیق اون کیک رو هم در اختیار داره.

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

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

یکی از الگوهای طراحی که در برنامه های تحت وب و همچنین برنامه هایی که تحت شیرپوینت پیاده سازی میشوند کاربرد فراوانی دارد MVP میباشد . MVP مخفف کلمات زیر میباشد :

M = Model

V = View

P = Presenter

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

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

1 – اگر تیم طراحی صفحه هنوز کنترل ها و ظاهر صفحه را ایجاد نکرده باشند ممکن است زمان را از دست بدهید

2 – نگهداری و پشتیبانی از این کدها دشوار میباشد

3 – تست کردن کدها مشکل است

4 – به سختی میتوانید کدهای خود را با صفحاتی که به نوعی با این کدها در ارتباط هستند به اشتراک بگذارید

این مدل ظاهر ( UI ) و رویدادها و توابع را از یکدیگر تفکیک میکند و در دو کلاس پیاده سازی میشوند ، View و Presenter

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

کلاس Presenter برای پاسخ دهی به رویداد و به روز کردن Model ) که شامل لایه منطقی و داده میباشد ) به کار میرود

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

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

خوب ، بهتره یک مثل عملی بزنیم تا بهتر بتوانیم مفهوم و کارایی این الگو را درک کنیم .

فرم ساده ی زیر را در نظر بگیرید :

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

یک کلاس به اسم IContactUs.cs میسازیم و کدهای زیر را در آن وارد میکنیم :

public interface IReaderContactUs

  {

string Name { get; }

string Email { get; }

string PhoneNumber { get; }

string Message { get; }

string Result { set; }

  }

در اینترفیس ها ما هیچ پیاده سازی انجام نمیدیم فقط دستورعمل ها در اینترفیس تعریف میشوند . اینترفیسی که در بالا تعریف کردیم به ما میگوید که میتوانیم نام ، ایمیل ، شماره تلفن و پیام را دریافت ( Get ) و یک نتیجه را دریافت ( Set ) کنیم .

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

Presenter معمولا به صورت یک کلاس جدا پیاده سازی میشود و در نهایت توسط UX (User Experience) که در این مثال یک صفحه وب میباشد استفاده میشود .

یک کلاس دیگر ساخته و نام آنرا ContactUsPresenter.cs میگذاریم و کدهای زیر را در آن وارد میکنیم :

public class ContactUsPresenter

{

private readonly IReaderContactUs view;

public ContactUsPresenter(IReaderContactUs view)

{

this.view = view;

}

public void ProcessForm()

{

StringBuilder sb = new StringBuilder();

sb.Append(string.Format("نام : {0}<br />", view.Name));

sb.Append(string.Format("ایمیل : {0}<br />", view.Email));

sb.Append(string.Format("تلفن : {0}<br />", view.PhoneNumber));

sb.Append(string.Format("پیام : {0}<br />", view.Message));

view.Result = string.Format("<h1>با تشکر ، پیام شما دریافت شد</h1>{0}<hr />", sb);

}

}

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

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

توجه داشته باشید که ما یک نمونه خصوصی از ContactUsPresenter میسازیم اما در هنگام فراخوانی متد OnInit آن را معرفی میکنیم ، هنگامی که دکمه ارسال کلیک شود ، متد ProcessForm اجرا میشود :

public partial class ContactUs : UserControl, IReaderContactUs

{

private ContactUsPresenter presenter;

 

public string Name { get { return txtName.Text; } }

public string Email { get { return txtEmail.Text; } }

public string PhoneNumber { get { return txtPhone.Text; } }

public string Message { get { return txtMessage.Text; } }

public string Result { set { lblResult.Text = value; } }

 

protected override void OnInit(EventArgs e)

{

base.OnInit(e);

presenter = new ContactUsPresenter(this);

}

protected void SubmitContactButton_Click(object sender, EventArgs e)

{

presenter.ProcessForm();

}

}

و میتوانید نتیجه کار خود را ببینید :

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

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

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

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