Пример #1
0
        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);
            }
Пример #3
0
            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));
            }
Пример #4
0
        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));
        }
Пример #5
0
        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));
            }
        }
Пример #6
0
 public SettingContextHandler()
 {
     DataAdapter = new SettingDataAdapter();
 }
Пример #7
0
        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));
        }