public ActionResult GetRepositories()
        {
            var dataAdapterDependencies = new PortalConfigurationDataAdapterDependencies(requestContext: Request.RequestContext);
            var serviceContext          = dataAdapterDependencies.GetServiceContext();
            var website = dataAdapterDependencies.GetWebsite();

            var repositories = serviceContext.CreateQuery("adx_packagerepository")
                               .Where(e => e.GetAttributeValue <string>("adx_name") != null)
                               .Where(e => e.GetAttributeValue <string>("adx_partialurl") != null)
                               .Where(e => e.GetAttributeValue <int?>("statecode") == 0)
                               .Where(e => e.GetAttributeValue <bool?>("adx_hidden").GetValueOrDefault(false) != true)
                               .OrderBy(e => e.GetAttributeValue <int?>("adx_order"))
                               .ThenBy(e => e.GetAttributeValue <string>("adx_name"))
                               .ToArray();

            AddCrossOriginAccessHeaders(Response);

            return(new JObjectResult(new JObject
            {
                { "Repositories", new JArray(repositories.Select(e =>
                                                                 new JObject
                    {
                        { "Name", e.GetAttributeValue <string>("adx_name") },
                        { "URL", GetPackageRepositoryUrl(website.Id, e.GetAttributeValue <string>("adx_partialurl")) },
                    }
                                                                 )) },
            }));
        }
Beispiel #2
0
        private ActionResult GetData(ViewConfiguration viewConfiguration, string sortExpression, string search, string filter,
                                     string metaFilter, int page, int pageSize = DefaultPageSize, bool applyRecordLevelFilters = true,
                                     bool applyRelatedRecordFilter             = false, string filterRelationshipName = null, string filterEntityName = null,
                                     string filterAttributeName = null, Guid?filterValue = null, bool overrideMaxPageSize = false, IDictionary <string, string> customParameters = null)
        {
            PaginatedGridData data;
            //Search criteria with length 4000+ causes Generic SQL error Bug#371907
            const int maxSearchLength = 3999;
            var       searchCriteria  = search?.Length > maxSearchLength?search.Substring(0, maxSearchLength) : search;

            using (PerformanceProfiler.Instance.StartMarker(PerformanceMarkerName.EntityGridController, PerformanceMarkerArea.Crm, PerformanceMarkerTagName.GetData))
            {
                if (viewConfiguration == null)
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, ResourceManager.GetString("Invalid_Request")));
                }

                if (pageSize < 0)
                {
                    pageSize = DefaultPageSize;
                }

                if (pageSize > DefaultMaxPageSize && !overrideMaxPageSize)
                {
                    ADXTrace.Instance.TraceInfo(TraceCategory.Application, string.Format(
                                                    "pageSize={0} is greater than the allowed maximum page size of {1}. Page size has been constrained to {1}.",
                                                    pageSize, DefaultMaxPageSize));
                    pageSize = DefaultMaxPageSize;
                }

                var dataAdapterDependencies = new PortalConfigurationDataAdapterDependencies(requestContext: Request.RequestContext, portalName: viewConfiguration.PortalName);
                var website = HttpContext.GetWebsite();

                var viewDataAdapter = SetViewDataAdapter(viewConfiguration, sortExpression, searchCriteria, filter, metaFilter, page,
                                                         applyRecordLevelFilters, applyRelatedRecordFilter, filterRelationshipName, filterEntityName,
                                                         filterAttributeName, filterValue, customParameters, dataAdapterDependencies, website);

                var result = viewDataAdapter.FetchEntities();


                //If current page doesn't contain any records, but records exist in general, get those records from previous page for further rendering them.
                if (!result.Records.Any() && result.TotalRecordCount > 0)
                {
                    viewDataAdapter = SetViewDataAdapter(viewConfiguration, sortExpression, searchCriteria, filter, metaFilter,
                                                         page - 1, applyRecordLevelFilters, applyRelatedRecordFilter, filterRelationshipName, filterEntityName,
                                                         filterAttributeName, filterValue, customParameters, dataAdapterDependencies, website);

                    result = viewDataAdapter.FetchEntities();
                }

                if (result.EntityPermissionDenied)
                {
                    var permissionResult = new EntityPermissionResult(true);

                    return(Json(permissionResult));
                }


                var serviceContext = dataAdapterDependencies.GetServiceContext();
                var organizationMoneyFormatInfo = new OrganizationMoneyFormatInfo(dataAdapterDependencies);
                var crmLcid = HttpContext.GetCrmLcid();

                EntityRecord[] records;

                if (viewConfiguration.EnableEntityPermissions && AdxstudioCrmConfigurationManager.GetCrmSection().ContentMap.Enabled&& viewConfiguration.EntityName != "entitlement")
                {
                    var crmEntityPermissionProvider = new CrmEntityPermissionProvider();
                    records = result.Records.Select(e => new EntityRecord(e, serviceContext, crmEntityPermissionProvider, viewDataAdapter.EntityMetadata, true, organizationMoneyFormatInfo: organizationMoneyFormatInfo, crmLcid: crmLcid)).ToArray();
                }
                else
                {
                    records = result.Records.Select(e => new EntityRecord(e, viewDataAdapter.EntityMetadata, serviceContext, organizationMoneyFormatInfo, crmLcid)).ToArray();
                }

                records = FilterWebsiteRelatedRecords(records, dataAdapterDependencies.GetWebsite());
                var totalRecordCount = result.TotalRecordCount;

                var disabledActionLinks = new List <DisabledItemActionLink>();

                // Disable Create Related Record Action Links based on Filter Criteria.
                disabledActionLinks.AddRange(DisableActionLinksBasedOnFilterCriteria(serviceContext, viewDataAdapter.EntityMetadata,
                                                                                     viewConfiguration.CreateRelatedRecordActionLinks, records));

                // Disable Item Action Links based on Filter Criteria.
                disabledActionLinks.AddRange(DisableActionLinksBasedOnFilterCriteria(serviceContext, viewDataAdapter.EntityMetadata,
                                                                                     viewConfiguration.ItemActionLinks, records));

                data = new PaginatedGridData(records, totalRecordCount, page, pageSize, disabledActionLinks)
                {
                    CreateActionMetadata = GetCreationActionMetadata(viewConfiguration, dataAdapterDependencies),
                    MoreRecords          = result.MoreRecords.GetValueOrDefault() || (totalRecordCount > (page * pageSize))
                };
            }

            var json = Json(data);

            json.MaxJsonLength = int.MaxValue;

            return(json);
        }