Poco tempo fa mi è capitato di dover inserire una serie di nuovi elementi all'interno di una lista sharepoint da una Console Application scritta in C#. Ogni elemento aveva uno o più allegati presenti sul file system in una directory temporanea.
Per aggiungere questi allegati ad un singolo elemento, di tipo SPListItem, ci possiamo avvalere della proprietà Attachments; questa proprietà è di tipo SPAttachmentCollection, classe che mette a disposizione un metodo Add() proprio per l'aggiunta di allegati.
Il metodo Add in questione prende due parametri:

  • il nome del file
  • un array di byte che rappresentano il file vero e proprio
Dato quindi il percorso di un file è possibile utilizzare il metodo ReadFileBytes, che ho appena inserito nella categoria "Usefull Methods", in questo modo:

static void Main(string[] args)

{
string fileName="", filePath="";
try
{
SPSite sito = new SPSite("http://<sitepath>");
SPList list = sito.OpenWeb().Lists["<listname>"];
SPView view = list.DefaultView;
SPListItemCollection coll = lista.GetItems(view);
SPListItem item = coll.Add();
item["Title"] = "Item title";
if(args[0] != null && args[0] != "")
{
fileName = System.IO.Path.GetFileNameWithoutExtension(args[0]);
fileName = System.Web.HttpServerUtility.HtmlEncode(fileName).Replace(" ","_");
filePath = args[0];
}
item.Attachments.Add(fileName, ReadFileBytes(filePath));
item.Update();
}
catch (Exception err)
{
Console.WriteLine(err.Message);
}
Console.WriteLine("Operazione eseguita con successo, premere un tasto per uscire");
Console.Read();
}

L'unica cosa cui porre attenzione è il nome del file. Se infatti vi trovate a gestire dei file con dei nomi che contengono spazi o, cmq, altri caratteri "strani" (come le parole accentate), vi verrà sollevata una bella eccezione. E' proprio per quello che formattiamo il nome del file attraverso il metodo HtmlEncode.
Spero vi sia utile...