2013-03-07 14 views
10

Czy ktoś wie, w jaki sposób konwertować EntityReference na Entity.Konwertuj EntityReference na Entity

protected override void Execute(CodeActivityContext executionContext) 
{ 
    [Input("Email")] 
    [ReferenceTarget("email")] 
    public InArgument<Entity> EMail { get; set; } 


    Entity MyEmail = EMail.Get<Entity>(executionContext); 

Daje mi to błąd. Nie można tego przekonwertować.

Odpowiedz

13

Najkrótsza odpowiedź na swoje pytania jest do kwerendy bazy danych dla podmiotu, który zwrócił uwagę (określonych) przez odniesienie podmiotu. Zawsze oglądałem odwołania do encji jako (przybliżone) równoważniki do wskaźników w C++. Ma adres do niego (guid), ale musisz odreagować go, aby dostać się do miodu. Rób tak w ten sposób.

IOrganizationService organization = ...; 
EntityReference reference = ...; 

Entity entity = organization.Retrieve(reference.LogicalName, reference.Id, 
    new ColumnSet("field_1", "field_2", ..., "field_z")); 

Kiedy zrobić dużo konwersji z EntityReference do Podmiot, wdrożyć metodę rozszerzenia z opcjonalnym parametrem dla pola.

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)); 
} 

Można przeczytać i porównać EntityReference i Entity.

13

Numer EntityReference to nazwa logiczna, nazwa i identyfikator obiektu. Aby uzyskać Entity, wystarczy utworzyć obiekt, korzystając z właściwości EntityReference.

Oto metodę rozszerzenia, które wykonuje to za Ciebie:

public static Entity GetEntity(this EntityReference e) 
{ 
    return new Entity(e.LogicalName) { Id = e.Id }; 
} 

nie należy zapominać, że żaden z innych atrybutów jednostki zostaną wypełnione. Jeśli chcesz atrybuty trzeba zapytać o nich:

public static Entity GetEntity(this EntityReference e, IOrganizationService service) 
{ 
    return service.Retrieve(e.LogicalName, e.Id, new ColumnSet(true)); 
} 

A jeśli lubisz @ Konrada polowego odpowiedź, sprawiają, że tablica params i jest ładniejszy zadzwonić

public static Entity GetEntity(this EntityReference e, 
    IOrganizationService service, params String[] fields) 
{ 
    return service.Retrieve(e.LogicalName, e.Id, new ColumnSet(fields)); 
} 
4

jednostki i EntityReference jest inny. Numer EntityReference jest odwołaniem do rekordu, który zawiera identyfikator GUID i nazwę logiczną encji. Musisz uzyskać dostęp do encji za pośrednictwem GUID i logicznej nazwy. Coś takiego:

service.Retrieve(logicalname, guid, new ColumnSet(columns));