Прикрепить файл в рабочем процессе в своей форме

Появилась необходимость возможности прикрепить файл на форме работы с заданием в рамках рабочего процесса. Как создать свою форму для задания в рамках рабочего процесса я уже рассматривал. В данной статье решил показать как добавить возможность прикреплять файлы при выполнении задания.

Добавление элемента

Естественно, сначала в 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.