Преобразование EntityReference в Entity
кто-нибудь знает, как преобразовать EntityReference в Entity.
protected override void Execute(CodeActivityContext executionContext)
{
[Input("Email")]
[ReferenceTarget("email")]
public InArgument<Entity> EMail { get; set; }
Entity MyEmail = EMail.Get<Entity>(executionContext);
Это дает мне ошибку. Не удается преобразовать это.
3 ответов
самый короткий ответ на ваши вопросы-запросить базу данных для сущности, на которую указывает (ссылается) ссылка на сущность. Я всегда рассматривал ссылки на сущности как (грубый) эквивалент указателей в C++. У него есть адрес к нему (guid), но вам нужно удалить его, чтобы добраться до меда. Вы делаете это, как это.
IOrganizationService organization = ...;
EntityReference reference = ...;
Entity entity = organization.Retrieve(reference.LogicalName, reference.Id,
new ColumnSet("field_1", "field_2", ..., "field_z"));
когда я делаю много преобразования из EntityReference to сущности, Я развертываю метод расширения с необязательным параметром для полей.
public static Entity ActualEntity(this EntityReference reference,
IOrganizationService organization, String[] fields = null)
{
if (fields == null)
return organization.Retrieve(reference.LogicalName, reference.Id,
new ColumnSet(true));
return organization.Retrieve(reference.LogicalName, reference.Id,
new ColumnSet(fields));
}
можно подробнее и сравним EntityReference и сущности.
An EntityReference
- это просто логическое имя, имя и идентификатор объекта. Итак, чтобы получить Entity
, вам просто нужно создать объект, используя свойства EntityReference
.
вот метод расширения, который выполняет это для вас:
public static Entity GetEntity(this EntityReference e)
{
return new Entity(e.LogicalName) { Id = e.Id };
}
не забывайте, что ни один из других атрибутов сущности не будет заполнен. Если вам нужны атрибуты, которые вам нужно запросить для них:
public static Entity GetEntity(this EntityReference e, IOrganizationService service)
{
return service.Retrieve(e.LogicalName, e.Id, new ColumnSet(true));
}
и если вам нравится полевой ответ @Konrad, сделайте его params массив и приятнее называть
public static Entity GetEntity(this EntityReference e,
IOrganizationService service, params String[] fields)
{
return service.Retrieve(e.LogicalName, e.Id, new ColumnSet(fields));
}
Entity и EntityReference разные. The EntityReference является ссылкой для записи, которая содержит идентификатор GUID и логическое имя сущности. Вы должны получить доступ к сущности через guid и логическое имя. Что-то вроде этого:--4-->
service.Retrieve(logicalname, guid, new ColumnSet(columns));