2013-03-07 15 views
10

EntityReference'ı Varlığa Nasıl Dönüştürebilir bilen var mı?EntityReference'ı Varlığa Dönüştürme

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


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

Bu bana bir hata verir. Bu dönüştürülemiyor.

cevap

13

en kısa cevap varlık başvurusu ile (anılacaktır) işaret ediyor varlık için veritabanını sorgulamak etmektir. Ben her zaman varlık referanslarını C++ 'daki işaretlere eşdeğer (kaba) olarak görüntüledim. Bunun adresi var (guid) ama bal almak için referansa başvurmanız gerekiyor. Bunu böyle yaparsın. I için EntityReference den idarenin dönüştürülmesi için bir çok ne zaman

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

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

, I alanları için isteğe bağlı bir parametre ile uzantı yöntemi dağıtın.

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

Daha okuyup EntityReference ve Entity karşılaştırabilirsiniz.

13

Bir EntityReference yalnızca varlığın mantıksal adı, adı ve kimliğidir. Yani bir Entity almak için, yalnızca EntityReference'un özelliklerini kullanarak varlığı oluşturmanız gerekir. İşte

gerçekleştiren bir Uzatma Yöntemi olduğunu için:
public static Entity GetEntity(this EntityReference e) 
{ 
    return new Entity(e.LogicalName) { Id = e.Id }; 
} 

varlığın diğer niteliklerin hiçbiri doldurulur unutmayın.

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

Ve Konrad'ın Saha cevap @ isterseniz, bir params dizisi yapmak ve onu

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

Varlık aramak daha güzel ve: Eğer özelliklerini isterseniz onları sorgulamak gerekir EntityReference farklıdır. EntityReference, GUID ve varlığın mantıksal adını içeren bir kayıt için başvuru kaynağıdır. Varlığı, kılavuz ve mantıksal adla erişmeniz gerekir. Bunun gibi bir şey: sorularınıza

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