آی تی نرد

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

ایجاد آبجکت های شیرپوینتی با استفاده از Xml Definition - لیست

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

  1.  از طریق کدنویسی یا همان آبجت مدل شیرپوینت.
  2. از طریق پاورشل.
  3. از طریق اینترفیس شیرپوینت.
  4. از طریق Definition ها.

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

به زبان ساده تعاریف در شیرپوینت فایل های Xml یا xsd ی هستند که حاوی مشخصات یک یا چند المنت یا آبجکت می باشند و در شاخه ی 12 یا 14 یا 15 شیرپوینت قرار میگیرند. و شیرپوینت با استفاده از این مشخصات اقدام به ایجاد آنها در دیتابیسش می کند.

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

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

  • سرعت در پیاده سازی: به راحتی و با ویزارد خود VS(البته فعلا فقط لیست) میشه آبجکت مورد نظر رو ایجاد کرد.
  • ریسورس یا چند زبانه کردن: از طریق کد هم امکان این کار هست اما همیشه پاسخگو نیست و برخی مواقع درست عمل نمی کنه، اما از این طریق خیلی سریع این امکان فراهم هست و بعد از دیپلوی هم به خوبی آبجکت مورد نظر چند زبانه خواهد بود.
  • امکان دستکاری پس از دیپلوی: با توجه به اینکه تعاریف مورد نظر به صورت فیزیکی توی پوشه ی 14 موجود هست میشه تغییرات و اصلاحات لازمه رو توی فایلش داد.

میشه با استفاده از یک پروژه ی سطح فارمی تعاریف مورد نظر رو در یک پکیج(wsp) قرار داد و از طریق یک فیچر سطح سایت یا وب برروی سایت مورد نظر دیپلوی و استفاده کرد. در ادامه در یک سلوشن تستی یک لیست به همراه چند فیلد تعریف می کنیم.

ابتدا یک پروژه ی شیرپوینتی در سطح فارم ایجاد کنید(منظور اینکه سندباکس نباشه). بعد روی پروژه راست کلیک کنید و یک آیتم از نوع لیست به نام TestList اضافه کنید.

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

بعد از کلیک برروی Add وارد قسمت ویزارد ایجاد لیست میشید.

در این ویزارد میتونید تعیین کنید که لیست مورد نظر از روی قالب های موجود در سایت ایجاد بشه یا برای خودش قالب مجزا داشته باشه که در این صورت امکان افزودن ستون های دلخواه و Customize کردن اون فراهم میشه. اگر یک قالب موجود رو انتخاب کنید(گزینه های رادیوی دوم) در واقع تنها یک نمونه ی جدید از اون ایجاد خواهید کرد و نه یک لیست با ستون های دلخواه.

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

solution

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

فایل Schema.xml حاوی تعاریف مورد نیاز قالب لیست می باشد و فایل Element.xml نیز حاوی مشخصات قالب لیست هست و فایل المنت TestListInstance هم حاوی مشخصات نمونه ی جدیدی از روی قالب لیست می باشد.

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

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

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

 

همونطور که اشاره کردم دیزاینر قابلیت تنظیم تمام انواع فیلدها رو نداره و برای برخی فیلدها مثل لوکاپ یا همین فیلد Permissions باید وارد کد Xml بشید. بنابراین فایل Schema.xml رو باز کنید و در قسمت Fields فیلد Permissions رو پیدا کنید و خصوصیت UserSelectionMode رو برابر با عدد 1 قرار بدید. بدین معنا که هم کاربران و هم گروه های شیرپوینتی قابل انتخاب خواهند بود.

لیست کامل مشخصات و مقادیر فیلدهای مختلف رو میتونید در این آدرس مشاهده کنید:
http://msdn.microsoft.com/en-us/library/office/aa979575(v=office.14).aspx

در نهایت روی پروژه راست کلیک و اون رو دیپلوی کنید. وارد سایت مورد نظر بشید لینک لیست در منوی سمت چپ قابل مشاهده خواهد بود(البته در صورتی که تیک Display list at quick lunch رو در تب list در دیزاینر VS زده باشید).

چند نکته رو در نهایت اضافه کنم:

  • در صورت غیرفعال کردن فیچر راهکار، لیست و قالب آن همچنان دست نخورده باقی خواهند ماند و قابل استفاده خواهند بود و امکان تعریف چند لیست با استفاده از قالب آن فراهم شده است.
  • در صورتی که راهکار Retract بشه قالب لیست نیز حذف خواهد شد اما لیست آن باقی خواهند ماند ولی به دلیل عدم وجود قالب، دیگه لیست قابل استفاده نخواهد بود :( ولی با دیپلوی مجدد همه چی رو به راه خواهد شد :)
  • زمانی که راهکار رو از طریق VS مجددا دیپلوی میکنید با توجه به اینکه نمونه ی لیست توی سایت وجود داره ازتون سوال خواهد کرد که به صورت خودکار مسئله رو حل کنه که البته به حذف نمونه ی لیست و ایجاد مجدد اون ختم خواهد شد. در صورتی که بخواید نمونه ی لیست در صورت وجود داشتن دست نخورده باقی بمونه روی نمونه ی لیست در VS راست کلیک کنید و بعد هم روی Open folder in file explorer کلیک کنید سپس فایل SharePointProjectItem.spdata رو با notepad باز کنید و کد زیر رو به انتها و قبل از بسته شدن تگ ProjectItem اضافه کنید به صورت زیر:
  <ExtensionData>
    <ExtensionDataItem Key="DeploymentConflictResolutionBehavior" Value="None" />
  </ExtensionData>
Loading