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); #endregionthis.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("请输入站点的地址(必填),如")] [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("跳转页面,如")] [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\"> </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\"> </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);} }}