文档库文件的附件的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);

           
        }


    }
}

 

 

posted @ 2009-09-08 16:55  昕友软件开发  阅读(171)  评论(0编辑  收藏  举报
欢迎访问我的开源项目:xyIM企业即时通讯