/// <summary> /// Return the list of files in a given folder. /// </summary> /// <param name="entityId"></param> /// <param name="entityName"></param> /// <param name="documentType"></param> /// <returns></returns> public static async Task <List <FileSystemItem> > GetListFilesInFolder(string entityId, string entityName, string documentType, IDynamicsClient _dynamicsClient, FileManagerClient _fileManagerClient, ILogger _logger) { var fileSystemItemVMList = new List <FileSystemItem>(); // 4-9-2020 - GW removed session check to resolve issue with PHS links not working. Session checks occur further up the call stack. if (string.IsNullOrEmpty(entityId) || string.IsNullOrEmpty(entityName) || string.IsNullOrEmpty(documentType)) { return(fileSystemItemVMList); } for (int i = 0; i < 3; i++) { try { // call the web service var request = new FolderFilesRequest { DocumentType = documentType, EntityId = entityId, EntityName = entityName, FolderName = await _dynamicsClient.GetFolderName(entityName, entityId) }; var result = _fileManagerClient.FolderFiles(request); if (result.ResultStatus == ResultStatus.Success) { // convert the results to the view model. foreach (var fileDetails in result.Files) { var fileSystemItemVM = new FileSystemItem { // remove the document type text from file name name = fileDetails.Name.Substring(fileDetails.Name.IndexOf("__") + 2), // convert size from bytes (original) to KB size = fileDetails.Size, serverrelativeurl = fileDetails.ServerRelativeUrl, //timelastmodified = fileDetails.TimeLastModified.ToDateTime(), documenttype = fileDetails.DocumentType }; fileSystemItemVMList.Add(fileSystemItemVM); } break; } else { _logger.LogError($"ERROR in getting folder files for entity {entityName}, entityId {entityId}, docuemnt type {documentType} "); } } catch (Exception e) { _logger.LogError(e, "Error getting SharePoint File List"); } } return(fileSystemItemVMList); }
/// <summary> /// Internal implementation of upload attachment /// </summary> /// <param name="entityId"></param> /// <param name="entityName"></param> /// <param name="file"></param> /// <param name="documentType"></param> /// <param name="checkUser"></param> /// <returns></returns> private async Task <IActionResult> UploadAttachmentInternal(string entityId, string entityName, IFormFile file, string documentType, bool checkUser) { FileSystemItem result = null; if (string.IsNullOrEmpty(entityId) || string.IsNullOrEmpty(entityName) || string.IsNullOrEmpty(documentType)) { return(BadRequest()); } var hasAccess = true; if (checkUser) { ValidateSession(); hasAccess = await CanAccessEntity(entityName, entityId).ConfigureAwait(true); } if (!hasAccess) { return(new NotFoundResult()); } // Sanitize file name var illegalInFileName = new Regex(@"[#%*<>?{}~¿""]"); var fileName = illegalInFileName.Replace(file.FileName, ""); illegalInFileName = new Regex(@"[&:/\\|]"); fileName = illegalInFileName.Replace(fileName, "-"); fileName = FileSystemItemExtensions.CombineNameDocumentType(fileName, documentType); var folderName = await _dynamicsClient.GetFolderName(entityName, entityId).ConfigureAwait(true); _dynamicsClient.CreateEntitySharePointDocumentLocation(entityName, entityId, folderName, folderName); var ms = new MemoryStream(); file.OpenReadStream().CopyTo(ms); var data = ms.ToArray(); // call the web service var uploadRequest = new UploadFileRequest { ContentType = file.ContentType, Data = ByteString.CopyFrom(data), EntityName = entityName, FileName = fileName, FolderName = folderName }; var uploadResult = _fileManagerClient.UploadFile(uploadRequest); var logFolderName = WordSanitizer.Sanitize(folderName); var logFileName = WordSanitizer.Sanitize(fileName); if (uploadResult.ResultStatus == ResultStatus.Success) { // Update modifiedon to current time UpdateEntityModifiedOnDate(entityName, entityId, true); _logger.LogInformation($"SUCCESS in uploading file {logFileName} to folder {logFolderName}"); } else { _logger.LogError($"ERROR in uploading file {logFileName} to folder {logFolderName}"); throw new Exception($"ERROR in uploading file {logFileName} to folder {logFolderName}"); } return(new JsonResult(result)); }