Dynamics CRM Odata查询一个实体和一个相关实体 - 但也是第二个实体和第三个实体之间的关系

时间:2015-09-22 15:10:01

标签: dynamics-crm-2011 odata

所以我有3个自定义实体...... 患者,患者诊断和诊断

患者可以通过患者ID的GUID将多个PatientDiagnosis与患者相关联。

PatientDiagnosis记录与诊断实体相关 我正在使用JavaScript查询Dynamics CRM 2011的Web服务。

我想获得一些患者信息和患者诊断列表,但我还想在诊断表中存储一两个字段。

我可以轻松查询Patient和PatientDiagnosis实体...... 但我无法弄清楚如何在同一个查询中将来自PatientDiagnosis的N:1关系与诊断联系起来。

http://........../2011/OrganizationData.svc/new_participantSet(guid'{blah blah blah}')?
$select=new_new_participant_new_participantdiagnosis/new_PrimaryDiagnosis
,new_new_participant_new_participantdiagnosis/new_Active
,new_ReferralSource
,new_Location
,<<<<new_diagnosis/ID>>>>    //I'd like to include Diagnosis entity data too//
&$expand=new_new_participant_new_participantdiagnosis

1 个答案:

答案 0 :(得分:1)

您可以通过两种方式完成此操作。

1)你可以使用扩展参数(又名$ select = [stuff]&amp; $ expand = [stuff]) - 看起来你在这个轨道的正确轨道上

2)您可以在第一个查询的successcallback

中嵌套第二个查询

我更喜欢使用CRMRestKit来简化我的OData调用,所以1看起来像这样:

var filter = 'new_participantid eq guid\'' + id + '\'';
var DiagnosisField, PatientDiagnosisField;
CRMRestKit.ByExpandQuery('PatientDiagnosis',['new_ReferralSource','x/new_Active'], x, filter) <-- x is the exact relationship name
.done(function(data){
    DiagnosisField = data.d.results[0].x.results[0].new_Active;
    PatientDiagnosisField = data.d.results[0].new_ReferralSource;
)

和2看起来像这样:

var DiagnosisField, PatientDiagnosisField;
CRMRestKit.Retrieve('PatientDiagnosis',GUID,[PColumns]).done(function(data){ <--Patient Diagnosis Columns here
    CRMRestKit.Retrieve(['Diagnosis',data.d.DiagnosisLookup.Id,[DColumns]]).done(function(data2){ <-- Diagnosis columns here
        PatientDiagnosisField = data.d.[field from patient diagnosis];
        DiagnosisField = data2.d.[field from diagnosis];
    });
)};