public static void RunLongOperationKeepingCurrentMessages(PXGraph graph, PXToggleAsyncDelegate method) { Exception longOperationException = null; PXProcessingInfo currentInfo = PXLongOperation.GetCustomInfo() as PXProcessingInfo; try { method(); } catch (Exception e) { longOperationException = e; } try { PXLongOperation.WaitCompletion(graph.UID); } catch (Exception e) { if (longOperationException == null) { longOperationException = e; } } PXLongOperation.SetCustomInfo(currentInfo); if (longOperationException != null) { throw longOperationException; } }
public virtual IEnumerable generateYears(PXAdapter adapter) { IFinPeriodRepository finPeriodRepository = Base.GetService <IFinPeriodRepository>(); IFinPeriodUtils finPeriodUtils = Base.GetService <IFinPeriodUtils>(); PrimaryFinYear primaryYear = (PrimaryFinYear)Base.Caches <PrimaryFinYear>().Current; if (primaryYear == null) { throw new PXException(Messages.NeedToCreateFirstCalendarYear); } int?firstExistingYear = int.TryParse(finPeriodRepository.FindFirstYear(primaryYear.OrganizationID ?? 0, clearQueryCache: true)?.Year, out int parsedFirstExistingYear) ? parsedFirstExistingYear : (int?)null; int?lastExistingYear = int.TryParse(finPeriodRepository.FindLastYear(primaryYear.OrganizationID ?? 0, clearQueryCache: true)?.Year, out int parsedLastExistingYear) ? parsedLastExistingYear : (int?)null; bool generateCalendar = true; if (!Base.IsContractBasedAPI) { generateCalendar = GenerateParams.AskExtFullyValid((graph, viewName) => { FinPeriodGenerateParameters parameters = GenerateParams.Current; parameters.OrganizationID = primaryYear.OrganizationID; parameters.FromYear = parameters.ToYear = lastExistingYear == null ? primaryYear.Year : (lastExistingYear + 1).ToString(); parameters.FirstFinYear = firstExistingYear?.ToString(); parameters.LastFinYear = lastExistingYear?.ToString(); }, DialogAnswerType.Positive); } if (generateCalendar) { int fromYear = int.Parse(GenerateParams.Current.FromYear); int toYear = int.Parse(GenerateParams.Current.ToYear); IFinPeriodMaintenanceGraph processingGraph = Base.Clone(); PXLongOperation.StartOperation( Base, delegate() { finPeriodUtils.CheckParametersOfCalendarGeneration(primaryYear.OrganizationID, fromYear, toYear); processingGraph.GenerateCalendar(primaryYear.OrganizationID, fromYear, toYear); }); if (Base.IsContractBasedAPI) { PXLongOperation.WaitCompletion(Base.UID); } } return(adapter.Get()); }