Появилась необходимость возможности прикрепить файл на форме работы с заданием в рамках рабочего процесса. Как создать свою форму для задания в рамках рабочего процесса я уже рассматривал. В данной статье решил показать как добавить возможность прикреплять файлы при выполнении задания.
Добавление элемента
Естественно, сначала в 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.