Преобразование 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);
Это даст мне ошибку. Невозможно преобразовать это.
Ответы
Ответ 1
Самый короткий ответ на ваши вопросы - запросить базу данных для объекта, который указал (ссылается) на ссылку на сущность. Я всегда рассматривал ссылки на сущности как (грубые), эквивалентные указателям на С++. Он получил к нему адрес (guid), но вам нужно снять ссылку, чтобы добраться до меда. Вы делаете это так.
IOrganizationService organization = ...;
EntityReference reference = ...;
Entity entity = organization.Retrieve(reference.LogicalName, reference.Id,
new ColumnSet("field_1", "field_2", ..., "field_z"));
Когда я делаю много преобразований из EntityReference в Entity, я развертываю метод расширения с необязательным параметром для полей.
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 и Entity.
Ответ 2
EntityReference
- это просто логическое имя, имя и идентификатор объекта. Таким образом, чтобы получить Entity
, вам просто нужно создать сущность, используя свойства EntityReference
.
Вот метод расширения, который выполняет это для вас:
public static Entity GetEntity(this EntityReference e)
{
return new Entity(e.LogicalName) { Id = e.Id };
}
Не забывайте, что ни один из других атрибутов объекта не будет заполнен. Если вам нужны атрибуты, вам нужно запросить их:
public static Entity GetEntity(this IOrganizationService service, EntityReference e)
{
return service.Retrieve(e.LogicalName, e.Id, new ColumnSet(true));
}
И если вам нравится ответ @Konrad Field, сделайте его массивом параметров, и это будет приятнее
public static Entity GetEntity(this IOrganizationService service, EntityReference e,
params String[] fields)
{
return service.Retrieve(e.LogicalName, e.Id, new ColumnSet(fields));
}
Ответ 3
Entity и EntityReference различны. EntityReference является ссылкой для записи, содержащей GUID и логическое имя объекта. Вы должны получить доступ к объекту через руководство и логическое имя. Что-то вроде этого:
service.Retrieve(logicalname, guid, new ColumnSet(columns));