2017-01-31 2 views
0

У меня есть функция, которая хранит файл в Sharepoint, и я хотел бы знать, как можно протестировать его, не пытаясь что-либо поместить на sharepoint. Также, если у кого-то есть лучшая функция для хранения файлов в sharepoint, я был бы благодарен, если вы можете поделиться им. Вот функция у меня есть:Тестирование функции, которая хранит файл в Sharepoint

public static void UploadFile(ClientContext context, string listTitle, string fileName) 
{ 
     using (var fs = new FileStream(fileName, FileMode.Open)) 
     { 
      var fi = new FileInfo(fileName); 
      var list = context.Web.Lists.GetByTitle(listTitle); 
      context.Load(list.RootFolder); 
      context.ExecuteQuery(); 
      var fileUrl = String.Format("{0}/{1}", list.RootFolder.ServerRelativeUrl, fi.Name); 

      Microsoft.SharePoint.Client.File.SaveBinaryDirect(context, fileUrl, fs, true); 
     } 
    } 
+0

[Эта ссылка] (https://social.technet.microsoft.com/Forums/en-US/6b5e634b-a274-4b18-a02b-7c6d4a568c78/transaction-in-sharepoint?forum=sharepointgeneralprevious), кажется, указывает на несовместимость TransactionScope с SharePoint. – Kilazur

+0

Мой плохой, не читал это хорошо, я думаю. Удалено мое замечание! – RandomStranger

ответ

1

Это невозможно из коробки. Чтобы узнать, был ли файл успешно импортирован, он должен быть успешно импортирован.

Единственный способ я вижу, чтобы обойти эту проблему было бы проверить каждую деталь заранее один за другим:

  • ли разрешения в порядке?
  • Значения столбца нового элемента соответствуют правилам проверки?
  • Значения каждого столбца в правильном типе данных?

etc ... Довольно раздражает, если вы спросите меня. Самый простой способ - использовать тестовую версию вашего сайта (см. this о том, как скопировать структуру сайта).

Говоря о столбцах, у вас, похоже, нет ни одного, поэтому работает SaveBinaryDirect. Если вы хотите установить значения столбцов, хотя, вы должны будете сделать это в два этапа, как это:

// Upload 
FileCreationInformation fileInfo = new FileCreationInformation(); 
fileInfo.Content = IOFile.ReadAllBytes(filePath); 
fileInfo.Url = Path.GetFileName(filePath); 
Microsoft.SharePoint.Client.File uploadFile = rootFolder.Files.Add(fileInfo); 

// Columns setting 
ListItem listItem = uploadFile.ListItemAllFields; 
listItem["Field1"] = "foo"; 
listItem["Field2"] = "bar"; 
listItem.Update(); 

// Execution 
context.ExecuteQuery(); 

Edit: @RandomStranger указал TransactionScope. Он не работает с SharePoint из коробки, но this link дает представление о том, как обойти его (создание собственного менеджера транзакций или даже использование версий версий).

+0

Спасибо. Думаю, это единственный способ пойти дальше. – ilmenite

Смежные вопросы