设为首页 收藏本站
查看: 573|回复: 0

[经验分享] 使用SharePoint 2010 客户端对象模型进行文档库及文档的操作

[复制链接]
累计签到:4 天
连续签到:1 天
发表于 2015-9-24 10:49:21 | 显示全部楼层 |阅读模式
-   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 { get; set; }
    public string FilePath { get; set; }
    public DateTime CreatedDate { get; set; }
    public DateTime ModifiedDate { get; set; }
    public string Author { get; set; }
    public string Editor { get; set; }
    public string Type { get; set; }   
}  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-118116-1-1.html 上篇帖子: Using Developer Dashboard in SharePoint 2010 下篇帖子: sharepoint 安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表