2013-03-07 3 views
10

Kann jemand EntityReference in Entity konvertieren.EntityReference in Entity konvertieren

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


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

Dies gibt mir einen Fehler. Kann das nicht konvertieren.

Antwort

13

Die kürzeste Antwort auf Ihre Fragen ist die Datenbank für die Einheit abzufragen, die (bezeichnet) durch das Unternehmen Bezug darauf hingewiesen wird. Ich habe Entity-Referenzen immer als (grob) äquivalent zu den Zeigern in C++ angesehen. Es hat die Adresse dazu (guid), aber Sie müssen es de-referenzieren, um zum Honig zu kommen. Das machst du so.

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

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

Wenn ich eine Menge Umwandlung von EntityReference tue-Entity, stelle ich die Erweiterungsmethode mit optionalen Parametern für die Felder.

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

Sie können mehr lesen und vergleichen EntityReference und Entity.

13

Ein EntityReference ist nur der logische Name, Name und ID der Entität. Um eine Entity zu erhalten, müssen Sie nur die Entität erstellen, die die Eigenschaften der verwendet.

Hier ist eine Erweiterungsmethode, die das führt für Sie:

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

Vergessen Sie nicht, dass keiner der anderen Attribute der Entität bevölkert wird. Wenn Sie die Attribute möchten, müssen Sie für sie fragen müssen:

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

Und wenn Sie @ Konrad Field Antwort mag, es ist ein params Array machen und es ist schöner

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

Entity zu nennen und EntityReference ist anders. Die EntityReference ist eine Referenz für einen Datensatz, der die GUID und den logischen Namen der Entität enthält. Sie müssen die Entität über die GUID und den logischen Namen zugreifen lassen. So etwas Ähnliches:

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