وبپارت رویدادها یکی از مجموعه وبپارتهای مدرنی است که بر اساس آخرین فناوریهای شیرپوینت در زمینهی توسعهی رابط کاربری مبتنی بر جاوا اسکریپت ساخته شده است. یکی از این فناوریها استفاده از مجموعه کامپوننتهایی است که بر اساس فریمورک react توسعه داده شدهاند. مجموعهی Fabric UI که اخیرا نام آن به Fluent UI تغییر داده شده است، مجموعهای از کامپوننتهای react است که قرار است بعد از این به صورتی یکپارچه در کلیهی محصولات مایکروسافت از جمله آفیس، شیرپوینت و داینامیکز برای ساخت رابط کاربری بکار بسته شود. این مجموعه شامل کامپوننتها و کنترلهای متعددی است، ازجمله کامپوننتهایی برای ویرایش اطلاعات تاریخی (DateTimePicker). متاسفانه کنترلهای مربوط به تاریخ، فقط تاریخ میلادی را پشتیبانی میکنند و نمیتوانند برای سایر تقویمها، حتی تقویمهای استاندارد شیرپوینت، استفاده شوند. برای مثال اگر تقویم شیرپوینت خود را روی هجری قمری تنظیم کنید، میبینید که رویدادها هنوز یا تقویم میلادی نمایش داده میشوند. ما این موضوع را قبلا در مورد نسخهی جدید مایکروسافت داینامیکز ۹ تجربه کرده بودیم، و از این تجربه برای شیرپوینت ۲۰۱۹ هم استفاده شد. تا بتوانیم تقویم شمسی را در وبپارت رویدادها پشتیانی کنیم.
طبیعتا اینکار بایستی در لایهی جاوا اسکرپت صورت پذیرد، در اینجا لازم میشود برخی از متدهای جاوا اسکریپت تغییر داده شده و اورراید (override) شوند. برای مثال یکی از کامپوننتهای اصلی، 'CalendarDay' است. این کنترلی است که روزهای ماه را در کنترل انتخاب تاریخ نشان میدهد:
برای تصحیح این کنترل برای نمایش تقویم شمسی ناگزیر به اورراید کردن برخی از متدها میشویم:
به این ترتیب مجموعهای از متدهای fix… برای تصحیح پروتوتایپ کامپوننتها مرتبط نوشته شد:
مشکل بعدی اینجا بود که چگونه این تغییرات در کدهای اجرایی شیرپوینت اعمال شود. بر اساس استانداردهای فارسیسازی پرنیان، این تغییرات نبایستی در فایلهای موجود روی هارددیسک انجام شود، و تنها در زمان اجرا بایستی اعمال شود، ضمنا تغییرات بایستی حتما برگشتپذیر باشند. برای اینکار لازم بود شد ما محل ایجاد آبجکتها را شناسایی کنیم، به ترتیبی که بعد از ایجاد آنها، تغییرات لازم اعمال شود. فریمورک react از ابزار Babel برای ساخت و بارگذاری ماژولها استفاده میکند. این ابزار کدهای جاوا اسکریپت را در قابل وبپکها، با مکانیزم نسبتا پیچیدهای فشرده میکند. ما موفق شدیم این مکانیزم را رمزگشایی کنیم و درست در جایی که کامپوننتها بارگذاری میشوند، تغییرات لازم را در آنها اعمال کنیم:
با این روش توانستیم کامپوننتهای 'TimeSPan'، 'CalendarDay' و 'DatePicker' را برای تقویم شمسی تصحیح کنیم. و نهایتا تقویم شمسی را در وبپارت رویدادها در شیرپوینت ۲۰۱۹ فعال کنیم:
این تغییرات در نسخهی ۹٫۰٫۶ فارسیساز پرنیان برای شیرپوینت ۲۰۱۹ انجام شده است. بنا بر پیشفرض این تصحیح به صورت خودکار در نصب فارسیساز اعمال نمیشود، برای استفاده از آن لازم است کنسول پرنیان را باز کنید و با دستور Commit EventsWebPart آنرا اعمال کنید.