private static ViewDataAdapter SetViewDataAdapter(ViewConfiguration viewConfiguration, string sortExpression, string search, string filter, string metaFilter, int page, bool applyRecordLevelFilters, bool applyRelatedRecordFilter, string filterRelationshipName, string filterEntityName, string filterAttributeName, Guid?filterValue, IDictionary <string, string> customParameters, PortalConfigurationDataAdapterDependencies dataAdapterDependencies, CrmWebsite website) { var viewDataAdapter = applyRelatedRecordFilter && (!string.IsNullOrWhiteSpace(filterRelationshipName) && !string.IsNullOrWhiteSpace(filterEntityName)) ? new ViewDataAdapter(viewConfiguration, dataAdapterDependencies, filterRelationshipName, filterEntityName, filterAttributeName, filterValue ?? Guid.Empty, page, search, sortExpression, filter, metaFilter, applyRecordLevelFilters, customParameters: customParameters) : new ViewDataAdapter(viewConfiguration, dataAdapterDependencies, page, search, sortExpression, filter, metaFilter, applyRecordLevelFilters, customParameters: customParameters); var siteSettings = new SettingDataAdapter(dataAdapterDependencies, website); var multiQueryEntities = (siteSettings.GetValue("Grid/DoQueryPerRecordLevelFilter/Entities") ?? string.Empty) .Split(',') .ToLookup(e => e, StringComparer.OrdinalIgnoreCase); viewDataAdapter.DoQueryPerRecordLevelFilter = multiQueryEntities.Contains(viewConfiguration.EntityName); return(viewDataAdapter); }
object IExpressionBuilderProvider.Evaluate(NameValueCollection arguments, Type controlType, string propertyName, string expressionPrefix) { if (string.IsNullOrEmpty(arguments.GetValueByIndexOrName(0, "Name"))) { ThrowArgumentException(propertyName, expressionPrefix, "Name={setting name} [, Default={default text}] [, Format={format string}] [, Portal={portal name}]"); } var settingName = arguments.GetValueByIndexOrName(0, "Name"); var defaultString = arguments.GetValueByIndexOrName(1, "Default") ?? string.Empty; var format = arguments.GetValueByIndexOrName(2, "Format"); var returnType = GetReturnType(controlType, propertyName); var settings = new SettingDataAdapter(new PortalConfigurationDataAdapterDependencies(), HttpContext.Current.GetWebsite()); var selected = settings.Select(settingName); var setting = selected == null ? null : selected.Entity; if (returnType.IsA(typeof(Entity))) { return(setting); } if (returnType.IsA(typeof(EntityReference))) { return(setting == null ? null : setting.ToEntityReference()); } var value = setting == null ? null : setting.GetAttributeValue <string>("adx_value"); object returnValue; if (returnType == typeof(String) && !string.IsNullOrWhiteSpace(value) && !string.IsNullOrWhiteSpace(format)) { returnValue = string.Format(CultureInfo.InvariantCulture, format, value); return(returnValue); } if (string.IsNullOrWhiteSpace(value)) { value = defaultString; } if (returnType == typeof(String)) { returnValue = value; } else { if (string.IsNullOrWhiteSpace(value)) { return(null); } var typeConverter = TypeDescriptor.GetConverter(returnType); returnValue = typeConverter.ConvertFromString(value); } return(returnValue); }
object IExpressionBuilderProvider.Evaluate(NameValueCollection arguments, Type controlType, string propertyName, string expressionPrefix) { if (string.IsNullOrEmpty(arguments.GetValueByIndexOrName(0, "Name"))) { ThrowArgumentException(propertyName, expressionPrefix, "Name={setting name} [, Default={default text}] [, Format={format string}] [, Portal={portal name}] [, CdnSettingName={setting name}]"); } // retrieve the site setting value var settingName = arguments.GetValueByIndexOrName(0, "Name"); var defaultValue = arguments.GetValueByIndexOrName(1, "Default") ?? string.Empty; var format = arguments.GetValueByIndexOrName(2, "Format"); var settings = new SettingDataAdapter(new PortalConfigurationDataAdapterDependencies(), HttpContext.Current.GetWebsite()); var selected = settings.Select(settingName); var setting = selected == null ? null : selected.Entity; var returnType = GetReturnType(controlType, propertyName); if (returnType.IsA(typeof(Entity))) { return(setting); } var url = setting == null ? defaultValue : GetEvalData(setting, "adx_value", null, format, returnType) as string; if (string.IsNullOrEmpty(url) || !url.Contains("~/cdn/")) { return(url); } // retrieve the CDN hostname value var cdnSettingName = arguments.GetValueByIndexOrName(4, "CdnSettingName") ?? "/url/cdn"; selected = settings.Select(cdnSettingName); var cdnSetting = selected == null ? null : selected.Entity; if (cdnSetting == null) { return(url); } // combine the two values var cdnFormat = url.Replace("~/cdn/", "{0}/"); return(GetEvalData(cdnSetting, "adx_value", null, cdnFormat, returnType)); }
public ActionResult DownloadAsExcel(string viewName, IEnumerable <LayoutColumn> columns, string base64SecureConfiguration, string sortExpression, string search, string filter, string metaFilter, int page = 1, int pageSize = DefaultPageSize, int timezoneOffset = 0) { var viewConfiguration = ConvertSecureStringToViewConfiguration(base64SecureConfiguration); if (viewConfiguration == null) { return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, ResourceManager.GetString("Invalid_Request"))); } var dataAdapterDependencies = new PortalConfigurationDataAdapterDependencies(requestContext: Request.RequestContext, portalName: viewConfiguration.PortalName); // override the page parameters page = 1; pageSize = new SettingDataAdapter(dataAdapterDependencies, HttpContext.GetWebsite()) .GetIntegerValue("Grid/Download/MaximumResults") .GetValueOrDefault(Fetch.MaximumPageSize); viewConfiguration.PageSize = pageSize; var json = GetData(viewConfiguration, sortExpression, search, filter, metaFilter, page, pageSize, true, false, null, null, null, null, true) as JsonResult; if (json == null) { return(new HttpStatusCodeResult(HttpStatusCode.NoContent)); } if (json.Data is EntityPermissionResult) { return(json); } var data = json.Data as PaginatedGridData; if (data == null) { return(new HttpStatusCodeResult(HttpStatusCode.NoContent)); } var stream = new MemoryStream(); var spreadsheet = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook); var workbookPart = spreadsheet.AddWorkbookPart(); workbookPart.Workbook = new Workbook(); var worksheetPart = workbookPart.AddNewPart <WorksheetPart>(); var sheet = new Sheet { Id = spreadsheet.WorkbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = viewName.Truncate(30) }; var sheets = new Sheets(); sheets.Append(sheet); var sheetData = new SheetData(); var rowIndex = 1; var columnIndex = 1; var firstRow = new Row { RowIndex = (uint)rowIndex }; var dataColumns = columns.Where(col => col.LogicalName != "col-action").ToArray(); foreach (var column in dataColumns) { var cell = new Cell { CellReference = CreateCellReference(columnIndex) + rowIndex, DataType = CellValues.InlineString }; var inlineString = new InlineString { Text = new Text { Text = column.Name } }; cell.AppendChild(inlineString); firstRow.AppendChild(cell); columnIndex++; } sheetData.Append(firstRow); foreach (var record in data.Records) { var row = new Row { RowIndex = (uint)++rowIndex }; columnIndex = 0; foreach (var column in dataColumns) { columnIndex++; var attribute = record.Attributes.FirstOrDefault(a => a.Name == column.LogicalName); if (attribute == null) { continue; } var isDateTime = attribute.AttributeMetadata.AttributeType == AttributeTypeCode.DateTime; var cell = new Cell { CellReference = CreateCellReference(columnIndex) + rowIndex, DataType = CellValues.InlineString }; var inlineString = new InlineString { Text = new Text { Text = isDateTime ? this.GetFormattedDateTime(attribute, timezoneOffset) : attribute.DisplayValue as string } }; cell.AppendChild(inlineString); row.AppendChild(cell); } sheetData.Append(row); } worksheetPart.Worksheet = new Worksheet(sheetData); spreadsheet.WorkbookPart.Workbook.AppendChild(sheets); workbookPart.Workbook.Save(); spreadsheet.Close(); var filename = new string(viewName.Where(c => !Path.GetInvalidFileNameChars().Contains(c)).ToArray()); var sessionKey = "{0:s}|{1}.xlsx".FormatWith(DateTime.UtcNow, filename); stream.Position = 0; // Reset the stream to the beginning and save to session. Session[sessionKey] = stream; return(Json(new { success = true, sessionKey }, JsonRequestBehavior.AllowGet)); }
public ActionResult DownloadAsCsv(string viewName, IEnumerable <LayoutColumn> columns, string base64SecureConfiguration, string sortExpression, string search, string filter, string metaFilter, int page = 1, int pageSize = DefaultPageSize) { var viewConfiguration = ConvertSecureStringToViewConfiguration(base64SecureConfiguration); using (PerformanceProfiler.Instance.StartMarker(PerformanceMarkerName.EntityGridController, PerformanceMarkerArea.Crm, PerformanceMarkerTagName.DownloadAsCsv)) { if (viewConfiguration == null) { return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, ResourceManager.GetString("Invalid_Request"))); } var dataAdapterDependencies = new PortalConfigurationDataAdapterDependencies(requestContext: Request.RequestContext, portalName: viewConfiguration.PortalName); // override the page parameters page = 1; pageSize = new SettingDataAdapter(dataAdapterDependencies, HttpContext.GetWebsite()) .GetIntegerValue("Grid/Download/MaximumResults") .GetValueOrDefault(Fetch.MaximumPageSize); viewConfiguration.PageSize = pageSize; var json = GetData(viewConfiguration, sortExpression, search, filter, metaFilter, page, pageSize, true, false, null, null, null, null, true) as JsonResult; if (json == null) { return(new HttpStatusCodeResult(HttpStatusCode.NoContent)); } if (json.Data is EntityPermissionResult) { return(json); } var data = json.Data as PaginatedGridData; if (data == null) { return(new HttpStatusCodeResult(HttpStatusCode.NoContent)); } var csv = new StringBuilder(); var dataColumns = columns.Where(col => col.LogicalName != "col-action").ToArray(); foreach (var column in dataColumns) { csv.Append(EncodeCommaSeperatedValue(column.Name)); } csv.AppendLine(); foreach (var record in data.Records) { foreach (var column in dataColumns) { var attribute = record.Attributes.FirstOrDefault(a => a.Name == column.LogicalName); if (attribute == null) { continue; } csv.Append(EncodeCommaSeperatedValue(attribute.DisplayValue as string)); } csv.AppendLine(); } var filename = new string(viewName.Where(c => !Path.GetInvalidFileNameChars().Contains(c)).ToArray()); var sessionKey = "{0:s}|{1}.csv".FormatWith(DateTime.UtcNow, filename); Session[sessionKey] = csv.ToString(); return(Json(new { success = true, sessionKey }, JsonRequestBehavior.AllowGet)); } }
public SettingContextHandler() { DataAdapter = new SettingDataAdapter(); }
private static int GetGravatarDefaultSize(UrlHelper urlHelper) { var settingDataAdapter = new SettingDataAdapter(new Adxstudio.Xrm.Cms.PortalConfigurationDataAdapterDependencies(requestContext: urlHelper.RequestContext)); return(settingDataAdapter.GetIntegerValue("Gravatar/Size").GetValueOrDefault(40)); }