2017-01-31 3 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

: は、ここで私が持っている機能です。ファイルが正常にインポートされたかどうかを確認するには、ファイルを正常にインポートする必要があります。

私はこの問題を回避するために見る唯一の方法は、一つ一つを事前にすべての詳細を確認するために、次のようになります。

  • 権限はOKか?
  • 新しい項目の列値が検証ルールに従いますか?
  • すべての列の値が正しいデータ型にありますか?

など...あなたが私に尋ねると、かなり迷惑です。最も簡単な方法は、サイトのテスト版を使用することです(サイトの構造をコピーする方法については、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(); 

編集:あなたがが列値を設定したい場合は、このように、2つの段階でそれを行う必要があります@RandomStrangerはのTransactionScopeを指摘しました。 SharePointをそのまま使用することはできませんが、this linkは、それを回避する方法(独自のトランザクションマネージャを作成する、またはリストのバージョン管理を使用する方法)についての洞察を提供します。

+0

ありがとうございます。私はこれが唯一の方法だと思います。 – ilmenite

関連する問題