Пример #1
0
        private EntityReference FindFilter(Guid idMessage, string primaryEntity, string secondaryEntity)
        {
            QueryExpression query = new QueryExpression()
            {
                NoLock = true,

                TopCount = 2,

                EntityName = SdkMessageFilter.EntityLogicalName,

                ColumnSet = ColumnSetInstances.AllColumns,

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(SdkMessageFilter.Schema.Attributes.sdkmessageid,            ConditionOperator.Equal, idMessage),
                        new ConditionExpression(SdkMessageFilter.Schema.Attributes.primaryobjecttypecode,   ConditionOperator.Equal, primaryEntity),
                        new ConditionExpression(SdkMessageFilter.Schema.Attributes.secondaryobjecttypecode, ConditionOperator.Equal, secondaryEntity),
                    },
                },
            };

            var coll = _service.RetrieveMultiple(query).Entities;

            return(coll.Count == 1 ? coll.Select(e => e.ToEntityReference()).SingleOrDefault() : null);
        }
        private PluginAssembly FindAssembly(string name)
        {
            QueryExpression query = new QueryExpression()
            {
                NoLock = true,

                TopCount = 2,

                EntityName = PluginAssembly.EntityLogicalName,

                ColumnSet = new ColumnSet(GetAttributes(_service)),

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(PluginAssembly.Schema.Attributes.ishidden, ConditionOperator.Equal, false),
                        new ConditionExpression(PluginAssembly.Schema.Attributes.name,     ConditionOperator.Equal, name),
                    },
                },
            };

            var coll = _service.RetrieveMultiple(query).Entities;

            return(coll.Count == 1 ? coll.Select(e => e.ToEntity <PluginAssembly>()).SingleOrDefault() : null);
        }
        /// <summary>
        /// Получение веб-ресурса по его идентификатору
        /// </summary>
        /// <param name="resourceId"></param>
        /// <returns></returns>
        private WebResource GetById(Guid resourceId, ColumnSet columnSet)
        {
            QueryExpression query = new QueryExpression()
            {
                NoLock = true,

                TopCount = 2,

                EntityName = WebResource.EntityLogicalName,

                ColumnSet = columnSet ?? ColumnSetInstances.AllColumns,

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(WebResource.Schema.Attributes.webresourceid, ConditionOperator.Equal, resourceId)
                    },
                },
            };

            var coll = _service.RetrieveMultiple(query).Entities;

            return(coll.Count == 1 ? coll.Select(e => e.ToEntity <WebResource>()).SingleOrDefault() : null);
        }
        public TeamTemplate FindByName(string name, ColumnSet columnSet)
        {
            var query = new QueryExpression()
            {
                NoLock = true,

                TopCount = 1,

                EntityName = TeamTemplate.EntityLogicalName,

                ColumnSet = columnSet ?? ColumnSetInstances.None,

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(TeamTemplate.Schema.Attributes.teamtemplatename, ConditionOperator.Equal, name),
                    },
                },
            };

            var collection = _service.RetrieveMultiple(query);

            return(collection.Entities.Select(e => e.ToEntity <TeamTemplate>()).FirstOrDefault());
        }
        private SdkMessage FindMessage(string name)
        {
            QueryExpression query = new QueryExpression()
            {
                NoLock = true,

                TopCount = 2,

                ColumnSet = new ColumnSet(true),

                EntityName = SdkMessage.EntityLogicalName,

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(SdkMessage.Schema.Attributes.name, ConditionOperator.Equal, name),
                    },
                },
            };

            var coll = _service.RetrieveMultiple(query).Entities;

            return(coll.Count == 1 ? coll.Select(e => e.ToEntity <SdkMessage>()).SingleOrDefault() : null);
        }
Пример #6
0
        public PluginType FindTypeByFullName(string name, string assemblyName, string versionString, string cultureString, string publicKeyTokenString, ColumnSet columnSet)
        {
            QueryExpression query = new QueryExpression()
            {
                NoLock = true,

                TopCount = 2,

                EntityName = PluginType.EntityLogicalName,

                ColumnSet = columnSet ?? new ColumnSet(true),

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(PluginType.Schema.Attributes.name,           ConditionOperator.Equal, name),

                        new ConditionExpression(PluginType.Schema.Attributes.assemblyname,   ConditionOperator.Equal, assemblyName),
                        new ConditionExpression(PluginType.Schema.Attributes.version,        ConditionOperator.Equal, versionString),
                        new ConditionExpression(PluginType.Schema.Attributes.culture,        ConditionOperator.Equal, cultureString),
                        new ConditionExpression(PluginType.Schema.Attributes.publickeytoken, ConditionOperator.Equal, publicKeyTokenString),
                    },
                },
            };

            var coll = _service.RetrieveMultiple(query).Entities;

            return(coll.Count == 1 ? coll.Select(e => e.ToEntity <PluginType>()).SingleOrDefault() : null);
        }
        private SiteMap GetById(Guid idSiteMap, ColumnSet columnSet)
        {
            QueryExpression query = new QueryExpression()
            {
                NoLock = true,

                TopCount = 2,

                EntityName = SiteMap.EntityLogicalName,

                ColumnSet = columnSet ?? new ColumnSet(true),

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(SiteMap.EntityPrimaryIdAttribute, ConditionOperator.Equal, idSiteMap),
                    },
                },
            };

            var coll = _service.RetrieveMultiple(query).Entities;

            return(coll.Count == 1 ? coll.Select(e => e.ToEntity <SiteMap>()).SingleOrDefault() : null);
        }
        private async Task <Entity> GetEntityById(Guid idEntity, ColumnSet columnSet)
        {
            var repository = new SdkMessageFilterRepository(_service);

            var messageFilter = await repository.FindByEntityAndMessageAsync(_entityMetadata.LogicalName, SdkMessage.Instances.RetrieveMultiple, new ColumnSet(false));

            if (messageFilter != null)
            {
                var query = new QueryExpression()
                {
                    NoLock = true,

                    TopCount = 2,

                    EntityName = _entityMetadata.LogicalName,

                    ColumnSet = columnSet,

                    Criteria =
                    {
                        Conditions =
                        {
                            new ConditionExpression(_entityMetadata.PrimaryIdAttribute, ConditionOperator.Equal, idEntity),
                        },
                    },
                };

                try
                {
                    var coll = _service.RetrieveMultiple(query);

                    if (coll.Entities.Count == 1)
                    {
                        return(coll.Entities.First());
                    }
                }
                catch (Exception ex)
                {
                    DTEHelper.WriteExceptionToLog(ex);
                }
            }

            messageFilter = await repository.FindByEntityAndMessageAsync(_entityMetadata.LogicalName, SdkMessage.Instances.Retrieve, new ColumnSet(false));

            if (messageFilter != null)
            {
                try
                {
                    var result = _service.Retrieve(_entityMetadata.LogicalName, idEntity, columnSet);

                    return(result);
                }
                catch (Exception ex)
                {
                    DTEHelper.WriteExceptionToLog(ex);
                }
            }

            return(null);
        }
Пример #9
0
        private Workflow GetById(Guid idWorkflow, ColumnSet columnSet)
        {
            QueryExpression query = new QueryExpression()
            {
                NoLock = true,

                TopCount = 2,

                EntityName = Workflow.EntityLogicalName,

                ColumnSet = columnSet ?? ColumnSetInstances.AllColumns,

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(Workflow.EntityPrimaryIdAttribute, ConditionOperator.Equal, idWorkflow),
                    },
                },
            };

            var coll = _service.RetrieveMultiple(query).Entities;

            return(coll.Count == 1 ? coll.Select(e => e.ToEntity <Workflow>()).SingleOrDefault() : null);
        }
Пример #10
0
        private SdkMessageRequest GetById(Guid idSdkMessageRequest, ColumnSet columnSet)
        {
            QueryExpression query = new QueryExpression()
            {
                NoLock = true,

                TopCount = 2,

                EntityName = SdkMessageRequest.EntityLogicalName,

                ColumnSet = columnSet ?? new ColumnSet(true),

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(SdkMessageRequest.EntityPrimaryIdAttribute, ConditionOperator.Equal, idSdkMessageRequest),
                    },
                },

                LinkEntities =
                {
                    new LinkEntity()
                    {
                        LinkFromEntityName    = SdkMessageRequest.EntityLogicalName,
                        LinkFromAttributeName = SdkMessageRequest.Schema.Attributes.sdkmessagepairid,

                        LinkToEntityName    = SdkMessagePair.EntityLogicalName,
                        LinkToAttributeName = SdkMessagePair.EntityPrimaryIdAttribute,

                        EntityAlias = SdkMessageRequest.Schema.Attributes.sdkmessagepairid,

                        Columns = new ColumnSet(true),

                        LinkEntities =
                        {
                            new LinkEntity()
                            {
                                LinkFromEntityName    = SdkMessagePair.EntityLogicalName,
                                LinkFromAttributeName = SdkMessagePair.Schema.Attributes.sdkmessageid,

                                LinkToEntityName    = SdkMessage.EntityLogicalName,
                                LinkToAttributeName = SdkMessage.EntityPrimaryIdAttribute,

                                EntityAlias = SdkMessageRequest.Schema.Attributes.sdkmessagepairid + "." + SdkMessagePair.Schema.Attributes.sdkmessageid,

                                Columns = new ColumnSet(true),
                            },
                        },
                    }
                },
            };

            var coll = _service.RetrieveMultiple(query).Entities;

            return(coll.Count == 1 ? coll.Select(e => e.ToEntity <SdkMessageRequest>()).SingleOrDefault() : null);
        }
Пример #11
0
        public DisplayString GetByKeyAndLanguage(string key, int langCode, ColumnSet columnSet)
        {
            QueryExpression query = new QueryExpression()
            {
                NoLock = true,

                TopCount = 2,

                EntityName = DisplayString.EntityLogicalName,

                ColumnSet = columnSet ?? new ColumnSet(true),

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(DisplayString.Schema.Attributes.displaystringkey, ConditionOperator.Equal, key),
                        new ConditionExpression(DisplayString.Schema.Attributes.languagecode,     ConditionOperator.Equal, langCode),
                    },
                },
            };

            var coll = _service.RetrieveMultiple(query).Entities;

            return(coll.Count == 1 ? coll.Select(e => e.ToEntity <DisplayString>()).SingleOrDefault() : null);
        }
Пример #12
0
        private SdkMessageProcessingStepSecureConfig GetSecureById(Guid id)
        {
            QueryExpression query = new QueryExpression()
            {
                NoLock = true,

                TopCount = 2,

                EntityName = SdkMessageProcessingStepSecureConfig.EntityLogicalName,

                ColumnSet = ColumnSetInstances.AllColumns,

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(SdkMessageProcessingStepSecureConfig.EntityPrimaryIdAttribute, ConditionOperator.Equal, id),
                    },
                },
            };

            var coll = _service.RetrieveMultiple(query).Entities;

            return(coll.Count == 1 ? coll.Select(e => e.ToEntity <SdkMessageProcessingStepSecureConfig>()).SingleOrDefault() : null);
        }
        public AppModule FindByExactName(string uniqueName, ColumnSet columnSet)
        {
            QueryExpression query = new QueryExpression()
            {
                NoLock = true,

                TopCount = 2,

                EntityName = AppModule.EntityLogicalName,

                ColumnSet = columnSet ?? new ColumnSet(true),

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(AppModule.Schema.Attributes.uniquename, ConditionOperator.Equal, uniqueName),
                    },
                },
            };

            var coll = _service.RetrieveMultiple(query).Entities;

            return(coll.Count == 1 ? coll.Select(e => e.ToEntity <AppModule>()).SingleOrDefault() : null);
        }
Пример #14
0
        internal EntityReference FindUser(string fullname)
        {
            QueryExpression query = new QueryExpression()
            {
                NoLock = true,

                TopCount = 2,

                ColumnSet = ColumnSetInstances.None,

                EntityName = SystemUser.EntityLogicalName,

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(SystemUser.Schema.Attributes.fullname, ConditionOperator.Equal, fullname),
                    },
                },
            };

            var coll = _service.RetrieveMultiple(query).Entities;

            return(coll.Count == 1 ? coll.Select(e => e.ToEntityReference()).SingleOrDefault() : null);
        }
Пример #15
0
        public Role FindRoleByTemplate(Guid roleTemplateId, ColumnSet columnSet)
        {
            QueryExpression query = new QueryExpression()
            {
                NoLock = true,

                TopCount = 2,

                EntityName = Role.EntityLogicalName,

                ColumnSet = columnSet ?? new ColumnSet(true),

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(Role.Schema.Attributes.parentroleid,   ConditionOperator.Null),
                        new ConditionExpression(Role.Schema.Attributes.roletemplateid, ConditionOperator.Equal,roleTemplateId),
                    },
                },
            };

            var coll = _service.RetrieveMultiple(query).Entities;

            return(coll.Count == 1 ? coll.Select(e => e.ToEntity <Role>()).SingleOrDefault() : null);
        }
        public SavedQueryVisualization GetById(Guid idChart, ColumnSet columnSet)
        {
            QueryExpression query = new QueryExpression()
            {
                NoLock = true,

                TopCount = 2,

                EntityName = SavedQueryVisualization.EntityLogicalName,

                ColumnSet = columnSet ?? ColumnSetInstances.AllColumns,

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(SavedQueryVisualization.EntityPrimaryIdAttribute, ConditionOperator.Equal, idChart),
                    },
                },
            };

            var coll = _service.RetrieveMultiple(query).Entities;

            return(coll.Count == 1 ? coll.Select(e => e.ToEntity <SavedQueryVisualization>()).SingleOrDefault() : null);
        }
Пример #17
0
        private Guid?FindRecordAccessTeamId(Guid idRecord, Guid idTeamTemplate)
        {
            if (_teamTemplateCache.ContainsKey(idTeamTemplate))
            {
                var templateTeams = _teamTemplateCache[idTeamTemplate];

                if (templateTeams.ContainsKey(idRecord))
                {
                    return(templateTeams[idRecord]);
                }
            }

            var query = new QueryExpression()
            {
                NoLock = true,

                TopCount = 1,

                EntityName = Team.EntityLogicalName,

                ColumnSet = new ColumnSet(false),

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(Team.Schema.Attributes.regardingobjectid, ConditionOperator.Equal, idRecord),
                        new ConditionExpression(Team.Schema.Attributes.teamtemplateid,    ConditionOperator.Equal, idTeamTemplate),
                    },
                },
            };

            var collection = _service.RetrieveMultiple(query);

            if (collection.Entities.Count == 0)
            {
                return(null);
            }

            StoreRecordAccessGroupCacheValue(idTeamTemplate, idRecord, collection.Entities[0].Id);

            return(collection.Entities[0].Id);
        }
        private Solution GetSolutionById(Guid id)
        {
            QueryExpression query = new QueryExpression()
            {
                NoLock = true,

                EntityName = Solution.EntityLogicalName,

                ColumnSet = new ColumnSet(true),

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(Solution.EntityPrimaryIdAttribute, ConditionOperator.Equal, id)
                    }
                },
                LinkEntities =
                {
                    new LinkEntity()
                    {
                        JoinOperator = JoinOperator.LeftOuter,

                        EntityAlias = Solution.Schema.Attributes.publisherid,

                        LinkFromEntityName    = Solution.EntityLogicalName,
                        LinkFromAttributeName = Solution.Schema.Attributes.publisherid,

                        LinkToEntityName    = Publisher.EntityLogicalName,
                        LinkToAttributeName = Publisher.EntityPrimaryIdAttribute,

                        Columns = new ColumnSet(Publisher.Schema.Attributes.customizationprefix)
                    }
                },
            };

            var coll = _service.RetrieveMultiple(query).Entities;

            return(coll.Count == 1 ? coll.Select(e => e.ToEntity <Solution>()).SingleOrDefault() : null);
        }
Пример #19
0
        public RibbonCustomization FindApplicationRibbonCustomization()
        {
            QueryExpression query = new QueryExpression()
            {
                NoLock = true,

                TopCount = 2,

                EntityName = RibbonCustomization.EntityLogicalName,

                ColumnSet = ColumnSetInstances.AllColumns,

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(RibbonCustomization.Schema.Attributes.entity, ConditionOperator.Null),
                    },
                },

                LinkEntities =
                {
                    new LinkEntity()
                    {
                        LinkFromEntityName    = RibbonCustomization.EntityLogicalName,
                        LinkFromAttributeName = RibbonCustomization.Schema.Attributes.solutionid,

                        LinkToEntityName    = Solution.Schema.EntityLogicalName,
                        LinkToAttributeName = Solution.Schema.EntityPrimaryIdAttribute,

                        LinkCriteria =
                        {
                            Conditions =
                            {
                                new ConditionExpression(Solution.Schema.Attributes.uniquename, ConditionOperator.Equal, Solution.Schema.InstancesUniqueNames.Active),
                            },
                        },
                    },
                },

                Orders =
                {
                    new OrderExpression(RibbonCustomization.Schema.Attributes.publishedon, OrderType.Ascending),
                },
            };

            var coll = _service.RetrieveMultiple(query).Entities;

            return(coll.Count == 1 ? coll.Select(e => e.ToEntity <RibbonCustomization>()).SingleOrDefault() : null);
        }
        private Publisher GetDefaultPublisher()
        {
            var organization = _service.Retrieve(Organization.EntityLogicalName, _service.ConnectionData.OrganizationId.Value, new ColumnSet(Organization.Schema.Attributes.name)).ToEntity <Organization>();

            var defaultPublisherName = "DefaultPublisher" + organization.Name;

            QueryExpression query = new QueryExpression()
            {
                NoLock = true,

                TopCount = 2,

                EntityName = Publisher.EntityLogicalName,

                ColumnSet = new ColumnSet(true),

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(Publisher.Schema.Attributes.uniquename, ConditionOperator.Equal, defaultPublisherName),
                    },
                },

                Orders =
                {
                    new OrderExpression(Publisher.Schema.Attributes.createdon, OrderType.Ascending),
                },
            };

            var coll = _service.RetrieveMultiple(query).Entities;

            var result = coll.Count == 1 ? coll.Select(e => e.ToEntity <Publisher>()).SingleOrDefault() : null;

            if (result != null)
            {
                return(result);
            }

            query = new QueryExpression()
            {
                NoLock = true,

                TopCount = 2,

                EntityName = Publisher.EntityLogicalName,

                ColumnSet = new ColumnSet(true),

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(Publisher.Schema.Attributes.uniquename, ConditionOperator.Like, "DefaultPublisher%"),
                    },
                },

                Orders =
                {
                    new OrderExpression(Publisher.Schema.Attributes.createdon, OrderType.Ascending),
                },
            };

            return(_service.RetrieveMultiple(query).Entities.Select(e => e.ToEntity <Publisher>()).FirstOrDefault());
        }
Пример #21
0
        private SdkMessageProcessingStepImage GetLinked1(Guid id)
        {
            QueryExpression query = new QueryExpression()
            {
                NoLock = true,

                TopCount = 2,

                EntityName = SdkMessageProcessingStepImage.EntityLogicalName,

                ColumnSet = new ColumnSet(true),

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(SdkMessageProcessingStepImage.EntityPrimaryIdAttribute, ConditionOperator.Equal, id),
                    },
                },

                LinkEntities =
                {
                    new LinkEntity()
                    {
                        JoinOperator = JoinOperator.LeftOuter,

                        LinkFromEntityName    = SdkMessageProcessingStepImage.EntityLogicalName,
                        LinkFromAttributeName = SdkMessageProcessingStepImage.Schema.Attributes.sdkmessageprocessingstepid,

                        LinkToEntityName    = SdkMessageProcessingStep.EntityLogicalName,
                        LinkToAttributeName = SdkMessageProcessingStep.EntityPrimaryIdAttribute,

                        Columns = new ColumnSet(true),

                        EntityAlias = SdkMessageProcessingStepImage.Schema.Attributes.sdkmessageprocessingstepid,

                        LinkEntities =
                        {
                            new LinkEntity()
                            {
                                LinkFromEntityName    = SdkMessageProcessingStep.EntityLogicalName,
                                LinkFromAttributeName = SdkMessageProcessingStep.Schema.Attributes.sdkmessageid,

                                LinkToEntityName    = SdkMessage.EntityLogicalName,
                                LinkToAttributeName = SdkMessage.EntityPrimaryIdAttribute,

                                EntityAlias = SdkMessageProcessingStepImage.Schema.Attributes.sdkmessageprocessingstepid
                                              + "." + SdkMessageProcessingStep.Schema.Attributes.sdkmessageid,

                                JoinOperator = Microsoft.Xrm.Sdk.Query.JoinOperator.LeftOuter,

                                Columns = new ColumnSet(true),
                            },

                            new LinkEntity()
                            {
                                LinkFromEntityName    = SdkMessageProcessingStep.EntityLogicalName,
                                LinkFromAttributeName = SdkMessageProcessingStep.Schema.Attributes.sdkmessagefilterid,

                                LinkToEntityName    = SdkMessageFilter.EntityLogicalName,
                                LinkToAttributeName = SdkMessageFilter.EntityPrimaryIdAttribute,

                                EntityAlias = SdkMessageProcessingStepImage.Schema.Attributes.sdkmessageprocessingstepid
                                              + "." + SdkMessageProcessingStep.Schema.Attributes.sdkmessagefilterid
                                ,

                                JoinOperator = Microsoft.Xrm.Sdk.Query.JoinOperator.LeftOuter,

                                Columns = new ColumnSet(true),

                                LinkEntities =
                                {
                                    new LinkEntity()
                                    {
                                        LinkFromEntityName    = SdkMessageFilter.EntityLogicalName,
                                        LinkFromAttributeName = SdkMessageFilter.Schema.Attributes.sdkmessageid,

                                        LinkToEntityName    = SdkMessage.EntityLogicalName,
                                        LinkToAttributeName = SdkMessage.EntityPrimaryIdAttribute,

                                        EntityAlias = SdkMessageProcessingStepImage.Schema.Attributes.sdkmessageprocessingstepid
                                                      + "." + SdkMessageProcessingStep.Schema.Attributes.sdkmessagefilterid
                                                      + "." + SdkMessageFilter.Schema.Attributes.sdkmessageid
                                        ,

                                        JoinOperator = Microsoft.Xrm.Sdk.Query.JoinOperator.LeftOuter,

                                        Columns = new ColumnSet(true),
                                    },
                                },
                            },
                        },
                    },
                },
            };

            var coll = _service.RetrieveMultiple(query).Entities;

            return(coll.Count == 1 ? coll.Select(e => e.ToEntity <SdkMessageProcessingStepImage>()).SingleOrDefault() : null);
        }
        private async Task <SdkMessageProcessingStep> GetLinked1(Guid id)
        {
            QueryExpression query = new QueryExpression()
            {
                NoLock = true,

                TopCount = 2,

                EntityName = SdkMessageProcessingStep.EntityLogicalName,

                ColumnSet = new ColumnSet(true),

                Criteria =
                {
                    Conditions =
                    {
                        new ConditionExpression(SdkMessageProcessingStep.EntityPrimaryIdAttribute, ConditionOperator.Equal, id),
                    },
                },

                LinkEntities =
                {
                    new LinkEntity()
                    {
                        LinkFromEntityName    = SdkMessageProcessingStep.EntityLogicalName,
                        LinkFromAttributeName = SdkMessageProcessingStep.Schema.Attributes.sdkmessageid,

                        LinkToEntityName    = SdkMessage.EntityLogicalName,
                        LinkToAttributeName = SdkMessage.EntityPrimaryIdAttribute,

                        EntityAlias = SdkMessageProcessingStep.Schema.Attributes.sdkmessageid,

                        JoinOperator = Microsoft.Xrm.Sdk.Query.JoinOperator.LeftOuter,

                        Columns = new ColumnSet(true),
                    },

                    new LinkEntity()
                    {
                        LinkFromEntityName    = SdkMessageProcessingStep.EntityLogicalName,
                        LinkFromAttributeName = SdkMessageProcessingStep.Schema.Attributes.sdkmessagefilterid,

                        LinkToEntityName    = SdkMessageFilter.EntityLogicalName,
                        LinkToAttributeName = SdkMessageFilter.EntityPrimaryIdAttribute,

                        EntityAlias = SdkMessageProcessingStep.Schema.Attributes.sdkmessagefilterid,

                        JoinOperator = Microsoft.Xrm.Sdk.Query.JoinOperator.LeftOuter,

                        Columns = new ColumnSet(true),

                        LinkEntities =
                        {
                            new LinkEntity()
                            {
                                LinkFromEntityName    = SdkMessageFilter.EntityLogicalName,
                                LinkFromAttributeName = SdkMessageFilter.Schema.Attributes.sdkmessageid,

                                LinkToEntityName    = SdkMessage.EntityLogicalName,
                                LinkToAttributeName = SdkMessage.EntityPrimaryIdAttribute,

                                EntityAlias = SdkMessageProcessingStep.Schema.Attributes.sdkmessagefilterid + "." + SdkMessageFilter.Schema.Attributes.sdkmessageid,

                                JoinOperator = Microsoft.Xrm.Sdk.Query.JoinOperator.LeftOuter,

                                Columns = new ColumnSet(true),
                            },
                        },
                    },

                    new LinkEntity()
                    {
                        LinkFromEntityName    = SdkMessageProcessingStep.EntityLogicalName,
                        LinkFromAttributeName = SdkMessageProcessingStep.Schema.Attributes.eventhandler,

                        LinkToEntityName    = PluginType.EntityLogicalName,
                        LinkToAttributeName = PluginType.EntityPrimaryIdAttribute,

                        EntityAlias = SdkMessageProcessingStep.Schema.Attributes.eventhandler
                                      + "." + PluginType.EntityLogicalName
                        ,

                        JoinOperator = Microsoft.Xrm.Sdk.Query.JoinOperator.LeftOuter,

                        Columns = new ColumnSet(true),

                        LinkEntities =
                        {
                            new LinkEntity()
                            {
                                LinkFromEntityName    = PluginType.EntityLogicalName,
                                LinkFromAttributeName = PluginType.Schema.Attributes.pluginassemblyid,

                                LinkToEntityName    = PluginAssembly.EntityLogicalName,
                                LinkToAttributeName = PluginAssembly.EntityPrimaryIdAttribute,

                                EntityAlias = SdkMessageProcessingStep.Schema.Attributes.eventhandler
                                              + "." + PluginType.EntityLogicalName
                                              + "." + PluginType.Schema.Attributes.pluginassemblyid
                                ,

                                JoinOperator = Microsoft.Xrm.Sdk.Query.JoinOperator.LeftOuter,

                                Columns = new ColumnSet(await PluginAssemblyRepository.GetAttributesAsync(_service)),
                            },
                        },
                    },
                },
            };

            var coll = _service.RetrieveMultiple(query).Entities;

            return(coll.Count == 1 ? coll.Select(e => e.ToEntity <SdkMessageProcessingStep>()).SingleOrDefault() : null);
        }