SharePoint中在线编辑文档-阿里云开发者社区

开发者社区> 开发与运维> 正文

SharePoint中在线编辑文档

简介:

 

我一直以为只有在Document Library里面的File才会支持在线编辑。直到今天早上我才发现用IE打开List里面的Attachments也是支持在线编辑的,但前提是必须是IE浏览器。

目前正在开发的项目,我开始设计时是把所有的审批信息存放在List中,上传的文档以Attachments形式保存于List中,昨天客户来公司,我演示的时候,用Chrome打开附件,直接下载了(以后建议用IE),客户需要在线编辑功能,还狠狠的批了我们一顿,附件不能在线编辑,那我审核个毛线。(其实是可以的,用IE就行。)结束后,我也没多想(经验不足)直接对代码进行该了,将FileUpload上传的文件保存到一个Document Library 的Log中,其实这完全是多余的。

如果你想在SharePoint中,想对上传的文档进行在线的编辑,有2种方法,一种当然是上传到文档库啦,还有一种就是以Attachments上传到List。

List

首先,对ListItem进行Update操作。

复制代码
if (fileAttachment.HasFile)
            {
                try
                {
                    foreach (var file in fileAttachment.PostedFiles)
                    {
                        newItem.Attachments.Add(file.FileName, file.InputStream.ReadFully());
                    }
                }
                catch ()
                {


                }
            }
            newItem.Update();
复制代码

然后List的ListItem编辑Webpart中,用HyperLink画出附件,其实就是获取附件的Url地址

复制代码
 SPListItem newItem = this._applyItemList.GetItemById(this.ObjectId);
                HyperLink hyperLink=null;
                foreach (string currentAttachment in newItem.Attachments)
                {
                    hyperLink=new HyperLink();
                    hyperLink.ID = Guid.NewGuid().ToString();
                    string attachmentAbsoluteURL = newItem.Attachments.UrlPrefix + currentAttachment;
                    SPFile attachmentFile = this._currentWeb.GetFile(attachmentAbsoluteURL);
                    hyperLink.Text = attachmentFile.Name;
                    hyperLink.NavigateUrl = attachmentAbsoluteURL;
                    phAttachment.Controls.Add(hyperLink);
                    //添加换行
                    phAttachment.Controls.Add(new LiteralControl("<br />")); 
                }
复制代码

最后在编辑的Webpart如下所示,直接用IE打开,支持在线编辑,但没有历史记录

当然,你也可以将文档上传到文档库,上传到文档库里面你的操作有历史记录

Document Library

 比如我将FileUpload上传的文件保存到文档库中的相应文件夹,以ListID+“-”+ListItemID命名的文件夹,这样避免了上传文档重名的问题,首先判断是否存在这个文件夹,不存在则创建,当创建完成后,将文档存放在文档库中此文件夹下:

复制代码
 if (fileAttachment.HasFile)
            {
                try
                {
                    foreach (var file in fileAttachment.PostedFiles)
                    {
                        using (SPSite logSite = SPContext.Current.Site)
                        {
                            using (SPWeb logWeb = logSite.AllWebs["log"])
                            {
                                logWeb.AllowUnsafeUpdates = true;

                                SPDocumentLibrary library = logWeb.Lists["ApproveAttachmentLog"] as SPDocumentLibrary;
                                string rootUrl = library.RootFolder.Url;
                                string listId = _applyItemList.ID.ToString();
                                string listItemId = newItem.ID.ToString();
                                string folderUrl = rootUrl + "/" + listId+"-" + listItemId;
                                SPFolder folder = logWeb.GetFolder(folderUrl);

                                if (!folder.Exists)
                                {
                                    SPListItem newFolder = library.Folders.Add(library.RootFolder.ServerRelativeUrl, SPFileSystemObjectType.Folder, listId +"-"+ listItemId);
                                    newFolder.Update();
                                }
                                Stream stream = file.InputStream;
                                byte[] bytFile = new byte[Convert.ToInt32(file.ContentLength)];
                                stream.Read(bytFile, 0, Convert.ToInt32(file.ContentLength));
                                folder.Files.Add(System.IO.Path.GetFileName(file.FileName), bytFile, true);

                                logWeb.AllowUnsafeUpdates = false;


                            }
                        }
                        
                       
                    }
                }
                catch (Exception)
                {


                }
            }           
复制代码

接下来,就是获取文档库中File的AbsoluteUrl了,有一个非常漂亮的方法:file.Item[SPBuiltInFieldId.EncodedAbsUrl].ToString(),这样就可以获取当前File对应的ListItem的绝对地址了:

复制代码
 if (this.ObjectId>0)
            {
                SPListItem newItem = this._applyItemList.GetItemById(this.ObjectId);
                HyperLink hyperLink=null;
                using (SPSite site = SPContext.Current.Site)
                {
                    using (SPWeb web = site.AllWebs["log"])
                    {

                        SPDocumentLibrary library = web.Lists["ApproveAttachmentLog"] as SPDocumentLibrary;
                        string rootUrl = library.RootFolder.Url;
                        string listId = _applyItemList.ID.ToString();
                        string listItemId = newItem.ID.ToString();
                        string folderUrl = rootUrl + "/" + listId + "-" + listItemId;
                        SPFolder folder = web.GetFolder(folderUrl);
                        if (folder.Exists)
                        {
                            foreach (SPFile file in folder.Files)
                            {
                                hyperLink = new HyperLink();
                                hyperLink.ID = file.Item.ID.ToString();
                                hyperLink.Text = file.Item.Name;
                                hyperLink.NavigateUrl = file.Item[SPBuiltInFieldId.EncodedAbsUrl].ToString();
                                phAttachment.Controls.Add(hyperLink);
                                //添加换行
                                phAttachment.Controls.Add(new LiteralControl("<br />")); 
                            }
                        }
                    }
                }
复制代码

效果入下,和上面展示的并无出入,但这样对文档的操作会有历史记录。

小结

对于文档的操作,推荐使用IE(doc、docx都是支持的),毕竟是微软的产品,对SharePoint支持也会很好。

88x31.png
本博客为木宛城主原创,基于Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名木宛城主(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。

本文转自木宛城主博客园博客,原文链接:http://www.cnblogs.com/OceanEyes/p/sharepoint-edit-file.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章