コード例 #1
0
        private ApplicationPath GetApplicationPathForSiteMarker(ContentMap contentMap, WebsiteNode website, IDictionary cache)
        {
            return(GetApplicationPathForSiteMarker(cache, () =>
            {
                var siteMarkerNode = website.SiteMarkers
                                     .FirstOrDefault(e => string.Equals(e.Name, SiteMarker, StringComparison.Ordinal));

                if (siteMarkerNode == null || siteMarkerNode.WebPage == null || siteMarkerNode.WebPage.IsReference)
                {
                    return null;
                }

                var urlProvider = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName)
                                  .GetDependency <IContentMapEntityUrlProvider>();

                try
                {
                    return urlProvider.GetApplicationPath(contentMap, siteMarkerNode.WebPage);
                }
                catch (InvalidOperationException)
                {
                    return null;
                }
            }));
        }
コード例 #2
0
        protected void AssertStateTransitionIsValid(OrganizationServiceContext context, Entity entity, UpdateOperations operations)
        {
            // This is not an update of an existing entity (may be Add, or Delete) -- nothing to check.
            if (operations != UpdateOperations.Change)
            {
                return;
            }

            var response = (RetrieveResponse)context.Execute(new RetrieveRequest
            {
                Target    = new EntityReference(entity.LogicalName, entity.Id),
                ColumnSet = new ColumnSet("adx_publishingstateid")
            });

            var preUpdateEntity = response.Entity;

            // Publishing state has not changed -- nothing to check.
            if (entity.GetAttributeValue <EntityReference>("adx_publishingstateid") == preUpdateEntity.GetAttributeValue <EntityReference>("adx_publishingstateid"))
            {
                return;
            }

            var portalContext = PortalCrmConfigurationManager.CreatePortalContext(PortalName);
            var transitionSecurityProvider = PortalCrmConfigurationManager.CreateDependencyProvider().GetDependency <IPublishingStateTransitionSecurityProvider>();

            transitionSecurityProvider.Assert(
                context,
                portalContext.Website,
                preUpdateEntity.GetAttributeValue <EntityReference>("adx_publishingstateid") == null ? Guid.Empty : preUpdateEntity.GetAttributeValue <EntityReference>("adx_publishingstateid").Id,
                entity.GetAttributeValue <EntityReference>("adx_publishingstateid") == null ? Guid.Empty : entity.GetAttributeValue <EntityReference>("adx_publishingstateid").Id);
        }
コード例 #3
0
        protected virtual void CreateControlsForInlineEditing(Entity entity, string propertyName, string value)
        {
            var editablePropertyCssClass = "xrm-attribute xrm-editable-{0}".FormatWith(EditType.ToLowerInvariant());

            CssClass = string.IsNullOrEmpty(CssClass) ? editablePropertyCssClass : "{0} {1}".FormatWith(CssClass, editablePropertyCssClass);

            var valueContainer = new HtmlGenericControl(TagName)
            {
                InnerHtml = value
            };

            valueContainer.Attributes["class"] = "xrm-attribute-value";

            Controls.Add(valueContainer);

            if (entity == null || string.IsNullOrEmpty(propertyName))
            {
                return;
            }

            if (HasEditPermission(entity))
            {
                var metadataProvider = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency <ICrmEntityEditingMetadataProvider>();

                metadataProvider.AddAttributeMetadata(PortalName, this, this, entity, propertyName, GetEditDisplayName(entity, propertyName));

                this.RegisterClientSideDependencies();
            }
        }
        protected CrmSiteMapNode GetWebPageNode(OrganizationServiceContext context, Entity page, HttpStatusCode statusCode, Func <Entity, string> getRewriteUrl)
        {
            var contentFormatter = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency <ICrmEntityContentFormatter>(GetType().FullName) ?? new PassthroughCrmEntityContentFormatter();

            var rewriteUrl = getRewriteUrl(page);

            var url = context.GetUrl(page);

            var title = page.GetAttributeValue <string>("adx_title");

            // apply a detached clone of the entity since the SiteMapNode is out of the scope of the current OrganizationServiceContext

            var pageClone = page.Clone(false);

            return(new CrmSiteMapNode(
                       this,
                       url,
                       url,
                       contentFormatter.Format(string.IsNullOrEmpty(title) ? page.GetAttributeValue <string>("adx_name") : title, page, this),
                       contentFormatter.Format(page.GetAttributeValue <string>("adx_summary"), page, this),
                       rewriteUrl,
                       page.GetAttributeValue <DateTime?>("modifiedon").GetValueOrDefault(DateTime.UtcNow),
                       pageClone,
                       statusCode));
        }
        protected void AddSiteMapNodeMetadataForEntity(string portalName, IEditableCrmEntityControl control, Control container, Entity entity)
        {
            var serviceContext = PortalCrmConfigurationManager.CreateServiceContext(portalName);

            var metadata = ((RetrieveEntityResponse)serviceContext.Execute(new RetrieveEntityRequest
            {
                EntityFilters = EntityFilters.Entity, LogicalName = entity.LogicalName
            })).EntityMetadata;

            var refetchedEntity = serviceContext.CreateQuery(entity.LogicalName).FirstOrDefault(e => e.GetAttributeValue <Guid>(metadata.PrimaryIdAttribute) == entity.Id);

            var urlProvider = PortalCrmConfigurationManager.CreateDependencyProvider(portalName).GetDependency <IEntityUrlProvider>();

            if (refetchedEntity != null)
            {
                var entityPath = urlProvider.GetApplicationPath(serviceContext, refetchedEntity);

                if (entityPath != null && entityPath.AbsolutePath != null)
                {
                    var node = SiteMap.Provider.FindSiteMapNode(entityPath.AbsolutePath);

                    if (node != null)
                    {
                        AddCssClass(container, "xrm-editable-sitemapchildren");

                        AddSiteMapNodeMetadata(portalName, control, container, node, false);
                    }
                }
            }
        }
コード例 #6
0
        /// <summary>Get the article rul.</summary>
        /// <returns>The article url.</returns>
        private string GetUrl()
        {
            var serviceContext = PortalCrmConfigurationManager.CreateServiceContext();
            var urlProvider    = PortalCrmConfigurationManager.CreateDependencyProvider().GetDependency <IEntityUrlProvider>();

            return(urlProvider.GetUrl(serviceContext, this.Entity));
        }
コード例 #7
0
        public void RenderEditingMetadata(string entityLogicalName, TagBuilder tag, string description = null, JObject initialValues = null)
        {
            var metadataProvider = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency <ICmsEntityEditingMetadataProvider>();

            metadataProvider.AddEntityMetadata(new TagBuilderCmsEntityEditingMetadataContainer(tag), entityLogicalName, PortalName, description, initialValues);

            _enableEditing = true;
        }
コード例 #8
0
        public ActionResult Index(string number)
        {
            OrganizationServiceContext serviceContext = PortalCrmConfigurationManager.CreateServiceContext();
            var securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider();
            var urlProvider      = PortalCrmConfigurationManager.CreateDependencyProvider().GetDependency <IEntityUrlProvider>();

            return(this.GetIndexView(number, serviceContext, securityProvider, urlProvider));
        }
 public PortalConfigurationDataAdapterDependencies(string portalName = null, RequestContext requestContext = null) : base(
         PortalCrmConfigurationManager.CreateServiceContext(portalName),
         PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(portalName),
         PortalCrmConfigurationManager.CreateDependencyProvider(portalName).GetDependency <IEntityUrlProvider>(),
         PortalCrmConfigurationManager.CreatePortalContext(portalName, requestContext))
 {
     PortalName = portalName;
 }
コード例 #10
0
 public PortalContextDataAdapterDependencies(IPortalContext portalContext, string portalName = null, RequestContext requestContext = null) : base(
         portalContext.ServiceContext,
         PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(portalName),
         PortalCrmConfigurationManager.CreateDependencyProvider(portalName).GetDependency <IEntityUrlProvider>(),
         portalContext,
         requestContext)
 {
 }
コード例 #11
0
        public void RenderEditingMetadata(IPortalViewAttribute attribute, TagBuilder tag, string description = null)
        {
            var metadataProvider = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency <ICmsEntityEditingMetadataProvider>();

            metadataProvider.AddAttributeMetadata(new TagBuilderCmsEntityEditingMetadataContainer(tag), attribute.EntityReference, attribute.LogicalName, description ?? attribute.Description, PortalName);

            _enableEditing = true;
        }
		protected override void PerformDataBinding(IEnumerable data)
		{
			base.PerformDataBinding(data);

			var dataObject = GetDataObject(data);

			var entity = dataObject as Entity;

			// The extracted data item is not an Entity, go down non-entity path.
			if (entity == null)
			{
				PerformDataBindingOfNonCrmEntity(dataObject);

				return;
			}
			
			// No property name provided, bind directly against the entity itself.
			if (string.IsNullOrEmpty(PropertyName))
			{
				PerformDataBindingOfCrmEntity(entity);

				return;
			}

			var property = GetAttributeValue(entity, PropertyName.Split(','));

			// No property was found.
			if (property == null)
			{
				PerformDataBindingOfCrmEntityProperty(entity, null, null);

				return;
			}

			// Property was found, but none of the property fallbacks had a non-null value.
			if (property.Value == null)
			{
				PerformDataBindingOfCrmEntityProperty(entity, property.Name, null);

				return;
			}

			var textValue = (Format ?? "{0}").FormatWith(property.Value);

			var contentFormatter = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency<ICrmEntityContentFormatter>(GetType().FullName);

			if (contentFormatter != null)
			{
				textValue = contentFormatter.Format(textValue, entity, this);
			}

			if (HtmlEncode)
			{
				textValue = HttpUtility.HtmlEncode(textValue);
			}

			PerformDataBindingOfCrmEntityProperty(entity, property.Name, textValue);
		}
        public static IQueryable <TEntity> InterceptQuery <TEntity>(this OrganizationServiceContext context, IQueryable <TEntity> queryable) where TEntity : Entity
        {
            // TODO: make the portalName configurable
            string portalName  = null;
            var    provider    = PortalCrmConfigurationManager.CreateDependencyProvider(portalName).GetDependency <ICmsDataServiceQueryInterceptorProvider>();
            var    interceptor = provider.GetInterceptor();

            return(interceptor.InterceptQuery(context, queryable));
        }
コード例 #14
0
 public WebsiteDataAdapterDependencies(OrganizationServiceContext serviceContext, Entity website, IPortalContext portalContext, string portalName = null) : base(
         serviceContext,
         PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(portalName),
         PortalCrmConfigurationManager.CreateDependencyProvider(portalName).GetDependency <IEntityUrlProvider>(),
         website.ToEntityReference(),
         portalContext.User == null ? null : portalContext.User.ToEntityReference())
 {
     PortalName = portalName;
 }
コード例 #15
0
        protected override IPortalContext OnPortalLoaded(RequestContext requestContext, IPortalContext portal)
        {
            if (portal == null)
            {
                throw new ArgumentNullException("portal");
            }

            if (portal.Entity != null && _redirectedEntities.Contains(portal.Entity.LogicalName))
            {
                // Check if we need to follow any rules with regards to Language Code prefix in URL (only applies if multi-language is enabled)
                var contextLanguageInfo = requestContext.HttpContext.GetContextLanguageInfo();
                if (contextLanguageInfo.IsCrmMultiLanguageEnabled)
                {
                    bool needRedirect = requestContext.HttpContext.Request.HttpMethod == WebRequestMethods.Http.Get &&
                                        ((ContextLanguageInfo.DisplayLanguageCodeInUrl != contextLanguageInfo.RequestUrlHasLanguageCode) ||
                                         contextLanguageInfo.ContextLanguage.UsedAsFallback);
                    if (needRedirect)
                    {
                        string redirectPath = contextLanguageInfo.FormatUrlWithLanguage();
                        ADXTrace.Instance.TraceInfo(TraceCategory.Monitoring, "OnPortalLoaded redirecting(1)");
                        requestContext.HttpContext.Response.StatusCode       = (int)HttpStatusCode.Redirect;
                        requestContext.HttpContext.Response.RedirectLocation = redirectPath;
                        requestContext.HttpContext.Response.End();
                        return(null);
                    }
                }
            }

            var isInvalidNode = (portal.Entity == null || portal.Path == null);

            // If the node is null, isn't a CrmSiteMapNode, has no rewrite path, or is a 404, try other options.
            if (isInvalidNode || portal.StatusCode == HttpStatusCode.NotFound)
            {
                var redirectProvider = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency <IRedirectProvider>();
                var context          = requestContext.HttpContext;
                var clientUrl        = new UrlBuilder(context.Request.Url);

                // Try matching user-defined redirects, and URL history--in that order.
                var redirectMatch = redirectProvider.Match(portal.Website.Id, clientUrl);

                // If we have a successful match, redirect.
                if (redirectMatch.Success)
                {
                    ADXTrace.Instance.TraceInfo(TraceCategory.Monitoring, "OnPortalLoaded redirecting(2)");
                    context.Trace.Write(GetType().FullName, @"Redirecting path ""{0}"" to ""{1}""".FormatWith(clientUrl.Path, redirectMatch.Location));

                    context.Response.StatusCode       = (int)redirectMatch.StatusCode;
                    context.Response.RedirectLocation = redirectMatch.Location;
                    context.Response.End();

                    return(null);
                }
            }

            return(base.OnPortalLoaded(requestContext, portal));
        }
コード例 #16
0
        private IFileSystem CreateFileSystem()
        {
            var contentMapProvider      = AdxstudioCrmConfigurationManager.CreateContentMapProvider();
            var contentMapUrlProvider   = PortalCrmConfigurationManager.CreateDependencyProvider().GetDependency <IContentMapEntityUrlProvider>();
            var dataAdapterDependencies = new PortalConfigurationDataAdapterDependencies(requestContext: Request.RequestContext);

            return(contentMapProvider == null || contentMapUrlProvider == null
                                ? (IFileSystem) new EntityFileSystem(dataAdapterDependencies)
                                : new ContentMapFileSystem(contentMapProvider, contentMapUrlProvider, dataAdapterDependencies));
        }
コード例 #17
0
        public void RenderEditingMetadata(IPortalViewEntity entity, TagBuilder tag)
        {
            var metadataProvider = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency <ICmsEntityEditingMetadataProvider>();

            // If the entity is Weblinkset and a display name was given, show that otherwise use entity description (name)
            string displayName = entity is IWebLinkSet && ((IWebLinkSet)entity).DisplayName != null ? ((IWebLinkSet)entity).DisplayName : entity.Description;

            metadataProvider.AddEntityMetadata(new TagBuilderCmsEntityEditingMetadataContainer(tag), entity.EntityReference, PortalName, displayName);

            _enableEditing = true;
        }
        private IQueryable <TEntity> FilterByTransitionalRulesAllowed <TEntity>(OrganizationServiceContext context, IQueryable <TEntity> queryable, CrmEntityRight right, Guid fromStateID) where TEntity : Entity
        {
            var transitionProvider =
                PortalCrmConfigurationManager.CreateDependencyProvider().GetDependency <IPublishingStateTransitionSecurityProvider>();

            var website = context.CreateQuery("adx_website").First(ws => ws.GetAttributeValue <Guid?>("adx_websiteid") == _website.Id);

            var query = queryable.ToList().Where(e => transitionProvider.TryAssert(context, website, fromStateID,
                                                                                   e.GetAttributeValue <EntityReference>("adx_publishingstateid") == null ? Guid.Empty : e.GetAttributeValue <EntityReference>("adx_publishingstateid").Id)).AsQueryable();

            return(FilterByWebsiteAndSecurity(context, query, CrmEntityRight.Read));
        }
コード例 #19
0
        public IPortalViewEntity GetEntity(OrganizationServiceContext serviceContext, Entity entity)
        {
            if (entity == null)
            {
                return(null);
            }

            var securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(PortalName);
            var urlProvider      = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency <IEntityUrlProvider>();

            return(new PortalViewEntity(serviceContext, entity, securityProvider, urlProvider));
        }
コード例 #20
0
        public virtual void ProcessRequest(HttpContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            try
            {
                context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

                Guid parsedPortalScopeId;
                var  portalScopeId = PortalScopeId ?? (Guid.TryParse(context.Request.Params["__portalScopeId__"], out parsedPortalScopeId) ? new Guid?(parsedPortalScopeId) : null);

                if (portalScopeId == null)
                {
                    throw new CmsEntityServiceException(HttpStatusCode.BadRequest, "Unable to determine portal scope ID from request.");
                }

                var entityLogicalName = string.IsNullOrWhiteSpace(EntityLogicalName) ? context.Request.Params["entityLogicalName"] : EntityLogicalName;

                if (string.IsNullOrWhiteSpace(entityLogicalName))
                {
                    throw new CmsEntityServiceException(HttpStatusCode.BadRequest, "Unable to determine entity logical name from request.");
                }

                var serviceProvider = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency <ICmsEntityServiceProvider>();

                if (serviceProvider == null)
                {
                    throw new CmsEntityServiceException(HttpStatusCode.InternalServerError, "Unable to get dependency {0}. Please check the configured portal dependency provider.".FormatWith(typeof(ICmsEntityServiceProvider).FullName));
                }

                var portal         = PortalCrmConfigurationManager.CreatePortalContext(PortalName, context.Request.RequestContext);
                var serviceContext = CreateServiceContext();

                ProcessRequest(context, serviceProvider, portalScopeId.Value, portal, serviceContext, entityLogicalName);
            }
            catch (CmsEntityServiceException e)
            {
                ADXTrace.Instance.TraceError(TraceCategory.Application, e.ToString());

                WriteErrorResponse(context.Response, e.StatusCode, e);
            }
            catch (Exception e)
            {
                ADXTrace.Instance.TraceError(TraceCategory.Application, e.ToString());

                WriteErrorResponse(context.Response, HttpStatusCode.InternalServerError, e);
            }
        }
コード例 #21
0
        public void RegisterClientSideDependencies(WebControl control)
        {
            RegisterScripts(control, DependencyScripts);

            AddStyleReferencesToPage(control.Page, DependencyStyles);

            var provider = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency <IRegisterClientSideDependenciesProvider>();

            provider.Register(control);

            RegisterScripts(control, ExtensionScripts);

            AddStyleReferencesToPage(control.Page, ExtensionStyles);
        }
コード例 #22
0
        protected override void PerformDataBindingOfCrmEntity(Entity entity)
        {
            CssClass = GetCssClass(entity);

            Attributes["style"] = "display:none;";

            if (HasEditPermission(entity))
            {
                var metadataProvider = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency <ICrmEntityEditingMetadataProvider>();

                metadataProvider.AddEntityMetadata(PortalName, this, this, entity);

                this.RegisterClientSideDependencies();
            }
        }
コード例 #23
0
        public ActionResult Index(string number)
        {
            var serviceContext = PortalCrmConfigurationManager.CreateServiceContext();

            var kbarticle = serviceContext.CreateQuery("kbarticle")
                            .FirstOrDefault(e => e.GetAttributeValue <string>("number") == number);

            if (kbarticle == null)
            {
                ADXTrace.Instance.TraceWarning(TraceCategory.Application, "User Config issue:Knowledge base article not found exception by Article number");
                return(HttpNotFound(ResourceManager.GetString("Knowledge_Base_Article_Not_Found_Exception").FormatWith(number)));
            }

            var securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider();

            if (!securityProvider.TryAssert(serviceContext, kbarticle, CrmEntityRight.Read))
            {
                ADXTrace.Instance.TraceWarning(TraceCategory.Application, "User Config issue:Knowledge Base Article: No read permission by Article number");
                return(HttpNotFound(ResourceManager.GetString("Knowledge_Base_Article_Not_Found_Exception").FormatWith(number)));
            }

            var urlProvider = PortalCrmConfigurationManager.CreateDependencyProvider().GetDependency <IEntityUrlProvider>();

            var adx_kbarticle_kbarticle = kbarticle.GetRelatedEntities(serviceContext, new Relationship("adx_kbarticle_kbarticle")
            {
                PrimaryEntityRole = EntityRole.Referenced
            });

            var relatedArticles = adx_kbarticle_kbarticle
                                  .Where(e => securityProvider.TryAssert(serviceContext, e, CrmEntityRight.Read))
                                  .Select(e => new
            {
                Title = e.GetAttributeValue <string>("title"),
                Url   = urlProvider.GetUrl(serviceContext, e)
            })
                                  .Where(e => !(string.IsNullOrEmpty(e.Title) || string.IsNullOrEmpty(e.Url)))
                                  .Select(e => new RelatedArticle(e.Title, e.Url))
                                  .OrderBy(e => e.Title);

            //Log Customer Journey Tracking
            if (FeatureCheckHelper.IsFeatureEnabled(FeatureNames.CustomerJourneyTracking))
            {
                PortalTrackingTrace.TraceInstance.Log(Constants.Article, kbarticle.Id.ToString(), kbarticle.GetAttributeValue <string>("title"));
            }
            return(View(new ArticleViewModel(kbarticle, relatedArticles)));
        }
コード例 #24
0
        protected override void OnPreRender(EventArgs args)
        {
            if (!string.IsNullOrEmpty(SiteMarkerName))
            {
                var portalViewContext = new PortalViewContext(
                    new PortalContextDataAdapterDependencies(
                        PortalCrmConfigurationManager.CreatePortalContext(PortalName),
                        PortalName,
                        Context.Request.RequestContext));

                var target = portalViewContext.SiteMarkers.Select(SiteMarkerName);

                if (target != null)
                {
                    NavigateUrl = new UrlBuilder(target.Url);

                    if (string.IsNullOrEmpty(Text) && Controls.Count == 0)
                    {
                        var contentFormatter = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency <ICrmEntityContentFormatter>(GetType().FullName) ?? new PassthroughCrmEntityContentFormatter();

                        Text = contentFormatter.Format(target.Entity.GetAttributeValue <string>("adx_name"), target.Entity, this);
                    }
                }
                else if (AutoHiddenIfAbsent ?? true)
                {
                    Visible = false;
                }
            }

            if (!string.IsNullOrEmpty(QueryString))
            {
                // we need to append these querystring parameters
                if (!NavigateUrl.Contains("?"))
                {
                    NavigateUrl += "?";
                }

                if (!NavigateUrl.EndsWith("?"))
                {
                    NavigateUrl += "&";
                }

                NavigateUrl += QueryString;
            }
        }
            public ICrmEntitySearchResultPage Search(ICrmEntityQuery query)
            {
                var portal             = PortalCrmConfigurationManager.CreatePortalContext(_portalName);
                var serviceContext     = PortalCrmConfigurationManager.CreateServiceContext(_portalName);
                var dependencyProvider = PortalCrmConfigurationManager.CreateDependencyProvider(_portalName);
                var security           = GetSecurityAssertion(_portalName);

                var metadataCache = new Dictionary <string, EntityMetadata>();

                var paginator = new TopPaginator <ICrmEntitySearchResult>(
                    query.PageSize,
                    top => GetTopSearchResults(top, query, serviceContext, portal, security, dependencyProvider, entityName => GetEntityMetadata(serviceContext, entityName, metadataCache)),
                    result => result != null);

                var results = paginator.GetPage(query.PageNumber);

                return(new CrmEntitySearchResultPage(results, results.TotalUnfilteredItems, query.PageNumber, query.PageSize));
            }
        public virtual void AttachFilesToEntity(OrganizationServiceContext context, string entitySet, Guid entityID, IEnumerable <HttpPostedFile> files)
        {
            var entity = GetServiceOperationEntityByID(context, entitySet, entityID);

            AssertCrmEntityChangeAccess(context, entity);

            var fileAttachmentProvider = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency <ICrmEntityFileAttachmentProvider>();

            if (fileAttachmentProvider == null)
            {
                throw new DataServiceException(500, "Unable to retrieve configured ICrmEntityFileAttachmentProvider dependency.");
            }

            foreach (var file in files)
            {
                fileAttachmentProvider.AttachFile(context, entity, file);
            }
        }
コード例 #27
0
        private CrmSiteMapNode GetWebFileNode(OrganizationServiceContext serviceContext, Entity file, HttpStatusCode statusCode)
        {
            if (file == null)
            {
                return(null);
            }

            var url     = OrganizationServiceContextExtensions.GetUrl(serviceContext, file);
            var name    = file.GetAttributeValue <string>("adx_name");
            var summary = file.GetAttributeValue <string>("adx_summary");

            var fileAttachmentProvider = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency <ICrmEntityFileAttachmentProvider>();

            var attachmentInfo = fileAttachmentProvider.GetAttachmentInfo(serviceContext, file).FirstOrDefault();

            // apply a detached clone of the entity since the SiteMapNode is out of the scope of the current OrganizationServiceContext
            var fileClone = file.Clone(false);

            // If there's no file attached to the webfile, return a NotFound node with no rewrite path.
            if (attachmentInfo == null)
            {
                return(new CrmSiteMapNode(
                           this,
                           url,
                           url,
                           name,
                           summary,
                           null,
                           file.GetAttributeValue <DateTime?>("modifiedon").GetValueOrDefault(DateTime.UtcNow),
                           fileClone,
                           HttpStatusCode.NotFound));
            }

            return(new CrmSiteMapNode(
                       this,
                       url,
                       url,
                       name,
                       summary,
                       attachmentInfo.Url,
                       attachmentInfo.LastModified.GetValueOrDefault(DateTime.UtcNow),
                       file,
                       statusCode));
        }
コード例 #28
0
        private bool TryGetWebsite(ContentMap map, out WebsiteNode site, out IContentMapEntityUrlProvider urlProvider)
        {
            urlProvider = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency <IContentMapEntityUrlProvider>();

            if (urlProvider == null)
            {
                site = null;
                return(false);
            }

            var portal  = PortalContext;
            var website = portal.Website;

            if (!map.TryGetValue(website, out site))
            {
                return(false);
            }

            return(true);
        }
コード例 #29
0
        public virtual string GetRedirectWebPageUrl(IPortalContext context, string portalName = null)
        {
            if (context == null || RedirectWebpageId == null || RedirectWebpageId == Guid.Empty)
            {
                return(null);
            }

            var contentMapProvider = AdxstudioCrmConfigurationManager.CreateContentMapProvider(portalName);

            var page = contentMapProvider.Using(contentMap => Select(RedirectWebpageId.GetValueOrDefault(), contentMap));

            if (page == null)
            {
                return(null);
            }

            var urlProvider = PortalCrmConfigurationManager.CreateDependencyProvider(portalName).GetDependency <IContentMapEntityUrlProvider>();

            return(contentMapProvider.Using(contentMap => urlProvider.GetUrl(contentMap, page)));
        }
コード例 #30
0
        protected override void OnPreRender(EventArgs args)
        {
            if (!string.IsNullOrEmpty(SiteMarkerName))
            {
                var portal  = PortalCrmConfigurationManager.CreatePortalContext(PortalName);
                var context = portal.ServiceContext;
                var website = portal.Website;

                var page = context.GetPageBySiteMarkerName(website, SiteMarkerName);

                if (page != null)
                {
                    page.AssertEntityName("adx_webpage");

                    NavigateUrl = portal.ServiceContext.GetUrl(page);

                    if (string.IsNullOrEmpty(Text) && Controls.Count == 0)
                    {
                        var contentFormatter = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency <ICrmEntityContentFormatter>(GetType().FullName) ?? new PassthroughCrmEntityContentFormatter();

                        Text = contentFormatter.Format(page.GetAttributeValue <string>("adx_name"), page, this);
                    }
                }
            }

            if (!string.IsNullOrEmpty(QueryString))
            {
                // we need to append these querystring parameters
                if (!NavigateUrl.Contains("?"))
                {
                    NavigateUrl += "?";
                }

                if (!NavigateUrl.EndsWith("?"))
                {
                    NavigateUrl += "&";
                }

                NavigateUrl += QueryString;
            }
        }