public bool GenerateRelationship(RelationshipMetadataBase relationshipMetadata, EntityMetadata otherEntityMetadata, IServiceProvider services) { if (!GenerateEntityRelationships) { return false; } return DefaultService.GenerateRelationship(relationshipMetadata, otherEntityMetadata, services); }
public EntityRelationship(RelationshipMetadataBase relation, string originatingEntity, string originatingParent = "") { Relationship = relation; if (relation is OneToManyRelationshipMetadata) { var om = (OneToManyRelationshipMetadata)relation; Name = FetchXmlBuilder.GetEntityDisplayName(om.ReferencingEntity) + "." + om.ReferencingAttribute + " -> " + FetchXmlBuilder.GetEntityDisplayName(om.ReferencedEntity) + "." + om.ReferencedAttribute; } else if (relation is ManyToManyRelationshipMetadata) { var mm = (ManyToManyRelationshipMetadata)relation; if (mm.Entity1LogicalName == originatingEntity) { Name = mm.IntersectEntityName + "." + mm.Entity1IntersectAttribute + " -> " + mm.Entity1IntersectAttribute; } else if (mm.Entity2LogicalName == originatingEntity) { Name = mm.IntersectEntityName + "." + mm.Entity2IntersectAttribute + " -> " + mm.Entity2IntersectAttribute; } else if (mm.IntersectEntityName == originatingEntity) { if (mm.Entity1LogicalName == originatingParent) { Name = mm.Entity2IntersectAttribute + " -> " + mm.Entity2LogicalName + "." + mm.Entity2IntersectAttribute; } else if (mm.Entity2LogicalName == originatingParent) { Name = mm.Entity1IntersectAttribute + " -> " + mm.Entity1LogicalName + "." + mm.Entity1IntersectAttribute; } } if (string.IsNullOrEmpty(Name)) { Name = "? " + mm.IntersectEntityName + ": " + mm.Entity1LogicalName + "." + mm.Entity1IntersectAttribute + " -> " + mm.Entity2LogicalName + "." + mm.Entity2IntersectAttribute; } } //Name = Name.Replace(FetchXmlBuilder.GetEntityDisplayName(originatingEntity) + ".", ""); }
bool ICodeWriterFilterService.GenerateRelationship(RelationshipMetadataBase relationshipMetadata, EntityMetadata otherEntityMetadata, IServiceProvider services) { return this.DefaultService.GenerateRelationship(relationshipMetadata, otherEntityMetadata, services); }
public String GetNameForRelationship( EntityMetadata entityMetadata, RelationshipMetadataBase relationshipMetadata, EntityRole? reflexiveRole, IServiceProvider services) { return DefaultNamingService.GetNameForRelationship( entityMetadata, relationshipMetadata, reflexiveRole, services); }
/// <summary> /// We don't want to generate any relationships. /// </summary> public bool GenerateRelationship(RelationshipMetadataBase relationshipMetadata, EntityMetadata otherEntityMetadata, IServiceProvider services) { return false; }
static CodeStatementCollection BuildRelationshipSet(string methodName, RelationshipMetadataBase relationship, CodeTypeReference targetType, EntityRole? entityRole) { var statements = new CodeStatementCollection(); var expression = entityRole.HasValue ? (FieldRef(typeof (EntityRole), entityRole.ToString())) : ((CodeExpression) Null()); statements.Add(ThisMethodInvoke(methodName, targetType, new[] {StringLiteral(relationship.SchemaName), expression, VarRef("value")})); return statements; }
static CodeStatement BuildRelationshipGet(string methodName, RelationshipMetadataBase relationship, CodeTypeReference targetType, EntityRole? entityRole) { var expression = entityRole.HasValue ? (FieldRef(typeof (EntityRole), entityRole.ToString())) : ((CodeExpression) Null()); return Return(ThisMethodInvoke(methodName, targetType, new[] {StringLiteral(relationship.SchemaName), expression})); }
string INamingService.GetNameForRelationship(EntityMetadata entityMetadata, RelationshipMetadataBase relationshipMetadata, EntityRole? reflexiveRole, IServiceProvider services) { var str = reflexiveRole.HasValue ? reflexiveRole.Value.ToString() : string.Empty; if (_knowNames.ContainsKey(entityMetadata.MetadataId.Value.ToString() + relationshipMetadata.MetadataId.Value + str)) { return _knowNames[entityMetadata.MetadataId.Value.ToString() + relationshipMetadata.MetadataId.Value + str]; } var name = !reflexiveRole.HasValue ? relationshipMetadata.SchemaName : (((reflexiveRole.Value) == EntityRole.Referenced) ? ("Referenced" + relationshipMetadata.SchemaName) : ("Referencing" + relationshipMetadata.SchemaName)); name = CreateValidName(name); var service = (INamingService) services.GetService(typeof (INamingService)); if (_reservedAttributeNames.Contains(name) || (name == service.GetNameForEntity(entityMetadata, services))) { name = name + "1"; } _knowNames.Add(entityMetadata.MetadataId.Value.ToString() + relationshipMetadata.MetadataId.Value + str, name); return name; }
/// <summary> /// Draw on a Visio page the entity relationships defined in the passed-in relationship collection. /// </summary> /// <param name="entity">Core entity</param> /// <param name="rect">Shape representing the core entity</param> /// <param name="relationshipCollection">Collection of entity relationships to draw</param> /// <param name="areReferencingRelationships">Whether or not the core entity is the referencing entity in the relationship</param> private void DrawRelationships(EntityMetadata entity, VisioApi.Shape rect, RelationshipMetadataBase[] relationshipCollection, bool areReferencingRelationships) { ManyToManyRelationshipMetadata currentManyToManyRelationship = null; OneToManyRelationshipMetadata currentOneToManyRelationship = null; EntityMetadata entity2 = null; AttributeMetadata attribute2 = null; AttributeMetadata attribute = null; Guid metadataID = Guid.NewGuid(); bool isManyToMany = false; // Draw each relationship in the relationship collection. foreach (RelationshipMetadataBase entityRelationship in relationshipCollection) { entity2 = null; if (entityRelationship is ManyToManyRelationshipMetadata) { isManyToMany = true; currentManyToManyRelationship = entityRelationship as ManyToManyRelationshipMetadata; // The entity passed in is not necessarily the originator of this relationship. if (String.Compare(entity.LogicalName, currentManyToManyRelationship.Entity1LogicalName, true) != 0) { entity2 = GetEntityMetadata(currentManyToManyRelationship.Entity1LogicalName); } else { entity2 = GetEntityMetadata(currentManyToManyRelationship.Entity2LogicalName); } attribute2 = GetAttributeMetadata(entity2, entity2.PrimaryIdAttribute); attribute = GetAttributeMetadata(entity, entity.PrimaryIdAttribute); metadataID = currentManyToManyRelationship.MetadataId.Value; } else if (entityRelationship is OneToManyRelationshipMetadata) { isManyToMany = false; currentOneToManyRelationship = entityRelationship as OneToManyRelationshipMetadata; entity2 = GetEntityMetadata(areReferencingRelationships ? currentOneToManyRelationship.ReferencingEntity : currentOneToManyRelationship.ReferencedEntity); attribute2 = GetAttributeMetadata(entity2, areReferencingRelationships ? currentOneToManyRelationship.ReferencingAttribute : currentOneToManyRelationship.ReferencedAttribute); attribute = GetAttributeMetadata(entity, areReferencingRelationships ? currentOneToManyRelationship.ReferencedAttribute : currentOneToManyRelationship.ReferencingAttribute); metadataID = currentOneToManyRelationship.MetadataId.Value; } // Verify relationship is either ManyToManyMetadata or OneToManyMetadata if (entity2 != null) { if (_processedRelationships.Contains(metadataID)) { // Skip relationships we have already drawn continue; } else { // Record we are drawing this relationship _processedRelationships.Add(metadataID); // Define convenience variables based upon the direction of referencing with respect to the core entity. VisioApi.Shape rect2; // Do not draw relationships involving the entity itself, SystemUser, BusinessUnit, // or those that are intentionally excluded. if (String.Compare(entity2.LogicalName, "systemuser", true) != 0 && String.Compare(entity2.LogicalName, "businessunit", true) != 0 && String.Compare(entity2.LogicalName, rect.Name, true) != 0 && String.Compare(entity.LogicalName, "systemuser", true) != 0 && String.Compare(entity.LogicalName, "businessunit", true) != 0 && !_excludedEntityTable.ContainsKey(entity2.LogicalName.GetHashCode()) && !_excludedRelationsTable.ContainsKey(attribute.LogicalName.GetHashCode())) { // Either find or create a shape that represents this secondary entity, and add the name of // the involved attribute to the shape's text. try { rect2 = rect.ContainingPage.Shapes.get_ItemU(entity2.SchemaName); if (rect2.Text.IndexOf(attribute2.SchemaName) == -1) { rect2.get_CellsSRC(VISIO_SECTION_OJBECT_INDEX, (short)VisioApi.VisRowIndices.visRowXFormOut, (short)VisioApi.VisCellIndices.visXFormHeight).ResultIU += 0.25; rect2.Text += "\n" + attribute2.SchemaName; // If the attribute is a primary key for the entity, append a [PK] label to the attribute name to indicate this. if (String.Compare(entity2.PrimaryIdAttribute, attribute2.LogicalName) == 0) { rect2.Text += " [PK]"; } } } catch (System.Runtime.InteropServices.COMException) { rect2 = DrawEntityRectangle(rect.ContainingPage, entity2.SchemaName, entity2.OwnershipType.Value); rect2.Text += "\n" + attribute2.SchemaName; // If the attribute is a primary key for the entity, append a [PK] label to the attribute name to indicate so. if (String.Compare(entity2.PrimaryIdAttribute, attribute2.LogicalName) == 0) { rect2.Text += " [PK]"; } } // Add the name of the involved attribute to the core entity's text, if not already present. if (rect.Text.IndexOf(attribute.SchemaName) == -1) { rect.get_CellsSRC(VISIO_SECTION_OJBECT_INDEX, (short)VisioApi.VisRowIndices.visRowXFormOut, (short)VisioApi.VisCellIndices.visXFormHeight).ResultIU += HEIGHT; rect.Text += "\n" + attribute.SchemaName; // If the attribute is a primary key for the entity, append a [PK] label to the attribute name to indicate so. if (String.Compare(entity.PrimaryIdAttribute, attribute.LogicalName) == 0) { rect.Text += " [PK]"; } } // Update the style of the entity name VisioApi.Characters characters = rect.Characters; VisioApi.Characters characters2 = rect2.Characters; //set the font family of the text to segoe for the visio 2013. if (VersionName == "15.0") { characters.set_CharProps((short)VisioApi.VisCellIndices.visCharacterFont, (short)FONT_STYLE); characters2.set_CharProps((short)VisioApi.VisCellIndices.visCharacterFont, (short)FONT_STYLE); } switch (entity2.OwnershipType) { case OwnershipTypes.BusinessOwned: // set the font color of the text characters.set_CharProps((short)VisioApi.VisCellIndices.visCharacterColor, (short)VisioApi.VisDefaultColors.visBlack); characters2.set_CharProps((short)VisioApi.VisCellIndices.visCharacterColor, (short)VisioApi.VisDefaultColors.visBlack); break; case OwnershipTypes.OrganizationOwned: // set the font color of the text characters.set_CharProps((short)VisioApi.VisCellIndices.visCharacterColor, (short)VisioApi.VisDefaultColors.visBlack); characters2.set_CharProps((short)VisioApi.VisCellIndices.visCharacterColor, (short)VisioApi.VisDefaultColors.visBlack); break; case OwnershipTypes.UserOwned: // set the font color of the text characters.set_CharProps((short)VisioApi.VisCellIndices.visCharacterColor, (short)VisioApi.VisDefaultColors.visWhite); characters2.set_CharProps((short)VisioApi.VisCellIndices.visCharacterColor, (short)VisioApi.VisDefaultColors.visWhite); break; default: break; } // Draw the directional, dynamic connector between the two entity shapes. if (areReferencingRelationships) { DrawDirectionalDynamicConnector(rect, rect2, isManyToMany); } else { DrawDirectionalDynamicConnector(rect2, rect, isManyToMany); } } else { Debug.WriteLine(String.Format("<{0} - {1}> not drawn.", rect.Name, entity2.LogicalName), "Relationship"); } } } } }
/// <summary> /// Draw on a Visio page the entity relationships defined in the passed-in relationship collection. /// </summary> /// <param name="entity">Core entity</param> /// <param name="rect">Shape representing the core entity</param> /// <param name="relationshipCollection">Collection of entity relationships to draw</param> /// <param name="areReferencingRelationships">Whether or not the core entity is the referencing entity in the relationship</param> /// <param name="worker">The worker.</param> /// <param name="e">The <see cref="DoWorkEventArgs"/> instance containing the event data.</param> private void DrawRelationships(EntityMetadata entity, VisioApi.Shape rect, RelationshipMetadataBase[] relationshipCollection, bool areReferencingRelationships, BackgroundWorker worker, DoWorkEventArgs e) { ManyToManyRelationshipMetadata currentManyToManyRelationship = null; OneToManyRelationshipMetadata currentOneToManyRelationship = null; EntityMetadata entity2 = null; AttributeMetadata attribute2 = null; AttributeMetadata attribute = null; Guid metadataID = Guid.NewGuid(); bool isManyToMany = false; // Draw each relationship in the relationship collection. foreach (RelationshipMetadataBase entityRelationship in relationshipCollection) { if (worker.CancellationPending) { e.Cancel = true; return; } entity2 = null; if (entityRelationship is ManyToManyRelationshipMetadata) { isManyToMany = true; currentManyToManyRelationship = entityRelationship as ManyToManyRelationshipMetadata; // The entity passed in is not necessarily the originator of this relationship. if (String.Compare(entity.LogicalName, currentManyToManyRelationship.Entity1LogicalName, true) != 0) { entity2 = GetEntityMetadata(currentManyToManyRelationship.Entity1LogicalName); } else { entity2 = GetEntityMetadata(currentManyToManyRelationship.Entity2LogicalName); } attribute2 = GetAttributeMetadata(entity2, entity2.PrimaryIdAttribute); attribute = GetAttributeMetadata(entity, entity.PrimaryIdAttribute); metadataID = currentManyToManyRelationship.MetadataId.Value; } else if (entityRelationship is OneToManyRelationshipMetadata) { isManyToMany = false; currentOneToManyRelationship = entityRelationship as OneToManyRelationshipMetadata; entity2 = GetEntityMetadata(areReferencingRelationships ? currentOneToManyRelationship.ReferencingEntity : currentOneToManyRelationship.ReferencedEntity); attribute2 = GetAttributeMetadata(entity2, areReferencingRelationships ? currentOneToManyRelationship.ReferencingAttribute : currentOneToManyRelationship.ReferencedAttribute); attribute = GetAttributeMetadata(entity, areReferencingRelationships ? currentOneToManyRelationship.ReferencedAttribute : currentOneToManyRelationship.ReferencingAttribute); metadataID = currentOneToManyRelationship.MetadataId.Value; } // Verify relationship is either ManyToManyMetadata or OneToManyMetadata if (entity2 != null) { if (_processedRelationships.Contains(metadataID)) { // Skip relationships we have already drawn continue; } else { // Record we are drawing this relationship _processedRelationships.Add(metadataID); // Define convenience variables based upon the direction of referencing with respect to the core entity. VisioApi.Shape rect2; // Do not draw relationships involving the entity itself, SystemUser, BusinessUnit, // or those that are intentionally excluded. string selectedEntityFound = selectedEntitiesNames.Find(en => en == entity2.LogicalName); if (String.Compare(entity2.LogicalName, "systemuser", true) != 0 && String.Compare(entity2.LogicalName, "businessunit", true) != 0 && String.Compare(entity2.LogicalName, rect.Name, true) != 0 && (selectedEntityFound != null) && String.Compare(entity.LogicalName, "systemuser", true) != 0 && String.Compare(entity.LogicalName, "businessunit", true) != 0) { // Either find or create a shape that represents this secondary entity, and add the name of // the involved attribute to the shape's text. try { rect2 = rect.ContainingPage.Shapes.get_ItemU(entity2.LogicalName); if (rect2.Text.IndexOf(attribute2.LogicalName) == -1) { rect2.get_CellsSRC(VISIO_SECTION_OJBECT_INDEX, (short)VisioApi.VisRowIndices.visRowXFormOut, (short)VisioApi.VisCellIndices.visXFormHeight).ResultIU += 0.25; rect2.Text += "\n" + attribute2.LogicalName; // If the attribute is a primary key for the entity, append a [PK] label to the attribute name to indicate this. if (String.Compare(entity2.PrimaryIdAttribute, attribute2.LogicalName) == 0) { rect2.Text += " [PK]"; } } } catch (System.Runtime.InteropServices.COMException) { rect2 = DrawEntityRectangle(rect.ContainingPage, entity2.LogicalName, entity2.OwnershipType.Value); rect2.Text += "\n" + attribute2.LogicalName; // If the attribute is a primary key for the entity, append a [PK] label to the attribute name to indicate so. if (String.Compare(entity2.PrimaryIdAttribute, attribute2.LogicalName) == 0) { rect2.Text += " [PK]"; } } // Add the name of the involved attribute to the core entity's text, if not already present. if (rect.Text.IndexOf(attribute.LogicalName) == -1) { rect.get_CellsSRC(VISIO_SECTION_OJBECT_INDEX, (short)VisioApi.VisRowIndices.visRowXFormOut, (short)VisioApi.VisCellIndices.visXFormHeight).ResultIU += HEIGHT; rect.Text += "\n" + attribute.LogicalName; // If the attribute is a primary key for the entity, append a [PK] label to the attribute name to indicate so. if (String.Compare(entity.PrimaryIdAttribute, attribute.LogicalName) == 0) { rect.Text += " [PK]"; } } // Draw the directional, dynamic connector between the two entity shapes. if (areReferencingRelationships) { DrawDirectionalDynamicConnector(rect, rect2, isManyToMany); } else { DrawDirectionalDynamicConnector(rect2, rect, isManyToMany); } } } } } }
CodeTypeReference ITypeMappingService.GetTypeForRelationship(RelationshipMetadataBase relationshipMetadata, EntityMetadata otherEntityMetadata, IServiceProvider services) { var nameForEntity = ((INamingService) services.GetService(typeof (INamingService))).GetNameForEntity(otherEntityMetadata, services); return TypeRef(nameForEntity); }
internal override void StoreResult(HttpResponseMessage httpResponse) { XDocument xdoc = XDocument.Parse(httpResponse.Content.ReadAsStringAsync().Result, LoadOptions.None); foreach (var result in xdoc.Descendants(Util.ns.a + "Results").Elements(Util.ns.a + "KeyValuePairOfstringanyType")) { if (result.Element(Util.ns.b + "key").Value == "RelationshipMetadata") this.RelationshipMetadata = RelationshipMetadataBase.LoadFromXml(result.Element(Util.ns.b + "value")); } }
bool ICodeWriterFilterService.GenerateRelationship(RelationshipMetadataBase relationshipMetadata, EntityMetadata otherEntityMetadata, IServiceProvider services) { var service = (ICodeWriterFilterService) services.GetService(typeof (ICodeWriterFilterService)); if (otherEntityMetadata == null) { return false; } if (string.Equals(otherEntityMetadata.LogicalName, "calendarrule", StringComparison.Ordinal)) { return false; } if (string.Equals(relationshipMetadata.SchemaName, "team_PostFollows", StringComparison.Ordinal)) { return false; } return service.GenerateEntity(otherEntityMetadata, services); }