13.07.2008, 14:58 | #1 |
Участник
|
Как пограммно получить имя сущности Lookup-а
CRM 4.
Программно получаю список атрибутов сущности. Если атрибут имеет тип Lookup то нужно получить имя сущности, с которым этот Lookup связан. А вот как это сделать совершенно непонятно. Может кто знает? |
|
14.07.2008, 07:06 | #2 |
CRM
|
Тип сущности что ли?
Ну в поле Lookup кроме как GUID записи хранится еще и название её (поле name) и ObjectTypeCode. А вот получить имя сущности через ObjectTypeCode можно используя методы метобазы http://<yourservername>/mscrmservices/2006/metadataservice.asmx Что-то типа EntityMetadata entityData = crmMetaDataService.RetrieveEntityMetadata(entityName, EntityFlags.EntityOnly);
__________________
MS CRM 3.0/4.0 Sharepoint 2003, MOSS 2007/2010 |
|
14.07.2008, 07:09 | #3 |
CRM
|
Написал для 3ки, не увидев Вашу версию. Но полагаю, что в 4ке аналогично По крайней мере, судя по SDK
__________________
MS CRM 3.0/4.0 Sharepoint 2003, MOSS 2007/2010 |
|
14.07.2008, 13:03 | #4 |
Заноза в заднице
|
Если речь идет об абстрактной сущности метаданных, используя metadataservice, то относительно 4 версии, могу сказать, что данные атрибута типа lookup не содержат сведений о типе связанной сущности. Единственное, в сторону чего я бы покопал в данном случае - так это RelationshipResponce. Поскольку любое лукап поле - это по факту отношение (relationship), то связь атрибутов разных сущностей как раз таки лежит в плоскости установления отношений. Хэлп к SDK содержит всего один пример по этому поводу, в разделе: CreateOneToMany Message (MetadataService), и то этот пример касается программного создания нового отношения.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
17.07.2008, 13:45 | #5 |
Чайный пьяница
|
Получение имени сущщности из полученного аттрибута
Предварительно в проект кидаем Web Reference на MetaDataService
(http://msdn.microsoft.com/en-us/library/cc151043.aspx) Собственно дальше выполнение: //создание экземпляра сервиса метаданных: Код: MetaCRM.MetadataService _metaservice = null; MetaCRM.CrmAuthenticationToken token = new MetaCRM.CrmAuthenticationToken(); token.AuthenticationType = 0; token.OrganizationName = <Your Organization Name>; _metaservice = new MetaCRM.MetadataService(); _metaservice.Url = "http://<You CRM Server>/MSCRMServices/2007/MetadataService.asmx"; _metaservice.CrmAuthenticationTokenValue = token; _metaservice.Credentials = System.Net.CredentialCache.DefaultCredentials; _metaservice.UnsafeAuthenticatedConnectionSharing = true; Код: MetaCRM.RetrieveEntityRequest entityRequest = new MetaCRM.RetrieveEntityRequest(); entityRequest.RetrieveAsIfPublished = true; Код: entityRequest.LogicalName = CRM.EntityName.account.ToString(); Код: entityRequest.EntityItems = MetaCRM.EntityItems.IncludeAttributes; MetaCRM.RetrieveEntityResponse entityResponce = Код: (MetaCRM.RetrieveEntityResponse)_metaservice.Execute(entityRequest); //кодов сущностей лукапов Код: string LookupEntities = string.Empty; foreach (MetaCRM.AttributeMetadata attribut in entityResponce.EntityMetadata.Attributes) if (attribut is MetaCRM.LookupAttributeMetadata) LookupEntities += ((MetaCRM.LookupAttributeMetadata)attribut).Targets[0] + Environment.NewLine; MessageBox.Show(LookupEntities); |
|
18.07.2008, 21:12 | #6 |
Участник
|
Согласен с Likefire - тип entity referenced lookup'ом определяется возможными relationship'ами этого аттрибута (lookup'a). Если надо по факту определить какого типа entity (сушность) referenced by lookup, то это просто lookupItem.typename attribute
|
|
21.07.2008, 18:17 | #7 |
Заноза в заднице
|
2 SanX: ну собственно, приведенный пример, уважаемого a33ik как раз и показывает, как это делается практически.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
|
|