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

[经验分享] VSTO学习笔记(四)从SharePoint 2010中下载文件

[复制链接]

尚未签到

发表于 2015-9-25 12:32:01 | 显示全部楼层 |阅读模式
  上一次我们开发了一个简单的64位COM加载项,虽然功能很简单,但是包括了开发一个64位COM加载项的大部分过程。本次我们来给COM加载项添加一些功能:从SharePoint 2010的文档库中下载一个Excel文档到本地。
  示例代码下载
  本系列所有示例代码均在 Visual Studio 2010 Ultimate RC + Office 2010 Professional Plus Beta x64 上测试通过。
  
  1、首先创建一个Shared AddIn项目(具体细节请参阅上一篇文章):
DSC0000.png
  
  2、添加引用:
  Microsoft.SharePoint
  System.Windows.Forms
  System.Drawing
  System.DirectoryServices
  
  3、在Connect类中创建Application和COMAddIn的实例:
  

DSC0001.gif DSC0002.gif 代码

    /// <summary>
    ///   The object for implementing an Add-in.
    /// </summary>
    /// <seealso class='IDTExtensibility2' />
    [GuidAttribute("6D3788F4-9529-429E-BA5D-09695F85687A"), ProgId("SimpleExcelServicesDemo.Connect")]
    public class Connect : Object, Extensibility.IDTExtensibility2
    {
        private Microsoft.Office.Interop.Excel.Application app;
        private Microsoft.Office.Core.COMAddIn addIn;  
  
  3、在OnConnection事件里初始化:
  

代码

        public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
        {
            this.app = application as Microsoft.Office.Interop.Excel.Application;
            this.addIn = addInInst as Microsoft.Office.Core.COMAddIn;
        }  
  
  4、在OnStartupComplete事件中设置一个按钮,关联事件处理逻辑:


代码

        public void OnStartupComplete(ref System.Array custom)
        {
            CommandBars commandBars;
            CommandBar standardBar下载数据;
            CommandBarButton simpleButton下载数据;
            commandBars = this.app.CommandBars;
            // Get the standard CommandBar from Word
            standardBar下载数据 = commandBars["Standard"];
            try
            {
                // try to reuse the button is hasn't already been deleted
                simpleButton下载数据 = (CommandBarButton)standardBar下载数据.Controls["下载数据"];
            }
            catch (System.Exception)
            {
                // If it's not there add a new button
                simpleButton下载数据 = (CommandBarButton)standardBar下载数据.Controls.Add(1);
                simpleButton下载数据.Caption = "下载数据";
                simpleButton下载数据.Style = MsoButtonStyle.msoButtonCaption;
            }
            // Make sure the button is visible
            simpleButton下载数据.Visible = true;
            simpleButton下载数据.Click += new _CommandBarButtonEvents_ClickEventHandler(btnDownload_Click);
            standardBar下载数据 = null;
            commandBars = null;
        }  

          5、做一个域用户验证,当用户输入了合法的与用户名和密码后,才允许下载。这里添加了一个WindowsForm到项目中:
DSC0003.png
  
  6、域用户验证逻辑,我本机是一台域控制器BROOKS.COM,使用的静态IP: 192.168.1.100,【LDAP://192.168.1.100/DC=BROOKS,DC=com】是LDAP的路径语法:

代码

        private bool fn数据验证()
        {
            if (this.txt用户名.Text.Trim() == string.Empty)
            {
                MessageBox.Show("用户名不能为空!");
                this.txt用户名.Focus();
                return true;
            }
            if (this.txt密码.Text.Trim() == string.Empty)
            {
                MessageBox.Show("密码不能为空!");
                this.txt密码.Focus();
                return true;
            }
            if (this.fn域用户验证(@"LDAP://192.168.1.100/DC=BROOKS,DC=com", this.txt用户名.Text.Trim(), this.txt密码.Text.Trim()))
            {
                MessageBox.Show("您输入的用户名或密码错误,请重新输入!");
                this.txt密码.Clear();
                this.txt密码.Focus();
                return true;
            }
            return false;
        }
        private bool fn域用户验证(string path, string username, string pwd)
        {
            try
            {
                DirectoryEntry entry = new DirectoryEntry(path, username, pwd);
                DirectorySearcher search = new DirectorySearcher(entry);
                search.Filter = "(SAMAccountName=" + username + ")";
                SearchResult result = search.FindOne();
                if (null == result)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch
            {
                return true;
            }
        }  
  
  7、使用Windows Server 2008 R2的AD管理器创建一个域用户:test
DSC0004.png
  
DSC0005.png
  
  8、在Connect中编写下载文件逻辑:
  SharePoint 2010 网站是:http://brookspc/sites/doc,我们要下载的就是其Document库中的Excel Services Test.xlsx

代码

        private void fn下载文件()
        {
            //保存文件            
            using (SPSite site = new SPSite("http://brookspc/sites/doc"))
            {
                SPWeb web = site.OpenWeb();
                string __fileName = "http://brookspc/sites/doc/Documents/Excel Services Test.xlsx";
                SPFile file = web.GetFile(__fileName);
                string __localFilePath = @"C:\ExcelServices.xlsx";
                //将文件下载到本地
                byte[] content = file.OpenBinary();
                if (File.Exists(__localFilePath))
                {
                    File.Delete(__localFilePath);
                }
                FileStream fs = new FileStream(__localFilePath, FileMode.Create);
                fs.Write(content, 0, content.Length);
                fs.Flush();
                fs.Close();
            }
        }  
  
  9、按钮事件处理逻辑:

代码

        public void btnDownload_Click(CommandBarButton sender, ref bool cancelDefault)
        {
            FrmLogin login = new FrmLogin();
            if (login.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                this.fn下载文件();
            }
        }  
  
  10、编译一下,安装生成的setup.exe:
DSC0006.png
  
  11、打开Excel,点击【下载数据】:
DSC0007.png
  
  12、输入域用户名、密码后,点击【登录】,即把SharePoint中的文件下载到了本地,默认在C盘:
DSC0008.png
  
DSC0009.png
  
  小结:
  本次只是添加了一些功能,和SharePoint 2010进行了交互,下载了一个文档,其中用到了域用户的验证。后续篇章会继续将VSTO与其他技术进行整合,构建一个完善的解决方案。

运维网声明 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-118695-1-1.html 上篇帖子: sharepoint 2010 中操作List 下篇帖子: SharePoint Designer工作流的扩展
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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