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

[经验分享] 在sharepoint中利用文档库扩展新闻应用

[复制链接]

尚未签到

发表于 2015-9-24 08:07:15 | 显示全部楼层 |阅读模式
  本人刚刚开始使用Sharepoint,理解尚浅,错误之处请各位指正。
Sharepoint的发布类模板可以建立对外的新闻类应用,但是目前在使用上还有诸多限制,不是很方便。在前一段时间给用户实施时引起了用户的很大不满。为此,特意在文档库的基础上建立了一套新闻管理系统,这套新闻系统主要有新闻发布与编辑,新闻列表、新闻浏览、分类管理等组成,主要用web part方式实现,各种参数按需传入,可以按照需要,灵活配置,下面先从与文档库结合紧密的分类管理说起;
1、分类管理
在顶级站点下新建一子站点,建立文档库news,其url是子站点下的DocLi/News,这是所有新闻的根目录,然后在其下建立子文件夹,每个文件夹代表一类别,文件夹可以相互嵌套,因此,理论上新闻类别支持无限分级。
分类管理操作界面可以使用默认的文档库管理界面,也可以利用Sharepoint编程对象编写一个web part来实现,主要用到SPSite、SPWeb、SPFolder、SPFile等对象。为了使web part部署灵活,新闻站点名称等可使用参数传入,简要如下:
使用SPContext.Current.Site获取顶级站点……
使用主站点.AllWebs[新闻站点名称]获取新闻子站点名称……
使用子站点.Folders及SubFolders获取各个文件夹,即新闻类别……
使用文件夹.Files获取各个文件……
2、新闻发布于编辑
主要用来撰写与编辑新闻,主要使用在线编辑。在线编辑器可以使用Sharepoint自带的编辑器,也可以用其他的,这里我使用了FCKEditor,改动了一些地方,在文档最后说明。
新闻主要有标题、作者、发布时间、最后编辑时间、点击量、内容、评论、关键字、摘要等组成,其中内容带有html格式信息。为了方便操作,将新闻存储为xml文件,该xml文件中分别保存了前述新闻的各个属性值。
编辑完毕在内存中生成xml格式的文件后,利用SPFileCollection(Files)的Add方法将xml文件保存到相应的目录下即可,保存到的目录可以以新闻类别的方式显示在编辑器中,与具体的文件夹对应,供编辑者选择。
再次编辑时利用SHarepoint的相关对象获取此文件,解析项目来文件即可。
3、新闻列表
主要用来显示某类新闻的链接信息,生成列表时一起生成打开某条新闻的链接,该链接将以参数或者其他形式被新闻内容浏览页面获取。同样该列表也以webpart的形式出现,新闻站点、要显示的新闻分类等也以参数形式传入,可灵活部署。
4、新闻浏览
获取点击新闻列表传递来的某一条新闻的路径等信息,然后利用相关对象找到该新闻对应的xml文件,读取并解析、显示即可。
  最后说一下FCKEditor在Sharepoint的使用:
1、准备FCKEditor的核心文件及FCKEditor.net组件
FCKEditor在asp.net下的使用有很多帖子说明,如不会自行搜索,不再赘述。注意为了缩小空间可以把无关的文档删除,只保留asp.net使用的即可。
2、使用Sharepoint Designer打开要使用FCKEditor的站点,在某一目录下导入FCKEditor的核心文件,打开C:\Inetpub\wwwroot\wss\VirtualDirectories\80下的web.config文件,按照FCKEditor.net的需要进行配置,注意在sharepoint中和一般asp.net站点的使用可能会有所不同,主要在设置核心及其他目录的第一个“/”上,在一般站点中可能是“/fckeditor/”,而在Sharepoint中可能是“fckeditor/”。
3、如果设置正确,在页面上添加使用了FCKEditor.net的web part,就该看到编辑器了,看一下图片编辑的浏览和上传是不是不好使?这是因为Sharepoint的特殊架构造成的,以致FCKEditor.net不能正确获取文件,为了适应Sharepoint的使用,这里做了如下修改:
1)打开FileWorkerBase文件,添加

DSC0000.gif protected string Web
DSC0001.gif DSC0002.gif          DSC0003.gif {
DSC0004.gif             get
DSC0005.gif DSC0006.gif             {
                try
                {
                    sWeb = System.Configuration.ConfigurationSettings.AppSettings["FCKeditor:Web"];
DSC0007.gif                 }
                catch { }
                return sWeb;
            }
DSC0008.gif         }并在web.config中添加FCKeditor:Web配置,用来标识是在Sharepoint中还是一般站点中使用,规则自己定。
为了方便,还添加了如下方法:

protected SPFolder GetFolder()
        {
            //SPWeb w = SPControl.GetContextWeb(Context);
            SPSite site = SPContext.Current.Site;
            SPWeb web = null;
            if (sWeb == ".")
            {
                web = SPContext.Current.Web;
            }
            else
            {
                web = site.AllWebs[sWeb];
            }
            web.AllowUnsafeUpdates = true;
            SPFolder folder = null;
            string[] folders = this.UserFilesPath.TrimEnd('/').Split('/');
            folder = web.Folders[folders[0]];
            if (folders.Length > 1)
            {
                for (int i = 1; i < folders.Length; i++)
                {
                    folder = folder.SubFolders[folders];
                }
            }
            return folder;
        }
主要用来根据设置获取到存放图片的Folder对象。
2)修改Uploader文件


protected override void OnLoad(EventArgs e)
        {
            // Get the posted file.
            HttpPostedFile oFile = Request.Files["NewFile"] ;

            // Check if the file has been correctly uploaded
            if ( oFile == null || oFile.ContentLength == 0 )
            {
                SendResults( 202 ) ;
                return ;
            }

            int iErrorNumber = 0 ;
            string sFileUrl = "" ;

            // Get the uploaded file name.
            string sFileName = System.IO.Path.GetFileName( oFile.FileName ) ;

            int iCounter = 0 ;
            string sWeb = this.Web;
            if (sWeb == "" || sWeb == null)
            {
                while (true)
                {
                    string sFilePath = System.IO.Path.Combine(this.UserFilesDirectory, sFileName);

                    if (System.IO.File.Exists(sFilePath))
                    {
                        iCounter++;
                        sFileName =
                            System.IO.Path.GetFileNameWithoutExtension(oFile.FileName) +
                            "(" + iCounter + ")" +
                            System.IO.Path.GetExtension(oFile.FileName);

                        iErrorNumber = 201;
                    }
                    else
                    {
                        oFile.SaveAs(sFilePath);

                        sFileUrl = this.UserFilesPath + sFileName;
                        break;
                    }
                }
            }
            else
            {
                FileStream f=null;
                try
                {
                    SPFolder folder = this.GetFolder();

                    f = new FileStream(oFile.FileName, FileMode.Open);
                    byte[] content = new byte[f.Length];
                    f.Read(content, 0, (int)f.Length);
                    string fileurl=SPContext.Current.Site.Url + "/" + sWeb + "/" + folder.Url + "/" + sFileName;
                    folder.Files.Add(fileurl, content, true);
                    sFileUrl = fileurl;
                }
                catch (Exception ee)
                {
                    Response.Write(ee.Message);
                }
                finally
                {
                    f.Dispose();
                    
                }
            }

            SendResults( iErrorNumber, sFileUrl, sFileName ) ;
        }
3)打开FileBrowserConnector文件,这是图片浏览中需要的代码文件,修改相应方法:

private void GetFolders( XmlNode connectorNode, string resourceType, string currentFolder )
        {
            string sWeb = this.Web;
            if (sWeb == "" || sWeb == null)
            {
                // Map the virtual path to the local server path.
                string sServerDir = this.ServerMapFolder(resourceType, currentFolder);

                // Create the "Folders" node.
                XmlNode oFoldersNode = XmlUtil.AppendElement(connectorNode, "Folders");

                System.IO.DirectoryInfo oDir = new System.IO.DirectoryInfo(sServerDir);
                System.IO.DirectoryInfo[] aSubDirs = oDir.GetDirectories();

                for (int i = 0; i < aSubDirs.Length; i++)
                {
                    // Create the "Folders" node.
                    XmlNode oFolderNode = XmlUtil.AppendElement(oFoldersNode, "Folder");
                    XmlUtil.SetAttribute(oFolderNode, "name", aSubDirs.Name);
                }
            }
            else
            {
               
                SPFolder folder = this.GetFolder();
                XmlNode oFoldersNode = XmlUtil.AppendElement(connectorNode, "Folders");
               
               // System.IO.DirectoryInfo oDir = new System.IO.DirectoryInfo(sServerDir);
                //System.IO.DirectoryInfo[] aSubDirs = oDir.GetDirectories();
                SPFolderCollection aSubDirs = folder.SubFolders;
                for (int i = 0; i < aSubDirs.Count; i++)
                {
                    // Create the "Folders" node.
                    XmlNode oFolderNode = XmlUtil.AppendElement(oFoldersNode, "Folder");
                    XmlUtil.SetAttribute(oFolderNode, "name", aSubDirs.Name);
                }

            }
        }

        private void GetFiles( XmlNode connectorNode, string resourceType, string currentFolder )
        {
            string sWeb = this.Web;
            if (sWeb == "" || sWeb == null)
            {
                // Map the virtual path to the local server path.
                string sServerDir = this.ServerMapFolder(resourceType, currentFolder);

                // Create the "Files" node.
                XmlNode oFilesNode = XmlUtil.AppendElement(connectorNode, "Files");

                System.IO.DirectoryInfo oDir = new System.IO.DirectoryInfo(sServerDir);
                System.IO.FileInfo[] aFiles = oDir.GetFiles();

                for (int i = 0; i < aFiles.Length; i++)
                {
                    Decimal iFileSize = Math.Round((Decimal)aFiles.Length / 1024);
                    if (iFileSize < 1 && aFiles.Length != 0) iFileSize = 1;

                    // Create the "File" node.
                    XmlNode oFileNode = XmlUtil.AppendElement(oFilesNode, "File");
                    XmlUtil.SetAttribute(oFileNode, "name", aFiles.Name);
                    XmlUtil.SetAttribute(oFileNode, "size", iFileSize.ToString(CultureInfo.InvariantCulture));
                }
            }
            else
            {
               
                SPFolder folder = this.GetFolder();
                XmlNode oFilesNode = XmlUtil.AppendElement(connectorNode, "Files");

                SPFileCollection aFiles = folder.Files;

                for (int i = 0; i < aFiles.Count; i++)
                {
                    Decimal iFileSize = Math.Round((Decimal)aFiles.Length / 1024);
                    if (iFileSize < 1 && aFiles.Length != 0) iFileSize = 1;

                    // Create the "File" node.
                    XmlNode oFileNode = XmlUtil.AppendElement(oFilesNode, "File");
                    XmlUtil.SetAttribute(oFileNode, "name", aFiles.Name);
                    XmlUtil.SetAttribute(oFileNode, "size", iFileSize.ToString(CultureInfo.InvariantCulture));
                }
            }

        }

private void FileUpload( string resourceType, string currentFolder )
        {
            HttpPostedFile oFile = Request.Files["NewFile"] ;

            string sErrorNumber = "0" ;
            string sFileName = "" ;
            //string sFileUrl = "";
            if ( oFile != null )
            {
                 string sWeb = this.Web;
                 if (sWeb == "" || sWeb == null)
                 {
                     // Map the virtual path to the local server path.
                     string sServerDir = this.ServerMapFolder(resourceType, currentFolder);

                     // Get the uploaded file name.
                     sFileName = System.IO.Path.GetFileName(oFile.FileName);

                     int iCounter = 0;

                     while (true)
                     {
                         string sFilePath = System.IO.Path.Combine(sServerDir, sFileName);

                         if (System.IO.File.Exists(sFilePath))
                         {
                             iCounter++;
                             sFileName =
                                 System.IO.Path.GetFileNameWithoutExtension(oFile.FileName) +
                                 "(" + iCounter + ")" +
                                 System.IO.Path.GetExtension(oFile.FileName);

                             sErrorNumber = "201";
                         }
                         else
                         {
                             oFile.SaveAs(sFilePath);
                             break;
                         }
                     }
                 }
                 else
                 {
                     FileStream f = null;
                     try
                     {
                         SPFolder folder = this.GetFolder();

                         f = new FileStream(oFile.FileName, FileMode.Open);
                         byte[] content = new byte[f.Length];
                         f.Read(content, 0, (int)f.Length);
                         string fileurl = SPContext.Current.Site.Url + "/" + sWeb + "/" + folder.Url + "/" + sFileName;
                         folder.Files.Add(fileurl, content, true);
                         //sFileUrl = fileurl;
                     }
                     catch (Exception ee)
                     {
                         Response.Write(ee.Message);
                     }
                     finally
                     {
                         f.Dispose();

                     }
                 }
            }
            else
                sErrorNumber = "202" ;

            Response.Clear() ;

            Response.Write( "<script type=\"text/javascript\">" ) ;
            Response.Write( "window.parent.frames['frmUpload'].OnUploadCompleted(" + sErrorNumber + ",'" + sFileName.Replace( "'", "\\'" ) + "') ;" ) ;
            Response.Write( "</script>" ) ;

            Response.End() ;
        }
编译,试一下,是不是OK了?

运维网声明 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-117894-1-1.html 上篇帖子: SharePoint 2013 文档库中PPT转换PDF 下篇帖子: SharePoint 2010工作流系列(2):SharePoint Designer 2010中工作流的条件和操作概览
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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