dazinator / CrmAdo

An ADO.NET Provider for Dynamics Crm
6 stars 4 forks source link

Add ability to Query Entity Metadata #20

Closed dazinator closed 10 years ago

dazinator commented 10 years ago

Need to add support for querying CRM Entity Metadata via SELECT statements.

CrmAdo will build a "RetrieveMetadataChangesRequest" message from the SQL select statement.

Example select statement that demonstrates the entity metadata that will be able to be queried:

SELECT 
-- Entity Metadata Columns --
e.MetadataId, e.HasChanged, e.ActivityTypeMask, e.Attributes, e.AutoRouteToOwnerQueue, e.CanBeInManyToMany, e.CanBePrimaryEntityInRelationship, 
e.CanBeRelatedEntityInRelationship, e.CanCreateAttributes,  e.CanCreateCharts, e.CanCreateForms, e.CanCreateViews, e.CanModifyAdditionalSettings, 
e.CanTriggerWorkflow, e.Description, e.DisplayCollectionName, e.DisplayName, e.IconLargeName, 
e.IconMediumName, e.IconSmallName, e.IsActivity, e.IsActivityParty, e.IsAuditEnabled, e.IsAvailableOffline, e.IsChildEntity, e.IsConnectionsEnabled, 
e.IsCustomEntity, e.IsCustomizable, e.IsDocumentManagementEnabled, e.IsDuplicateDetectionEnabled, e.IsEnabledForCharts, e.IsImportable, e.IsIntersect,
e.IsMailMergeEnabled, e.IsMailMergeEnabled, 
e.IsManaged, e.IsMappable, e.IsReadingPaneEnabled, e.IsRenameable, e.IsValidForAdvancedFind, e.IsValidForQueue, e.IsVisibleInMobile, e.LogicalName,
e.IsCustomEntity, e.ManyToManyRelationships, e.ManyToOneRelationships, e.ObjectTypeCode, e.OneToManyRelationships, e.OwnershipType, e.PrimaryIdAttribute,
e.PrimaryNameAttribute, e.Privileges, e.RecurrenceBaseEntityLogicalName, e.ReportViewName, e.SchemaName, e.RecurrenceBaseEntityLogicalName
,
-- Attribute Metadata Columns --
a.AttributeOf, a.AttributeType, a.AttributeTypeName, a.CanBeSecuredForCreate, a.CanBeSecuredForRead, a.CanBeSecuredForUpdate, a.CanModifyAdditionalSettings, a.ColumnNumber, 
a.DeprecatedVersion, a.Description, a.DisplayName, 
a.EntityLogicalName, a.ExtensionData, a.HasChanged, a.IntroducedVersion, a.IsAuditEnabled, a.IsCustomAttribute, a.IsCustomizable, a.IsManaged, a.IsPrimaryId, a.IsPrimaryName, 
a.IsRenameable, a.IsSecured, a.IsValidForAdvancedFind, a.IsValidForCreate, a.IsValidForRead, a.IsValidForUpdate, a.LinkedAttributeId, a.LogicalName, a.MetadataId, a.RequiredLevel, 
a.SchemaName
,
-- One To Many Relationship Metadata Columns --
o.AssociatedMenuConfiguration, o.CascadeConfiguration, o.ExtensionData, o.HasChanged, o.IntroducedVersion, o.IsCustomizable,
o.IsCustomRelationship, o.IsManaged, o.IsValidForAdvancedFind, o.MetadataId, o.ReferencedAttribute, 
o.ReferencedEntity, o.ReferencingAttribute, o.ReferencingEntity, o.RelationshipType, o.SchemaName, 
o.SecurityTypes
,
-- Many To Many Relationship Metadata Columns --
m.Entity1AssociatedMenuConfiguration, m.Entity1IntersectAttribute, m.Entity1LogicalName, m.Entity2AssociatedMenuConfiguration, 
m.Entity2IntersectAttribute, m.Entity2LogicalName, m.ExtensionData, m.HasChanged, 
m.IntersectEntityName, m.IntroducedVersion, m.IsCustomizable, m.IsCustomRelationship, 
m.IsManaged, m.IsValidForAdvancedFind, m.MetadataId, m.RelationshipType, 
m.SchemaName, m.SecurityTypes
,
FROM EntityMetadata AS e
INNER JOIN AttributeMetadata a ON e.MetadataId = a.MetadataId
INNER JOIN OneToManyRelationshipMetadata o ON e.MetadataId = o.MetadataId
INNER JOIN ManyToManyRelationshipMetadata m ON e.MetadataId = m.MetadataId

CrmAdo will also support a Where clause containing all the filters that the Dynamics SDK will allow for. In this way you can filter the above sql to only pull back specific entity metadata, and specific attributes / relationships etc as desired.

dazinator commented 10 years ago

Can query entity and attribute metadata but not yet relationship data.