2016-07-08 8 views
0

인 경우 FetchXML의 결과를 강력한 형식의 CRM 엔터티로 변환하는 데 대한이 게시물을 보았습니다.FetchXML 형식의 관련 엔터티가 없습니다. ID가

//CrmEntity is a base class I insert into my generated code 
//to differentiate early-bound classes; you can use Entity 

public static T ToRelatedEntity<T>(this Entity rawEntity, string relatedAlias) 
    where T:CrmEntity, new()   
{ 
    var result = new Entity(new T().LogicalName); 

    foreach(var attribute in rawEntity.Attributes 
           .Where(kvp=>kvp.Key 
              .StartsWith(relatedAlias + "."))) 
    { 
     var newName = attribute.Key.Replace(relatedAlias + ".", String.Empty); 
     result[newName] = ((AliasedValue)attribute.Value).Value; 
    } 
    foreach(var formattedValue in rawEntity.FormattedValues 
            .Where(kvp=>kvp.Key 
               .StartsWith(relatedAlias + "."))) 
    { 
     var newName = formattedValue.Key.Replace(relatedAlias + ".", String.Empty); 
     result.FormattedValues[newName] = formattedValue.Value; 
    } 

    return result.ToEntity<T>(); 
} 

//usage 
var query = new FetchExpression(fetchXml); 
var response = service.RetrieveMultiple(query); 
var contact = response.Entities[0].ToEntity<Contact>(); 
var newCustom = response.Entities[0].ToRelatedEntity<new_custom>("nc"); 

불행히도 관련 엔터티 ID를 검색해야하며 FetchXML 호출 후에 ID가 반환되지 않습니다. 그냥 빈 Guids.

result.ID를 호출하여 상위 엔티티 (cc_case) ID를 가져올 수 있습니다.

하지만 아이들 엔티티는 어떻습니까? ID를 얻으려면 어떻게해야합니까?

편집 : 여기 FetchXML의 예 :

<fetch no-lock="true"> 
<entity name="cc_case" > 
<all-attributes/> 
<filter type="and" > 
    <condition attribute="cc_caseid" operator="equals" > 
    XXXX 
    </condition> 
</filter> 
<link-entity name="cc_contact_account" from="contactid" to="cc_submitterid" link-type="outer" alias="CC_Contact_Account" > 
    <all-attributes/> 
    <link-entity name="account" from="accountid" to="accountid" alias="Account" > 
    <all-attributes/> 
    <link-entity name="contact" from="contactid" to="cc_billingcontactid" alias="Contact" > 
     <all-attributes/> 
    </link-entity> 
    </link-entity> 
</link-entity> 
<link-entity name="cc_patient" from="cc_patientid" to="cc_patientid" link-type="outer" alias="Patient" > 
    <all-attributes/> 
</link-entity> 

그래서, 질문은 당신이 cc_contact_account 및 cc_patient 실체에서 ID를 얻는 방법이다. 엔티티 cc_case에서 ID를 검색 할 수 있지만 링크 엔티티에서는 ID를 검색 할 수 없습니다.

+1

"new_customid"를 찾으셨습니까? fetchxml을 게시 할 수 있습니까? – dynamicallyCRM

+0

"이 게시물"이 무엇입니까? 또한 쿼리를 게시하고 엔터티 모델을 설명하십시오. 제공된 정보를 기반으로이 질문에 대답하기가 어렵습니다. –

답변

0

link-entities의 ID는 AttributeCollection의 별칭 속성으로 사용할 수 있어야합니다. 따라서 result["Patient.cc_patientid"]은 환자 ID를 얻습니다. 이것이 당신의 ToRelatedEntity 함수가하는 일입니다.

cc_contact_account가 many - to - many 관계라면, 나는 id가 전혀 없을 것이라고 생각하지만 위와 같은 별칭 메서드를 사용하여 관계의 다른쪽에있는 id를 얻을 수 있습니다.

+0

수정. 하지만 cc_patientid뿐 아니라 Entity에서 "Id"를 원합니다. 그러나, 나는 그것을 발견했을지도 모른다라고 생각한다. 주어진 속성의 엔티티 참조 유형을 찾으면 ID를 찾을 수 있습니다. 지금까지는 효과가 있습니다. – ja67