یکی از چالشهای رایج برای توسعهدهندههای شیرپوینت، مدیریت نماهای شیرپوینت (Views) هست. فرض کنید میخواهید در یک لیست نمایی بسازید که فقط افرادی که رکوردها رو خودشون ایجاد کردهاند به همراه رکوردهایی که به تیم خودشون مربوط میشه (یعنی همتیمیهاشون)، بتونن مشاهده کنن.
اولین چیزی که احتمالاً به ذهنتون میرسه، استفاده از Set Item Permissions هست.
البته باید توجه داشته باشید که تعداد مجاز دسترسیهای منحصر به فرد (Unique Permissions) در یک لیست ۵۰,۰۰۰ هست، اما مایکروسافت توصیه کرده که تعداد این دسترسیها بیشتر از ۵,۰۰۰ نباشه. چرا؟
چون وقتی تعداد رکوردهایی که دسترسیهای منحصر به فرد دارن از این مقدار بیشتر بشه، سیستم دچار کندی و افت عملکرد میشه. بنابراین به دنبال یک روش دیگه باید باشیم.
پیشنهاد من اینه که بیاید سراغ فیلتر کردن رکوردها با CAML Query در شیرپوینت.
فیلتر کردن رکوردها با CAML Query در شیرپوینت
خب، یعنی چی؟ بذارید اینطور توضیح بدم. اول از همه، باید یک ستون از نوع Person or Group برای مثال به اسم test بسازید. بعد یک نما (View) به نام Membership ایجاد کنید و در قسمت فیلتر، Created By رو برابر با [Me]
تنظیم کنید.
حالا باید شیرپوینت دیزاینر رو باز کنید، برید به لیست مربوطه و نمای Membership رو پیدا کنید.
حالا وقتشه که کد نما رو تغییر بدید! شما باید از تگ <Where>
تا تگ </Where>
رو انتخاب کنید و کد زیر رو به جای اون قرار بدید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<Where> <Or> <!-- بررسی اینکه آیا نویسنده برابر با شناسه کاربری جاری است --> <Eq> <FieldRef Name="Author"/> <Value Type="Integer"> <UserID Type="Integer"/> </Value> </Eq> <!-- بررسی اینکه آیا کاربر عضو گروهی است که test در آن موجود است --> <Membership Type="CurrentUserGroups"> <FieldRef Name="test"/> </Membership> </Or> </Where> |
با این روش، رکوردهایی که نویسنده یا کاربر جاری بهعنوان Author مشخص کرده یا کاربر عضو گروهی است که به فیلد test اشاره دارد، بهطور خودکار فیلتر میشوند. این تکنیک به شما کمک میکنه بدون نیاز به Set Item Permissions، فقط رکوردهای مربوط به کاربر جاری نمایش داده بشه.
باتوجه به مثال بالا شما می تونید برای هر واحد یک گروه بسازید و اعضای واحد را به گروه ساخته شده اضافه کنید سپس آن گروه را در ستون test درج کنید. اینطوری کاربرا رکوردایی که ایجاد کرده اند و یا اعضای تیمشون آن رکورد را ایجاد کرده اند در یک نما میبینند.