2013-03-15 61 views
1

我有一个注册了Update,Order,Post Operation的插件。在插件中,我在salesorderdetail上执行retrievemultiple。我遇到的问题是有3种产品组成了订单,但我从检索操作中返回了5行。我在测试过程中多次添加并删除了相同的产品,我不确定是否这是造成问题的原因。我在想,从订单中删除产品后,它可能会设置一个标志并在之后被删除,但我没有看到状态码或状态码作为属性。为什么它会返回太多的行?Dynamics CRM 2011 - 在salesordersdetail上从retrievemultiple获取太多行

这里是我的代码...

// Set the properties of the QueryExpression object. 
orderDetailQuery.EntityName = "salesorderdetail"; 
orderDetailQuery.ColumnSet = orderDetailColumnSet; 

EntityCollection salesOrderDetail = service.RetrieveMultiple(orderDetailQuery); 

orderProductQuery.EntityName = "product"; 
orderProductQuery.ColumnSet = orderProductColumnSet; 

foreach (var orderDetail in salesOrderDetail.Entities) 
{ 
    if(orderDetail.Attributes.Contains("productid")) 
    { 
     productGuid = ((EntityReference)orderDetail["productid"]).Id; 
     Entity product = service.Retrieve("product", productGuid, orderProductColumnSet); 
     } 
} 

谢谢你的帮助!

回答

1

您发布的代码不会显示您针对特定Order的过滤。

我期望在系统中检索该类型的所有实体。

要筛选,您使用的是QueryByAttribute假设,是沿行添加过滤器:

var query = new QueryByAttribute(); 
query.EntityName = "salesorderdetail"; 
query.AddAttributeValue("orderid", orderId);//orderId is the Id of the parent Order 
orderDetailQuery.EntityName = "salesorderdetail"; 
orderDetailQuery.ColumnSet = orderDetailColumnSet; 
var results = service.RetrieveMultiple(query); 

你限制你的查询只产品为给定的顺序的方式。

+0

嗯,我不知道我在想什么。谢谢!! – Gary 2013-03-18 16:50:55

0

我不确定您的过滤是否已实施。下面是从臀部射击你如何能查询的SalesOrderDetail实体的情况下,获取fieldName1fieldName2字段的值规定,它链接到以便与GUID 的orderId

QueryExpression query = new QueryExpression 
{ 
    EntityName = "salesorderdetail", 
    ColumnSet = new ColumnSet("fieldName1", "fieldName2"), 
    Criteria = new FilterExpression 
    { 
    Conditions = 
    { 
     new ConditionExpression 
     { 
     AttributeName = "orderid", 
     Operator = ConditionOperator.Equal, 
     Values = { orderId } 
     } 
    } 
    } 
};