public override async Task <bool> RunCalculatorStep( ExtensionContentURI extDocToCalcURI, ExtensionContentURI extCalcDocURI, string stepNumber, IList <string> urisToAnalyze, IDictionary <string, string> updates, CancellationToken cancellationToken) { bool bHasCalculation = false; CalculatorParameters SB1CalcParams = CalculatorHelpers.SetCalculatorParameters( extDocToCalcURI, extCalcDocURI, stepNumber, urisToAnalyze, updates); SB1CalculatorHelper sb1BudgetHelper = new SB1CalculatorHelper(SB1CalcParams); ContractHelpers.EXTENSION_STEPS eStepNumber = ContractHelpers.GetEnumStepNumber(stepNumber); switch (eStepNumber) { case ContractHelpers.EXTENSION_STEPS.stepzero: bHasCalculation = true; break; case ContractHelpers.EXTENSION_STEPS.stepone: bHasCalculation = true; break; case ContractHelpers.EXTENSION_STEPS.steptwo: //clear updates collection updates.Clear(); if (SB1CalcParams != null) { //set constants for this step bHasCalculation = SB1CalculatorHelper.SetConstants(SB1CalcParams); } extDocToCalcURI.URIDataManager.NeedsFullView = false; extDocToCalcURI.URIDataManager.NeedsSummaryView = false; break; case ContractHelpers.EXTENSION_STEPS.stepthree: //get rid of any update member that was added after running the same step 2x CalculatorHelpers.RefreshUpdates(SB1CalcParams, stepNumber, updates); if (SB1CalcParams != null) { //run the calculations bHasCalculation = await sb1BudgetHelper.RunSB1CalculatorCalculationsAsync(); extDocToCalcURI.ErrorMessage = SB1CalcParams.ErrorMessage; extDocToCalcURI.ErrorMessage += SB1CalcParams.ExtensionDocToCalcURI.ErrorMessage; if (!bHasCalculation) { extDocToCalcURI.ErrorMessage = (extDocToCalcURI.ErrorMessage == string.Empty) ? Errors.MakeStandardErrorMsg("CALCULATORS_URI_MISMATCH") : extDocToCalcURI.ErrorMessage; return(bHasCalculation); } if (string.IsNullOrEmpty(extDocToCalcURI.ErrorMessage)) { //two step calculators need to be saved now CheckForLastStepCalculator(SB1CalcParams, eStepNumber, extDocToCalcURI); //replace the old calculator with the new one //and save the new calculations document bHasCalculation = CalculatorHelpers.SaveNewCalculationsDocument(SB1CalcParams); } else { bHasCalculation = false; } } extDocToCalcURI.URIDataManager.NeedsFullView = true; extDocToCalcURI.URIDataManager.NeedsSummaryView = false; break; case ContractHelpers.EXTENSION_STEPS.stepfour: extDocToCalcURI.URIDataManager.NeedsFullView = false; extDocToCalcURI.URIDataManager.NeedsSummaryView = true; extCalcDocURI.URIFileExtensionType = CalculatorHelpers.GetAttribute(SB1CalcParams.LinkedViewElement, Calculator1.cFileExtensionType); bHasCalculation = true; //tells addinhelper to save calcs CalculatorHelpers.SetTempDocSaveCalcsProperty(extDocToCalcURI); break; default: //as many steps as needed can be added to this addin break; } extDocToCalcURI.ErrorMessage += SB1CalcParams.ErrorMessage; return(bHasCalculation); }