این سایت برای ie9 طراحی نشده است

لطفا دستگاه خود را بچرخانید.

استفاده از Event Receiver در یک لیست یا لایبرری خاص در شیرپوینت ۲۰۱۳

۲۲ شهریور ۱۳۹۴ راحله عباسی فشمی
بدون دیدگاه

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

برای این منظور یک web service نوشتیم که متدهای دلخواهمون رو اونجا تعریف کردیم و قراره اطلاعاتی و از شیرپیونت بگیریم و به این  web reference پاس بدیم .از این رو یک پروژه ی شیرپوینتی در محیط Visual Studio 2013  از نوع Farm Solution  ایجاد کردم. بعد در پروژه ی ایجاد شده ، با کلیک راست کردن روی اسم پروژه و انتخاب Add New Item یک Event Receiver به پروژه اضافه کردم. نوع Event Receiver و با توجه به نیازی که داریم از نوع List Item Event  و Event Source رو هم از نوع Document Library انتخاب کردم و در قسمت Handle the following Events ، گزینه های An Item was added ، An Item was updated و An Item was deleted رو تیک زدم تا بتونم با اضافه کردن ، ویرایش کردن و حذف کردن هر آیتم در Document Library دلخواه ،به اطلاعات مورد نظر دست پیدا کنم.

eventrc

تا اینجا یک Event Receiver به پروژه اضافه کردم که هر آیتمی در کل سایت کالکشن به یکی از داکیومنت لایبرری ها اضافه ، ویرایش و یا حذف بشه ، می تونم بهش دسترسی داشته باشم. ولی من می خوام صرفاً به یک لایبرری خاص دسترسی داشته باشم و تنها وقتی که آیتمی در اون لایبرری خاص اضافه ، ویرایش یا حذف شد، اتفاق خاصی رخ بده. به این منظور ، در پنجره ی properties ، ایونت ریسیور اضافه شده رو Expand می کنم و فایل Elements.xml  رو باز می کنم.

حالا تگ

<Receiver ListTemplateId=”100″>

 رو با

<Receiver ListUrl =”DocumentLibraryNam”>

جایگزین می کنم. دقت کنید که جای DocumentLibraryNam اسم داکیومنت لایبرری مورد نظرتون رو درج کنید.

در اینجا لازم می دونم یه نکته رو متذکر بشم که اگه خواستین جای یک لایبرری ، به یک لیست دسترسی داشته باشین کافیه قبل از اسم لیست مورد نظر ، کلمه ی لیست رو ذکر کنید. برای مثال :

<Receiver ListUrl =”List/LibraryNam”>

خوب حالا که event receiver و روی یک لایبرری خاص set کردم ، Event Receiver و در مد کدنویسی باز می کنم و برای هر کدوم از Event هایی که خواستم کنترل شن ، کد دلخواهم و می نویسم. برای مثال قصد دارم آدرس هر آیتم اضافه شده ، ویرایش شده یا حذف شده رو تو یه متغیر از نوع String ذخیره کنم و بعداً در متدی که در Web Service  تعریف کردم ازش به عنوان آرگومان ورودی استفاده کنم.

برای اینکه بتونم به web service دسترسی داشته باشم ، باید اون رو به پروژه اضافه کنم. برای اضافه کردن web service به پروژه ، در پنجره ی Properties روی اسم پروژه کلیک راست کرده و گزینه ی Add Service Reference و انتخاب می کنم و در پنجره ی باز شده روی دگمه ی Advanced  کلیک کرده و بعد از انتخاب گزینه ی Add Web Reference  آدرس web service مورد نظر رو در قسمت URL وارد کرده و اینتر می کنم و بعد با کلیک روی دگمه ی Add Referene  ، وب سرویس مورد نظر به پروژه ی ما اضافه می شه و حالا می تونم در پروژه ازش استفاده کنم.

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

 

using System;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;


namespace crmconnection.dealsEventReciever
{
    /// <summary>
    /// List Item Events
    /// </summary>
    public class dealsEventReciever : SPItemEventReceiver
    {
        /// <summary>
        /// An item was added.
        /// </summary>
        public override void ItemAdded(SPItemEventProperties properties)
        {
            base.ItemAdded(properties);
            try
            {
                string url = properties.ListItem.Url;
                if (url.ToLower().Contains("jpg") || url.ToLower().Contains("jpeg") || url.ToLower().Contains("gif") | url.ToLower().Contains("png"))
                {
                    WebReference.CRMService webRef = new WebReference.CRMService();
                    webRef.ImageAdded(url);
                }
            }
            catch (Exception)
            {
                
            }
           
        }

        /// <summary>
        /// An item was updated.
        /// </summary>
        public override void ItemUpdated(SPItemEventProperties properties)
        {
            base.ItemUpdated(properties);
            try
            {
                string url = properties.ListItem.Url;
                if (url.ToLower().Contains("jpg") || url.ToLower().Contains("jpeg") || url.ToLower().Contains("gif") | url.ToLower().Contains("png"))
                {
                    WebReference.CRMService webRef = new WebReference.CRMService();
                    webRef.ImageUpdated(url);
                }
            }
            catch (Exception)
            {
            }
           
        }

        /// <summary>
        /// An item was deleted.
        /// </summary>
        public override void ItemDeleted(SPItemEventProperties properties)
        {
            base.ItemDeleted(properties);
            try
            {
                string url = properties.ListItem.Url;
                if (url.ToLower().Contains("jpg") || url.ToLower().Contains("jpeg") || url.ToLower().Contains("gif") | url.ToLower().Contains("png"))
                {
                    WebReference.CRMService webRef = new WebReference.CRMService();
                  //  webRef.ImageDeleted(url);
                }
            }
            catch (Exception)
            {
            }           
        }       
    }
}

بعد از Deploy  کردن پروژه ، روی سایت کالکشن مورد نظر در مسیر  Site Setting\Web Designer Galleries\Solutions

solution مورد نظر رو مشاهده خواهید کرد.