آی تی نرد

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

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

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

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

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

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

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

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

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

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

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

بیشتر...

نکات برنامه نویسی Timer Job ها در شیرپوینت

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

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

جاب ها در سطح Web Application تعریف و ایجاد میشوند و مدیریت آنها تنها از طریق سنترال ادمین و با دسترسی مدیر فارم امکان پذیر می باشد. برای ایجاد و مدیریت نمونه ی جدید جاب از طریق آبجکت مدل مهیا شده می بایست شرایط زیر حتما فراهم شده باشد:

  • اجرای این کدها در سروری که شیرپوینت در ان نصب می باشد.
  • کدها یا آبجکت مدل مورد نظر می بایست ابتدا حتما در GAC قرار داشته باشند.
  • ایجاد نمونه ی جدید جاب با دسترسی کاربر مدیر فارمی که بتواند در حالت نرمال و از طریق سنترال ادمین جاب ها را مدیریت کند.
  • یکی بودن Application Pool محیطی که در ان قرار هست جاب اجرا یا ایجاد شود با سنترال ادمین. برای مثال App Pool سایت کالکشن ایکس با سنترال ادمین یکی باشد.(که البته این کار از نظر توپولوژی و استاندارد های شیرپوینت مشکل دارد.)

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

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

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

بیشتر...

خطای 400 و XML Parsing Error: no element found در شیرپوینت

توی سنترال ادمین شیرپوینت 2010 مشغول ایجاد یک Web Application جدید بودم که در حین این کار با خطای زیر مواجه شدم:

HTTP 400 - Bad Request (Request Header too long)

اولین کاری که کردم همین خطا رو توی نت سرچ کردم که متوجه شدم معمولا این خطا زمانی در شیرپوینت اتفاق میوفته که کاربری که با اون لاگین کردید جزء گروههای زیادی در اکتیو دایرکتوری هست که می بایست یا تعداد این گروه ها کمتر بشه یا طول پیشفرض Request در رجیستری ویندوز بیشتر بشه.

خب در صورتی که بخواید طول Request رو زیاد کنید میتونید کد زیر رو در یک فایل با پسوند reg ذخیره و اجرا کنید:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters] 
"MaxFieldLength"=dword:0000fffe 
"MaxRequestBytes"=dword:0007a120

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

XML Parsing Error: no element found
Location: http://.../_layouts/error.aspx?ErrorText=Failed...
Line Number 1, Column 1:

و اونقدر طول این خطا زیاد بود که به خطای قبلی حق دادم که بگه طول Request زیاد هست. مقداری جستجو کردم اما به راه حل دقیقی نرسیدم به همین دلیل لاگ خطاهای شیرپوینت رو بررسی کردم و احتمال دادم که خطای زیر باعث به وجود اومدن این مشکل هست:

Failed to call GetTypes on assembly Microsoft.Office.InfoPath.Server, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c. Could not load file or assembly 'Microsoft.Office.InfoPath, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' or one of its dependencies....

خب همین خطا رو با کیورد شیرپوینت سرچ کردم و متوجه شدم مشکل همین جاست و زمانی که شیرپوینت 2010 نصب هست، نصب آفیس 2013 و به خصوص اینفوپس 2013 کار درستی نیست و این مشکل رو به وجود میاره به همین دلیل اسمبلی های این برنامه رو از پوشه ی C:\Windows\assembly\GAC_MSIL پاک و دوباره سعی کردم یک وب اپلیکیشن ایجاد کنم و خوشبختانه این بار بدون هیچ مشکلی عملیات انجام شد.

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

Policy.14.0.Microsoft.Office.InfoPath
Policy.14.0.Microsoft.Office.InfoPath.Client.Internal.Host
Policy.14.0.Microsoft.Office.InfoPath.FormControl

در انتها هم IIS رو با دستور زیر در CMD ریست کنید:

iisreset /noforce

امیدوارم که در صورتی که با این مشکل مواجه شدید این راه کار بهتون کمک و در وقتتون صرفه جویی کنه.

نصب استاندارد و اصولی شیرپوینت 2010 برروی windows server 2012 R2

در این مطلب به نصب شیرپوینت 2010 سرور به صورت کاملا استاندارد(Production Environment) برروی جدیدترین ویندوز سرور یعنی 2012 r2 خواهم پرداخت. ضمن اینکه نصب نسخه ی 2013 شیرپوینت نیز به همین صورت خواهد بود فقط پیش نیازهای اون مقداری متفاوت هست، در مطالب بعدی سعی میکنم بیشتر در مورد نصب 2013 روی 2012 R2 توضیح بدم یه نکته ای داره که البته اگر مشتاق باشید میتونید توضیحات کامل رو توی این مطلب مطالعه کنید: how-to-install-sharepoint-2013-on-windows-server-2012-r2

از Sql Server 2012 SP1 نیز استفاده خواهم کرد.

آماده سازی برای شروع:
ابتدا سعی کنید تمام نرم افزارهای مورد نیاز رو از این مطلب دانلود کنید و آماده داشته باشید و ویندوز رو هم میتونید از این لینک دانلود کنید. برای فعال سازی ویندوز هم از برنامه ی Microsoft Toolkit 2.5 Beta 5 و یا جدیدتر استفاده کنید.

ابتدا باید بگم تنها سرویس پک 2 شیرپوینت قابل نصب برروی این ویندوز می باشد. یعنی ستاپ ادغام شده به همراه سرویس پک 2 که البته یه خورده گیر آوردنش مشکل هست اما من اون رو از تورنت دانلود و مستقیم کردم از سایت رپیدباز می تونید در صورتی که عضو باشید دانلود کنید: دانلود شیرپوینت سرور 2010 سرویس پک 2

خیلی قبل تر از اجرای فایل ستاپ شیرپوینت:
بهتر هست برای هر پلتفرم یعنی Sql, SharePoint,Domain Controller یک سرور مجزا داشته باشید که توصیه میشود از یک سرور فیزیکی به همراه دو VM استفاده کنید. اما به صورت Single هم میشه نصب کرد. در صورتی که میتونید از سه سرور استفاده کنید سرور هاست رو به عنوان دومین کنترلر قرار بدید و سه کاربر در اکتیودایرکتوری ایجاد کنید(بهتر هست در حالت Single هم از این سه کاربر استفاده کنید در غیر اینصورت میتوانید از کاربر ادمین هم استفاده کنید):

  1. یک کاربر با دسترسی کاملا پایین یعنی تنها در گروه Domain Users کفایت می کند ایجاد کنید برای مثال با نام SqlServices که برای تمام سرویس های Sql استفاده خواهد شد.
  2. کاربری با نام مثلا SPFarm که به عنوان مدیر فارم استفاده خواهد شد و این رو هم در صورتی که شیرپوینت رو در یک سرور جداگانه نصب میکنید تنها کافی هست در دومین کنترلر به گروه Domain Users اضافه شود. در غیر اینصورت به گروه مدیران داخلی و نه Domain Admin اضافه کنید. در صورتی که شیرپوینت در سرور جداگانه قرار هست نصب شود این کاربر رو به گروه مدیران داخلی اون سرور اضافه کنید. البته این رو بگم که میتونه کاربر مدیر فارم، مدیر ویندوز هم نباشد اما می بایست گروهی با دسترسی های مورد نیاز ایجاد شود و به نظرم لازم نیست و همین قدر امنیت هم کفایت میکند :)
  3. در نهایت هم کاربری برای نصب و پیکره بندی شیرپوینت مثلا با نام SPAdmin با دسترسی پایین در اکتیو ایجاد کنید اما توجه کنید که در سرور شیرپوینت و Sql می بایست در گروه مدیران داخلی باشد و در سرور Sql هم مجوزهای dbcreator و securityadmin رو از طریق Managment Studio به اون اضافه کنید. مطمئنا در محیط تولیدی و استاندارد کاربر ادمین دومین کنترلر به مدیر شیرپوینت برای نصب اون داده نخواهد شد و اصلا هم نیازی به این کار نیست و کاربر Administrator بسیار حیاتی می باشد.

بسیار خب بعد از راه اندازی دومین و افزودن کاربران اشاره شده و ایجاد سرورهای مجازی شیرپوینت و Sql بهتر هست ابتدا با نصب Sql در سرور خودش شروع کنید، ابتدا با کاربر SPAdmin وارد سرور شوید و در صورتی که فقط برای استفاده ی معمولی شیرپوینت از Sql استفاده خواهید کرد تنها کافیست تا فیچرهای Database Engine و Management Studio Complete رو در هنگام نصب تیک بزنید. بعد از نصب، پورت 1433 رو در هردو صورت دسترسی ورودی و خروجی در فایروال باز کنید چون این پورت مخصوص Sql می باشد.

حالا با کاربر SPAdmin وارد سرور مجازی شیرپوینت بشید و ابتدا پیشنیازهای اون رو طبق این مطلب به ترتیب یا با استفاده از اسکریپت پاورشل موجود در مطلب نصب کنید. سپس در پوشه ی ستاپ شیرپوینت فایل "PrerequisiteInstaller.exe" رو اجرا کنید و تا انتها ادامه بدید تا با خطا مواجه بشید! خب ما فقط از این ابزار برای افزودن فیچرهای ویندوز سرور مورد نیاز شیرپوینت استفاده کردیم و نه نصب پیشنیازها.

بیشتر...

راهکار تغییر مجوز لیستها و زیرسایت هایی که ارث بری آنها قطع شده برای شرپوینت 2010

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

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

بیشتر...