Ejemplo n.º 1
0
        protected virtual string GetSiteMapChildrenDataServiceUri(IEditableCrmEntityControl control, SiteMapNode startingNode)
        {
            var serviceBaseUri = string.IsNullOrEmpty(control.CmsServiceBaseUri) ? PortalCrmConfigurationManager.GetCmsServiceBaseUri(PortalName) : control.CmsServiceBaseUri;

            // MSBug #120121: No need to URL encode--encoding is handled by webcontrol rendering layer.
            return("{0}/GetSiteMapChildren?siteMapProvider='{1}'&startingNodeUrl='{2}'&cmsServiceBaseUri='{3}'".FormatWith(serviceBaseUri.TrimEnd('/'), startingNode.Provider.Name, startingNode.Url, serviceBaseUri));
        }
        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);
                    }
                }
            }
        }
        protected virtual void AddSiteMapNodeMetadata(string portalName, IEditableCrmEntityControl control, Control container, SiteMapNode node, bool includeEntityMetadata)
        {
            var overrideProvider = GetOverrideProvider(portalName);

            overrideProvider.AddSiteMapNodeMetadata(portalName, control, container, node);

            var entityNode = node as CrmSiteMapNode;

            if (entityNode == null || entityNode.Entity == null)
            {
                return;
            }

            if (includeEntityMetadata)
            {
                AddEntityMetadata(portalName, control, container, entityNode.Entity);
            }

            IEnumerable <string> siteMapChildEntityNames;

            if (_siteMapChildEntitiesByEntityName.TryGetValue(entityNode.Entity.LogicalName, out siteMapChildEntityNames))
            {
                foreach (var entityName in siteMapChildEntityNames)
                {
                    overrideProvider.AddEntityUriTemplateReference(control, container, entityName);

                    if (_deletableEntityNames.Contains(entityName))
                    {
                        overrideProvider.AddEntityDeleteUriTemplateReference(control, container, entityName);
                    }
                }
            }
        }
Ejemplo n.º 4
0
        protected virtual bool TryGetDataServicePropertyUri(IEditableCrmEntityControl control, Entity entity, string propertyName, out string serviceUri)
        {
            serviceUri = string.IsNullOrEmpty(control.CmsServiceBaseUri)
                                ? entity.GetDataServicePropertyUri(propertyName)
                                : entity.GetDataServicePropertyUri(propertyName, control.CmsServiceBaseUri);

            return(!string.IsNullOrEmpty(serviceUri));
        }
Ejemplo n.º 5
0
        protected virtual bool TryGetCrmEntityUrlDataServiceUri(IEditableCrmEntityControl control, Entity entity, out string serviceUri)
        {
            serviceUri = string.IsNullOrEmpty(control.CmsServiceBaseUri)
                                ? entity.GetEntityUrlDataServiceUri()
                                : entity.GetEntityUrlDataServiceUri(control.CmsServiceBaseUri);

            return(!string.IsNullOrEmpty(serviceUri));
        }
Ejemplo n.º 6
0
        protected virtual void AddEntityServiceReference(IEditableCrmEntityControl control, Entity entity, string title, Control container)
        {
            string serviceUri;

            if (TryGetDataServiceEntityUri(control, entity, out serviceUri))
            {
                AddServiceReference(control, serviceUri, "xrm-entity-ref", container, title);
            }
        }
Ejemplo n.º 7
0
        protected virtual void AddEntityAssocationSetServiceReferenceForWebLinkSet(IEditableCrmEntityControl control, Entity entity, Relationship relationship, Control container)
        {
            var serviceBaseUri = string.IsNullOrEmpty(control.CmsServiceBaseUri) ? PortalCrmConfigurationManager.GetCmsServiceBaseUri(PortalName) : control.CmsServiceBaseUri;
            var context        = PortalCrmConfigurationManager.GetServiceContext(PortalName);

            var serviceUri = context.GetType().GetCrmEntitySetDataServiceUri("adx_weblink", serviceBaseUri, "adx_weblinksetid", entity.Id);

            AddServiceReference(control, serviceUri, "xrm-entity-{0}-ref".FormatWith(relationship.ToSchemaName("_")), container);
        }
Ejemplo n.º 8
0
        protected virtual void AddEntitySetServiceReference(IEditableCrmEntityControl control, string crmEntityName, Control container)
        {
            string serviceUri;

            if (TryGetDataServiceCrmEntitySetUri(control, crmEntityName, out serviceUri))
            {
                AddServiceReference(control, serviceUri, "xrm-entity-{0}-ref".FormatWith(crmEntityName), container);
            }
        }
            public void AddEntityDeleteUriTemplateReference(IEditableCrmEntityControl control, Control container, string entityName)
            {
                string uriTemplate;

                if (TryGetCrmEntityDeleteDataServiceUriTemplate(control, entityName, out uriTemplate))
                {
                    AddServiceReference(control, uriTemplate, string.Format("xrm-uri-template xrm-entity-{0}-delete-ref", entityName), container);
                }
            }
Ejemplo n.º 10
0
        public virtual void AddAttributeMetadata(string portalName, IEditableCrmEntityControl control, Control container, Entity entity, string propertyName, string propertyDisplayName)
        {
            string serviceUri;

            if (TryGetDataServicePropertyUri(control, entity, propertyName, out serviceUri))
            {
                AddServiceReference(control, serviceUri, "xrm-attribute-ref", container, propertyDisplayName);
            }
        }
            protected void AddPublishingTransitionSetServiceReference(IEditableCrmEntityControl control, Control container)
            {
                string serviceUri;

                if (TryGetDataServiceCrmEntitySetUri(control, "adx_publishingstate", out serviceUri))
                {
                    serviceUri = serviceUri + "&FromStateID={adx_publishingstateid.Id}";
                    AddServiceReference(control, serviceUri, "xrm-entity-edit{0}-ref".FormatWith("adx_publishingstate"), container);
                }
            }
Ejemplo n.º 12
0
        protected virtual bool TryGetCrmEntityUrlDataServiceUriTemplate(IEditableCrmEntityControl control, string crmEntityName, out string uriTemplate)
        {
            var dataContextType = GetCrmDataContextType();

            uriTemplate = string.IsNullOrEmpty(control.CmsServiceBaseUri)
                                ? dataContextType.GetCrmEntityUrlDataServiceUriTemplate(crmEntityName)
                                : dataContextType.GetCrmEntityUrlDataServiceUriTemplate(crmEntityName, control.CmsServiceBaseUri);

            return(!string.IsNullOrEmpty(uriTemplate));
        }
Ejemplo n.º 13
0
        protected virtual bool TryGetDataServiceCrmEntitySetUri(IEditableCrmEntityControl control, string crmEntityName, out string serviceUri)
        {
            var dataContextType = GetCrmDataContextType();

            serviceUri = string.IsNullOrEmpty(control.CmsServiceBaseUri)
                                ? dataContextType.GetCrmEntitySetDataServiceUri(crmEntityName)
                                : dataContextType.GetCrmEntitySetDataServiceUri(crmEntityName, control.CmsServiceBaseUri);

            return(!string.IsNullOrEmpty(serviceUri));
        }
Ejemplo n.º 14
0
        protected virtual void AddServiceReference(IEditableCrmEntityControl control, string serviceUri, string cssClass, Control container, string title)
        {
            // MSBug #120121: No need to HTML encode--encoding is handled by webcontrol rendering layer.
            var serviceRef = new HyperLink {
                CssClass = cssClass, NavigateUrl = VirtualPathUtility.ToAbsolute(serviceUri), ToolTip = title
            };

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

            container.Controls.Add(serviceRef);
        }
            protected virtual bool TryGetCrmEntityDataServiceUriTemplate(IEditableCrmEntityControl control, string entityName, out string uriTemplate)
            {
                var serviceBaseUri = string.IsNullOrEmpty(control.CmsServiceBaseUri) ? GetCmsServiceBaseUri(PortalName) : control.CmsServiceBaseUri;
                var context        = GetServiceContext(PortalName);

                var uri = GetCrmEntityDataServiceUriTemplate(context.GetType(), entityName, serviceBaseUri);

                uriTemplate = AddWebsitePathToQuerystring(uri);

                return(!string.IsNullOrEmpty(uriTemplate));
            }
            protected virtual bool TryGetCrmEntityWebLinkSetDataServiceUri(IEditableCrmEntityControl control, Entity entity, Relationship relationship, out string serviceUri)
            {
                var serviceBaseUri = string.IsNullOrEmpty(control.CmsServiceBaseUri) ? GetCmsServiceBaseUri(PortalName) : control.CmsServiceBaseUri;
                var context        = GetServiceContext(PortalName);

                var uri = GetCrmEntitySetDataServiceUri(context.GetType(), "adx_weblink", serviceBaseUri, "adx_weblinksetid", entity.Id);

                serviceUri = AddWebsitePathToQuerystring(uri);

                return(!string.IsNullOrEmpty(serviceUri));
            }
Ejemplo n.º 17
0
        protected virtual void AddEntitySetSchemaMap(IEditableCrmEntityControl control, string crmEntityName, Control container)
        {
            var schemaMap = new HtmlGenericControl("span")
            {
                InnerText = GetCrmDataContextType().GetCrmEntitySetSchemaMap(crmEntityName)
            };

            schemaMap.Attributes["class"] = "xrm-entity-schema-map";
            schemaMap.Attributes["title"] = crmEntityName;
            schemaMap.Attributes["style"] = "display:none;";

            container.Controls.Add(schemaMap);
        }
            protected override string GetSiteMapChildrenDataServiceUri(IEditableCrmEntityControl control, SiteMapNode startingNode)
            {
                var serviceBaseUri = string.IsNullOrEmpty(control.CmsServiceBaseUri)
                                        ? PortalCrmConfigurationManager.GetPortalContextElement(PortalName).CmsServiceBaseUri
                                        : control.CmsServiceBaseUri;

                var serviceUri = "{0}/GetSiteMapChildren?siteMapProvider='{1}'&startingNodeUrl='{2}'".FormatWith(
                    serviceBaseUri.TrimEnd('/'),
                    UrlEncode(startingNode.Provider.Name),
                    UrlEncode(startingNode.Url));

                return(AddWebsitePathToQuerystring(serviceUri));
            }
Ejemplo n.º 19
0
        public void AddSiteMapNodeMetadata(string portalName, IEditableCrmEntityControl control, Control container, SiteMapNode node)
        {
            if (container == null)
            {
                throw new ArgumentNullException("container");
            }

            if (node == null)
            {
                throw new ArgumentNullException("node");
            }

            var metadataContainer = new ControlCmsEntityEditingMetadataContainer(container);

            Provider.AddSiteMapNodeMetadata(metadataContainer, node, portalName);
        }
Ejemplo n.º 20
0
        public void AddEntityMetadata(string portalName, IEditableCrmEntityControl control, Control container, Entity entity)
        {
            if (container == null)
            {
                throw new ArgumentNullException("container");
            }

            if (entity == null)
            {
                throw new ArgumentNullException("entity");
            }

            var metadataContainer = new ControlCmsEntityEditingMetadataContainer(container);

            Provider.AddEntityMetadata(metadataContainer, entity.ToEntityReference(), portalName);
        }
Ejemplo n.º 21
0
        public void AddSiteMapNodeMetadata(string portalName, IEditableCrmEntityControl control, Control container, SiteMapNode node)
        {
            if (control == null || container == null || node == null)
            {
                return;
            }

            var entityRef = new HyperLink
            {
                CssClass    = "xrm-entity-ref xrm-entity-ref-sitemapchildren",
                NavigateUrl = VirtualPathUtility.ToAbsolute(GetSiteMapChildrenDataServiceUri(control, node)),
                ToolTip     = node.Title
            };

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

            container.Controls.Add(entityRef);
        }
            public override void AddAttributeMetadata(string portalName, IEditableCrmEntityControl control, Control container, Entity entity, string propertyName, string propertyDisplayName)
            {
                base.AddAttributeMetadata(portalName, control, container, entity, propertyName, propertyDisplayName);

                var portal = PortalContext.Current;

                var elFinderConnectorPath = VirtualPathUtility.ToAbsolute(ElFinderRouteHandler.GetAppRelativePath(portal.Website.Id));

                var elFinderConnectorUrl = new UrlBuilder(elFinderConnectorPath);

                if (portal.Entity != null)
                {
                    elFinderConnectorUrl.QueryString.Set("working", new DirectoryContentHash(portal.Entity.ToLanguageContainerEntityReference()).ToString());
                }

                AddServiceReference(control, elFinderConnectorUrl.PathWithQueryString, "xrm-filebrowser-ref", container);
                AddServiceReference(control, ElFinderRouteHandler.DialogPath, "xrm-filebrowser-dialog-ref", container);
            }
Ejemplo n.º 23
0
        public void AddAttributeMetadata(string portalName, IEditableCrmEntityControl control, Control container, Entity entity, string propertyName, string propertyDisplayName)
        {
            if (container == null)
            {
                throw new ArgumentNullException("container");
            }

            if (entity == null)
            {
                throw new ArgumentNullException("entity");
            }

            var metadataContainer    = new ControlCmsEntityEditingMetadataContainer(container);
            var serviceContext       = PortalCrmConfigurationManager.CreateServiceContext(portalName ?? PortalName);
            var attributeLogicalName = GetAttributeLogicalNameFromPropertyName(serviceContext, entity.LogicalName, propertyName);

            Provider.AddAttributeMetadata(metadataContainer, entity.ToEntityReference(), attributeLogicalName, propertyDisplayName, portalName);
        }
Ejemplo n.º 24
0
        public virtual void AddEntityMetadata(string portalName, IEditableCrmEntityControl control, Control container, Entity entity)
        {
            if (control == null || container == null || entity == null)
            {
                return;
            }

            if (entity.LogicalName == "adx_weblinkset")
            {
                // Output the service reference for the web link set itself.
                AddEntityServiceReference(control, entity, entity.GetAttributeValue <string>("adx_name"), container);

                // Output the service reference for the child web links of the set.
                AddEntityAssocationSetServiceReferenceForWebLinkSet(control, entity, "adx_weblinkset_weblink".ToRelationship(), container);
                AddEntityAssocationSetServiceReference(portalName, control, entity, "adx_weblinkset_weblink".ToRelationship(), container, "xrm-entity-{0}-update-ref");
                AddEntitySetSchemaMap(control, "adx_weblink", container);

                // Output the service reference and schema map for site web pages (required to create new web links).
                AddEntitySetServiceReference(control, "adx_webpage", container);
                AddEntitySetSchemaMap(control, "adx_webpage", container);

                string weblinkDeleteUriTemplate;

                if (TryGetCrmEntityDeleteDataServiceUriTemplate(control, "adx_weblink", out weblinkDeleteUriTemplate))
                {
                    AddServiceReference(control, weblinkDeleteUriTemplate, "xrm-uri-template xrm-entity-adx_weblink-delete-ref", container);
                }

                return;
            }

            string serviceUri;

            if (!TryGetDataServiceEntityUri(control, entity, out serviceUri))
            {
                return;
            }

            // Add the service reference to the bound entity.
            container.Controls.Add(new HyperLink {
                CssClass = "xrm-entity-ref", NavigateUrl = VirtualPathUtility.ToAbsolute(serviceUri), Text = string.Empty
            });

            string entityUrlServiceUri;

            // Add the service reference for getting the URL of the bound entity.
            if (TryGetCrmEntityUrlDataServiceUri(control, entity, out entityUrlServiceUri))
            {
                AddServiceReference(control, entityUrlServiceUri, "xrm-entity-url-ref", container, "GetEntityUrl");
            }

            var crmEntityName = entity.LogicalName;

            AddEntitySetSchemaMap(control, crmEntityName, container);

            // If the entity is "deletable", add a service reference for soft-delete of the entity.
            if (DeletableEntityNames.Contains(crmEntityName))
            {
                string deleteServiceUri;

                if (TryGetCrmEntityDeleteDataServiceUri(control, entity, out deleteServiceUri))
                {
                    AddServiceReference(control, deleteServiceUri, "xrm-entity-delete-ref", container);
                }
            }

            if (FileAttachmentEntityNames.Contains(crmEntityName))
            {
                string fileAttachmentServiceUri;

                if (TryGetCrmEntityFileAttachmentDataServiceUri(control, entity, out fileAttachmentServiceUri))
                {
                    AddServiceReference(control, fileAttachmentServiceUri, "xrm-entity-attachment-ref", container);
                }
            }

            // Add the service references on which the creation of various entities are dependent.
            foreach (var dependencyEntityName in DependencyEntityNames)
            {
                AddEntitySetServiceReference(control, dependencyEntityName, container);
                AddEntitySetSchemaMap(control, dependencyEntityName, container);
            }

            // Add the service reference URI Templates for the notes associated with given entity types.
            foreach (var fileAttachmentEntity in FileAttachmentEntityNames)
            {
                string uriTemplate;

                if (TryGetCrmEntityFileAttachmentDataServiceUriTemplate(control, fileAttachmentEntity, out uriTemplate))
                {
                    AddServiceReference(control, uriTemplate, "xrm-uri-template xrm-entity-{0}-attachment-ref".FormatWith(fileAttachmentEntity), container);
                }
            }

            // Add the service reference URI Templates for getting URLs for specific entity types.
            foreach (var urlEntityName in UrlEntityNames)
            {
                string uriTemplate;

                if (TryGetCrmEntityUrlDataServiceUriTemplate(control, urlEntityName, out uriTemplate))
                {
                    AddServiceReference(control, uriTemplate, "xrm-uri-template xrm-entity-{0}-url-ref".FormatWith(urlEntityName), container, "GetEntityUrl");
                }
            }

            IEnumerable <Relationship> childAssociations;

            if (ChildAssociationsByEntityName.TryGetValue(crmEntityName, out childAssociations))
            {
                foreach (var childAssociation in childAssociations)
                {
                    AddEntityAssocationSetServiceReference(portalName, control, entity, childAssociation, container);
                }
            }

            Relationship parentalRelationship;

            // Output the URL path of parent entity to the DOM (mostly to be read if the entity is deleted--the user
            // will then be redirected to the parent).
            if (_parentalRelationshipsByEntityName.TryGetValue(crmEntityName, out parentalRelationship))
            {
                var context = PortalCrmConfigurationManager.GetServiceContext(PortalName);
                entity = context.MergeClone(entity);

                var parent = entity.GetRelatedEntity(context, parentalRelationship);

                var dependencyProvider = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName);

                if (dependencyProvider == null)
                {
                    throw new InvalidOperationException("Unable to create {0} for current portal configuration.".FormatWith(typeof(IDependencyProvider).FullName));
                }

                var urlProvider = dependencyProvider.GetDependency <IEntityUrlProvider>();

                if (urlProvider == null)
                {
                    throw new InvalidOperationException("Unable to create {0} for current portal configuration.".FormatWith(typeof(IEntityUrlProvider).FullName));
                }

                var parentPath = urlProvider.GetApplicationPath(context, parent ?? entity);

                if (parentPath != null)
                {
                    AddServiceReference(control, parentPath.AbsolutePath, "xrm-entity-parent-url-ref", container);
                }
            }

            // Output the sitemarkers of the current web page into the DOM.
            if (crmEntityName == "adx_webpage")
            {
                var context = PortalCrmConfigurationManager.GetServiceContext(PortalName);
                entity = context.MergeClone(entity);

                foreach (var siteMarker in entity.GetRelatedEntities(context, "adx_webpage_sitemarker"))
                {
                    var siteMarkerRef = new HtmlGenericControl("span");

                    siteMarkerRef.Attributes["class"] = "xrm-entity-adx_webpage_sitemarker";
                    siteMarkerRef.Attributes["title"] = siteMarker.GetAttributeValue <string>("adx_name");

                    container.Controls.Add(siteMarkerRef);
                }

                AddEntitySetSchemaMap(control, "adx_webfile", container);
            }
        }
Ejemplo n.º 25
0
        protected virtual bool TryGetDataServiceCrmAssocationSetUri(string portalName, IEditableCrmEntityControl control, Entity entity, Relationship relationship, out string serviceUri)
        {
            serviceUri = string.IsNullOrEmpty(control.CmsServiceBaseUri)
                                ? entity.GetDataServiceCrmAssociationSetUri(portalName, relationship)
                                : entity.GetDataServiceCrmAssociationSetUri(portalName, relationship, control.CmsServiceBaseUri);

            return(!string.IsNullOrEmpty(serviceUri));
        }
            protected override bool TryGetDataServicePropertyUri(IEditableCrmEntityControl control, Entity entity, string propertyName, out string serviceUri)
            {
                string uri;

                return(TryGetServiceUriWithWebsitePath(base.TryGetDataServicePropertyUri(control, entity, propertyName, out uri), uri, out serviceUri));
            }
Ejemplo n.º 27
0
 protected virtual void AddServiceReference(IEditableCrmEntityControl control, string serviceUri, string cssClass, Control container)
 {
     AddServiceReference(control, serviceUri, cssClass, container, null);
 }
            protected override void AddEntityAssocationSetServiceReferenceForWebLinkSet(IEditableCrmEntityControl control, Entity entity, Relationship relationship, Control container)
            {
                string serviceUri;

                if (TryGetCrmEntityWebLinkSetDataServiceUri(control, entity, relationship, out serviceUri))
                {
                    AddServiceReference(control, serviceUri, "xrm-entity-{0}-ref".FormatWith(relationship.ToSchemaName("_")), container);
                }
            }
Ejemplo n.º 29
0
 protected virtual void AddEntityAssocationSetServiceReference(string portalName, IEditableCrmEntityControl control, Entity entity, Relationship relationship, Control container)
 {
     AddEntityAssocationSetServiceReference(portalName, control, entity, relationship, container, "xrm-entity-{0}-ref");
 }
Ejemplo n.º 30
0
        protected virtual void AddEntityAssocationSetServiceReference(string portalName, IEditableCrmEntityControl control, Entity entity, Relationship relationship, Control container, string cssClassFormat)
        {
            string serviceUri;

            if (TryGetDataServiceCrmAssocationSetUri(portalName, control, entity, relationship, out serviceUri))
            {
                AddServiceReference(control, serviceUri, cssClassFormat.FormatWith(relationship.ToSchemaName("_")), container);
            }
        }