protected override ICrmOperationResult ExecuteCommand() { var command = DbCommand; var orgService = command.CrmDbConnection.OrganizationService; CrmAdo.EntityMetadataResultSet.DenormalisedMetadataResult[] results = null; var metadataResultSet = new EntityMetadataResultSet(command.CrmDbConnection, Request, Columns); CrmOperationResult commandResponse = null; if (IsSchemaOnly()) { commandResponse = new CrmOperationResult(null, metadataResultSet, false); } else { var response = ExecuteOrganisationRequest(); commandResponse = new CrmOperationResult(response, metadataResultSet, false); var retrieveMultipleResponse = response as RetrieveMetadataChangesResponse; if (retrieveMultipleResponse != null) { // denormalise object graph to results. if (retrieveMultipleResponse.EntityMetadata != null) { var attFactory = new AttributeInfoFactory(); results = (from r in retrieveMultipleResponse.EntityMetadata from a in (r.Attributes ?? Enumerable.Empty <AttributeMetadata>()).DefaultIfEmpty() from o in (r.OneToManyRelationships ?? Enumerable.Empty <OneToManyRelationshipMetadata>()).Union(r.ManyToOneRelationships ?? Enumerable.Empty <OneToManyRelationshipMetadata>()).DefaultIfEmpty() from m in (r.ManyToManyRelationships ?? Enumerable.Empty <ManyToManyRelationshipMetadata>()).DefaultIfEmpty() select new CrmAdo.EntityMetadataResultSet.DenormalisedMetadataResult { EntityMetadata = r, AttributeMetadata = attFactory.Create(a), OneToManyRelationship = o, ManyToManyRelationship = m }).ToArray(); // perform client side joins. if (_clientSideJoinType.HasFlag(ClientSideMetadataJoinTypes.OneToManyRelationshipInnerJoin)) { results = (from r in results where r.OneToManyRelationship != null select r).ToArray(); } metadataResultSet.Results = results; } } } return(commandResponse); }
protected override ICrmOperationResult ExecuteCommand() { var command = DbCommand; var orgService = command.CrmDbConnection.OrganizationService; CrmAdo.EntityMetadataResultSet.DenormalisedMetadataResult[] results = null; var metadataResultSet = new EntityMetadataResultSet(command.CrmDbConnection, Request, Columns); CrmOperationResult commandResponse = null; if (IsSchemaOnly()) { commandResponse = new CrmOperationResult(null, metadataResultSet, false); } else { var response = ExecuteOrganisationRequest(); commandResponse = new CrmOperationResult(response, metadataResultSet, false); var retrieveMultipleResponse = response as RetrieveMetadataChangesResponse; if (retrieveMultipleResponse != null) { // denormalise object graph to results. if (retrieveMultipleResponse.EntityMetadata != null) { var attFactory = new AttributeInfoFactory(); results = (from r in retrieveMultipleResponse.EntityMetadata from a in (r.Attributes ?? Enumerable.Empty<AttributeMetadata>()).DefaultIfEmpty() from o in (r.OneToManyRelationships ?? Enumerable.Empty<OneToManyRelationshipMetadata>()).Union(r.ManyToOneRelationships ?? Enumerable.Empty<OneToManyRelationshipMetadata>()).DefaultIfEmpty() from m in (r.ManyToManyRelationships ?? Enumerable.Empty<ManyToManyRelationshipMetadata>()).DefaultIfEmpty() select new CrmAdo.EntityMetadataResultSet.DenormalisedMetadataResult { EntityMetadata = r, AttributeMetadata = attFactory.Create(a), OneToManyRelationship = o, ManyToManyRelationship = m }).ToArray(); // perform client side joins. if (_clientSideJoinType.HasFlag(ClientSideMetadataJoinTypes.OneToManyRelationshipInnerJoin)) { results = (from r in results where r.OneToManyRelationship != null select r).ToArray(); } metadataResultSet.Results = results; } } } return commandResponse; }