Чтение свойств папок и файлов, таких как UniqueId, с сервера sharepoint 2010 - PullRequest
0 голосов
/ 16 февраля 2019

Я хотел бы прочитать некоторые свойства папок и файлов с сервера sharepoint 2010.Наиболее важным свойством является UniqueId .Есть ли возможность прочитать это свойство?

Я пытался с CSOM (Microsoft.SharePoint.Client.dll).Это прекрасно работает с кодом ниже для Sharepoint 2013 и выше.Это работает для Sharepoint онлайн и сервера Sharepoint.Проблема для сервера Sharepoint 2010, где мне нужно читать.Возникает исключение, например

Поле или свойство UniqueId недоступно.

ListItemAllFields также недоступен.Я прочитал много сообщений, но я не мог найти решение.

Я мог бы выяснить, что для него было бы обычно 3 решения:

  1. csom (было бы лучшим решением и отлично работает на 2013 и выше -> не найдено решение для сервера 2010)
  2. ssom (Работает только тогда, когда все находится на одном сервере -> не является решением для меня, потому что приложение, которое мне нужно прочитать, не находится натот же сервер, что и sharepoint)
  3. веб-сервисы (я не смог найти подходящего решения для веб-сервисов)

Я читал о запрос Caml инашел что-то вроде <FieldRef Name='UniqueId'/>, но я не знаю, как его использовать, и я не знаю, возможно ли с ним чтение UniqueId.

Здесь код, который отлично работает для sharepoint 2013 и выше, ноне работает для sharepoint 2010 сервера:

public string GetChilds(ClientContext clientContext, string relativeUrl)
{
  SpFolder folder =clientContext.Web.GetFolderByServerRelativeUrl(relativeUrl);
  clientContext.Load(folder,
               item => item.Name,
               item => item.UniqueId,
               item => item.ServerRelativeUrl
               );

  clientContext.Load(folder.Folders,
                    items => items.Include(
                    item => item.Name,
                    item => item.UniqueId,
                    item => item.ServerRelativeUrl,
                    item => item.TimeLastModified,
                    item => item.TimeCreated,
                    item => item.ListItemAllFields["Author"],
                    item => item.ListItemAllFields["Editor"]));

  clientContext.Load(folder.Files,
                    items => items.Include(
                    item => item.Name,
                    item => item.UniqueId,
                    item => item.ServerRelativeUrl,
                    item => item.TimeLastModified,
                    item => item.TimeCreated,
                    item => item.ListItemAllFields["Author"],
                    item => item.ListItemAllFields["Editor"],
                    item => item.ListItemAllFields["File_x0020_Size"]));

  clientContext.ExecuteQueryWithIncrementalRetry(EXECUTEQUERY_RETRYCOUNT, EXECUTEQUERY_DELAY);

  string result = "";
  result += "Parent Name:" + folder.Name + ",";
  result += "Parent UniqeId:" + folder.UniqueId.ToString() + ",";
  result += "Parent ServerRelativeUrl:" + folder.ServerRelativeUrl + ",";

  if (folder.Folders != null)
  {
    foreach (SpFolder subFolder in folder.Folders)
    {
      result += "Name:" + subFolder.Name + ",";
      result += "UniqueId:" + subFolder.UniqueId.ToString() + ",";
      //...
    }
  }

  if (folder.Files != null)
  {
    foreach (SpFile file in folder.Files)
    {
      result += "Name:" + file.Name + ",";
      result += "UniqueId:" + file.UniqueId.ToString() + ",";
      //...
    }
  }

  return result;
}

Ожидаемым результатом будет получение UniqueId и ListItemAllFields с сервера Sharepoint 2010.Фактический результат:

Поле или свойство UniqueId недоступно

1 Ответ

0 голосов
/ 16 февраля 2019

У нас была точно такая же проблема с SharePoint 2010.Для нас это сработало так: CSOM:

File file = ClientContext.Web.GetFileByServerRelativeUrl(docUrl);
ClientContext.Load(file, f => f.ListItemAllFields);
ClientContext.ExecuteQuery();             
ListItem item = file.ListItemAllFields;

string fileName = item.FieldValues["FileLeafRef"].ToString();
string fileType = System.IO.Path.GetExtension(FileName);
var furl = item.FieldValues["_dlc_DocIdUrl"] as FieldUrlValue;
string documentPermalinkUrl = furl.Url;
Guid uniqueId = new Guid(item.FieldValues["UniqueId"].ToString());
...