2013-03-07 13 views
10

Qualcuno sa come convertire EntityReference in Entity.Converti entità entità nell'entità

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


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

Questo mi dà un errore. Non posso convertire questo.

risposta

13

La risposta più breve per le vostre domande è quello di interrogare il database per l'entità che ha sottolineato (di cui) per il riferimento all'entità. Ho sempre visto i riferimenti di entità come (approssimativi) equivalenti ai puntatori in C++. Ha l'indirizzo (guid) ma devi de-referenziarlo per arrivare al miele. Lo fai così.

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

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

Quando faccio un sacco di conversione da EntityReference-Entity, schiero il metodo di estensione con il parametro opzionale per i campi.

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

Si può leggere di più e confrontare EntityReference e Entity.

13

Un EntityReference è solo il nome logico, il nome e l'id dell'entità. Quindi, per ottenere uno Entity, è sufficiente creare l'entità utilizzando le proprietà dello EntityReference.

Ecco un metodo di estensione che esegue che per voi:

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

Non dimenticate che nessuno degli altri attributi dell'entità verrà popolato. Se si desidera che gli attributi è necessario eseguire una query per loro:

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

E se ti piace @ risposta Campo di Konrad, rendono una matrice params ed è più bello chiamare

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

entità e EntityReference è diverso. EntityReference è un riferimento per un record che contiene il GUID e il nome logico dell'entità. Devi ottenere l'accesso dall'entità tramite guida e nome logico. Qualcosa del genere:

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