public void SynchronizeScreen(Screen screen, BoxUtils.FileFolderInfo rootFolder, bool forceSync) { string folderName = string.Format("{0} ({1})", (object)BoxUtils.CleanFileOrFolderName(screen.Name), (object)screen.ScreenID); BoxFolderCache screenFolderInfo = FoldersByScreen.Select(screen.ScreenID); BoxUtils.FileFolderInfo folderInfo = null; var tokenHandler = PXGraph.CreateInstance <UserTokenHandler>(); if (screenFolderInfo != null) { try { folderInfo = BoxUtils.GetFolderInfo(tokenHandler, screenFolderInfo.FolderID).Result; } catch (AggregateException ae) { ScreenUtils.HandleAggregateException(ae, HttpStatusCode.NotFound, (exception) => { // Folder no longer exist on Box - it may have been deleted on purpose by the user. Remove it from cache so it is recreated on the next run. screenFolderInfo = FoldersByScreen.Delete(screenFolderInfo); Actions.PressSave(); throw new PXException(Messages.BoxFolderNotFoundRunSynchAgain, screenFolderInfo.ScreenID, exception); }); } } if (folderInfo == null) { // Folder wasn't found, try finding it by name in the root folder. folderInfo = BoxUtils.FindFolder(tokenHandler, rootFolder.ID, folderName).Result; } if (folderInfo == null) { // Folder doesn't exist at all - create it folderInfo = BoxUtils.CreateFolder(tokenHandler, folderName, rootFolder.ID).Result; } if (screenFolderInfo == null) { screenFolderInfo = (BoxFolderCache)FoldersByScreen.Cache.CreateInstance(); screenFolderInfo.FolderID = folderInfo.ID; screenFolderInfo.ParentFolderID = folderInfo.ParentFolderID; screenFolderInfo.ScreenID = screen.ScreenID; screenFolderInfo.LastModifiedDateTime = null; //To force initial sync screenFolderInfo = FoldersByScreen.Insert(screenFolderInfo); Actions.PressSave(); } // We don't synchronize the miscellaneous files folder, since we can't easily identify the corresponding NoteID from folder if (screen.ScreenID != FileHandler.MiscellaneousFolderScreenId && (forceSync || screenFolderInfo.LastModifiedDateTime != folderInfo.ModifiedAt)) { SynchronizeFolderContentsWithScreen(screenFolderInfo.ScreenID, screenFolderInfo.FolderID, forceSync); screenFolderInfo.LastModifiedDateTime = folderInfo.ModifiedAt; FoldersByScreen.Update(screenFolderInfo); Actions.PressSave(); } }
private string GetFolderNameForActivityRow(object entityRow) { PXCache cache = Caches[entityRow.GetType()]; string folderName = String.Format("{0:yyyy-MM-dd} - {1} (ID: {2})", cache.GetValue(entityRow, "StartDate"), cache.GetValue(entityRow, "Subject"), cache.GetValue(entityRow, "NoteID")); return(BoxUtils.CleanFileOrFolderName(folderName)); }
private string GetFolderNameForEntityRow(object entityRow) { PXCache cache = Caches[entityRow.GetType()]; string[] keyValues = new string[cache.BqlKeys.Count]; for (int i = 0; i < cache.BqlKeys.Count; i++) { keyValues[i] = cache.GetValue(entityRow, cache.BqlKeys[i].Name).ToString(); } return(BoxUtils.CleanFileOrFolderName(string.Join(" ", keyValues))); }
public Guid SaveFileToBoxAndUpdateFileCache(byte[] data, PXBlobStorageContext saveContext) { BoxUtils.FileFolderInfo boxFile = null; Guid blobHandlerGuid = Guid.NewGuid(); var tokenHandler = PXGraph.CreateInstance <UserTokenHandler>(); if (saveContext == null || saveContext.FileInfo == null || !saveContext.NoteID.HasValue) { var fileName = string.Empty; if (saveContext?.FileInfo?.Name == null) { fileName = blobHandlerGuid.ToString(); } else { fileName = BoxUtils.CleanFileOrFolderName(saveContext.FileInfo.Name); fileName = $"{Path.GetFileNameWithoutExtension(fileName)} ({blobHandlerGuid.ToString()}){Path.GetExtension(fileName)}"; } //We don't know on which screen this file belongs. We'll have to save it in miscellaneous files folder. BoxUtils.FileFolderInfo boxFolder = GetMiscellaneousFolder(); boxFile = BoxUtils.UploadFile(tokenHandler, boxFolder.ID, fileName, data).Result; } else { CheckForMissingNoteRecord(saveContext); var fileName = BoxUtils.CleanFileOrFolderName(Path.GetFileName(saveContext.FileInfo.Name)); string boxFolderID = GetOrCreateBoxFolderForNoteID(saveContext.NoteID.Value); try { boxFile = BoxUtils.UploadFile(tokenHandler, boxFolderID, fileName, data).Result; } catch (AggregateException ae) { ScreenUtils.HandleAggregateException(ae, HttpStatusCode.NotFound, exception => { using (new PXConnectionScope()) { BoxFolderCache folderCacheToDelete = FoldersByFolderID.Cache.CreateInstance() as BoxFolderCache; folderCacheToDelete.FolderID = boxFolderID; var deletedFolderInfo = FoldersByFolderID.Delete(folderCacheToDelete); Actions.PressSave(); } ScreenUtils.TraceAndThrowException(Messages.BoxFolderNotFoundRunSynchAgain, boxFolderID); }); } if (!string.IsNullOrEmpty(saveContext.FileInfo.Comment)) { BoxUtils.SetFileDescription(tokenHandler, boxFile.ID, saveContext.FileInfo.Comment).Wait(); } } var bfc = (BoxFileCache)FilesByBlobHandler.Cache.CreateInstance(); bfc.BlobHandler = blobHandlerGuid; bfc.FileID = boxFile.ID; bfc.ParentFolderID = boxFile.ParentFolderID; bfc = FilesByBlobHandler.Insert(bfc); Actions.PressSave(); return(blobHandlerGuid); }