Может ли этот запрос получить размер документа быть улучшенным в Sharepoint 2007? - PullRequest
0 голосов
/ 11 марта 2009

Ну, поскольку я относительно новичок в Sharepoint 2007, я хотел бы улучшить свой способ написания кода для этой платформы и уточнить некоторые привычки, которые у меня уже есть.

В следующем коде я задаю размер документа, который находится в списке «Документы», но у меня сложилось впечатление, что я создаю много объектов для доступа к информации. Нет ли способа перейти к документу прямо (я должен получить доступ к de spweb, затем к списку, а затем к документу)?

Одна из вещей, которую я хочу улучшить, это не использовать oSPWeb.Lists [0], что соответствует oSPWeb.Lists ["Documents"], ни один из них не убеждает меня, потому что этот список можно назвать "Documentos", о "Документы" и т.д ...

Плз, не могли бы вы улучшить этот код?

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;
        }

Ответы [ 2 ]

1 голос
/ 11 марта 2009

Вероятно, вам потребуется знать имя, индекс или идентификатор библиотеки документов, поскольку на одном сайте может быть несколько библиотек документов. Таким образом, имя может храниться где-то в месте конфигурации (это может быть другой список с парами имя-значение), но в конце вам придется сделать что-то вроде web.Lists ["list name"] (или идентификатор списка - I избегать списка индексов).

Использование запроса CAML (который вы выполняете) - это типичный способ выбора нескольких элементов из списка / библиотеки. Моя единственная рекомендация - не предполагать, что в коллекции будет хотя бы один элемент, если коллекция не равна нулю. Так что вместо:

if (col != null)

Я бы сделал:

if (col != null && col.Count > 0)
0 голосов
/ 12 марта 2009

Наконец, я улучшил код, следуя советам Кирка и JMD, URL http://blogs.msdn.com/sowmyancs/archive/2008/10/26/best-practices-sharepoint-object-model-for-performance-tuning.aspx действительно очень хорошее начало для оптимизации кода:

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;
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...