2013-10-16 84 views
0

已知實體: 團隊,用戶。這些之間的關係是N:N。通過N:N關係中的多個ID獲取實體

問題: 如何查找屬於指定團隊的用戶(使用給定的ID列表)。

PS。 我發現如何處理單個團隊,但不知道如何處理團隊名單?

var team_id = ... 
QueryExpression query = new QueryExpression("user"); 

// setting up relation between teams and users 
Relationship rel = new Relationship(); 
rel.SchemaName = "new_teams_users"; 

RelationshipQueryCollection relatedEntity = new RelationshipQueryCollection(); 
relatedEntity.Add(rel, query); 

RetrieveRequest request = new RetrieveRequest(); 
request.RelatedEntitiesQuery = relatedEntity; 
request.ColumnSet = new ColumnSet(new string[] {"id"}); 

request.Target = new EntityReference { Id = team_id, LogicalName = "new_team" }; 

// Results: List of users by team id. 
RetrieveResponse response = (RetrieveResponse)CrmService.Execute(request); 
+0

您是否正在查詢標準CRM「用戶」和「團隊」實體或自定義實體?您示例中的架構名稱具有指示自定義關係的'new_'前綴。另外,在crm中沒有'user'實體。用戶存儲在名爲'systemuser'的實體中。 '用戶'只是顯示名稱。 – MarioZG

+0

這只是一個例子。拼寫沒有太大意義。在現實生活中,我們使用標準實體(「產品」)和自定義實體(「new_facility」)。應該在產品和設施之間建立關係。 –

回答

3

建立在相交實體上的QueryExpression會幫助你。例如,我使用產品和競爭對手N:N關係

QueryExpression qe = new QueryExpression() 
{ 
    EntityName = "competitorproduct", //this name can be get from N:N rel properties (Relationship form, Relationship Entity Name field) 
    ColumnSet = new ColumnSet(true), 
}; 

qe.Criteria.AddCondition(
    "competitorid", 
    ConditionOperator.In, 
    new object[] { "GUID1", "GUID2"}); 

//Below is optional - if you need some details of entity, add LinkEntity object. This example adds all fields from product entity 
LinkEntity lePorduct = new LinkEntity("competitorproduct", "product", "productid", "productid", JoinOperator.Inner); 
lePorduct.Columns = new ColumnSet(true); 
qe.LinkEntities.Add(lePorduct); 
+1

完美。這有用,謝謝。 –

0

你會讓你的主要實體的交集實體,以便在您的例子這將是「TeamMembership」的標準將針對隨後屬性「SystemUserId」進行設置。

爲了得到球隊更多的信息,你需要給球隊實體作爲鏈接實體添加到您的查詢像這樣

LinkEntity TeamLink = new LinkEntity(); 
      TeamLink .EntityAlias = "TeamLink "; 
      TeamLink .JoinOperator = JoinOperator.Inner; 
      TeamLink .LinkFromEntityName = "teammembership"; 
      TeamLink .LinkFromAttributeName = "teamid"; 
      TeamLink .LinkToEntityName = "team"; 
      TeamLink .LinkToAttributeName = "teamid"; 

然後,您可以帶回什麼都想要列和獲取數據了。

+0

謝謝。但這似乎並不奏效。 –

+0

除此之外的其他信息無法正常工作?它是否提供了錯誤,或者您只是沒有收到任何數據?這應該工作我已經做了類似的查詢產品 –

+0

我認爲它不會工作,因爲沒有實體具有「teamid」屬性。但我看到你與交叉點實體的觀點。那麼如何創建「團隊成員」交集實體? –