2017-03-16 39 views
2

我有動態crm形式的多對多關係Order to System users和From下面的片段我試圖抓住退出這個關係的用戶列表。但是這拋出了異常,附加信息:'SystemUser'實體不包含Name ='salesorderid'的屬性。抓取用戶列表中存在的動態關係crm

任何想法,我在想什麼?

private void grabRelatedUsers(IOrganizationService service){ 
QueryExpression sysUsersQuery = new QueryExpression() 
      { 
       EntityName = "systemuser", 
       ColumnSet = new ColumnSet("systemuserid"), 
       LinkEntities = { 
        new LinkEntity() { 
        LinkFromEntityName = "systemuser", 
        LinkToEntityName = "new_salesorder_systemuser", 
        LinkFromAttributeName = "systemuserid", 
        LinkToAttributeName = "systemuserid", 
        JoinOperator = JoinOperator.Inner 
        }, 
        new LinkEntity() { 
         LinkFromEntityName = "new_salesorder_systemuser", 
         LinkToEntityName = "salesorder", 
         LinkFromAttributeName = "salesorderid", 
         LinkToAttributeName = "salesorderid", 
         JoinOperator = JoinOperator.Inner, 
         LinkCriteria = new FilterExpression() { 
          Conditions = { 
           new ConditionExpression("salesorderid",ConditionOperator.Equal,orderId) 
          } 
         } 
        }, 
        new LinkEntity().AddLink("systemuser","systemuserid","systemuserid") 
        }, 

      }; 

      EntityCollection subGridUsers = service.RetrieveMultiple(sysUsersQuery); 
} 

回答

1

您沒有正確嵌套鏈接的實體。看看fetchXML是爲您的方案中產生:

<fetch version="1.0" output-format="xml-platform" mapping="logical"> 
    <entity name="systemuser"> 
    <attribute name="systemuserid" /> 
    <link-entity name="new_salesorder_systemuser" from="systemuserid" to="systemuserid" visible="false" intersect="true"> 
     <link-entity name="salesorder" from="salesorderid" to="salesorderid" alias="ab"> 
     <filter type="and"> 
      <condition attribute="salesorderid" operator="eq" value="XXXXXXXXXXXXXXX" /> 
     </filter> 
     </link-entity> 
    </link-entity> 
    </entity> 
</fetch> 

正如你可以看到鏈接的實體必須是嵌套和也,mecause這是開箱N個:N的關係,你不能從new_salesorder_systemuser鏈接salesorder,但是來自systemuser。所以QueryExpression應該看起來像:

QueryExpression sysUsersQuery = new QueryExpression() 
{ 
    EntityName = "systemuser", 
    ColumnSet = new ColumnSet("systemuserid"), 
    LinkEntities = { 
     new LinkEntity 
     { 
      LinkFromEntityName = "systemuser", 
      LinkToEntityName = "new_salesorder_systemuser", 
      LinkFromAttributeName = "systemuserid", 
      LinkToAttributeName = "systemuserid", 
      JoinOperator = JoinOperator.Inner, 
      LinkEntities = 
      { 
       new LinkEntity() 
       { 
        EntityAlias = "ab", 
        LinkFromEntityName = "systemuser", 
        LinkToEntityName = "salesorder", 
        LinkFromAttributeName = "salesorderid", 
        LinkToAttributeName = "salesorderid", 
        JoinOperator = JoinOperator.Inner, 
        LinkCriteria = new FilterExpression() 
        { 
         Conditions = { 
          new ConditionExpression("salesorderid",ConditionOperator.Equal, "sfsdf") 
         } 
        } 
       } 
      } 
     } 
    } 
}; 

如果你有問題產生QueryExpressions,根本就使用高級查找,下載fetchXml和使用SDK FetchXmlToQueryExpressionRequest消息,將其轉換爲QueryExpression查詢。這裏有一些樣品: https://msdn.microsoft.com/en-us/library/hh547457.aspx