Проблема возникла из ниоткуда, при стандартном развертывании узла из нашего шаблона на котором содержались веб части
DataViewWebPart и ListFormWebPart происходила ошибка при обращении к данной странице, самое смешное что на другой странице при использовании данного метода все работало. Так что пришлось применить жесткий Хак, создать обработчик на создание страниц
OnActivated(
SPFeatureReceiverProperties properties) и в коде данного метода использовать методику Cut & Paste для изменения кода страницы. Проблема была в DataViewWebPart в чем там дело мы так и не разобрались так что пришлось сделать так, а не через обьектную модель WSS.В ходе работы нашел несколько интересных и мало описанных решений для создания веб частей программным методом. Их я приведу ниже.
// Return a SharePoint list filtered by query as a data source
static SPDataSource GetDataSource(string dataSourceId, string webUrl, SPList list, string query, uint maximumRow){
SPDataSource dataSource = new SPDataSource();dataSource.UseInternalName =
true;dataSource.ID = dataSourceId;
dataSource.DataSourceMode =
SPDataSourceMode.List;dataSource.List = list;
dataSource.SelectCommand =
"<View>" + query + "</View>"; Parameter listIdParam = new Parameter("ListID");listIdParam.DefaultValue = list.ID.ToString(
"B").ToUpper(); Parameter maximumRowsParam = new Parameter("MaximumRows");maximumRowsParam.DefaultValue = maximumRow.ToString();
QueryStringParameter rootFolderParam = new QueryStringParameter("RootFolder", "RootFolder");dataSource.SelectParameters.Add(listIdParam);
dataSource.SelectParameters.Add(maximumRowsParam);
dataSource.SelectParameters.Add(rootFolderParam);
dataSource.UpdateParameters.Add(listIdParam);
dataSource.DeleteParameters.Add(listIdParam);
dataSource.InsertParameters.Add(listIdParam);
return dataSource;}
// Create or Update a DataView programmatically public static bool CreateOrUpdateDataViewWebpart(string webUrl, string listName, string pageUrl, string xslLink, string zoneName, string webPartName, string titleUrl, bool needsUpdate, string query, uint index, uint maximumRow, PersonalizationScope personalizationScope)
{
bool viewCreatedOrUpdated = false;System.Web.UI.WebControls.WebParts.
WebPart wp = null;wsswp.
DataFormWebPart dataFormWebPart = null; using (SPSite site = new SPSite(webUrl)) using (SPWeb web = site.OpenWeb()){
web.AllowUnsafeUpdates =
true; SPList list = web.Lists[listName];wsswp.
SPLimitedWebPartManager wpManager = web.GetLimitedWebPartManager(pageUrl, personalizationScope); foreach (Microsoft.SharePoint.WebPartPages.WebPart wpTemp in wpManager.WebParts){
if (String.Compare(webPartName, wpTemp.Title, true) == 0){
wp = wpTemp;
break;}
}
string dataSourceId = webPartName; if (wp == null){
// Create a webpartdataFormWebPart =
new wsswp.DataFormWebPart();dataFormWebPart.TitleUrl = titleUrl;
dataFormWebPart.ZoneID = zoneName;
dataFormWebPart.Title = webPartName;
dataFormWebPart.XslLink = xslLink;
SPDataSource dataSource = GetDataSource(dataSourceId, webUrl, list, query, maximumRow);dataFormWebPart.DataSources.Add(dataSource);
wpManager.AddWebPart(dataFormWebPart, webPartName, (
int)index);viewCreatedOrUpdated =
true;}
else{
// Update an existing webpart if (needsUpdate){
dataFormWebPart = (wsswp.
DataFormWebPart)wp;dataFormWebPart.TitleUrl = titleUrl;
dataFormWebPart.DataSourceID =
string.Empty; SPDataSource dataSource = GetDataSource(dataSourceId, webUrl, list, query, maximumRow);dataFormWebPart.DataSources.Clear();
dataFormWebPart.DataSources.Add(dataSource);
wpManager.SaveChanges(dataFormWebPart);
viewCreatedOrUpdated =
true;}
}
return viewCreatedOrUpdated;
}
}
Комментариев нет:
Отправить комментарий