En otro ejemplo de lo que ahora he dado en llamar Guerrilla Coding
Los ListViewWebparts crean en la lista de la que son "hijos" una vista Oculta cuando nosotros personalizamos la vista del webpart. Esto implica que para copiar los webparts a otro sitio tendremos que copiar las vistas en la lista del sitio de destino y apuntar al webpart a la nueva vista, no sé si me explico bien... mejor pondré un trozo de código...
Aquí lo que hago es copiar los webparts de cada fichero de origen al de destino, y les doy un tratamiento especial si son ListViewWebpart
private static void CopyWebParts(SPFile origFile, SPFile destFile) { SPLimitedWebPartManager origWpm = origFile.GetLimitedWebPartManager(PersonalizationScope.Shared); SPLimitedWebPartManager destWpm = destFile.GetLimitedWebPartManager(PersonalizationScope.Shared); DeleteWebparts(destWpm); foreach (Microsoft.SharePoint.WebPartPages.WebPart webpart in origWpm.WebParts) { Microsoft.SharePoint.WebPartPages.WebPart newWp; if (webpart is ListViewWebPart) newWp = UpdateListViewWebPart(webpart as ListViewWebPart, origFile.GetWeb(), destFile.GetWeb()); else newWp = webpart; destWpm.AddWebPart(newWp, Common.ConvertToString(newWp.ZoneID), newWp.ZoneIndex); } try { destFile.Publish("Added Web Parts"); destFile.Approve("Web Part additions approved"); } catch { } } private static ListViewWebPart UpdateListViewWebPart(ListViewWebPart webpart, SPWeb origWeb, SPWeb destWeb) { ListViewWebPart newWebPart = webpart; //yeah I know. string oldListName = webpart.ListName; string oldViewGuid = webpart.ViewGuid; SPList OrigList = origWeb.Lists.GetList(new Guid(oldListName), true); SPList DestList = destWeb.Lists[OrigList.Title]; SPView OrigView = OrigList.GetView(new Guid(oldViewGuid)); SPView DestView = DestList.Views.Add(string.Empty, OrigView.ViewFields.ToStringCollection(), OrigView.Query, OrigView.RowLimit, OrigView.Paged, OrigView.DefaultView); DestView.Hidden = OrigView.Hidden; DestView.Scope = OrigView.Scope; DestView.ApplyStyle(destWeb.ViewStyles.StyleByID(Convert.ToInt32(OrigView.StyleID))); DestView.Update(); newWebPart.ViewGuid = DestView.ID.ToString("B").ToUpper(); newWebPart.ListName = destWeb.Lists[OrigList.Title].ID.ToString("B").ToUpper(); return newWebPart; }
Y, contra todo pronóstico, funcionó... Espero no tener que tocar estos webparts otra vez en mucho tiempo.
No hay comentarios:
Publicar un comentario