public CrcReportFolder Create(ReportingService2005Soap rService, string path) { var ret = new CrcReportFolder(); ret.Path = path; ret.FolderName = CrcReportDefinition.ReportNameFromPath(path); var lcRequest = new ListChildrenRequest(path, false); var lcResponse = rService.ListChildren(lcRequest); foreach (CatalogItem itemLoop in lcResponse.CatalogItems) { if (itemLoop.Type == ItemTypeEnum.Folder) { var sf = Create(rService, itemLoop.Path); if (sf.Reports.Count() > 0 || sf.SubFolders.Count() > 0) { ret.SubFolders.Add(sf); } } else if (itemLoop.Type == ItemTypeEnum.Report) { if (!itemLoop.Hidden) { var repItem = new CrcReportItem(); repItem.ReportPath = itemLoop.Path; repItem.DisplayName = itemLoop.Name; repItem.Description = itemLoop.Description; ret.Reports.Add(repItem); } } } return(ret); }
public List <CrcReportHistory> GetUsersRecentRuns(string username, int max) { string sql = SqlPatternUsersRecentRuns(); DataTable res = new DataTable(); using (SqlConnection conn = new SqlConnection(GetReportServerConnectionString())) { SqlCommand comm = new SqlCommand(String.Format(sql, max), conn); comm.Parameters.Add("@UserName", SqlDbType.NVarChar, 520).Value = username; SqlDataAdapter adapt = new SqlDataAdapter(comm); adapt.Fill(res); } var histList = new List <CrcReportHistory>(); foreach (DataRow rowLoop in res.Rows) { var h = new CrcReportHistory() { ReportName = CrcReportDefinition.ReportNameFromPath(rowLoop["ReportPath"].ToString()), ReportPath = rowLoop["ReportPath"].ToString(), UserName = rowLoop["UserName"].ToString(), Parameters = rowLoop["Parameters"].ToString(), TimeStart = (DateTime)rowLoop["TimeStart"], RunDuration = (int)rowLoop["TimeDataRetrieval"], RowCount = (long)rowLoop["RowCount"] }; histList.Add(h); } return(histList); }
public void LogToCrissCrossHistory(CrcReportDefinition repDef, string username, string executionId) { string crissCrossInstance = GetAppRootUrl(false); string reportPath = repDef.ReportPath; var converter = new CrcParameterConverter(); List <string> parametersListForUser = converter.GetReportParametersForUser(repDef, 0); string parametersForUser = string.Join(Environment.NewLine, parametersListForUser.ToArray()); logger.DebugFormat("Logging report run to CrissCrossExecutionLog - executionid {0}", executionId); string sql = "insert into CrissCrossExecutionLog(ExecutionId, CrissCrossInstance, ReportPath, UserName, ParametersForUser) " + "values(@ExecutionId, @CrissCrossInstance, @ReportPath, @UserName, @ParametersForUser)"; using (SqlConnection conn = new SqlConnection(GetCrissCrossHistoryConnectionString())) { conn.Open(); SqlCommand comm = new SqlCommand(sql, conn); comm.Parameters.Add("@ExecutionId", SqlDbType.NVarChar, 128).Value = executionId; comm.Parameters.Add("@CrissCrossInstance", SqlDbType.NVarChar, 250).Value = crissCrossInstance; comm.Parameters.Add("@ReportPath", SqlDbType.NVarChar, 850).Value = reportPath; comm.Parameters.Add("@UserName", SqlDbType.NVarChar, 520).Value = username; comm.Parameters.Add("@ParametersForUser", SqlDbType.NVarChar).Value = parametersForUser; comm.ExecuteNonQuery(); } }
public CrcReportDefinition MakeTestReportDefn() { var repDefn = new CrcReportDefinition(); repDefn.ReportPath = "/Pretend/Path"; repDefn.DisplayName = "Pretend Report"; var dateParam = new CrcParameterDefinition(); dateParam.Name = "PretendDateParam"; dateParam.DisplayName = "Pretend Date Param"; dateParam.ParameterType = CrcParameterType.Date; repDefn.ParameterDefinitions.Add(dateParam); var singleChoiceParam = new CrcParameterDefinition(); singleChoiceParam.Name = "PretendSingleSelect"; singleChoiceParam.DisplayName = "Pretend Single Select"; singleChoiceParam.ParameterType = CrcParameterType.Select; singleChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "S1", Label = "Single1" }); singleChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "S2", Label = "Single2" }); singleChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "S3", Label = "Single3" }); repDefn.ParameterDefinitions.Add(singleChoiceParam); var multiChoiceParam = new CrcParameterDefinition(); multiChoiceParam.Name = "PretendMultiSelect"; multiChoiceParam.DisplayName = "Pretend Multi Select"; multiChoiceParam.ParameterType = CrcParameterType.MultiSelect; multiChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "M1", Label = "Multi1" }); multiChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "M2", Label = "Multi2" }); multiChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "M3", Label = "Multi3" }); multiChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "M4", Label = "Multi4" }); multiChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "M5", Label = "Multi5" }); repDefn.ParameterDefinitions.Add(multiChoiceParam); return(repDefn); }
public void HasDependantParameters_CanDetectFalse() { var crcRepDefn = new CrcReportDefinition(); crcRepDefn.ParameterDefinitions.Add(new CrcParameterDefinition() { Name = "ParamOne" }); crcRepDefn.ParameterDefinitions.Add(new CrcParameterDefinition() { Name = "ParamTwo" }); Assert.IsFalse(crcRepDefn.HasDependantParameters); }
private string BuildCombinedDescription(CrcReportDefinition repDefn) { string combDesc = ""; if (!string.IsNullOrEmpty(repDefn.Description)) { combDesc = repDefn.Description; } if (!string.IsNullOrEmpty(repDefn.ReportHint)) { if (combDesc.Length > 0) { combDesc += "<br/><br/>"; } combDesc += repDefn.ReportHint; } return(combDesc); }
public CrcReportDefinition MakeTestReportDefn(string dateValue, string selectValue) { var repDefn = new CrcReportDefinition(); repDefn.ReportPath = "/Pretend/Path"; repDefn.DisplayName = "Pretend Report"; var dateParam = new CrcParameterDefinition(); dateParam.Name = "PretendDateParam"; dateParam.DisplayName = "Pretend Date Param"; dateParam.ParameterType = CrcParameterType.Date; dateParam.ParameterChoice = new CrcParameterChoice("PretendDateParam"); dateParam.ParameterChoice.SingleValue = dateValue; repDefn.ParameterDefinitions.Add(dateParam); var singleChoiceParam = new CrcParameterDefinition(); singleChoiceParam.Name = "PretendSingleSelect"; singleChoiceParam.DisplayName = "Pretend Single Select"; singleChoiceParam.ParameterType = CrcParameterType.Select; singleChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "S1", Label = "Single1" }); singleChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "S2", Label = "Single2" }); singleChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "S3", Label = "Single3" }); singleChoiceParam.ParameterChoice = new CrcParameterChoice("PretendSingleSelect"); singleChoiceParam.ParameterChoice.SingleValue = selectValue; repDefn.ParameterDefinitions.Add(singleChoiceParam); return(repDefn); }
public void HasDependantParameters_CanDetectTrue() { var crcRepDefn = new CrcReportDefinition(); crcRepDefn.ParameterDefinitions.Add(new CrcParameterDefinition() { Name = "ParamOne", DependantParameterNames = new List <string>() { "ParamTwo" } }); crcRepDefn.ParameterDefinitions.Add(new CrcParameterDefinition() { Name = "ParamTwo" }); Assert.IsTrue(crcRepDefn.HasDependantParameters); }
public List<rws.ParameterValue> GetParametersValuesForSsrsWebService(CrcReportDefinition reptDefn) { var convertedParams = new List<rws.ParameterValue>(); foreach (var paramDefn in reptDefn.ParameterDefinitions) { if (paramDefn.ParameterChoice != null) { if (!string.IsNullOrEmpty(paramDefn.ParameterChoice.SingleValue)) { foreach (string valLoop in paramDefn.ParameterChoice.Values) { var convParam = new rws.ParameterValue(); convParam.Name = paramDefn.Name; convParam.Value = valLoop; convertedParams.Add(convParam); } } } } return convertedParams; }
public void GetAvailableParameterNames_CanOmitHidden() { var crcRepDefn = new CrcReportDefinition(); crcRepDefn.ParameterDefinitions.Add(new CrcParameterDefinition() { Name = "ParamOne", DisplayName = "ParamOneDesc", Hidden = false }); crcRepDefn.ParameterDefinitions.Add(new CrcParameterDefinition() { Name = "ParamTwo", DisplayName = "ParamTwoDesc", Hidden = true }); var paramDictionary = crcRepDefn.GetAvailableParameterNames(); Assert.AreEqual(1, paramDictionary.Count()); Assert.IsTrue(paramDictionary.Keys.Contains("ParamOne")); Assert.AreEqual("ParamOneDesc", paramDictionary["ParamOne"]); }
public void LogToCrissCrossHistory(CrcReportDefinition repDef, string username, string executionId) { string crissCrossInstance = GetAppRootUrl(false); string reportPath = repDef.ReportPath; var converter = new CrcParameterConverter(); List<string> parametersListForUser = converter.GetReportParametersForUser(repDef, 0); string parametersForUser = string.Join(Environment.NewLine, parametersListForUser.ToArray()); logger.DebugFormat("Logging report run to CrissCrossExecutionLog - executionid {0}", executionId); string sql = "insert into CrissCrossExecutionLog(ExecutionId, CrissCrossInstance, ReportPath, UserName, ParametersForUser) " + "values(@ExecutionId, @CrissCrossInstance, @ReportPath, @UserName, @ParametersForUser)"; using (SqlConnection conn = new SqlConnection(GetCrissCrossHistoryConnectionString())) { conn.Open(); SqlCommand comm = new SqlCommand(sql, conn); comm.Parameters.Add("@ExecutionId", SqlDbType.NVarChar, 128).Value = executionId; comm.Parameters.Add("@CrissCrossInstance", SqlDbType.NVarChar, 250).Value = crissCrossInstance; comm.Parameters.Add("@ReportPath", SqlDbType.NVarChar, 850).Value = reportPath; comm.Parameters.Add("@UserName", SqlDbType.NVarChar, 520).Value = username; comm.Parameters.Add("@ParametersForUser", SqlDbType.NVarChar).Value = parametersForUser; comm.ExecuteNonQuery(); } }
public List<viewer.ReportParameter> GetReportParametersForSsrsReportViewer(CrcReportDefinition reptDefn) { var convertedParams = new List<viewer.ReportParameter>(); foreach (var paramDefn in reptDefn.ParameterDefinitions) { if (paramDefn.ParameterChoice != null) { var convParam = new viewer.ReportParameter(); convParam.Name = paramDefn.Name; if (!string.IsNullOrEmpty(paramDefn.ParameterChoice.SingleValue)) { foreach (var valLoop in paramDefn.ParameterChoice.Values) convParam.Values.Add(valLoop); } else { // we want to record a null convParam.Values.Add(null); } convertedParams.Add(convParam); } } return convertedParams; }
public void CheckRequiredFromUser(CrcReportDefinition repDef) { foreach (var crcParam in repDef.ParameterDefinitions) { bool hasDefault = (crcParam.ParameterChoice != null && crcParam.ParameterChoice.Values.Count() > 0); bool defaultIsNull = false; bool defaultIsBlank = false; if (hasDefault) { defaultIsNull = crcParam.ParameterChoice.Values.Exists(v => v == null); defaultIsBlank = crcParam.ParameterChoice.Values.Exists(v => v == string.Empty); } crcParam.RequiredFromUser = false; if (!crcParam.AllowNull && (!hasDefault || hasDefault && defaultIsNull)) crcParam.RequiredFromUser = true; } }
public CrcReportDefinition Create(string reportPath, rws.CatalogItem reportCatItem, rws.ReportParameter[] wsReportParameters, CrcExtraConfiguration extraConfig) { var repDef = new CrcReportDefinition(); repDef.ReportPath = reportPath; if (reportCatItem != null) { repDef.DisplayName = reportCatItem.Name; repDef.Description = reportCatItem.Description; } if (string.IsNullOrEmpty(repDef.DisplayName)) { repDef.DisplayName = CrcReportDefinition.ReportNameFromPath(repDef.ReportPath); } CrcReportConfig repConfig = null; if (extraConfig != null) repConfig = extraConfig.GetReportConfig(repDef.ReportPath); if (repConfig != null) repDef.ReportHint = repConfig.ReportHint; AddParameterDefinitions(wsReportParameters, repDef, extraConfig, repConfig); bool readSsrsDependantParams = false; if (extraConfig == null || !extraConfig.IgnoreSsrsParameterDependencies) readSsrsDependantParams = true; if (repConfig != null && repConfig.DependantParamsSpecified) readSsrsDependantParams = false; if (readSsrsDependantParams) AddSsrsDependentParams(wsReportParameters, repDef); CrossReferenceDependantParameters(repDef); ApplyParameterDefaults(wsReportParameters, repDef); CheckRequiredFromUser(repDef); return repDef; }
public CrcReportDefinition MakeTestReportDefn(string dateValue, string selectValue) { var repDefn = new CrcReportDefinition(); repDefn.ReportPath = "/Pretend/Path"; repDefn.DisplayName = "Pretend Report"; var dateParam = new CrcParameterDefinition(); dateParam.Name = "PretendDateParam"; dateParam.DisplayName = "Pretend Date Param"; dateParam.ParameterType = CrcParameterType.Date; dateParam.ParameterChoice = new CrcParameterChoice("PretendDateParam"); dateParam.ParameterChoice.SingleValue = dateValue; repDefn.ParameterDefinitions.Add(dateParam); var singleChoiceParam = new CrcParameterDefinition(); singleChoiceParam.Name = "PretendSingleSelect"; singleChoiceParam.DisplayName = "Pretend Single Select"; singleChoiceParam.ParameterType = CrcParameterType.Select; singleChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "S1", Label = "Single1" }); singleChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "S2", Label = "Single2" }); singleChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "S3", Label = "Single3" }); singleChoiceParam.ParameterChoice = new CrcParameterChoice("PretendSingleSelect"); singleChoiceParam.ParameterChoice.SingleValue = selectValue; repDefn.ParameterDefinitions.Add(singleChoiceParam); return repDefn; }
/// <summary> /// applies the specified CrcParameterChoiceCollection to the specified report definition /// will set the ParameterChoice property of matching ParameterDefinitions as required /// </summary> /// <param name="repDefn"></param> /// <param name="paramChoices"></param> /// <returns>ParameterMapResult - if MappingValid is false, see Complaints collection</returns> public ParameterMapResult MapParameterChoices(CrcReportDefinition repDefn, CrcParameterChoiceCollection paramChoices) { var res = new ParameterMapResult(); res.Complaints = new List<string>(); string cultureForDateParsing = GetCultureForDateParsing(); foreach (CrcParameterChoice choiceLoop in paramChoices.ParameterChoiceList) { var defnMatch = repDefn.ParameterDefinitions.FirstOrDefault(pd => pd.Name == choiceLoop.Name); if (defnMatch == null) { res.Complaints.Add(String.Format("Param {0} not found", choiceLoop.Name)); continue; } if (defnMatch.ParameterType == CrcParameterType.Date) { if (choiceLoop.SingleValue == null) { defnMatch.ParameterChoice = choiceLoop.DeepClone(); continue; } var parseResult = ParseDateStringVariousWays(choiceLoop.SingleValue, cultureForDateParsing); if (parseResult.CouldParse) { var parsedChoice = new CrcParameterChoice(choiceLoop.Name); parsedChoice.SingleValue = parseResult.DateTime.ToString("yyyy-MM-dd"); defnMatch.ParameterChoice = parsedChoice; continue; } res.Complaints.Add(String.Format("Could not parse date {0} into Param {1}", choiceLoop.SingleValue, choiceLoop.Name)); } else if (defnMatch.ParameterType == CrcParameterType.Boolean) { if (string.IsNullOrEmpty(choiceLoop.SingleValue) || choiceLoop.SingleValue == "True" || choiceLoop.SingleValue == "False") { defnMatch.ParameterChoice = choiceLoop.DeepClone(); continue; } res.Complaints.Add(String.Format("Could not parse boolean {0} into Param {1}", choiceLoop.SingleValue, choiceLoop.Name)); } else if (defnMatch.ParameterType == CrcParameterType.Text) { defnMatch.ParameterChoice = choiceLoop.DeepClone(); continue; } else if (defnMatch.ValidValues.Count() > 0) { bool valuesOK = true; foreach (string chosenValue in choiceLoop.Values) { if (defnMatch.ValidValues.FirstOrDefault(vv => vv.Value == chosenValue) == null) { res.Complaints.Add(String.Format("Could not apply value {0} into Param {1} because it is not a valid option", chosenValue, choiceLoop.Name)); valuesOK = false; } } if (valuesOK) { defnMatch.ParameterChoice = choiceLoop.DeepClone(); continue; } } } res.MappingValid = (res.Complaints.Count() == 0); return res; }
public void CrossReferenceDependantParameters(CrcReportDefinition repDef) { foreach (var crParamLoop in repDef.ParameterDefinitions) { foreach (var dependantName in crParamLoop.DependantParameterNames) { var match = repDef.ParameterDefinitions.FirstOrDefault(p => p.Name == dependantName); if (match == null) { logger.DebugFormat("Report {0} Param {1} specified Dependant Param {2} but cannot find it", repDef.DisplayName, crParamLoop.Name, dependantName); continue; } logger.DebugFormat("Report {0} Param {1} has Dependant ID {2} - found", repDef.DisplayName, crParamLoop.Name, match.id); crParamLoop.DependantParameterIds.Add(match.id); } } }
public void AddParameterDefinitions(rws.ReportParameter[] wsReportParameters, CrcReportDefinition repDef, CrcExtraConfiguration extraConfig, CrcReportConfig reportConfig) { List<string> showByDefault = new List<string>(); if (reportConfig != null) showByDefault = reportConfig.GetParamsToShowByDefault(); List<string> defaultEmptyEquivalents = new List<string>(); if (extraConfig != null && extraConfig.DefaultEmptyEquivalentValues != null) defaultEmptyEquivalents = extraConfig.DefaultEmptyEquivalentValues; foreach (var paramLoop in wsReportParameters) { CrcReportConfig.CrcParamConfig paramConfig = null; // get extra config for parameter, if there is any if (reportConfig != null) paramConfig = reportConfig.CrcParamConfigs.FirstOrDefault(p => p.ParamName == paramLoop.Name); var crcParam = new CrcParameterDefinition(); crcParam.Name = paramLoop.Name; crcParam.id = "param_" + paramLoop.Name.Replace(" ", "_"); crcParam.AllowNull = paramLoop.Nullable; crcParam.AllowBlank = paramLoop.AllowBlank; if (string.IsNullOrEmpty(paramLoop.Prompt)) { // if Prompt is null or empty, it means Parameter is 'Hidden' in SSRS crcParam.Hidden = true; crcParam.DisplayName = paramLoop.Name; } else { crcParam.DisplayName = paramLoop.Prompt; } if (string.IsNullOrEmpty(crcParam.DisplayName)) crcParam.DisplayName = crcParam.Name; // if PromptUser is false then Parameter is 'Internal' in SSRS if (!paramLoop.PromptUser) crcParam.Hidden = true; if (paramLoop.Type == rws.ParameterTypeEnum.DateTime) crcParam.ParameterType = CrcParameterType.Date; else if ((paramLoop.ValidValues != null && paramLoop.ValidValues.Count() > 0) || paramLoop.ValidValuesQueryBased) { if (paramLoop.MultiValue) crcParam.ParameterType = CrcParameterType.MultiSelect; else crcParam.ParameterType = CrcParameterType.Select; } else if (paramLoop.Type == rws.ParameterTypeEnum.Boolean) crcParam.ParameterType = CrcParameterType.Boolean; else crcParam.ParameterType = CrcParameterType.Text; if (paramLoop.ValidValues != null) { foreach (var valLoop in paramLoop.ValidValues) { crcParam.ValidValues.Add(new CrcValidValue() { Value = valLoop.Value, Label = valLoop.Label }); } if (crcParam.ValidValues.Count() > 10) crcParam.AllowListSearch = true; } // check config for dependencies if (paramConfig != null && paramConfig.DependantParams != null && paramConfig.DependantParams.Count() > 0) { logger.DebugFormat("Param {0} has extraconfig dependancies: {1}", paramLoop.Name, string.Join(", ", paramConfig.DependantParams.ToArray())); foreach (string dpname in paramConfig.DependantParams) crcParam.DependantParameterNames.Add(dpname); } foreach (string sloop in defaultEmptyEquivalents) { AddEmptyEquivalent(crcParam, sloop); } // check for specific empty equivalents for this parameter if (paramConfig != null && paramConfig.EmptyEquivalentValues != null) { foreach (string sloop in paramConfig.EmptyEquivalentValues) { AddEmptyEquivalent(crcParam, sloop); } } if (showByDefault.Contains(crcParam.Name)) crcParam.AlwaysShow = true; repDef.ParameterDefinitions.Add(crcParam); } }
public void CanRefreshDependantParameters_Simple() { // make report defn var repDefn = new CrcReportDefinition(); repDefn.ReportPath = "Test/Report"; var pd1 = new CrcParameterDefinition(); pd1.Name = "ParamOne"; pd1.ValidValues.Add(new CrcValidValue() { Label = "Label1", Value = "Value1" }); pd1.ValidValues.Add(new CrcValidValue() { Label = "Label2", Value = "Value2" }); pd1.ValidValues.Add(new CrcValidValue() { Label = "Label3", Value = "Value3" }); pd1.DependantParameterNames.Add("ParamTwo"); var pd2 = new CrcParameterDefinition(); pd2.Name = "ParamTwo"; pd2.ValidValues.Add(new CrcValidValue() { Label = "SubLabel1_1", Value = "SubValue1_1" }); pd2.ValidValues.Add(new CrcValidValue() { Label = "SubLabel1_2", Value = "SubValue1_2" }); pd2.ValidValues.Add(new CrcValidValue() { Label = "SubLabel2_1", Value = "SubValue2_1" }); pd2.ValidValues.Add(new CrcValidValue() { Label = "SubLabel2_2", Value = "SubValue2_2" }); pd2.ValidValues.Add(new CrcValidValue() { Label = "SubLabel3_1", Value = "SubValue3_1" }); repDefn.ParameterDefinitions.Add(pd1); repDefn.ParameterDefinitions.Add(pd2); // make choice collection var choiceCollection = new CrcParameterChoiceCollection(); var paramChoice = new CrcParameterChoice("ParamOne"); paramChoice.Values.Add("Value2"); choiceCollection.ParameterChoiceList.Add(paramChoice); // make server side params to return ItemParameter p1 = new ItemParameter(); p1.Name = "ParamOne"; p1.ValidValues = new ValidValue[] { new ValidValue() { Label = "Label1", Value = "Value1" }, new ValidValue() { Label = "Label2", Value = "Value2" }, new ValidValue() { Label = "Label3", Value = "Value3" } }; p1.DefaultValues = new string[] { }; ItemParameter p2 = new ItemParameter(); p2.Name = "ParamTwo"; p2.ValidValues = new ValidValue[] { new ValidValue() { Label = "SubLabel2_1", Value = "SubValue2_1" }, new ValidValue() { Label = "SubLabel2_2", Value = "SubValue2_2" } }; p2.DefaultValues = new string[] { }; ItemParameter[] paramArrayToReturn = new ItemParameter[] { p1, p2 }; // make mocks for ccs var mf = new TestDoubles.MockSsrsWebServiceFactory(); var soapClientFactory = mf.MakeMockSoapClientFactory( mf.MakeMockReportingService2010Soap("Value2", paramArrayToReturn)); var cacheMock = MockRepository.GenerateMock <CrcCacheManager>(); var configMock = MockRepository.GenerateMock <CrcExtraConfiguration>(); // make ccs var ccs = new CrissCrossServices(soapClientFactory, cacheMock, configMock, null); ccs.RefreshDependantParameters(repDefn, choiceCollection); Assert.AreEqual(2, repDefn.ParameterDefinitions.Count()); var pd1check = repDefn.ParameterDefinitions.FirstOrDefault(p => p.Name == "ParamOne"); Assert.IsNotNull(pd1check); Assert.AreEqual("Value2", pd1check.ParameterChoice.SingleValue); var pd2check = repDefn.ParameterDefinitions.FirstOrDefault(p => p.Name == "ParamTwo"); Assert.IsNotNull(pd2check); Assert.AreEqual(2, pd2check.ValidValues.Count()); Assert.IsNotNull(pd2check.ValidValues.FirstOrDefault(vv => vv.Value == "SubValue2_1")); Assert.IsNotNull(pd2check.ValidValues.FirstOrDefault(vv => vv.Value == "SubValue2_2")); }
private string BuildCombinedDescription(CrcReportDefinition repDefn) { string combDesc = ""; if (!string.IsNullOrEmpty(repDefn.Description)) combDesc = repDefn.Description; if (!string.IsNullOrEmpty(repDefn.ReportHint)) { if (combDesc.Length > 0) combDesc += "<br/><br/>"; combDesc += repDefn.ReportHint; } return combDesc; }
/// <summary> /// Applies the specified choices to the already-existing report definition /// and updates the dependant parameters /// </summary> public void RefreshDependantParameters(CrcReportDefinition repDefn, CrcParameterChoiceCollection newChoices) { var mapResult = repDefn.MapParameterChoices(newChoices); if (!mapResult.MappingValid) { // todo - friendlier message back to ui throw new ApplicationException(string.Format("invalid params - could not map supplied values to definitions for report {0}. complaints: {1}", repDefn.DisplayName, string.Join(", ", mapResult.Complaints.ToArray()))); } var conv = new CrcParameterConverter(); List<ParameterValue> valueList = conv.GetParametersValuesForSsrsWebService(repDefn); // get new params from web service ReportingService2005Soap rService = m_ssrsSoapClientFactory.MakeSsrsSoapClient(); logger.DebugFormat("RefreshDependantParameters: rep {0} calling WS to get new validvalid. Passing {1} values", repDefn.DisplayName, valueList.Count()); var grpRequest = new GetReportParametersRequest(repDefn.ReportPath, null, true, valueList.ToArray(), null); var grpResponse = rService.GetReportParameters(grpRequest); // work out which params to refresh List<string> paramsToRefresh = new List<string>(); foreach (string updatedParam in newChoices.ParameterChoiceList.Select(p => p.Name)) { var paramDefn = repDefn.ParameterDefinitions.First(p => p.Name == updatedParam); paramsToRefresh = paramsToRefresh.Union(paramDefn.DependantParameterNames).ToList(); } logger.DebugFormat("RefreshDependantParameters: rep {0} based on choices, have {1} parameters that need refreshing", repDefn.DisplayName, paramsToRefresh.Count()); var refresher = new CrcParameterRefresher(); foreach (string paramLoop in paramsToRefresh) { var paramDefn = repDefn.ParameterDefinitions.First(p => p.Name == paramLoop); var latestParamDetails = grpResponse.Parameters.FirstOrDefault(p => p.Name == paramLoop); if (latestParamDetails == null) throw new ApplicationException(String.Format("Was expecting web service to return new details for parameter {0} but none found", paramLoop)); refresher.RefreshParameter(paramDefn, latestParamDetails); } }
public void ApplyParameterDefaults(rws.ReportParameter[] wsReportParameters, CrcReportDefinition repDef) { // first build up a choicecollection from the defaults var choiceCol = new CrcParameterChoiceCollection(); foreach (var paramLoop in wsReportParameters) { if (paramLoop.DefaultValues != null) { var crcChoice = new CrcParameterChoice(paramLoop.Name); foreach (string valString in paramLoop.DefaultValues) crcChoice.Values.Add(valString); choiceCol.ParameterChoiceList.Add(crcChoice); } } // now apply it to the repdef var mapper = new CrcParameterChoiceMapper(); var mapResult = mapper.MapParameterChoices(repDef, choiceCol); if (!mapResult.MappingValid) throw new ApplicationException(string.Format("Could not map report defaults for report {0}. Problems: {1}", repDef.DisplayName, string.Join(", ", mapResult.Complaints.ToArray()))); }
public List<string> GetReportParametersForUser(CrcReportDefinition reptDefn) { return GetReportParametersForUser(reptDefn, 0); }
public CrcReportDefinition MakeTestReportDefn() { var repDefn = new CrcReportDefinition(); repDefn.ReportPath = "/Pretend/Path"; repDefn.DisplayName = "Pretend Report"; var dateParam = new CrcParameterDefinition(); dateParam.Name = "PretendDateParam"; dateParam.DisplayName = "Pretend Date Param"; dateParam.ParameterType = CrcParameterType.Date; repDefn.ParameterDefinitions.Add(dateParam); var singleChoiceParam = new CrcParameterDefinition(); singleChoiceParam.Name = "PretendSingleSelect"; singleChoiceParam.DisplayName = "Pretend Single Select"; singleChoiceParam.ParameterType = CrcParameterType.Select; singleChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "S1", Label = "Single1" }); singleChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "S2", Label = "Single2" }); singleChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "S3", Label = "Single3" }); repDefn.ParameterDefinitions.Add(singleChoiceParam); var multiChoiceParam = new CrcParameterDefinition(); multiChoiceParam.Name = "PretendMultiSelect"; multiChoiceParam.DisplayName = "Pretend Multi Select"; multiChoiceParam.ParameterType = CrcParameterType.MultiSelect; multiChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "M1", Label = "Multi1" }); multiChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "M2", Label = "Multi2" }); multiChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "M3", Label = "Multi3" }); multiChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "M4", Label = "Multi4" }); multiChoiceParam.ValidValues.Add(new CrcValidValue() { Value = "M5", Label = "Multi5" }); repDefn.ParameterDefinitions.Add(multiChoiceParam); return repDefn; }
public void CanRefreshDependantParameters_Simple() { // make report defn var repDefn = new CrcReportDefinition(); repDefn.ReportPath = "Test/Report"; var pd1 = new CrcParameterDefinition(); pd1.Name = "ParamOne"; pd1.ValidValues.Add(new CrcValidValue() { Label = "Label1", Value = "Value1" }); pd1.ValidValues.Add(new CrcValidValue() { Label = "Label2", Value = "Value2" }); pd1.ValidValues.Add(new CrcValidValue() { Label = "Label3", Value = "Value3" }); pd1.DependantParameterNames.Add("ParamTwo"); var pd2 = new CrcParameterDefinition(); pd2.Name = "ParamTwo"; pd2.ValidValues.Add(new CrcValidValue() { Label = "SubLabel1_1", Value = "SubValue1_1" }); pd2.ValidValues.Add(new CrcValidValue() { Label = "SubLabel1_2", Value = "SubValue1_2" }); pd2.ValidValues.Add(new CrcValidValue() { Label = "SubLabel2_1", Value = "SubValue2_1" }); pd2.ValidValues.Add(new CrcValidValue() { Label = "SubLabel2_2", Value = "SubValue2_2" }); pd2.ValidValues.Add(new CrcValidValue() { Label = "SubLabel3_1", Value = "SubValue3_1" }); repDefn.ParameterDefinitions.Add(pd1); repDefn.ParameterDefinitions.Add(pd2); // make choice collection var choiceCollection = new CrcParameterChoiceCollection(); var paramChoice = new CrcParameterChoice("ParamOne"); paramChoice.Values.Add("Value2"); choiceCollection.ParameterChoiceList.Add( paramChoice); // make server side params to return ReportParameter p1 = new ReportParameter(); p1.Name = "ParamOne"; p1.ValidValues = new ValidValue[]{ new ValidValue(){Label = "Label1", Value = "Value1"}, new ValidValue(){Label = "Label2", Value = "Value2"}, new ValidValue(){Label = "Label3", Value = "Value3"}}; p1.DefaultValues = new string[] { }; ReportParameter p2 = new ReportParameter(); p2.Name = "ParamTwo"; p2.ValidValues = new ValidValue[]{ new ValidValue(){Label = "SubLabel2_1", Value = "SubValue2_1"}, new ValidValue(){Label = "SubLabel2_2", Value = "SubValue2_2"}}; p2.DefaultValues = new string[] { }; ReportParameter[] paramArrayToReturn = new ReportParameter[] { p1, p2 }; // make mocks for ccs var mf = new TestDoubles.MockSsrsWebServiceFactory(); var soapClientFactory = mf.MakeMockSoapClientFactory( mf.MakeMockReportingService2005Soap("Value2", paramArrayToReturn)); var cacheMock = MockRepository.GenerateMock<CrcCacheManager>(); var configMock = MockRepository.GenerateMock<CrcExtraConfiguration>(); // make ccs var ccs = new CrissCrossServices(soapClientFactory, cacheMock, configMock, null); ccs.RefreshDependantParameters(repDefn, choiceCollection); Assert.AreEqual(2,repDefn.ParameterDefinitions.Count()); var pd1check = repDefn.ParameterDefinitions.FirstOrDefault(p => p.Name == "ParamOne"); Assert.IsNotNull(pd1check); Assert.AreEqual("Value2", pd1check.ParameterChoice.SingleValue); var pd2check = repDefn.ParameterDefinitions.FirstOrDefault(p => p.Name == "ParamTwo"); Assert.IsNotNull(pd2check); Assert.AreEqual(2, pd2check.ValidValues.Count()); Assert.IsNotNull(pd2check.ValidValues.FirstOrDefault( vv => vv.Value == "SubValue2_1")); Assert.IsNotNull(pd2check.ValidValues.FirstOrDefault( vv => vv.Value == "SubValue2_2")); }
/// <summary> /// Gets a user-friendly list of report parameters /// </summary> /// <param name="reptDefn"></param> /// <param name="truncateListLimit">for multipicks, the max number of items to list (0 for all items)</param> /// <returns></returns> public List<string> GetReportParametersForUser(CrcReportDefinition reptDefn, int truncateListLimit) { var userParams = new List<string>(); foreach (var paramDefn in reptDefn.ParameterDefinitions) { if (!paramDefn.IsEmptyEquivalent) { string valueString = ""; if (paramDefn.ParameterType == CrcParameterType.Date) { valueString = DateTime.Parse(paramDefn.ParameterChoice.SingleValue).ToString("dd/MMM/yyyy"); } else if (paramDefn.ParameterType == CrcParameterType.Boolean) { valueString = paramDefn.ParameterChoice.SingleValue; } else if (paramDefn.ParameterType == CrcParameterType.Text) { valueString = paramDefn.ParameterChoice.SingleValue; } else { valueString = SelectListAsString(paramDefn, truncateListLimit); } userParams.Add(String.Format("{0}: {1}", paramDefn.DisplayName, valueString)); } } return userParams; }
/// <summary> /// Reads the dependent param info from the ssrs web service params and /// converts into dependAnt params (i.e. opposite way round) /// </summary> public void AddSsrsDependentParams(CrissCrossLib.ReportWebService.ReportParameter[] wsReportParameters, CrcReportDefinition repDef) { foreach (var paramLoop in wsReportParameters) { if (paramLoop.Dependencies != null) { logger.DebugFormat("AddSsrsDependantParams: Param {0} has dependencies {1} according to web service", paramLoop.Name, string.Join(", ", paramLoop.Dependencies)); foreach (string dependentParam in paramLoop.Dependencies) { var match = repDef.ParameterDefinitions.FirstOrDefault(p => p.Name == dependentParam); if (match == null) throw new ApplicationException(String.Format("Ssrs says {0} has Dependent {1} but could not find CrcParameterDefintiion {1} during make stage", paramLoop.Name, dependentParam)); match.DependantParameterNames.Add(paramLoop.Name); } } } }