Появилась необходимость возможности прикрепить файл на форме работы с заданием в рамках рабочего процесса. Как создать свою форму для задания в рамках рабочего процесса я уже рассматривал. В данной статье решил показать как добавить возможность прикреплять файлы при выполнении задания.
Добавление элемента
Естественно, сначала в aspx файл добавляем элемент:
<asp:FileUpload id="FileUpload1" runat="server"> </asp:FileUpload>
Написание кода
protected string SaveFile() { //содержит список всех загружаемых файлов HttpFileCollection uploadFileList = HttpContext.Current.Request.Files; if (uploadFileList.Count == 0 || FileUpload1.FileName=="") return ""; //получаем ссылку на файл, для которого запущен рабочий процесс string link = this._TaskListItem["ows_WorkflowLink"].ToString(); //адресс библиотеки/списка получаем link = link.Substring(0, link.LastIndexOf('/')); //объект создаём, который представляет собой эту библиотеку SPFolder destinationLibrary = _myTeamSite.GetFolder(link); //в данном случае мы только 1 файл прикрепляем, поэтому сразу к 0 ячейке и обращаемся HttpPostedFile uploadFile = uploadFileList[0]; System.IO.Stream MyStream = uploadFile.InputStream; int len = uploadFile.ContentLength; byte[] UpFileInByte = new byte[len]; // считываем файл MyStream.Read(UpFileInByte, 0, len); string FName = uploadFile.FileName; if (FName.IndexOf('/') >= 0) FName = FName.Substring(FName.LastIndexOf('/') + 1); if (FName.IndexOf('\\') >= 0) FName = FName.Substring(FName.LastIndexOf('\\') + 1); //имя файла создаём string newFileName = link + "/" + DateTime.Today.Day +"-"+ DateTime.Today.Month + "-" + DateTime.Today.Year + " " + FName; //добавляем файл в библиотеку destinationLibrary.Files.Add(newFileName, UpFileInByte, false); MyStream.Close(); return newFileName; }
Теперь в обработчики кнопки вызываем этот метод и всё. Если нужно прикреплять несколько файлов, то просто в цикле прогоняем этот код для всех элементов uploadFileList.