13

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

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


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

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

4

3 に答える 3

22

あなたの質問に対する最短の答えは、エンティティ参照によって指摘された (参照された) エンティティをデータベースに照会することです。私は常に、エンティティ参照を 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を比較できます。

于 2013-03-07T18:45:42.270 に答える
14

AnEntityReferenceは、エンティティの論理名、名前、および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));
}
于 2013-03-07T17:50:21.487 に答える
4

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

service.Retrieve(logicalname, guid, new ColumnSet(columns));
于 2013-03-07T17:51:40.927 に答える