• 使用SharePoint 2010 客户端对象模型进行文档库及文档的操作


    -   Client Object Model是SharePoint 2010对开发提供新的支持。我前两周在给一个客户做POC,主要内容是将SharePoint 2010 作为一个纯内容管理平台,并隐藏起来不给最终用户看到,最终用户通过原有平台进行文档的增删查改操作。这些都是用默认的认证方式,认证及权限代码没有包含在内。以下是我截取其中的一些代码。

    在SharePoint 2010 中创建文档库 

    public string CreateDocumentLibrary(string siteUrl, string DocumentLibraryName,string userName)
    {
        ListCreationInformation newListInfo 
    = new ListCreationInformation();
        newListInfo.Title 
    = DocumentLibraryName;
        newListInfo.TemplateType 
    = (int)ListTemplateType.DocumentLibrary;
        List newList;
        
    using (ClientContext clientContext = new ClientContext(siteUrl))
        {
            clientContext.Credentials 
    = System.Net.CredentialCache.DefaultCredentials;
            Web site 
    = clientContext.Web;
            newList 
    = site.Lists.Add(newListInfo);            
            clientContext.Load(newList);
            clientContext.ExecuteQuery();
        }
        return "Create Success";       
    }

    在SharePoint 2010 中删除文档库

    public string DeleteDocumentLibrary(string siteUrl, string DocumentLibraryName)
    {
        
    using (ClientContext clientContext = new ClientContext(siteUrl))
        {
            clientContext.Credentials 
    = System.Net.CredentialCache.DefaultCredentials;
            Web site 
    = clientContext.Web;
            List existList 
    = site.Lists.GetByTitle(DocumentLibraryName);
            existList.DeleteObject();
            clientContext.ExecuteQuery();
            clientContext.Dispose();
        }
        
    return "Delete Success";
    }

    在SharePoint 2010 中上传文档

    public string UploadFileToDocumntLibrary(string siteUrl, string documentListName, string documentListURL, string documentName, byte[] documentStream)
    {
        
    using (ClientContext clientContext = new ClientContext(siteUrl))
        {
            clientContext.Credentials 
    = System.Net.CredentialCache.DefaultCredentials;
            List documentsList 
    = clientContext.Web.Lists.GetByTitle(documentListName);
            var fileCreationInformation 
    = new FileCreationInformation();
            fileCreationInformation.Content 
    = documentStream;
            fileCreationInformation.Overwrite 
    = true;
            fileCreationInformation.Url 
    = siteUrl+ documentListURL+"/" + documentName;
            Microsoft.SharePoint.Client.File uploadFile 
    = documentsList.RootFolder.Files.Add(fileCreationInformation);
            uploadFile.ListItemAllFields.Update();
            clientContext.ExecuteQuery();
        }
        
    return "upload success";
    }

    在SharePoint 2010 中下载文档 

    public byte[] DownloadDocument(string siteURL, string documentListName, string documentName)
    {
        ListItem item 
    = GetDocumentFromSP(siteURL, documentListName, documentName);
        
    if (item != null)
        {
            
    using (ClientContext clientContext = new ClientContext(siteURL))
            {              
                clientContext.Credentials 
    = System.Net.CredentialCache.DefaultCredentials;
                FileInformation fInfo 
    = Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext, item["FileRef"].ToString());
                Stream s 
    = fInfo.Stream;
                
    byte[] bt = ReadFully(s, 0);
                
    return bt;              
            }
        }
        
    return null;
    }

    在SharePoint 2010 中获取文档库中的文档

    public List<SharePointListItem> GetListItemCollection(string siteURL, string documentListName)
    {
        ListItemCollection listItems 
    = GetListItemCollectionFromSP(siteURL, documentListName,20);
        List
    <SharePointListItem> lireturn = new List<SharePointListItem>();
        
    foreach (ListItem li in listItems)
        {
            SharePointListItem item 
    = new SharePointListItem();
            item.Type 
    = li.FileSystemObjectType.ToString();
            item.DisplayName 
    = li.FieldValues["FileLeafRef"].ToString();
            item.FilePath 
    = li.FieldValues["FileRef"].ToString();
            item.CreatedDate 
    =(DateTime)li.FieldValues["Created"];
            item.ModifiedDate 
    =(DateTime)li.FieldValues["Modified"];
            item.Author 
    = ((Microsoft.SharePoint.Client.FieldUserValue)li.FieldValues["Author"]).LookupValue;
            item.Editor
    =((Microsoft.SharePoint.Client.FieldUserValue)li.FieldValues["Editor"]).LookupValue;
            lireturn.Add(item);
        }
        
    return lireturn;
    }

    上面方法调用的方法

    // Code by 丁为平
    private ListItem GetDocumentFromSP(string siteURL, string documentListName, string documentName)
    {
        ListItemCollection listItems 
    = GetListItemCollectionFromSP(siteURL, documentListName, "FileLeafRef",
                documentName, 
    "Text"1);
        
    return (listItems != null && listItems.Count == 1? listItems[0] : null;

    }

    private ListItemCollection GetListItemCollectionFromSP(string siteURL, string documentListName, int rowLimit)
    {
        ListItemCollection listItems 
    = null;
        
    using (ClientContext clientContext = new ClientContext(siteURL))
        {
            clientContext.Credentials 
    = System.Net.CredentialCache.DefaultCredentials;   
            List documentsList = clientContext.Web.Lists.GetByTitle(documentListName);
            CamlQuery camlQuery 
    = new CamlQuery();             
            camlQuery.ViewXml 
    =
                
    @"<View>
                    <Query>                  
                    <RowLimit>
    " + rowLimit.ToString() + @"</RowLimit>
                    </Query>
                  </View>
    ";
            listItems 
    = documentsList.GetItems(camlQuery);
            clientContext.Load(documentsList);
            clientContext.Load(listItems);
            clientContext.ExecuteQuery();
        }
        
    return listItems;


    private ListItemCollection GetListItemCollectionFromSP(string siteURL, string documentListName, string name, string value, string type, int rowLimit)
    {
        ListItemCollection listItems 
    = null;
        
    using (ClientContext clientContext = new ClientContext(siteURL))
        {
            clientContext.Credentials 
    = System.Net.CredentialCache.DefaultCredentials;
            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;
    }

    private byte[] ReadFully(Stream stream, int initialLength)
    {
        
    // If we've been passed an unhelpful initial length, just
        
    // use 32K.
        if (initialLength < 1)
        {
            initialLength 
    = 32768;
        }
        
    byte[] buffer = new byte[initialLength];
        
    int read = 0;
        
    int chunk;
        
    while ((chunk = stream.Read(buffer, read, buffer.Length - read)) > 0)
        {
            read 
    += chunk;
            
    // If we've reached the end of our buffer, check to see if there's
            
    // any more information
            if (read == buffer.Length)
            {
                
    int nextByte = stream.ReadByte();
                
    // End of stream? If so, we're done
                if (nextByte == -1)
                {
                    
    return buffer;
                }
                
    byte[] newBuffer = new byte[buffer.Length * 2];
                Array.Copy(buffer, newBuffer, buffer.Length);
                newBuffer[read] 
    = (byte)nextByte;
                buffer 
    = newBuffer;
                read
    ++;
            }
        }
        
    byte[] ret = new byte[read];
        Array.Copy(buffer, ret, read);
        
    return ret;
    }

    还有一个支持类

    [Serializable]
    public class SharePointListItem
    {    
        
    public SharePointListItem()
        {
        }
        
    public string DisplayName { getset; }
        
    public string FilePath { getset; }
        
    public DateTime CreatedDate { getset; }
        
    public DateTime ModifiedDate { getset; }
        
    public string Author { getset; }
        
    public string Editor { getset; }
        
    public string Type { getset; }    
    }
  • 相关阅读:
    redis持久化之AOF和RDB
    pycharm快捷键
    500系列错误
    400系列错误
    Linux常用命令大全
    从浏览器输入一个地址,发送请求,经历了哪些过程(面试问题)
    401的错误分析
    301和302的区别
    数据库 语法收集 (主 mysql,次oracle,日常积累)
    python 发送邮件 smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed') 以及授权码设置步骤
  • 原文地址:https://www.cnblogs.com/dwp008/p/2122729.html
Copyright © 2020-2023  润新知