zoukankan      html  css  js  c++  java
  • 文档库文件的附件的webpart (原创)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.SharePoint;
    using System.IO;
    using System.Web.UI.WebControls.WebParts;
    using System.ComponentModel;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Collections;
    using Microsoft.SharePoint.WebControls;
    using Microsoft.SharePoint.Utilities;

    namespace UploadDocument
    {
        public class AddAttachments : WebPart
        {
            private Button SubmitButton = new Button();
            private Button btnMoreFile = new Button();
            SPListItem item;
            Dictionary<string, string> GenFieldKeyID=new Dictionary<string,string>();
            List<string> FieldValidator = new List<string>();

            int Count
            {
                get
                {
                    if (ViewState["ControlCount"] == null)
                        ViewState["ControlCount"] = uploadNum;
                    return (int)ViewState["ControlCount"];
                }
                set
                {
                    ViewState["ControlCount"] = value;
                }
            }

            ControlCollection CellControls
            {
                get
                {
                    if (ViewState["controls"] == null)
                        ViewState["controls"] = this.Controls;
                    return (ControlCollection)ViewState["controls"];
                }
                set
                {
                    ViewState["controls"] = value;
                }
            }

            private bool FieldContains(string[] arr, string str)
            {
                for (int i = 0; i < arr.Length; i++)
                {
                    if (arr[i] == str)
                        return true;
                }
                return false;
            }

            private void AddControl()
            {
                using (SPWeb web = SPContext.Current.Site.OpenWeb())
                {
                    try
                    {
                        GenFieldKeyID.Clear();
                        if (Page.Request.QueryString["ListName"] == null) return;
                        SPList list = web.Lists[Page.Request.QueryString["ListName"]];

                        //UniqueId
                        //item = list.GetItemByUniqueId(new Guid(Page.Request.QueryString["docID"]));

                        //ID
                        item = list.GetItemById(Convert.ToInt32(Page.Request.QueryString["docID"]));

                       

                        Table table = new Table();
                        table.CssClass = "upload_edit_tb";
                        table.CellPadding = 0;
                        table.CellSpacing = 0;
                        TableRow row;
                        TableCell cell;
                        Literal ltTitle=new Literal();
                        ltTitle.Text = "<SPAN class=cur_met_txt>当前位置:公文详细信息</SPAN>";
                       
                        row = new TableRow();
                        cell = new TableCell();
                        cell.CssClass = "cur_met_room";
                        cell.ColumnSpan = 3;
                        cell.Controls.Add(ltTitle);
                        row.Controls.Add(cell);
                        table.Rows.Add(row);

                        row = new TableRow();
                        cell = new TableCell();
                        cell.ColumnSpan = 3;
                        cell.Height = 10;

                        row.Controls.Add(cell);
                        table.Rows.Add(row);

                        //取自视图
                        //for (int i = 0; i < list.DefaultView.ViewFields.Count; i++)
                        //取自全部字段
                        //for (int i = 0; i < list.Fields.Count; i++)
                        //取自全部内容类型
                        //for (int i = 0; i < list.ContentTypes.Count; i++)
                        //取自第一个文档类型
                        SPContentType cty = list.ContentTypes[0];
                        for (int i = 0; i < cty.Fields.Count; i++)
                        {
                            //取自视图
                            //SPField field = list.Fields.GetField(list.DefaultView.ViewFields[i]);
                            //取自全部字段
                            //SPField field = list.Fields[i];

                            //取自第一个文档类型
                            SPField field = cty.Fields[i];
                            if (!field.Hidden && !field.FromBaseType && !(field.Type == SPFieldType.WorkflowStatus))
                            {


                                row = new TableRow();
                                cell = new TableCell();
                                cell.Text = field.Title;
                                //cell.Width = 100;
                                cell.CssClass = "upload_edit_left";

                                row.Cells.Add(cell);

                                cell = new TableCell();
                                Control cntrl = SharePointWebControls.GetSharePointControls(field, list, item, SPControlMode.Display);
                                if (cntrl == null) continue;

                                //判断是否在配置栏中
                                //if (FieldContains(genFields.Split(','), field.Title))
                                {
                                    Control control = SharePointWebControls.GetSharePointControls(field, list, item, SPControlMode.Edit);

                                    control.ID = "tbx" + i.ToString();

                                    GenFieldKeyID.Add(field.Title, control.ID);
                                    //row.Cells.Add(cell);
                                    cell = new TableCell();
                                    cell.CssClass = "upload_edit_right";

                                    cell.Controls.Add(control);
                                    row.Controls.Add(cell);

                                    if (field.Required == true)
                                    {
                                        cell = new TableCell();
                                        Label lbl = new Label();
                                        lbl.ID = "Vali" + control.ID;
                                        lbl.Text = "(*必填)";
                                        lbl.ForeColor = System.Drawing.Color.Red;
                                        cell.CssClass = "upload_pop";
                                        cell.Controls.Add(lbl);
                                        row.Controls.Add(cell);
                                        FieldValidator.Add(control.ID);
                                    }
                                    else
                                    {
                                        cell = new TableCell();
                                        cell.CssClass = "upload_pop";
                                        row.Controls.Add(cell);
                                    }
                                    table.Rows.Add(row);

                                }
                            }

                        }
                        this.Controls.Add(table);

                        InitFileControl(uploadNum);


                        Table table1 = new Table();
                        table.CssClass = "upload_edit_tb";
                        table.CellPadding = 0;
                        table.CellSpacing = 0;


                        row = new TableRow();
                        cell = new TableCell();
                        //cell.Width = 100;
                        cell.CssClass = "upload_edit_left";

                        row.Cells.Add(cell);

                        cell = new TableCell();
                        SubmitButton.ID = "SubmitButton";
                        SubmitButton.Text = "确 定";
                        SubmitButton.CssClass = "upload_edit_bt";
                        SubmitButton.Click += new EventHandler(SubmitButton_Click);
                        cell.CssClass = "upload_edit_post";

                        cell.Controls.Add(this.SubmitButton);
                        row.Controls.Add(cell);
                        table1.Rows.Add(row);
                        this.Controls.Add(table1);
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }

                }

            }

            void btnMoreFile_Click(object sender, EventArgs e)
            {
                if (this.Page.IsPostBack == false)
                {
                    //Count++;
                    //NewFileControl(Count);
                    uploadNum=Convert.ToInt32(((TextBox)this.FindControl("tbnum")).Text);
                    this.AddControl();
                }
            }

            private void NewFileControl(int Count)
            {
                Literal lb = new Literal();
                lb.Text = " 上传文件" + Count.ToString();
                FileUpload fileup = new FileUpload();
                fileup.ID = "fileUpload" + Count.ToString();
                this.Controls.Add(lb);
                this.Controls.Add(fileup);

            }

            private void InitFileControl(int count)
            {
                Table table = new Table();
                table.CssClass = "upload_edit_tb";
                table.CellPadding = 0;
                table.CellSpacing = 0;


                TableRow row;
                TableCell cell;

                for (int i = 0; i < count; i++)
                {
                    row = new TableRow();
                    cell = new TableCell();

                    Literal lb = new Literal();
                    lb.Text =" 上传文件"+ (i+1).ToString();

                    cell.Controls.Add(lb);
                    //cell.Width = 100;
                    cell.CssClass = "upload_edit_left";

                    row.Controls.Add(cell);

                    cell = new TableCell();

                    FileUpload fileup = new FileUpload();
                    fileup.CssClass = "upload_view";
                    fileup.ID = "fileUpload" + i.ToString();
                    cell.CssClass = "upload_edit_right";


                    cell.Controls.Add(fileup);
                    row.Controls.Add(cell);

                    cell = new TableCell();
                    cell.CssClass = "upload_pop";
                    row.Controls.Add(cell);

                    table.Rows.Add(row);

                }

                #region 动态加上传控件,暂时屏蔽

               
                //row = new TableRow();
                //cell = new TableCell();

                //Literal lbnum = new Literal();
                //lbnum.Text = " 上传文件数:";
                //cell.Width = 100;
                //cell.CssClass = "upload_edit_left";


                //cell.Controls.Add(lbnum);
                //row.Controls.Add(cell);


                //cell = new TableCell();
                //TextBox tbnum = new TextBox();
                //tbnum.ID = "tbnum";

                //this.btnMoreFile.ID = "btnMoreFile";
                //this.btnMoreFile.Text = "重新设置";
                //this.btnMoreFile.Click += new EventHandler(btnMoreFile_Click);
                //this.Controls.Add(this.btnMoreFile);

                //cell.Controls.Add(tbnum);
                //cell.Controls.Add(btnMoreFile);
                //row.Controls.Add(cell);
                //table.Rows.Add(row);
               
                #endregion

                this.Controls.Add(table);

              
            }

            void SubmitButton_Click(object sender, EventArgs e)
            {
                //验证
                if (!ValidateLibrary()) return;
               

                string strRoot = "";

                if (this.Page.Request.QueryString["RootFolder"] != null)
                {
                    strRoot = this.Page.Request.QueryString["RootFolder"];
                }

                string fileID = this.Page.Request.QueryString["docID"];
                string fileName = this.Page.Request.QueryString["fileName"];

                Dictionary<string,byte[]> files=new Dictionary<string,byte[]>();

                for (int i = 0; i < uploadNum; i++)
                {
                    FileUpload fi=((FileUpload)this.FindControl("fileUpload"+i.ToString()));
                    if (fi.HasFile)
                    {
                        if (!files.Keys.Contains(fi.FileName))
                        {
                            files.Add(fi.FileName, fi.FileBytes);
                        }
                    }
                }

                //添加附件
                AddDocAttachments(strRoot, fileID, fileName, files);


                if (dirType == defaultDirType.直接地址)
                {
                    this.Page.Response.Redirect(dirPageURL);
                }
                else if (dirType == defaultDirType.工作流)
                {
                    this.Page.Response.Redirect(this.Page.Request.QueryString["wf_url"]);
                }


            }

            private bool ValidateLibrary()
            {

                for (int i = 0; i < FieldValidator.Count; i++)
                {
                    if (((BaseFieldControl)this.FindControl(FieldValidator[i])).Value.ToString() == "")
                    {
                        return false;
                    }
                    else
                    {
                        ((Label)this.FindControl("Vali" + FieldValidator[i])).Text = "";
                    }
                }
                return true;

            }

            private string SaveDocumentLibraryItem()
            {
                try
                {
                    foreach (string key in GenFieldKeyID.Keys)
                    {
                        item[key] =((BaseFieldControl)this.FindControl(GenFieldKeyID[key])).Value; //((TextBox)this.FindControl(GenFieldKeyID[key])).Text;//
                    }
                    item.Update();
                    return "保存成功!";

                }
                catch (Exception ex)
                {
                    return ex.Message;
                }
            }


            private string AddDocAttachments(string RootFolder,string fileid,string filename, Dictionary<string, byte[]> files)
            {
                try
                {
                    SPSite site = new SPSite(siteUrl);
                    SPWeb web = null;

                    if (webUrl != "")
                    {
                        web = site.OpenWeb(webUrl.Trim());
                    }
                    else
                    {
                        web = site.OpenWeb();
                    }

                    site.AllowUnsafeUpdates = true;

                    SPList list = web.Lists[listUrl];
                    SPFolder rootFolder = web.GetFolder(filename);

                    if (!rootFolder.Exists)
                    {
                        //区分对待文档库
                        if (list.BaseType == SPBaseType.DocumentLibrary)
                        {
                            //如果是文档库则建目录
                            SPFolder folder = list.RootFolder.SubFolders.Add(filename);

                            SPListItem item = folder.Item;
                            item["Title"] = filename;
                            item["ContentTypeId"] = "Folder";
                            web.AllowUnsafeUpdates = true;
                            item.Update();
                            web.AllowUnsafeUpdates = false;
                            rootFolder = folder;

                            //创建文件
                            foreach (string key in files.Keys)
                            {
                                byte[] binFile = files[key];

                                SPFile spFile = web.GetFile(rootFolder.Url + "/" + key);
                                if (spFile.Exists)
                                {
                                    spFile.Delete();
                                }
                                //写入文件
                                web.AllowUnsafeUpdates = true;

                                //提交
                                Hashtable ht = new Hashtable();
                                ht.Add("DocID", fileid);

                                rootFolder.Files.Add(rootFolder.Url + "/" + key, binFile, ht, true);
                            }

                        }
                        //不是文档库时建立的是文件
                        else
                        {
                            //如果是列表则建文件
                            SPListItem tmpItem = list.Folders.Add(list.RootFolder.ServerRelativeUrl, SPFileSystemObjectType.File);
                            tmpItem["Title"] = filename;
                            web.AllowUnsafeUpdates = true;
                                                   
                            foreach (string key in files.Keys)
                            {
                                byte[] binFile = files[key];

                                tmpItem.Attachments.Add(key, binFile);
                                tmpItem["DocID"] = fileid;
                            }

                            tmpItem.Update();
                            SaveDocumentLibraryItem();
                            //权限
                            //SharePointRole.addRole(site, web, tmpItem, "读取");
                            web.AllowUnsafeUpdates = false;
                        }

                    }

                    web.AllowUnsafeUpdates = false;
                    return "";
                }
                catch (Exception ex)
                {
                    return ex.Message;
                }
            }

            private void addFolder(string checkPath, string createPath, string folderName, SPWeb web, SPList list)
            {
                SPFolder rFolder = web.GetFolder(checkPath);
                //判断是否存在文件夹,没有则新建
                if (!rFolder.Exists)
                {
                    SPListItem newFolder = list.Items.Add(createPath, SPFileSystemObjectType.Folder, folderName);
                    web.AllowUnsafeUpdates = true;
                    newFolder.Update();
                    web.AllowUnsafeUpdates = false;
                    rFolder = newFolder.Folder;
                }
            }

            private SPList GetSPList(string strSite, string strWeb, string strList)
            {
                try
                {
                    using (SPSite site = new SPSite(strSite))
                    {
                        site.AllowUnsafeUpdates = true;
                        using (SPWeb web = site.OpenWeb(strWeb))
                        {
                            web.AllowUnsafeUpdates = true;

                            SPListCollection lists = web.Lists;
                            SPList list = lists[strList];
                            return list;
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            //获取和设置站点的地址
            private const string defaultSiteUrl = "";
            private string siteUrl = defaultSiteUrl;

            [Personalizable]
            [WebBrowsable, Category("配置")]
            [WebDisplayName("请输入站点的地址(必填),如http://eiptest/")]
            [WebDescription("这里可以更换连接到文档库的地址")]
            public string SiteUrl
            {
                get
                {
                    return this.siteUrl;
                }
                set
                {
                    siteUrl = value;
                }
            }

            private const string defaultWebUrl = "";
            private string webUrl = defaultWebUrl;

            [Personalizable]
            [WebBrowsable, Category("配置")]
            [WebDisplayName("请输入网站的地址(可不填),空白则为默认网站")]
            [WebDescription("这里可以更换连接到文档库网站的地址")]
            public string WebUrl
            {
                get
                {
                    return this.webUrl;
                }
                set
                {
                    webUrl = value;
                }
            }


            //设定起始节点
            private const string defaultList = "/Attachments";
            private string listUrl = defaultList;

            [Personalizable]
            [WebBrowsable, Category("配置")]
            [WebDisplayName("列表名称(必填)")]
            [WebDescription("请输入列表的名称")]
            public string ListUrl
            {
                get
                {
                    return listUrl;
                }
                set
                {

                    listUrl = value;
                }
            }

            //跳转方式
            public enum defaultDirType { 直接地址, 工作流 };
            private defaultDirType dirType = defaultDirType.工作流;

            [Personalizable]
            [WebBrowsable, Category("配置")]
            [WebDisplayName("跳转方式")]
            [WebDescription("请输入跳转方式")]
            public defaultDirType DirType
            {
                get
                {
                    return dirType;
                }
                set
                {

                    dirType = value;
                }
            }

            //设定跳转页面
            private const string defaultDirPageURL = "";
            private string dirPageURL = defaultDirPageURL;

            [Personalizable]
            [WebBrowsable, Category("配置")]
            [WebDisplayName("跳转页面,如http://eip/Pages/XX.aspx")]
            [WebDescription("请输入跳转页面")]
            public string DirPageURL
            {
                get
                {
                    return dirPageURL;
                }
                set
                {

                    dirPageURL = value;
                }
            }

            //private const string defaultFields = "标题";
            //private string genFields = defaultFields;

            //[Personalizable]
            //[WebBrowsable, Category("配置")]
            //[WebDisplayName("可编辑的栏名(必填)")]
            //[WebDescription("可编辑的栏名")]
            //public string GenFields
            //{
            //    get
            //    {
            //        return genFields;
            //    }
            //    set
            //    {

            //        genFields = value;
            //    }
            //}

            private const int defaultUploadNum = 6;
            private int uploadNum = defaultUploadNum;

            [Personalizable]
            [WebBrowsable, Category("配置")]
            [WebDisplayName("可上传的文件数(必填)")]
            [WebDescription("可上传的文件数")]
            public int UploadNum
            {
                get
                {
                    return uploadNum;
                }
                set
                {

                    uploadNum = value;
                }
            }

            protected override void OnLoad(EventArgs e)
            {

                base.OnLoad(e);
                if (this.Page.IsPostBack == true)
                    this.AddControl();

            }

            protected override void CreateChildControls()
            {
                if (this.Page.IsPostBack == false)
                {
                    this.AddControl();

                }
            }

            protected override void Render(HtmlTextWriter writer)
            {
                base.Render(writer);
                //using (SPWeb web = SPContext.Current.Site.OpenWeb())
                //{
                //    try
                //    {
                //        GenFieldKeyID.Clear();
                //        if (Page.Request.QueryString["ListName"] == null) return;
                //        SPList list = web.Lists[Page.Request.QueryString["ListName"]];

                //        //UniqueId
                //        //item = list.GetItemByUniqueId(new Guid(Page.Request.QueryString["docID"]));

                //        //ID
                //        item = list.GetItemById(Convert.ToInt32(Page.Request.QueryString["docID"]));

                //        writer.Write("<div class=\"upload_edit_main\"><div class=\"met_room_title\"><div class=\"cur_met_room\"><span class=\"cur_met_txt\">当前位置:添加附件</span></div></div>");
                       
                //        writer.Write("<div class=\"upload_edit_list\">");
                       
                //        //取自视图
                //        //for (int i = 0; i < list.DefaultView.ViewFields.Count; i++)
                //        //取自全部字段
                //        //for (int i = 0; i < list.Fields.Count; i++)
                //        //取自全部内容类型
                //        //for (int i = 0; i < list.ContentTypes.Count; i++)
                //        //取自第一个文档类型
                //        SPContentType cty = list.ContentTypes[0];
                //        for (int i = 0; i < cty.Fields.Count; i++)
                //        {
                //            //取自视图
                //            //SPField field = list.Fields.GetField(list.DefaultView.ViewFields[i]);
                //            //取自全部字段
                //            //SPField field = list.Fields[i];

                //            //取自第一个文档类型
                //            SPField field = cty.Fields[i];
                //            if (!field.Hidden && !field.FromBaseType && !(field.Type == SPFieldType.WorkflowStatus))
                //            {

                //                writer.Write("<div class=\"upload_edit_txt\">");
                //                writer.Write("<div class=\"upload_edit_left\">");
                //                writer.Write(field.Title);
                //                writer.Write("</div>");
                //                Control cntrl = SharePointWebControls.GetSharePointControls(field, list, item, SPControlMode.Display);
                //                if (cntrl == null) continue;

                //                //判断是否在配置栏中
                //                //if (FieldContains(genFields.Split(','), field.Title))
                //                {
                //                    Control control = SharePointWebControls.GetSharePointControls(field, list, item, SPControlMode.Edit);

                //                    control.ID = "tbx" + i.ToString();

                //                    GenFieldKeyID.Add(field.Title, control.ID);

                //                    writer.Write("<div class=\"upload_edit_right\" >");
                //                    control.RenderControl(writer);
                //                    writer.Write("</div>");


                //                    if (field.Required == true)
                //                    {

                //                        Label lbl = new Label();
                //                        lbl.ID = "Vali" + control.ID;
                //                        lbl.Text = "(*必填)";
                //                        writer.Write("<div class=\"upload_pop\" >");
                //                        lbl.RenderControl(writer);
                //                        writer.Write("</div>");


                //                        FieldValidator.Add(control.ID);
                //                    }
                //                    else
                //                    {
                //                        writer.Write("<div class=\"upload_pop\">&nbsp;</div>");
                //                    }

                //                }
                //             writer.Write("</div>");
                //           }
                //        }

                //        //InitFileControl(uploadNum);

                //        for (int i = 0; i < uploadNum; i++)
                //        {
                //            writer.Write("<div class=\"upload_edit_txt\" >");

                //            Literal lb = new Literal();
                //            lb.Text = " 上传文件" + (i + 1).ToString();

                //            writer.Write("<div class=\"upload_edit_left\">");
                //            lb.RenderControl(writer);
                //            writer.Write("</div>");

                //            FileUpload fileup = new FileUpload();
                //            fileup.CssClass = "upload_view";
                //            fileup.ID = "fileUpload" + i.ToString();

                //            writer.Write("<div class=\"upload_edit_right\" >");
                //            fileup.RenderControl(writer);
                //            writer.Write("</div>");
                           
                //            writer.Write("<div class=\"upload_pop\">&nbsp;</div>");
                //            writer.Write("</div>");

                //        }

                //        SubmitButton.ID = "SubmitButton";
                //        SubmitButton.Text = "确 定";
                //        SubmitButton.CssClass = "upload_edit_bt";
                //        SubmitButton.Click += new EventHandler(SubmitButton_Click);

                //        writer.Write("<div class=\"upload_edit_post\">");

                //        SubmitButton.RenderControl(writer);
                //        writer.Write("</div>");

                //        writer.Write("</div>");
                //        writer.Write("</div>");

                //    }
                //    catch (Exception ex)
                //    {
                //        throw ex;
                //    }

                //}
            }

            protected override void OnPreRender(EventArgs e)
            {
                CssRegistration cssControls = new CssRegistration();
                cssControls.Name = "/wpresources/style/upload/css/font.css";

                CssRegistration cssControls2 = new CssRegistration();
                cssControls2.Name = "/wpresources/style/upload/css/upload_edit.css";


                Page.Header.Controls.Add(cssControls);
                Page.Header.Controls.Add(cssControls2);

               
            }


        }
    }

    关于作者: 王昕(QQ:475660) 在广州工作生活30余年。十多年开发经验,在Java、即时通讯、NoSQL、BPM、大数据等领域较有经验。
    目前维护的开源产品:https://gitee.com/475660
  • 相关阅读:
    pyinstaller 将 python 代码打包成执行文件
    python excel 处理 xlrd & xlwt &xlutils
    服务器重启后 Nvidia 环境错误
    py 编译so
    cv 读取宽高和画框
    libreOffice doc 转pdf
    gunicorn 使用
    asp.net 跬步篇(4) EnableSessionState设置 引起的框架集加载问题
    驱驾ViewState利剑—压缩ViewState
    asp.net 开发 跬步篇〔3〕.net 邮件批量发送
  • 原文地址:https://www.cnblogs.com/starcrm/p/1562669.html
Copyright © 2011-2022 走看看