only My site

Thursday, August 30, 2012

Add a file to a Document Library and update metadata properties in a single method

Basically the steps are as follows:
  • Add the file through the document library
  • Get a reference to the same document library as an SPList
  • get the SPListItem you just added using the newFile.ListItemAllFields.ID
  • Set the metatdata properties
  • Call SPListItem.Update()
  • Check the file in (IMPORTANT TO DO THIS LAST AFTER YOU’VE SET ALL THE FIELDS OTHERWISE YOU’LL GET AN ERROR TRYING TO SET THE LIST ITEM PROPERTIES SAYING THAT THE FILE IS NOT CHEKED OUT)
private void AddFileToDocumentLibrary(string documentLibraryUrl, string filename, byte[] file_bytes, string itemTitleText)
     {
         SPSecurity.RunWithElevatedPrivileges(delegate()
         {
             using (SPSite site = new SPSite(documentLibraryUrl))
             {
                 using (SPWeb web = site.OpenWeb())
                 {
                     web.AllowUnsafeUpdates = true;
                     SPDocumentLibrary documentLibrary = (SPDocumentLibrary)web.Lists["MyDocumentLibraryName"];
                     SPFileCollection files = documentLibrary.RootFolder.Files;
                     SPFile newFile = files.Add(documentLibrary.RootFolder.Url + "/" + filename, file_bytes, true);

                     SPList documentLibraryAsList = web.Lists["MyDocumentLibraryName"];
                     SPListItem itemJustAdded = documentLibraryAsList.GetItemById(newFile.ListItemAllFields.ID);
                     //amend with your document-derived custom Content Type
                     SPContentType documentContentType = documentLibraryAsList.ContentTypes["Document"];
                     itemJustAdded["ContentTypeId"] = documentContentType.Id;
                     itemJustAdded["Title"] = itemTitleText;
                     //set other propeerties here..
                     itemJustAdded.Update();
                     newFile.CheckIn("New", SPCheckinType.OverwriteCheckIn);
                     web.AllowUnsafeUpdates = false;
                 }
             }
         });
     }

No comments: