2010-05-04 16 views
9

Diesen Code in WSS verwendete 3.0/MOSS 2007 in FeatureReceiver.FeatureActivated zu arbeiten:"Die angegebene Ansicht ist ungültig" im Aufruf von LimitedWebPartManager.AddWebPart in Sharepoint 2010

using (SPLimitedWebPartManager limitedWebPartManager = Site.GetLimitedWebPartManager("default.aspx", PersonalizationScope.Shared)) { 
    ListViewWebPart listViewWebPart = new ListViewWebPart { 
     Title = title, 
     ListName = list.ID.ToString("B").ToUpper(), 
     ViewGuid = view.ID.ToString("B").ToUpper() 
    }; 
    limitedWebPartManager.AddWebPart(listViewWebPart, zone, position); 
} 

Ich versuche, auf Sharepoint zu konvertieren 2010 und es scheitert jetzt mit:

System.ArgumentException: The specified view is invalid. 
at Microsoft.SharePoint.SPViewCollection.get_Item(Guid guid) 
at Microsoft.SharePoint.WebPartPages.ListViewWebPart.EnsureListAndView(Boolean requireFullBlownViewSchema) 
at Microsoft.SharePoint.WebPartPages.ListViewWebPart.get_AppropriateBaseViewId() 
at Microsoft.SharePoint.WebPartPages.SPWebPartManager.AddWebPartInternal(SPSupersetWebPart superset, Boolean throwIfLocked) 
at Microsoft.SharePoint.WebPartPages.SPLimitedWebPartManager.AddWebPartInternal(WebPart webPart, String zoneId, Int32 zoneIndex, Boolean throwIfLocked) 
at Microsoft.SharePoint.WebPartPages.SPLimitedWebPartManager.AddWebPart(WebPart webPart, String zoneId, Int32 zoneIndex) 

Interessanterweise, wenn ich es von einem Gerät zu testen führen sie es funktioniert, ist es nicht nur in FeatureActivated. Wenn ich mit Reflektor debuggen ist es auf dieser Linie versagt:

this.view = this.list.LightweightViews[new Guid(this.ViewGuid)]; 

list.LightweightViews nur eine Ansicht zurück, die Standardansicht, obwohl list.Views alle von ihnen zurück. Wenn LightweightView von einem Komponententest ausgeführt wird, gibt es alle meine Ansichten zurück. Ich habe keine Ahnung, was LightweightViews bedeuten soll und mir gehen die Ideen aus. Hat noch jemand etwas?

Antwort

5

, damit es funktioniert, machen Sie einfach folgendes:

  • Sie die viewguid Eigenschaft des listviewwebpart Objekt nicht gesetzt ist (bleibt frei)
  • Aufruf der AddWebpart Methode

Es wird Generiere einen neuen Viewguid, der einer neuen versteckten Ansicht zugeordnet ist. Wenn Sie diese Ansicht dann anpassen möchten, rufen Sie sie aus der Liste ab und passen Sie sie an.

+0

Diese Alternative auch für mich gearbeitet: 1. setzen Sie nicht ViewGuid, 2. AddWebPart, 3. Satz ViewGuid, 4 . Änderungen speichern – jumbo

3

Hoffentlich hat niemand dieses Problem jemals oder sieht sogar diese Frage. In dem unglücklichen Fall, dass Sie das gleiche Problem bekommen, habe ich keine spezifische Lösung. Es begann schließlich für mich zu arbeiten (8 Stunden später). Ich kann Ihnen sagen, was ich getan habe, bevor es anfing zu arbeiten und hoffentlich wird es helfen:

Ich ging über die Benutzeroberfläche und legte die Ansicht, die ich versuchte, die Listenansicht Webpart als Standardansicht festlegen. Ich glaube, das hat es behoben und ich habe keine Ahnung warum.

Einige andere Hinweise auf das Problem:

  • ich meine Listen und Ansichten alle durch Code erstellen
  • RunWithElevatedPrivileges nicht
  • Instanziieren ein neues SPWeb in Funktion half aktiviert half nicht
  • Rahmen ListViewXml = view.HtmlSchemaXml, anstatt ViewGuid zu setzen, führte zum Absturz, aber die Ansicht war falsch, wenn dieser Code in FeatureActivated ausgeführt wurde, aber korrekt war, wenn er in einem Komponententest ausgeführt wurde.

Beste, die ich tun kann, sorry. Wenn Sie dieses Problem haben, viel Glück!

1

Nach dem Lesen this und this Artikel fand ich noch einfachere Lösung. Wenn Sie listviewwebpart einer beliebigen Seite hinzufügen, erstellt Webpart automatisch eine neue ausgeblendete Ansicht in der Liste, die diesem Webpart zugeordnet ist (Sie können dies in SharePoint Manager überprüfen).
Wenn Sie die Ansicht für listviewwebpart umschalten UI, erhalten Sie einfach Kopie der Felder aus der ausgewählten Ansicht und schieben Sie es in seiner versteckten Ansicht.

Alles, was Sie brauchen, ist diese Ansicht nach ID zu bekommen, fügen Sie die notwendigen Felder hinzu und entfernen Sie die Ansicht. So etwas wie das:

  var wpMngr = web.GetLimitedWebPartManager(workspaceWeb.Url + "/default.aspx", PersonalizationScope.Shared); 
      var attendeeListViewWebPart = 
       (ListViewWebPart)wpMngr.WebParts.Cast<WebPart>().FirstOrDefault(w => w.Title == Lists.AttendeesList); 
      var list = workspaceWeb.Lists[Lists.AttendeesList]; 
      var view = list.Views.Cast<SPView>().FirstOrDefault(w => w.ID.ToString("B").Equals(attendeeListViewWebPart.ViewGuid, StringComparison.OrdinalIgnoreCase)); 
      view.ViewFields.DeleteAll(); 
      view.ViewFields.Add... 
      view.Update(); 

Nach Artikel können Sie ViewGuid Eigenschaft für listviewwebpart nicht aktualisieren.

1

Ich habe mich auch heute damit gestritten.

Aus einigen seltsamen Gründen funktioniert der von Ihnen bereitgestellte Code in einigen Fällen, in anderen nicht.

Ich hatte keine Zeit, mehr darüber zu untersuchen, aber was ich sagen kann ist, dass wenn Sie bereit sind, das XsltListViewWebPart (das ist das Ersetzen des ListViewWebPart in SharePoint 2010) zu verwenden, Sie dieses lästige loswerden "Fehler".

Ich habe gerade in mir getestet.

Hoffe es hilft!

1

Ich war immer den gleichen Fehler mit einem XsltListViewWebPart:

Exception: System.ArgumentException: The specified view is invalid. 
at Microsoft.SharePoint.SPViewCollection.get_Item(Guid guid) 
at Microsoft.SharePoint.SPList.GetView(Guid viewGuid) 
at Microsoft.SharePoint.SPList.GetView(String viewGuid) 
at Microsoft.SharePoint.WebPartPages.BaseXsltListWebPart.EnsureView() 
at Microsoft.SharePoint.WebPartPages.BaseXsltListWebPart.get_AppropriateBaseViewId() 
at Microsoft.SharePoint.WebPartPages.SPWebPartManager.AddWebPartInternal(SPSupersetWebPart superset, Boolean throwIfLocked) 
at Microsoft.SharePoint.WebPartPages.SPLimitedWebPartManager.AddWebPartInternal(WebPart webPart, String zoneId, Int32 zoneIndex, Boolean throwIfLocked) 
at Microsoft.SharePoint.WebPartPages.SPLimitedWebPartManager.AddWebPart(WebPart webPart, String zoneId, Int32 zoneIndex) 

Da SPList.GetView eine öffentlichen Methode ist, versuchte ich es in Powershell die Guid von meiner neuen Ansicht verwenden. Es hat gut funktioniert.

Ich fand heraus, dass das Problem der Kontext war. Ich hatte meine Sicht direkt vor der ViewGuid Aufgabe erstellt. Als ich die Schaffung meiner Ansicht außerhalb des SPLimitedWebPartManager bewegt, lief der Code ohne Fehler:

SPView view = CreateHiddenView(list); 
using (SPLimitedWebPartManager manager = file.GetLimitedWebPartManager(PersonalizationScope.Shared)) 
{ 
    try 
    { 
     XsltListViewWebPart webpart = new XsltListViewWebPart(); 
     webpart.ListName = list.ID.ToString("B").ToUpperInvariant(); 
     webpart.TitleUrl = list.DefaultViewUrl; 
     webpart.WebId = list.ParentWeb.ID; 
     webpart.Title = list.Title; 
     webpart.ViewGuid = view.ID.ToString("B").ToUpperInvariant(); 
     manager.AddWebPart(webpart, "Right", 1); 
    } 
    finally 
    { 
     manager.Web.Dispose(); 
    } 
} 
Verwandte Themen