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); } } } }
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)); }
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)); }
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); } }
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); }
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); } }
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); } }
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)); }
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)); }
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)); }
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)); }
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); }
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); }
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); }
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); }
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); } }
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)); }
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); } }
protected virtual void AddEntityAssocationSetServiceReference(string portalName, IEditableCrmEntityControl control, Entity entity, Relationship relationship, Control container) { AddEntityAssocationSetServiceReference(portalName, control, entity, relationship, container, "xrm-entity-{0}-ref"); }
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); } }