آگاهی امنیتی : چگونگی بدست آوردن کلمه عبور Application Pool های IIS

این نوشته را در دسته‌بندی برنامه‌نویسی شیرپوینت قرار دادم چرا که بیشترین زمانی که با Application Pool ها سر و کار داشتم زمان نصب و تنظیم شیرپوینت بوده است.

کد اصلی مربوط به نوشته آقای Sahil Malik است. در شیرپوینت ۲۰۰۷ می‌توانستیم با استفاده از SPApplicationPool.Password کلمه عبور Application Pool را بدست آوریم که در نسخه‌های بعدی دیگر استفاده نمی‌شود. برنامه‌ای به نام appcmd در آدرس c:\windows\system32\inetsrv وجود دارد که با استفاده از دستور زیر کلمه عبور Application Pool را به شما نمایش می‌دهد. کافی است به جای Your_ApplicationPool_Name نام ApplicationPool‌ مورد نظر را قرار دهید.

appcmd.exe list apppool "Your_ApplicationPool_Name" /text:ProcessModel.Password

پی نوشت: دستور بالا کلمه عبور را به صورت plain text نمایش می‌دهد. مایکروسافت جهت تنظیم Application Pool ‌های شیرپوینت راهنماهایی دارد. کاری که عموماً به مظور تسریع در نصب و راه‌اندازی در سرورهای توسعه (development) انجام می‌دهیم استفاده از کاربرانی با حداکثر سطح دسترسی در اکتیو دایرکتوری (بعضاً domain admin) است. این کار به هیچ وجه برای محیط‌ مشتری توصیه نمی‌شود.

به اشتراک گذاری این نوشته در شبکه‌های اجتماعی

چطور برای شیرپوینت وب پارت بنویسیم؟ قسمت اول: سلام دنیا

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

وب پارت شیرپوینت چیست؟

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

وب پارت سلام دنیا

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

برای نوشتن اولین وب پارتمان به Visual Studio 2012 یا بالاتر احتیاج داریم. مطابق تصویر زیر یک پروژه جدید از نوع SharePoint 2010 Project ایجاد می‌کنیم. در نوشته‌های بعدی درباره Visual Web Part و Silverlight Web Part توضیح خواهیم داد. فعلاً می‌خواهیم یک پروژه ساده داشته باشیم.

بعد از انتخاب نام و مسیر پروژه در مرحله بعد ویزارد ایجاد پروژه شیرپوینتی آدرس سایت شیرپوینتی را داده و گزینه Deploy as a farm Solution را انتخاب می‌کنیم. درباره راهکارهای sandbox در نوشته‌های بعدی توضیح داده خواهد شد.

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

برای اضافه کردن یک وب پارت به پروژه جدید روی پروژه کلیک راست کرده و یک New Item از نوع Web Part به پروژه اضافه می‌کنیم. همانطور که در تصویر زیر نیز مشخص است انواع دیگری مثل Visual Web Part‌ و Silverlight Web Part نیز وجود دارند که در نوشته‌های بعدی درباره آن‌ها صحبت خواهیم کرد. نام Web Part را HelloWorld انتخاب کنید.

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

ابتدا پوشه Features: در این پوشه یک Feature جدید تحت عنوان Feature1 اضافه شده است. راهکارهای شیرپوینتی برای نصب می‌توانند Feature داشته باشند که با توجه به scope آن از بخش تنظیمات سایت یا تنظیمات مجموعه سایت (site collection) یا تنظیمات Web Application یا حتی تنظیمات Farm قابل فعالسازی هستند.

برای این Feature ها حتی می‌توان کد نوشت تا مثلاً در هنگام فعالسازی Feature نیازمندی‌های پروژه به سایت اضافه شود به عنوان مثال هنگام فعال کردن Feature ضمن اضافه شدن وب پارت به مجموعه وب پارت‌های سایت، یک لیست هم ساخته شود یا تغییری در تنظیمات سایت شیرپوینتی ایجاد شود و ... در خصوص Feature ها نیز در نوشته‌های بعدی صحبت خواهیم کرد. فعلاً Feature1 را به HelloWorldFeature تغییر نام داده و روی آن کلیک می‌کنیم تا پنجره مشخصات Feature باز شود. در این پنجره می‌توانیم عنوان یا شرح Feature را بنویسیم و مشخص کنیم این Feature کدامیک از بخش‌های پروژه را فعال خواهد کرد. در مثال جاری Feature ما وب پارت HelloWorld را فعال می‌کند.

یک نکته دیگر درباره عنوان و شرح Feature این است که می‌توان آن را برای چند زبانه بودن تنظیم کرد. یعنی عنوان و شرح بر حسب زبان سایت متفاوت باشد که این موضوع را نیز در مباحث برندینگ در نوشته‌های بعدی توضیح خواهیم داد.

فایل Elements.xml: در این فایل یک ویژگی وجود دارد که می‌توانیم آن را برای بهتر شدن نمایش وب پارت تغییر دهیم. آن هم دسته بندی است که وب پارت در آن قرار می‌گیرد. در شیرپوینت وقتی می‌خواهیم به یک صفحه، یک وب پارت اضافه کنیم آن را از میان دسته‌بندی‌های موجود انتخاب می‌کنیم. به صورت پیش فرض دسته‌بندی یک وب پارت جدید روی Custom قرار دارد که آن را به مقدار دلخواه تغییر می‌دهیم. ما برای وب پارت‌های آرایه دسته‌بندی Araye را انتخاب می‌کنیم. دقت کنید که این بخش را نیز می‌توان از طریق resource ها چند زبانه کرد.



  
    
      
    
  





فایل HelloWebpart.webpart: در این فایل مشخصات نام و شرح و حتی آیکن وب پارت را می‌توانیم تعریف کنیم. این فایل نیز به صورت xml است و می‌توان محتویات آن را به صورت دلخواه ویرایش کرد و از طریق resource ها چند زبانه نمود. 



  
    
      
      $Resources:core,ImportErrorMessage;
    
    
      
        Araye - HelloWorld
        Araye HelloWorld Web Part
      
    
  


فایل کد وب پارت (فایل HelloWorld.cs): در این فایل کد برنامه‌نویسی #C وب پارت نوشته می‌شود. تمام کاری که باید انجام دهیم override کردن متد CreateChildControls و افزودن کد دلخواه به آن است. در این مثال ما کد وب پارت را به صورت زیر ویرایش می‌کنیم تا متن Hello World from SharePoint Webpart در آن نمایش داده شود.

using System;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
namespace Araye.SharePoint.Webparts.HelloWorld.HelloWorld
{
    [ToolboxItemAttribute(false)]
    public class HelloWorld : WebPart
    {
        protected override void CreateChildControls()
        {
            this.Controls.Add(new Label(){Text = "Hello World from SharePoint Webpart!"});
        }
    }
}




مشاهده خروجی: برای مشاهده خروجی دو راه دارید. Publish کردن کد که یک فایل wsp به شما خواهد داد و می‌توانید مانند سایر فایل‌های wsp آن را به شیرپوینت اضافه کنید و یا اجرا در حالت debug.

خب این نخستین وب پارت ما بود. به زودی کد کامل را در صفحه گیت‌هاب آرایه قرار خواهیم داد. همانطور که مشاهده می‌کنید وب پارت‌های عادی دارای محدودیت‌هایی هستند. مثلاً اگر بخواهید یک UI پیشرفته داشته باشید نوشتن کد و align کردن کنترل‌ها از طریق کد #C بسیار مشکل و زمانبر است. در نوشته‌های بعدی ضمن مرور قابلیت‌های تنظیماتی در وب پارت‌ها به سراغ Visual Webpart ها می‌رویم جایی که می‌توانیم کنترل‌ها را به راحتی به وب پارت اضافه کرده و محل و نحوه نمایش آن‌ها را کنترل کنیم.

ادامه دارد...

به اشتراک گذاری این نوشته در شبکه‌های اجتماعی

استفاده از کنترل CssRegistration در شیرپوینت 2010

چه در یک masterpage، چه در یک وب پارت، اگر بخواهیم فایل css ای را load کنیم، روش‌های مختلفی وجود دارد. یکی از روش‌های استاندارد در شیرپوینت برای تعریف فایل‌های css استفاده از کنترل CssRegistration است. قصد دارم در این مطلب به صورت کوتاه این کنترل را معرفی کنم.

اگر بخواهیم به صورت markup از این کنترل استفاده کنیم به شکل زیر خواهد بود:

 

در صورتی که در کد بخواهیم از آن استفاده کنیم از کدی مانند کد زیر می‌توان استفاده کرد:

 var myCss = new CssRegistration();
 myCss.Name = "CSS_URL";
 myCss.After = "corev4.css";

در کد بالا در خط مشخص شده، آدرس فایل css مورد نظر را وارد خواهیم کرد.

این کنترل چند مزیت نسبت به یک تگ link ساده دارد:

امکان تعیین ترتیب load

به کمک خاصیت After که در کد بالا هم مشخص شده است، می‌توانیم مشخص کنیم که فایل css ما بعد از چه فایلی load شود. این مساله به خصوص در پیاده‌سازی تم جدید برای شیرپوینت حائز اهمیت است تا بتوانیم css‌های پیش‌فرض شیرپوینت را به درستی override کنیم.
به عنوان مثال در کد سی شارپی بالا، فایل css ما بعد از corev4.css لود خواهد شد. 

امکان تعیین شرط برای load

به کمک خاصیت ConditionalExpression در این کنترل می‌توان css های شرطی ایجاد نمود. به عنوان مثال اگر ConditionalExpression را برابر IE 7.0 قرار دهیم خروجی مشابه زیر حاصل خواهد شد.

 

امکان اینکه مرورگری غیر IE هم در این شرط‌ها لحاظ شود وجود دارد، اما باید RevealToNonIE را true مقداردهی کنید.

امکان ایجاد پوسته برای استایل‌ها

یکی از مواردی که در مبحث branding سایت‌های شیرپوینتی مطرح است، پوسته‌ها (شامل رنگ‌بندی و استایل فونت‌ها) می‌باشد. CssRegistration به شما امکان ایجاد پوسته‌ها را از طریق ست کردن EnableCssTheming می‌دهد.

امکان تعیین آدرس نسبی برای فایل‌ها در کد

چه در زمانی که به صورت markup از این کنترل مثلاً در masterpage یا page layout استفاده می‌کنیم چه زمانی که آن را در یک کد سی‌شارپی به کار می‌بریم این امکان وجود دارد که آدرس فایل css را به صورت نسبی بدهیم. مثلاً در کد اول این نوشته که به صورت markup هست عبارت sitecollection~ مشخص کننده آدرس مجموعه سایت است. 
مزیت این کار در این است که انتقال کد حاوی کنترل CssRegistration‌ از محیط توسعه به محیط مشتری، نیازمند تغییر و تنظیم مجدد نیست. 

به اشتراک گذاری این نوشته در شبکه‌های اجتماعی

کارهایی در لیست‌های شیرپوینت که فقط با برنامه‌نویسی می‌توان انجام داد

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

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

قبل از شروع توجه کنید که هر جا خطا دریافت کردید مبنی بر اینکه اجازه تغییرات در SPWeb وجود ندارد AllowUnsafeUpdates را برای object ای که از کلاس SPWeb گرفته‌اید true و بعد از اتمام عملیات آن را false‌ کنید.

کنترل نمایش ستون‌ها در فرم‌های مختلف

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

string siteUrl = "http://spserver:81/sites/test"; 
SPSite site = new SPSite(siteUrl);
using (SPWeb web = site.OpenWeb())
{
    SPList list = web.Lists["MyList"];
    SPField field = list.Fields["MyField"];
    field.ShowInNewForm = false;
    field.ShowInEditForm = false;
    field.ShowInDisplayForm = false;
    field.Update();
} 

همچنین در صورت نیاز می‌توانید نمایش این ستون در بخش تنظیمات لیست یا نماهای لیست را نیز غیرفعال کنید:

string siteUrl = "http://spserver:81/sites/test"; 
SPSite site = new SPSite(siteUrl);
using (SPWeb web = site.OpenWeb())
{
    SPList list = web.Lists["MyList"];
    SPField field = list.Fields["MyField"];
    field.ShowInViewForms = false;
    field.ShowInListSettings = false;    
    field.Update();
} 

 

مخفی یا غیر قابل حذف کردن ستون‌ها

جهت مخفی کردن یک ستون از property که به این منظور وجود دارد می‌توانید استفاده کنید:

string siteUrl = "http://spserver:81/sites/test"; 
SPSite site = new SPSite(siteUrl);
using (SPWeb web = site.OpenWeb())
{
    SPList list = web.Lists["MyList"];
    SPField field = list.Fields["MyField"];
    field.Hidden = false;  
    field.Update();
} 

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

string siteUrl = "http://spserver:81/sites/test"; 
SPSite site = new SPSite(siteUrl);
using (SPWeb web = site.OpenWeb())
{
    SPList list = web.Lists["MyList"];
    SPField field = list.Fields["MyField"];
    field.AllowDeletion = false;  
    field.Update();
} 

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

مخفی کردن لیست‌ها

شیرپوینت تعدادی لیست مخفی در هر سایتی که ایجاد می‌شود ایجاد می‌کند و از آن برای ذخیره اطلاعات سیستمی خودش بهره می‌گیرد. به طور کلی از آنجایی که تعداد لیست‌هایی که با فعال کردن feature‌های مختلف ساخته می‌شوند زیاد است و این باعث سردرگمی استفاده کننده می‌شود خوب است لیست‌های اضافی یا کم مصرف که از جایگزین‌هایشان می‌توان استفاده کرد را با SSharePoint Designer یا با استفاده از کدنویسی مخفی کنید. برای مخفی کردن یک لیست شیرپوینت از کد زیر می‌توانید استفاده کنید:

string siteUrl = "http://spserver:81/sites/test"; 
SPSite site = new SPSite(siteUrl);
using (SPWeb web = site.OpenWeb())
{
    SPList list = web.Lists["MyList"];
    list.Hidden = true;
    list.Update();    
} 

غیرقابل حذف کردن لیست‌ها

غیرقابل حذف کردن لیست‌ها برای شرایطی مناسب است که از لیست برای ذخیره اطلاعات سیستمی (نظیر تنظیمات یا داده‌های یک راهکار شیرپوینتی) استفاه می‌کنید. برای این کار از کد زیر می‌توانید استفاده کنید:

string siteUrl = "http://spserver:81/sites/test"; 
SPSite site = new SPSite(siteUrl);
using (SPWeb web = site.OpenWeb())
{
    SPList list = web.Lists["MyList"];
    list.AllowDeletion = true;
    list.Update();    
} 
به اشتراک گذاری این نوشته در شبکه‌های اجتماعی

برنامه‌نویسی برای عملیات CRUD در لیست‌های شیرپوینت

در دو نوشته قبلی درباره کار با سایت‌ها و لیست‌های شیرپوینت به صورت برنامه‌نویسی server side صحبت کردم. در این نوشته به بررسی عملیات CRUD در لیست‌های شیرپوینت یا Create,Read,Update,Delete که 4 عملیات اصلی قابل انجام بر روی داده‌ها هستند صحبت می‌کنم.

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

برای افزودن اطلاعات به لیست شیرپوینت از کدی مانند کد زیر استفاده می‌کنیم. در این کد هم همان‌طور که مشاهده می‌کنید بحث استفاده از display name ستون‌ها مطرح است. در کد زیر لیستی داریم که دو ستون Title و Birthday دارد و با کد به آن‌ها مقدار داده‌ایم. 

string siteUrl = "http://spserver:81/sites/test"; 
SPSite site = new SPSite(siteUrl);
using (SPWeb web = site.OpenWeb())
{
    SPList list = web.Lists["MyList"];
    SPListItem item = list.Items.Add();
    item["Title"]="Hamid";
    item["Birthday"]=DateTime.Now;    
    item.Update();
} 

در کد بالا نکته قابل توجه اول در خط 6 است جایی که ابتدا یک شی از کلاس SPListItem ایجاد کرده‌ایم. این شی را با متد Add مقدار داده‌ایم که ممکن است کمی گیج کننده به نظر برسد. واقعیت این است که چون ساختار یک آیتم لیست شیرپوینت می‌تواند به شکل‌های گوناگونی باشد (ستون‌های متفاوتی داشته باشد) استفاده از متد Add کمک می‌کند تا ساختار مربوط به آیتم این لیست خاص (MyList) در شی item در حافظه ایجاد شود. بعداً و مثلاً در خط 7 می‌توانید ستون‌های مختلف این ساختار را مقداردهی کنید.
در خط 9 هم برای ذخیره کردن شی ایجاد شده در حافظه از متد Update استفاده می‌کنیم. از این متد برای ویرایش هم که در ادامه به آن اشاره می‌شود استفاده خواهیم کرد.

خواندن آیتم‌های لیست شیرپوینت

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

string siteUrl = "http://spserver:81/sites/test"; 
SPSite site = new SPSite(siteUrl);
using (SPWeb web = site.OpenWeb())
{
    SPList list = web.Lists["MyList"];
    SPListItemCollection items = list.Items;
    foreach(SPListItem item in items)
    {
        Console.WriteLine(item["Title"].ToString());
    }    
} 

در دنیای واقعی ما باید آیتم‌های مورد نظرمان را پیدا کنیم. برای دریافت یک آیتم خاص از متد GetItemById می‌توانیم استفاده کنیم. راه دیگری هم وجود دارد که استفاده از کوئری‌های CAML است که در مطلب دیگری به آن خواهم پرداخت.

string siteUrl = "http://spserver:81/sites/test"; 
SPSite site = new SPSite(siteUrl);
using (SPWeb web = site.OpenWeb())
{
    SPList list = web.Lists["MyList"];
    SPListItem item = list.GetItemById(5);    
    Console.WriteLine(item["Title"].ToString());       
} 

در کد بالا آیتمی با شناسه 5 را دریافت کرده و محتوای ستون Title آن را در کنسول نوشته‌ایم.

به روز رسانی آیتم‌های لیست شیرپوینت

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

string siteUrl = "http://spserver:81/sites/test"; 
SPSite site = new SPSite(siteUrl);
using (SPWeb web = site.OpenWeb())
{
    SPList list = web.Lists["MyList"];
    SPListItem item = list.GetItemById(5);    
    item["Title"] = "My New Title";
    item.Update();      
} 

در مثال بالا آیتمی با شناسه 5 را دریافت و ستون Title آن را به عبارت جدیدی تغییر داده‌ایم. همانطور که مشاهده می‌کنید باز هم از متد Update استفاده کرده‌ایم.

تفاوت Update و SystemUpdate

در خط 8 کد بالا از متد update استفاده کرده‌ایم. یک گزینه دیگر استفاده از متد SystemUpdate است. این دو متد تفاوتی اساسی با هم دارند. به صورت کلی در شیرپوینت هر زمان شما آیتمی را اضافه یا ویرایش می‌کنید چند ستون سیستمی مقدار می‌گیرند. ستون‌هایی مثل ایجاد کننده، ویرایش کننده،‌ تاریخ ایجاد، تاریخ آخرین ویرایش. اگر از متد Update استفاده کنید این ستون‌ها مقدار خواهند گرفت و اگر از متد SystemUpdate استفاده کنید مقدار قبلی این ستون‌ها تغییری نمی‌کند. در واقع می‌توانید آیتمی را ویرایش کنید بدون اینکه مثلاً ستون تاریخ ویرایش آن تغییر کند.

تایید آیتم‌های لیست شیرپوینت با برنامه‌نویسی

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

string siteUrl = "http://spserver:81/sites/test"; 
SPSite site = new SPSite(siteUrl);
using (SPWeb web = site.OpenWeb())
{
    SPList list = web.Lists["MyList"];
    SPListItem item = list.GetItemById(5);    
    item.ModerationInformation.Status = SPModerationStatusType.Approved;
    item.Update();      
} 

حذف آیتم‌ها از لیست شیرپوینت

برای حذف با برنامه‌نویسی بعد از دریافت آیتم، خیلی راحت می‌توانیم از متد Delete استفاده کنیم و نیازی به استفاده از متد Update نیست. مانند مثال زیر:

string siteUrl = "http://spserver:81/sites/test"; 
SPSite site = new SPSite(siteUrl);
using (SPWeb web = site.OpenWeb())
{
    SPList list = web.Lists["MyList"];
    SPListItem item = list.GetItemById(5);    
    item.Delete();   
} 

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

به اشتراک گذاری این نوشته در شبکه‌های اجتماعی

کار با لیست‌ها به صورت برنامه‌نویسی در شیرپوینت

در نوشته قبلی به نکاتی درباره کار با سایت‌های شیرپوینت به صورت برنامه‌نویسی اشاره کردم، در این نوشته درباره لیست‌های شیرپوینت و نحوه کار با آن‌ها توسط برنامه‌نویسی اشاره خواهم کرد.

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

نکته دیگر که در مطلب کار با سایت‌های شیرپوینت فراموش کردم به آن اشاره کنم، بحث disposable بودن کلاس SPWeb است و بهتر است هنگام استفاده از این کلاس از using استفاده کنید.
ضمناً مانند مثال‌های مطلب قبلی، باز هم به Microsoft.Sharepoint.dll نیاز دارید و البته کدهای نوشته شده در همه نسخه‌های شیرپوینت به یک شکل کار می‌کنند. 

اضافه کردن لیست به یک سایت در شیرپوینت

لیست‌ها زیرمجموعه‌ای از یک زیرسایت (کلاس SPWeb) هستند، اگر حتی بخواهید به یک مجموعه سایت لیستی اضافه کنید باید به سایت root آن لیست اضافه کنید. جهت اضافه کردن لیست به سایت از کد زیر می‌توانید استفاده کنید

string siteUrl = "http://spserver:81/sites/test"; 
SPSite site = new SPSite(siteUrl);
using (SPWeb web = site.OpenWeb())
{
    web.Lists.Add("MyList", "My List Description" , SPListTemplateType.GenericList);
} 

همان‌طور که در خط highlight شده مشخص است با استفاده از متد Add می‌توانید لیست خود را به سایت مورد نظر اضافه کنید. در مثال بالا لیستی از نوع لیست سفارشی را به سایت اضافه کردیم.

Static Name برای لیست

وقتی در شیرپوینت لیستی یا ستونی را ایجاد می‌کنید، نامی که اولین بار به آن لیست یا ستون می‌دهید به عنوان Static Name محسوب می‌شود، کاربر چنانچه دسترسی لازم را داشته باشد می‌تواند این نام‌ها را هر زمان به دلخواه تغییر دهد. نامی که کاربر برای لیست یا ستون مشاهده می‌کند Display Name نامیده می‌شود. Static Name و Display Name در ابتدای کار ایجاد لیست و ستون یکی هستند ولی بعداً با تعویض نام، متفاوت خواهند بود. در انواع متدهایی که برای کار با لیست‌ها در شیرپوینت وجود دارد عموماً از Display Name استفاده می‌شود. این مساله باعث می‌شود که هنگام کار با لیست‌ها اگر نام آن‌ها توسط کاربر تغییر کرده باشد، برنامه شما به خطا بخورد. راه حل این مساله را در نوشته دیگری بررسی خواهیم کرد.

اضافه کردن لیست به Quick Launch

وقتی شما از طریق خود UI شیرپوینت لیستی را اضافه می‌کنید گزینه‌ای وجود دارد که می‌توانید مشخص کنید آیا لیست مورد نظر در منو عمودی شیرپوینت که به Quick Lanuch معروف است نمایش داده شود یا خیر. ولی وقتی لیستی را با برنامه‌نویسی در شیرپوینت ایجاد می‌کنید چنین گزینه‌ای وجود ندارد و چنانچه بخواهید لیستی را به Quick Launch اضافه یا از آن حذف کنید باید از property‌ مربوطه یعنی OnQuickLaunch استفاده کنید. به عنوان مثال همان لیست مثال قبلی را در نظر بگیرید. با کد زیر می‌توانیم لیست را به Quick Lanuch اضافه کنیم. 

string siteUrl = "http://spserver:81/sites/test"; 
SPSite site = new SPSite(siteUrl);
using (SPWeb web = site.OpenWeb())
{
    SPList list = web.Lists["MyList"];
    list.OnQuickLaunch = true;
    list.Update();
} 

دقت کنید که در خط 5 برای گرفتن شی مربوط به لیست از Display Name‌ لیست استفاده شده است. همچنین بعد از تغییر یک property شی لیست باید این تغییر را با فراخوانی متد update ذخیره کنیم.

اضافه کردن ستون به لیست

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

string siteUrl = "http://spserver:81/sites/test"; 
SPSite site = new SPSite(siteUrl);
using (SPWeb web = site.OpenWeb())
{
    SPList list = web.Lists["MyList"];
    list.Fields.Add("Birthday", SPFieldType.DateTime, false);
} 

همان‌طور که در خط highlight شده مشخص است در متد Add پارامترهای نام ستون، نوع ستون و اینکه آیا وجود داده برای ستون الزامی است یا خیر را مشخص می‌کنیم. دقت کنید که در این مثال نیازی به استفاده از متد update نیست.

اضافه کردن ستون به نما

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

string siteUrl = "http://spserver:81/sites/test"; 
SPSite site = new SPSite(siteUrl);
using (SPWeb web = site.OpenWeb())
{
    SPList list = web.Lists["MyList"];
    SPView view = list.DefaultView;
    view.ViewFields.Add("Birthday");
    view.Update();
} 

 دقت کنید اینجا هم نیاز به استفاده از متد Update برای ذخیره تغییرات وجود دارد. سایر موارد مثل به روز رسانی اطلاعات لیست‌ها یا حذف آن‌ها هم به سادگی از طریق متدها قابل انجام است. در نوشته دیگری عملیات CRUD در لیست‌های شیرپوینت را با هم بررسی خواهیم کرد.

به اشتراک گذاری این نوشته در شبکه‌های اجتماعی