码迷,mamicode.com
首页 > 其他好文 > 详细

caml library

时间:2019-09-22 23:46:56      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:void   close   rgs   cti   null   要求   mod   lib   存在   

为了使用ClientContext,我们需要添加两个dll引用到我们的项目中。Microsoft.SharePoint.Client.dll和Microsoft.SharePoint.Client.Runtime.dll。在本博文中,我们将学习如何:

从SharePoint文档库中通过CAML获取ListItemCollection
上载一个文档到SharePoint 文档库
从SharePoint文档库下载一个文档
从SharePoint文档库中通过CAML获取ListItemCollection
我们可以像下面这样获取ListItemCollection:


ListItemCollection listItems = GetListItemCollectionFromSP("FileLeafRef", documentName, "Text", 1);
GetListItemCollectionFormSP方法可以用来获取列表项,其中第一个参数Name - 为FieldRef的名称,第二个参数value=FieldRef的值,第三个参数type - 是值的类型,最后一个参数rowLimit - 是返回最多多少条记录。

private static ListItemCollection GetListItemCollectionFromSP(string name, string value, string type, int rowLimit)
{
    ListItemCollection listItems = null;
    using (ClientContext clientContext = new ClientContext(siteURL))
    {
        List documentsList = clientContext.Web.Lists.GetByTitle(documentListName);
        CamlQuery camlQuery = new CamlQuery(); ;
        camlQuery.ViewXml =
        @"<View>
        <Query>
        <Where>
        <Eq>
        <FieldRef Name=‘" + name + @"‘/>
        <Value Type=‘" + type + "‘>" + value + @"</Value>
        </Eq>
        </Where>                   
        <RowLimit>" + rowLimit.ToString() + @"</RowLimit>
        </Query>
        </View>";
        listItems = documentsList.GetItems(camlQuery);
        clientContext.Load(documentsList);
        clientContext.Load(listItems);
        clientContext.ExecuteQuery();
    }
    return listItems;
}
上载一个文档到SharePoint 文档库
本例中我们需要上载文档到SharePoint文档库,同时更新该文档的元数据信息。比如通过ClientContext将一个说明字段设置为“核心内容”。代码如下:

public static void UploadDocument(string siteURL, string documentListName,string documentListURL, string documentName, byte[] documentStream)
{
    using (ClientContext clientContext = new ClientContext(siteURL))
    {
        //获取文档库
        List documentsList = clientContext.Web.Lists.GetByTitle(documentListName);
        var fileCreationInformation = new FileCreationInformation();
        //指定内容 byte[]数组,这里是 documentStream
        fileCreationInformation.Content = documentStream;
        //允许文档覆盖
        fileCreationInformation.Overwrite = true;
        //上载 URL地址
        fileCreationInformation.Url = siteURL + documentListURL + documentName;
        Microsoft.SharePoint.Client.File uploadFile = documentsList.RootFolder.Files.Add(fileCreationInformation);
        //更新元数据信息,这里是一个显示名为“描述”的字段,其字段名为“Description0”
        uploadFile.ListItemAllFields["Description0"] = "核心内容";
        uploadFile.ListItemAllFields.Update();
        clientContext.ExecuteQuery();
    }
}
从SharePoint文档库下载一个文档
我们可以用如下代码下载一个文档

public static Stream DownloadDocument(string siteURL, string documentName)
{
    ListItem item = GetDocumentFromSP(documentName);
    if (item != null)
    {
        using (ClientContext clientContext = new ClientContext(siteURL))
        {
            FileInformation fInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext, item["FileRef"].ToString());
            return fInfo.Stream;
        }
    }
    return null;
}
private static ListItem GetDocumentFromSP(string documentName)
{
    //这个方法上面讨论过了,用于从SharePoint文档库获取列表项集合
    ListItemCollection listItems = GetListItemCollectionFromSP("FileLeafRef", documentName, "Text", 1);
    return (listItems != null && listItems.Count == 1) ? listItems[0] : null;
}
调用示例:

static string siteURL = "http://sp2010u/it";
static string documentListName = "共享文档";
 
static void Main(string[] args)

    UploadTest();
    DownloadTest();
    Console.ReadLine();
}
private static void DownloadTest()
{
    string downloadDocumentName = "Lesson 2.pptx";
    Stream s = DownloadDocument(siteURL, downloadDocumentName);
 
    string saveTo = @"C:\" + downloadDocumentName;
    // 创建一个写入流
    FileStream writeStream = new FileStream(saveTo, FileMode.Create, FileAccess.Write);
    // 写入到该流
    ReadWriteStream(s, writeStream);
    Console.WriteLine("下载完成!");
}
private static void UploadTest()
{
    string uploadDocumentName = "Lesson 1.pptx";
    string openFrom =@"C:\"+uploadDocumentName;
    if (!System.IO.File.Exists(openFrom))
    {
        throw new ArgumentException(String.Format("{0} 不存在",openFrom), "openFrom");
    }
 
    FileStream fStream = System.IO.File.OpenRead(openFrom);
    byte[] contents = new byte[fStream.Length];
    fStream.Read(contents, 0, (int)fStream.Length);
    //上载到“共享文档”文档库下的“销售计划”文档集中
    UploadDocument(siteURL, documentListName, "/Shared%20Documents/%E9%94%80%E5%94%AE%E8%AE%A1%E5%88%92/", uploadDocumentName, contents);
    Console.WriteLine("上载完成!");
    fStream.Close();
 
}
// readStream 是你需要读取的流
// writeStream 是你需要写入的流
private static void ReadWriteStream(Stream readStream, Stream writeStream)
{
    int Length = 256;
    Byte[] buffer = new Byte[Length];
    int bytesRead = readStream.Read(buffer, 0, Length);
    // 写入要求的字节
    while (bytesRead > 0)
    {
        writeStream.Write(buffer, 0, bytesRead);
        bytesRead = readStream.Read(buffer, 0, Length);
    }
    readStream.Close();
    writeStream.Close();
}

caml library

标签:void   close   rgs   cti   null   要求   mod   lib   存在   

原文地址:https://www.cnblogs.com/xdanny/p/11569733.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!