پیاده سازی ساختار Parent / Child در یک لیست

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

ولی خوشبختانه با وجود ابزار توسعه قدرتمندی چون Visual Studio، امکانات بسیار زیادی برای این فریم ورک تهیه شده و می توان گفت که عملاً بیشتر کمبودها جبران شده است. بعنوان مثال پروژه SLAM بصورت قابل توجهی این مشکل را برای چند لیست متفاوت مرتفع نمود .

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

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

اما روش ساده تر نگهداری این دو نوع اطلاعات در قالب یک لیست است؛ در این روش عملا از دو نوع Content Type جهت نگهداری اطلاعات استفاده می شود، نوع Folder جهت نگهداری اطلاعات شرکت ها و نوع Item جهت نگهداری اطلاعات کارمندان. لذا دراین صورت می توان برای هر شرکت چندیدن کارمند تعریف نمود که بصورت چند Item داخل یک Folder قرار می گیرند، بصورت زیر :

مراحل ساخت Content Type مربوط به Company :

۱٫ انتخاب گزینه Site Content Types از Site Actions -> Site Settings

۲٫ انتخاب گزینه Create و ساخت یک Content Type جدید با مقادیر زیر :

Name : Company Parent
Select parent content type from : Folder content types
Parent content type : Folder
Existing group : Custom Content Types

Click OK

۳٫ انتخاب گزینه Add from new site column از بخش Columns و ساخت یک ستون جدید برای Content Type ساخته شده :

Column Name : CompanyID
Type : Number

Click OK

نهایتاً Content Type ساخته شده می بایست به شکل زیر باشد، بعدا ستون Title را به نام CompanyName تغییر نام خواهیم داد :

 

مراحل ساخت Content Type مربوط به Employee:

۱٫ انتخاب گزینه Site Content Types از Site Actions -> Site Settings

۲٫ انتخاب گزینه Create و ساخت یک Content Type جدید با مقادیر زیر :

Name : Employee Child
Select parent content type from : List content types
Parent content type : Item
Existing group : Custom Content Types

Click OK

۳٫ انتخاب گزینه Add from new site column از بخش Columns و ساخت یک ستون جدید برای Content Type ساخته شده :

Column Name : EmployeeID
Type : Number

Click OK

۴٫ مجددا انتخاب گزینه Add from new site column از بخش Columns و ساخت یک ستون جدید برای Content Type ساخته شده :

Column Name : Branch
Type : Single line of text

Click OK

 

نهایتاً Content Type ساخته شده می بایست به شکل زیر باشد، بعدا ستون Title را نیز به نام EmployeeName تغییر نام خواهیم داد :

خوب در این مرحله می بایست یک لیست جدید ایجاد نموده و دو Content Type ساخته شده فوق را در آن اضافه کنیم :

۱٫ از منوی Site Settings گزینه Create را انتخاب می کنیم.

۲٫ گزینه Custom List را انتخاب کرده و لیست جدید با نام CompanyEmployees می سازیم.

۳٫ به صفحه تنظیمات لیست (List Settings) رفته و گزینه Advanced Settings را از بخش General Settings انتخاب می نماییم.

۴٫ مقدار گزینه Allow management of content types را به Yes تغییر داده تا امکان افزودن Content Type جدید فراهم شود، سپس دکمه OK را می فشاریم.

۵٫ دو Content Type ساخته شده را از طریق Add from existing site content types به لیست اضافه می کنیم.

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

برای افزودن Company بر روی فلش کنار دکمه New از لیست کلیک کرده تا لیست Content Type ها نشان داده شود سپس از لیست نمایش داده شده گزینه Company Parent را انتخاب می کنیم. به همین ترتیب می توان اطلاعات شرکت ها را وارد نمود، اما برای وارد نمودن اطلاعات کارمندان هر شرکت ابتدا باید بر روی نام شرکت ساخته شده کلیک کرده تا وارد آن شرکت شویم سپس اقدام به ساخت یک کارمند با استفاده همان دکمه New می کنیم.

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

برای جلوگیری از حذف یک شرکت هم می توان با استفاده از یک EventHandler مانع از حذف Content Type های نوع Folder و یا شرکت شد.

موفق باشید.

منبع : Medhat Elmasry

 

پاسخ دهید