Использование Sharepoint GridViews на сервере без установленного SharePoint
У меня есть веб-приложение, которое должно извлекать данные из списка Sharepoint и отображать их с тем же "внешним видом", что и в списке sharepoint, но на другом веб-сайте.
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.webcontrols.spgridview.aspx
Веб-приложение не установлено на сервере с основанием SharePoint. DLL-библиотеки sharepoint естественным образом отсутствовали, но я скопировал их с сервера, на котором установлен SP, и добавил их в свой проект. Теперь страница компилируется, но выдает исключение, которое появляется всякий раз, когда я вставляю элемент SPGridView ASP.
Исключение: System.ArgumentException: требуется информация об абсолютном пути.
Трассировки стека:
[ArgumentException: Absolute path information is required.]
System.Security.Util.StringExpressionSet.CreateListFromExpressions(String[] str, Boolean needFullPath) +12658807
System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess access, AccessControlActions control, String[] pathListOrig, Boolean checkForDuplicates, Boolean needFullPath, Boolean copyPathList) +112
Microsoft.SharePoint.Utilities.SPUtility.ComputeFileHash(String filePath) +470
Microsoft.SharePoint.Utilities.SPUtility.MakeBrowserCacheSafeLayoutsUrl(String name, Boolean localizable) +487
Microsoft.SharePoint.WebControls.ScriptLinkInfo.ToScriptUrl(Page page) +488
Microsoft.SharePoint.WebControls.ScriptLinkInfo.ToScriptBlock(Page page) +24
Microsoft.SharePoint.WebControls.ScriptLink.RegisterForControl(Control ctrl, Page page, String name, Boolean localizable, Boolean defer, Boolean loadAfterUI, String language) +1195
Microsoft.SharePoint.WebControls.ScriptLink.Register(Page page, String name, Boolean localizable, Boolean defer, String language, String uiVersion) +38
Microsoft.SharePoint.WebControls.ScriptLink.Register(String uiVersion, Page page, String name, Boolean localizable, Boolean defer) +59
Microsoft.SharePoint.WebControls.ScriptLink.Register(Page page, String name, Boolean localizable) +30
Microsoft.SharePoint.WebControls.SPGridView.OnLoad(EventArgs args) +86
System.Web.UI.Control.LoadRecursive() +71
System.Web.UI.Control.LoadRecursive() +190
System.Web.UI.Control.LoadRecursive() +190
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3064
Если я удалю элемент SPGridView ASP, страница запустится. Кто-нибудь знает, как заставить это работать? Я знаю, что могу использовать клиентскую объектную модель, но AFAIK не предоставляет ничего для отображения списков с тем же внешним видом и функциональностью, что и в Sharepoint.
1 ответ
Самый простой способ фиктивного размещения контента SharePoint на веб-странице (т. е. показ контента SharePoint на странице, размещенной на сервере, отличном от SharePoint) — это классический и надежный старый IFrame. Вот шаги:
- Создайте представление для исходного списка, исключающее такие вещи, как навигация, верхние и нижние колонтитулы и тому подобное. Вы хотите, чтобы он был как можно ближе к данным списка.
- На целевой странице вставьте IFrame и установите источник указанного IFrame так, чтобы он указывал на страницу просмотра, которую вы настроили в пункте 1 выше.
- Убедитесь, что такие вещи, как междоменные сценарии и т. д., включены в белый список для исходного сайта на целевом сайте. SharePoint использует МНОГО JavaScript, особенно в наши дни, поэтому, если ваш целевой сайт блокирует междоменные сценарии, это может испортить вам день.
Это должно сработать.