web-dev-qa-db-ja.com

EntityReferenceをエンティティに変換する

EntityReferenceをEntityに変換する方法を知っている人はいますか。

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


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

これは私にエラーを与えます。これは変換できません。

10
hello B

質問に対する最短の答えは、エンティティ参照によって指摘された(参照された)エンティティをデータベースに照会することです。私は常にエンティティ参照をC++のポインタと(大まかに)同等であると見なしてきました。それはそれにアドレス(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));
}

詳細を読んで、 EntityReferenceEntity を比較できます。

16

EntityReferenceは、エンティティの論理名、名前、およびIDです。したがって、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のフィールドの回答が気に入った場合は、それをparams配列にすると、呼び出す方が適切です。

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

EntityとEntityReferenceは異なります。 EntityReference は、GUIDとエンティティの論理名を含むレコードの参照です。GUIDと論理名を介してエンティティにアクセスする必要があります。次のようなものです。それ:

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