2017-03-16 51 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