2009-03-11 5 views
0

Nun, da ich Sharepoint 2007 noch relativ neu kenne, möchte ich meine Art, Code für diese Plattform zu schreiben, verbessern und einige Gewohnheiten verfeinern, die ich bereits habe.Kann diese Abfrage, um die Größe eines Dokuments zu erhalten, in Sharepoint 2007 verbessert werden?

In dem folgenden Code, was ich tue, ist die Größe eines Dokuments, das in der Liste "Dokumente" ist, aber ich habe den Eindruck, ich zu viele Objekte erstellen, um auf die Informationen zuzugreifen. Gibt es keine Möglichkeit, direkt zum Dokument zu gehen (ich muss auf de spweb zugreifen, dann auf die Liste und dann auf das Dokument)?

Eines der Dinge, die ich verbessern möchte, ist nicht, oSPWeb.Lists [0] zu verwenden, was zu oSPWeb.Lists ["Documents"] passt, keines davon überzeugt mich, weil diese Liste "Documentos" genannt werden kann , o "Dokumente" etc ...

Plz könnten Sie diesen Code verbessern?

System.Text.StringBuilder oSb = new System.Text.StringBuilder(); 

       oSb.Append("  <Where>"); 
     oSb.Append("   <Eq>"); 
     oSb.Append("    <FieldRef Name=\"FileLeafRef\" />"); 
     oSb.Append("    <Value Type=\"Text\">"+documento+"</Value>"); 
     oSb.Append("   </Eq>"); 
     oSb.Append("  </Where>"); 
     oSb.Append(" <ViewFields>"); 
     oSb.Append("   <FieldRef Name=\"FileSizeDisplay\" />"); 
     oSb.Append(" </ViewFields>");  

     string sResult = oSb.ToString(); 

     bool Existe = false; 
     SPSite sps = null; 
     SPWeb oSPWeb = null; 
     SPList oList = null; 
     SPListItemCollection col = null; 

     try 
     { 
      sps = SPContext.Current.Site; 
      using(oSPWeb = sps.OpenWeb(url)) 
      { 
       oList = oSPWeb.Lists[0]; 
       SPQuery qry = new SPQuery(); 
       qry.Query = sResult; 

       col=oList.GetItems(qry); 
      } 
     } 

     catch { } 

     if (col != null) 
     { 

      //return col[0].File.Length.ToString(); 
      return col[0]["FileSizeDisplay"].ToString(); 
     } 
     else 
     { 
      return null; 
     } 

Antwort

1

Sie gehen zu müssen wahrscheinlich den Namen, Index oder ID der Dokumentbibliothek wissen, weil es mehrere Dokumentbibliotheken innerhalb einer bestimmten Stelle sein kann. Also, der Name kann irgendwo in einem Konfigurationsort gespeichert werden (könnte eine andere Liste mit Name-Wert-Paaren sein), aber am Ende müssen Sie etwas wie web.Lists ["Listenname"] (oder Listen-Id-I) machen Vermeiden Sie den Listenindex.

Die Verwendung einer CAML-Abfrage (was Sie gerade tun) ist die typische Methode zur Auswahl mehrerer Elemente aus einer Liste/Bibliothek. Meine einzige Empfehlung dort ist, nicht davon auszugehen, dass es mindestens ein Objekt in der Sammlung geben wird, wenn die Sammlung nicht null ist. Also statt:

if (col != null) 

ich tun würde:

if (col != null && col.Count > 0) 
+0

Wenn Sie Informationen zum Abrufen der Liste speichern, sollten Sie die URL speichern und stattdessen web.GetList (url) verwenden. Lesen Sie Szenario 1 für weitere Informationen: http://blogs.msdn.com/sowmyancs/archive/2008/10/26/best-practices-sharepoint-object-model-for-performance-tuning.aspx – JMD

0

Schließlich habe ich verbessert habe den Code folgenden Kirks und JMD die Ratschläge, die URL http://blogs.msdn.com/sowmyancs/archive/2008/10/26/best-practices-sharepoint-object-model-for-performance-tuning.aspx ist wirklich ein sehr guter Start, den Code zu optimieren:

System.Text.StringBuilder oSb = new System.Text.StringBuilder(); 

      oSb.Append("  <Where>"); 
      oSb.Append("   <Eq>"); 
      oSb.Append("    <FieldRef Name=\"FileLeafRef\" />"); 
      oSb.Append("    <Value Type=\"Text\">"+document+"</Value>"); 
      oSb.Append("   </Eq>"); 
      oSb.Append("  </Where>"); 
      oSb.Append(" <ViewFields>"); 
      oSb.Append("   <FieldRef Name=\"FileSizeDisplay\" />"); 
      oSb.Append(" </ViewFields>");    

      string sResult = oSb.ToString(); 

      SPSite sps = null; 
      SPWeb oSPWeb = null; 
      SPList oList = null; 
      SPListItemCollection col = null; 

      try 
      { 
       sps = SPContext.Current.Site; 
       using(oSPWeb = sps.OpenWeb(url)) 
       { 
        //oList = oSPWeb.Lists[0]; 
        oList=oSPWeb.GetList(oSPWeb.Url + "/" + listName); 
        SPQuery qry = new SPQuery(); 
        qry.Query = sResult; 

        col=oList.GetItems(qry); 
       } 
      } 

      catch { } 

      if (col != null && col.Count > 0) 
      { 
       return col[0]["FileSizeDisplay"].ToString(); 
      } 
      else 
      { 
       return null; 
      } 
Verwandte Themen