تولید نرم افزار تحت شیرپوینت

یکی از مباحثی که این روز ها در تمام شرکت های مرتبط با شیرپوینت بسیار جدی دنبال میشود تولید نرم افزار تحت شیرپوینت است ، از تولید نرم افزارهای کوچک مثل ستون های سفارشی ، وب پارت ها و Add-on ها گرفته تا نرم افزارهای بزرگ مثل مدیریت پروژه ، اتوماسیون اداری ، مدیریت ایده ها ، کنترل مستندات و ….

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

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

  • استفاده از لیست های شیرپوینت یا دیتابیس ؟
  • یک مجموعه سایت یا مجموعه ای از سایت ها ؟
  • بدون کد ، sandboxed solution یا full-trust solution ؟
  • SharePoint Foundation یا SharePoint Server ؟

همچنین شما به عنوان یک توسعه دهنده باید از تمام امکاناتی که شیرپوینت در اختیار شما قرار میدهد باخبر باشید ، به تصویر زیر توجه کنید :

شیرپوینت امکانات توسعه کاملی در اختیار شما قرار داده است ، در قسمت Content  یا محتوا شما امکاناتی نظیر مجموعه سایت ، سایت ها ، لیست ها ، پوشه ها و آیتم در اختیار دارید که میتوانید با استفاده از آنها داده ها و تراکنش های نرم افزار را مدیریت کنید ، در یک سطح بالاتر و در قسمتAdministration  آبجکت هایی برای توسعه مدیریت و فارم در اختیار دارید و همچنین آبجکتی مثل SPPersistedObject که با استفاده آن میتوانید تنظیمات دلخواه و جدیدی را توسعه داده و به شیرپوینت بیافزایید ، همچنین با امکاناتی نظیر SPJobDefinition میتوانید اکشن های خاصی را تولید کنید که به صورت اتوماتیک و در زمان های مشخص عملیاتی را انجام دهند .

در قسمت ماشین و در صورتی که نیاز داشته باشید به سطوح پایین تری از نرم افزار دسترسی داشته باشید میتوانید از امکانات ASP.Net  مثل HTTP Modules و یا Web.Config و وب سرویس استفاده کنید .

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

البته امکاناتی که در نسخه ۲۰۱۰ اضافه گردیده بسیار گسترده است که در این بحث نمیگنجد و پیشنهاد میکنم حتما آنها را بررسی کنید ، امکاناتی مثل روابط بین لیست ها ، امکان Join کردن آنها ، LINQ ، استفاده از Silverlight و امکانات Client Object Model ، توجه به امکانات جدید اضافه شده در Event Receiver ها و Workflow ها و ….

خوب ، کمی در مورد امکانات صحبت کردیم حالا میخواهیم بررسی کنیم که چه زمانی باید از این امکانات استفاده کنیم ، آیا باید از تمام این امکانات در نرم افزار استفاده کرد ؟

پکیج یا طراحی

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

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

محتوا

همیشه یکی از سوالاتی که در کار با شیرپوینت برای شما پیش می آید این است که از چه نوع سایتی استفاده کنیم ؟ آیا یک سایت از نوع Blank  باشد یاTeam Site ؟ آیا نیاز به Document Center  و یا Record Center دارید ؟ آیا یک سایت نیاز است یا میبایست یک مجموعه سایت همراه چندین زیر سایت ساخته شود ؟ آیا نیاز به ایجاد مجموعه سایت های جداگانه با قابلیت ارتباط وجود دارد ؟

اینها سوالات مهمی است که میبایست در ابتدا پروژه مطرح شود زیرا زیر ساخت آن را تشکیل میدهند .

سوالات دیگری که در این قسمت باید مطرح شود این است که :

  • به یک Administrator  نیاز است یا نیاز به مدیران بیشتری میباشد ؟
  • سطح دسترسی کاربران به سایت و لیست ها چگونه خواهد بود ؟
  • آیا در تولید کد نیاز به قسمت هایی هست که به دسترسی بالاتر نیاز داشته باشد ؟
  • آیا نیاز به تولید یک Template  جدید میباشد یا Template های موجود کفایت میکند ؟
  • آیا میبایست امکاناتی به سایت مورد استفاده افزوده شود ؟
  • ارتباط این سایت با دیگر سایت ها و قسمت های شیرپوینت چگونه است ؟
  • آیا نیاز به کنترل رویدادهای سایت ، لیست و آیتم ها میباشد ؟
  • فرایندهای مرتبط با نرم افزار چیست و مراحل انجام کار مشخص میباشد ؟

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

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

سرویس ها

اجازه بدید از سرویس ها شروع کنیم ، چه زمانی باید از سرویس ها استفاده کرد ؟

  • زمانی که بخواهیم به اطلاعات مشترکی خارج از محدوده برنامه یا سایت دسترسی داشته باشیم.
  • استفاده از ابزارهایی مثل آفیس و ارتباط با مجموعه نرم افزارهای آن.
  • جستجوی اطلاعات
  • انجام عملیاتی که بالای ۵ دقیقه زمان نیاز داشته باشد.

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

نرم افزارهایی با حجم اطلاعات زیاد

ممکن است در مواقعی نیاز به تولید نرم افزارهایی باشد که اطلاعات بسیار زیادی در آن رد و بدل میشود مثل اتوماسیون اداری ، BPMS ، کنترل کیفیت و کنترل مستندات ، انبار ، منابع انسانی و ….

در این مواقع توجه به برخی نکات بسیار حائز اهمیت است مثل :

  • استفاده از صفحات مدیریتی ( _layouts Pages ) و یا وب پارت ها برای نمایش داده ها
  • استفاده از Web Application های جداگانه برای استقرار سیستم و بهبود کارایی
  • ارائه راهکارهایی بر روی دیتابیس های موجود در SQL Server برای عدم افت کارایی سیستم زمانی که حجم اطلاعات رو به افزایش است
  • کاهش افراد با دسترسی Designer و Admin و استفاده بیشتر از دسترسی Contribute

مهمترین مسئله در ضمینه اینگونه نرم افزارهای کارایی و سرعت دسترسی به داده هاست که باید بسیار مورد توجه قرار گیرد به خصوص در ضمینه فیلتر کردن داده ها و همچنین فراخوانی آنها ( میتوانید سری مقالات در مورد افزایش کارایی در برنامه نویسی در شیرپوینت در پست های قبلی را مطالعه کنید )

امنیت

امنیت یا Security  در شیرپوینت یکی از مشکلات دائمی برنامه نویسان شیرپوینتی است ! به همین خاطر میبایست همیشه در مورد آن به دقت برنامه ریزی کنید ، مواردی که میبایست در این ضمینه در نظر بگیرید عبارتند از :

  • استفاده از امکاناتی مثل Break Inheritance  و Item Level Permisions در درجه بسیار خطرناک بوده زیرا باید مطمئن باشید که حتما این کار به درستی انجام شود وگرنه نرم افزار از کار خواهد افتاد و همچنین هزینه بسیار برای شما خواهد داشت و باعث کاهش کارایی خواهد شد .
  • همیشه زمانی که نیاز به ایجاد ، بروز رسانی و یا فراخوانی داده ها دارید بحث امنیت را خواهید داشت ، همیشه باید چک کنید که کاربر مجوز این عملیات را دارد یا خیر ؟ چه کاربرانی باید به این داده ها دسترسی داشته باشند و اگر دسترسی ندارند چه پیغامی میبایست دریافت کنند ؟
  • استفاده از آبجکت هایی مثل SPSecurity و یا Impersonation بسیاری از مشکلات امنیتی شما را برطرف خواهد کرد اما باید به خاطر داشته باشید استفاده مکرر از آنها خطراتی را نیز به همراه خواهد داشت !
  • منابع و داده هایی که به صورت عمومی در دسترس همه قرار میگیرند را از داده هایی که فقط گروهی میبایست به آنها دسترسی داشته باشند جدا کنید تا کنترل بهتری بر روی امنیت داده ها داشته باشید.
  • جستجو ( Search ) شیرپوینت از نا امن ترین جستجوهاست ! ممکن هر اطلاعاتی را به کاربر نمایش دهد ، همیشه زیرساخت جستجو را بررسی کرده و مطمئن شوید اطلاعات حساس در جستجوها به کاربر نمایش داده نمیشود !

Feature ها

در تمام نرم افزارهای کوچک و بزرگی که تولید میکنید ردپایی از Feature ها به چشم میخورد ، Feature ها به شما کمک میکنند تا نرم افزار را به قطعات کوچک تری تبدیل کرده و کنترل نرم افزار را بهتر در دست داشته باشید ، میتوانید Field ها ،  Content Type ها ، لیست ها ، مخازن اسناد ، فرایندها و هر چیز دیگری را در قالب Feature به شیرپوینت معرفی کنید ، این کار مزایای بسیار برای شما دارد و مهمترین آن استفاده از امکانات جدیدی است که در شیرپوینت ۲۰۱۰ برای Upgrade  کردن و نسخه گذاری Feature  ها اضافه گردیده .

همچنین باید این نکته را هم در نظر داشته باشید که هنگام فعال و غیرفعال کردن Feature ها میبایست پیش نیازها را چک کنید تا مشکلی در استفاده از آنها ایجاد نشود ، به طور مثال قبل از اینکه لیستی را فعال کنید که دارای ستون ها و Content Type هایی است که در Feature  های دیگری معرفی شده اند میبایست از فعال بودن Feature  های پیش نیاز اطمینان حاصل نمایید .

لیست یا دیتابیس

برای ذخیره داده ها از لیست استفاده کنیم یا دیتابیس ؟ هرکدام چه مزایا و معایبی دارند ؟ جواب این سوالات را در این قسمت میخواهیم بررسی کنیم ، ابتدا نگاهی به مزایا و معایب هر یک خواهیم انداخت .

لیست های شیرپوینت

  • پشتیبانی از اسناد ( Document Libraries )
  • یادآوری ها (Alerts )
  • فرایندها
  • امنیت
  • RSS
  • تعریف و پیاده سازی سریعتر

دیتابیس

  • تجمع
  • Transaction
  • کارایی و سرعت بیشتر
  • تناسب بیشتر
  • انعطاف پذیری بیشتر با کد

اما چه زمانی از لیست ها استفاده کنیم و چه زمانی از دیتابیس ؟

زمانی که نیاز است تا داده ها در دیتابیس ذخیره شوند میتوانید از راهکارهایی مثل لیست های خارجی ( External lists ) استفاده کنید .

زمانی از دیتابیس استفاده کنید که میخواهید داده هایی را بین سایت ها به اشتراک بگذارید و یا از کوئری های پیچیده استفاده کنید .

اگر میخواهید منابعی را در یک مجموعه سایت به اشتراک بگذارید میتوانید از یک لیست مخفی در سایت ریشه استفاده کنید .

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

زمانی که نیاز به اطلاعاتی در تمام سایت ها باشد ( بیشتر شبیه تنظیمات نرم افزار یا تنظیمات عمومی ) و یا استفاده از قابلیت های ثابت مثل نماها برای نمایش داده های در سایت های مختلف لیستی را در سایت ریشه قرار دهید .

اگر نیاز به امنیت منحصر به فرد برای لیست دارید و یا ممکن است لیست در هر سایت سفارشی سازی شود ( فیلد ها و یا نماهایی به آن اضافه شود ) در هر سایت لیستی بسازید .

نکته دیگر این است که با حذف هر سایت لیست های آن نیز حذف میشود ! این مسئله را دست کم نگیرید زیرا ممکن است تاثیر به سزایی بر کل نرم افزار شما بگذارد .

برای Sync  کردن داده های لیست با سایر لیست ها میتوانید از امکاناتی مثل ChangeLog یا آبجکت GetListItemsChanges استفاده کنید .

جریان های کاری در مقابل رویدادها

امکانات رویدادها :

  • پشتیبانی از Validation
  • کاهش سربار
  • سرعت اجرای بیشتر
  • محدودیت اجرای یک رویداد در یک زمان
  • پشتیبانی از لیست و عملیات سایت و تغییرات

امکانات جریان های کاری

  • پشتیبانی بهتر برای عملیات طولانی
  • انعطاف پذیری بیشتر در تغییرات
  • ارتباط و هماهنگی بیشتر با کارمندان ( ارسال ایمیل ، ایجاد وظیفه و … )
  • قابل ایجاد و استفاده در سایت های متفاوت

بدون کد یا کدنویسی

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

بدون کد نویسی امکانات زیر در اختیار شما قرار دارد :

  • XML Definitions
  • استفاده از Ajax ، جاوا اسکریپت و Jquery
  • Silverlight
  • Re-Usable WorkflowS

امکانات Sandbox Solutions

  • Webparts
  • Workflow Actions
  • Infopath
  • Features
  • Events

امکانات Full Trust

  • Timer Jobs
  • Custom Field Types
  • Document Convertors
  • Central Administration Development
  • Service Applications

استفاده از امکانات No Code Solution یا بدون کد انعطاف در اجرا دارد ولی وابسته به امکانات پایه است که با استفاده از امکانات مثل Client Object Model  و Silverlight میتوانید ضعف های آن را بپوشانید. همچنین میتوانید از اسکریپت ها و Custom Master Page ها برای سفارشی کردن استفاده کنید . همچنین با استفاده از امکاناتی مثل XSLTListView و ContentEditorWebpart میتوانید صفحات و لیست ها را نیز سفارشی کنید .

استفاده از Sandbox Solution بسیار توسط مایکروسافت و برنامه نویسان حرفه ای پیشنهاد میشود زیرا میتواند بیشتر نیازهای شما را برآورده کند و همچنین نصب و پیاده سازی آن ساده تر بود و سربار زیادی برای سیستم ندارد ( در مورد Sandbox Solution در پست های بعدی مطالب بیشتر ارائه خواهم کرد )

اما تمام کدها و نیازهایی که یک برنامه نویس داشته باشد در پروژه های Full Trust قابل دسترس است و شما میبایست تصمیم بگیرید که چه زمانی از این ۳ نوع راهکار استفاده کنید .

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

در آخر پیشنهاد میکنم پست های زیر را با دقت مطالعه کنید :

Developing Applications for SharePoint 2010

patterns & practices SharePoint Guidance

Application Lifecycle Management in SharePoint 2010

موفق و پیروز

پاسخ دهید