/// <summary> /// Sets the metadata on a given document /// </summary> /// <param name="documentId">The document ID to set metadata on</param> /// <param name="documentMetadata">A DocumentMetadata object to apply to the document</param> /// <returns></returns> public DocumentResult UpdateDocumentMetadata(string documentId, DocumentMetadata documentMetadata) { DocumentResult result = new DocumentResult { Success = false, DocumentId = documentId }; // Get the item by using its ID SPListItem item = GetDocumentItemFromId(documentId); if (item != null) { // Get the author from the metadata object, update the author and modified date on the SharePoint side SPUser author = Util.GetUserFromLogin(documentMetadata.Author); if (author != null) { DateTime currentTime = DateTime.Now.ToLocalTime(); item[Resource.FieldModifiedBy] = author; item[Resource.FieldModifiedDate] = currentTime; } // Update the item item.UpdateOverwriteVersion(); result.Success = true; } else { result.ErrorMessage = string.Format("The document with id {0} could not be located for update.", documentId); Util.LogError(result.ErrorMessage, Util.ErrorLevel.Warning); } return(result); }
/// <summary> /// Deletes a document from SharePoint /// </summary> /// <param name="documentId">The ID of the document to delete</param> /// <returns></returns> public DocumentResult DeleteDocument(string documentId) { DocumentResult result = new DocumentResult { Success = false, DocumentId = documentId }; // Get the item by using its ID SPListItem documentItem = GetDocumentItemFromId(documentId); if (documentItem != null) { string docGuid = documentItem.UniqueId.ToString(); using (DisabledEventsScope scope = new DisabledEventsScope()) { try { documentItem.Recycle(); result.Success = true; } catch (Exception e) { Util.LogError("DeleteDocument failed with exception: " + e.Message); result.Success = false; } } } else { result.ErrorMessage = string.Format("The document with id {0} could not be located for delete.", documentId); Util.LogError(result.ErrorMessage, Util.ErrorLevel.Warning); } return(result); }
/// <summary> /// Creates a document in SharePoint /// </summary> /// <param name="documentMetadata">The metadata the document is to be created with</param> /// <param name="documentData">Byte array containing the document contents</param> /// <returns></returns> public DocumentResult CreateDocument(DocumentMetadata documentMetadata, byte[] documentData) { SPFile file = null; SPListItem item = null; DocumentResult result = null; Guid siteId = SPContext.Current.Site.ID; Guid webId = SPContext.Current.Web.ID; // To have access to taxonomy and DocumentManagement namespaces, the site needs to be accessed with elevated privileges SPSecurity.RunWithElevatedPrivileges(delegate() { result = new DocumentResult { Success = false }; using (SPSite site = new SPSite(siteId)) { using (SPWeb web = site.OpenWeb(webId)) { web.AllowUnsafeUpdates = true; /* Use the appropriate document library based on the type of the document */ SPList documentList = null; if (documentMetadata.DocumentType == DocumentType.VendorDocument) { documentList = web.Lists[Resource.VendorDocumentsLibrary]; } if (documentMetadata.DocumentType == DocumentType.WorkMatterDocument) { documentList = web.Lists[Resource.WorkMatterDocumentsLibrary]; } if (documentList != null) { string tempId = Guid.NewGuid().ToString(); try { // If there's a document ID then the user is doing an update. // When the user changes the document name in ClaimCenter, SharePoint sees it as a new document if (documentMetadata.DocumentID != null) { string documentUrl = GetDocumentUrlFromId(site, documentMetadata.DocumentID); file = web.GetFile(documentUrl); file.SaveBinary(documentData, false); } else { // To allow for similarly named files in different work matters, we can append the Claim Number or Contact ID string fileName = ""; if (documentMetadata.DocumentType == DocumentType.VendorDocument) { string contactID = Util.RemoveMetaCharacters(documentMetadata.ContactID); fileName = documentMetadata.FileName.Substring(0, documentMetadata.FileName.LastIndexOf(".")) + " - " + contactID + documentMetadata.FileName.Substring(documentMetadata.FileName.LastIndexOf(".")); } else if (documentMetadata.DocumentType == DocumentType.WorkMatterDocument) { fileName = documentMetadata.FileName.Substring(0, documentMetadata.FileName.LastIndexOf(".")) + " - " + documentMetadata.ClaimNumber + documentMetadata.FileName.Substring(documentMetadata.FileName.LastIndexOf(".")); } // This hashtable isn't really used, it's just a required parameter for the Files.Add overload being used System.Collections.Hashtable additionalProperties = new System.Collections.Hashtable(); // Try to get the author, but fall back to the service account if necessary SPUser author = Util.GetUserFromLogin(documentMetadata.Author); if (author == null) { author = SPContext.Current.Web.CurrentUser; } file = documentList.RootFolder.Files.Add(fileName, documentData, additionalProperties, author, author, DateTime.Now, DateTime.Now.ToUniversalTime(), true); } // Check in the file if it is checked out if (file.CheckOutType != SPFile.SPCheckOutType.None) { if (documentList.EnableMinorVersions) { file.CheckIn(string.Empty, SPCheckinType.MinorCheckIn); } else { file.CheckIn(string.Empty, SPCheckinType.MajorCheckIn); } } item = file.Item; result.Success = true; item.SystemUpdate(false); result.DocumentId = Util.GetDocumentId(item); } catch (Exception e) { Util.LogError("CreateDocument failed with exception: " + e.Message, Util.ErrorLevel.Error); result.Success = false; result.ErrorMessage = e.Message; } finally { web.AllowUnsafeUpdates = false; } } } } }); return(result); }