Как получить более 30 документов из Sharepoint, используя asp.net? - PullRequest
0 голосов
/ 24 апреля 2018

Мне дали работу по поддержке старой системы asp.net, которая использует веб-формы.Это достаточно болезненно, но кроме того, есть страница, которая извлекает все документы, связанные с клиентом, и выводит их на экран.Документы сохраняются в SharePoint.Основная проблема заключается в том, что в этом списке можно получить не более 30 документов, поэтому любой клиент, имеющий более 30, не видит все свои письма.Вторая проблема заключается в том, что я почти ничего не знаю о SharePoint, и это чужой код, поэтому я не знаю, с чего начать даже диагностировать эту проблему.Вот, что я думаю, это код для извлечения документов:

public List<SharepointDocument> ProcessListResults(XmlNode xml, string foldername)
    {
        List<SharepointDocument> docs = new List<SharepointDocument>();
        SharepointDocument newdoc = null;
        string namespaceURI = "http://schemas.microsoft.com/sharepoint/soap/";
        string listNamespaceURI = "#RowsetSchema";
        string directoryNamespaceURI = "urn:schemas-microsoft-com:rowset";

        // Now associate with the xmlns namespaces (part of all XML nodes returned 
        // from SharePoint) a namespace prefix which we can then use in the queries 
        XmlNamespaceManager namespaceMngr = new XmlNamespaceManager(xml.OwnerDocument.NameTable);

        namespaceMngr.AddNamespace("sp", namespaceURI);
        namespaceMngr.AddNamespace("z", listNamespaceURI);
        namespaceMngr.AddNamespace("rs", directoryNamespaceURI);

        // Run the XPath query and return the result nodes 
        foreach (XmlNode row in xml.SelectNodes("//z:row[@ows_Title]", namespaceMngr))
        {
            newdoc = new SharepointDocument();
            newdoc.Title = GetAttributeStringValue(row, "ows_Title");
            newdoc.Modified = GetAttributeDateValue(row, "ows_Modified");
            newdoc.Id = GetAttributeStringValue(row, "ows_UniqueId");
            newdoc.Created = GetAttributeDateValue(row, "ows_Created_x0020_Date");
            newdoc.ModifiedBy = GetAttributeStringValue(row, "ows_Editor");
            newdoc.Filename = GetAttributeStringValue(row, "ows_FileLeafRef");
            newdoc.DocumentStatus = (SharepointDocument.SharepointDocumentStatus)Enum.Parse(typeof(SharepointDocument.SharepointDocumentStatus), GetAttributeStringValue(row, "ows__ModerationStatus"));
            newdoc.DocumentVersion = GetAttributeStringValue(row, "ows__UIVersionString");

            if (UseRestrictedDownloadUrl)
            {
                string url = string.Format("download.aspx?Folder={0}&Filename={1}",
                    foldername, newdoc.Filename);
                Console.Out.WriteLine("Attempting to create URL <" + url + ">");
                newdoc.Url = url; 
            }
            else
            {
                Console.Out.WriteLine("Attempting to create URL <" + SPSiteURL + GetAttributeStringValue(row, "ows_FileRef") + ">");
                newdoc.Url = SPSiteURL + GetAttributeStringValue(row, "ows_FileRef");
            }
            docs.Add(newdoc);
        }

        logger.Debug("SharepointLibrary document count = " + docs.Count);

        return docs;

    }

Я не вижу здесь ничего, что могло бы вызвать эту проблему.Я подозреваю, что проблема должна быть с SharePoint - когда я вхожу в SharePoint, и на страницу писем пользователя (пользователь, который имеет более 30 букв), страница имеет 30 букв на страницу, и первая страница букв одинаковате, которые возвращаются веб-приложением.Это кажется слишком большим совпадением.Итак, как я могу диагностировать эту проблему в SharePoint?Кто-нибудь знает, что может быть причиной этого?Есть ли где-то в SharePoint параметр, о котором я не знаю?

1 Ответ

0 голосов
/ 25 апреля 2018

В списке SharePoint отображаются 30 элементов с настройкой OOB. Если вы хотите отобразить больше элементов, вам необходимо обновить параметры просмотра. enter image description here

Более того, вы можете использовать CSOM для запроса данных SharePoint.

Пример кода для получения пользовательских документов.

static void Main(string[] args)
        {            
            string login = "lee@domain.onmicrosoft.com"; //give your username here  
            string password = "pw"; //give your password  
            var securePassword = new SecureString();
            foreach (char c in password)
            {
                securePassword.AppendChar(c);
            }

            string siteUrl = "https://domain.sharepoint.com/sites/tst";
            using (ClientContext clientContext = new ClientContext(siteUrl))
            {
                clientContext.Credentials = new SharePointOnlineCredentials(login, securePassword);
                var user = clientContext.Web.EnsureUser(login);
                clientContext.Load(user);
                clientContext.ExecuteQuery();

                var list = clientContext.Web.Lists.GetByTitle("MyDoc3");
                CamlQuery query = new CamlQuery();
                //you could add query condition to query based on other conditions
                query.ViewXml = "<View Scope='RecursiveAll'><Query><Where><And><BeginsWith><FieldRef Name='ContentTypeId'/><Value Type='ContentTypeId'>0x0101</Value></BeginsWith><Eq><FieldRef Name='Author' LookupId='True'/><Value Type='Lookup'>" + user.Id + "</Value></Eq></And></Where></Query></View>";                
                var listItems = list.GetItems(query);
                clientContext.Load(listItems);
                clientContext.ExecuteQuery();

                foreach (var item in listItems)
                {
                    Console.WriteLine(item.FieldValues["FileRef"]);
                }

                Console.WriteLine("done");
                Console.ReadLine();
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...