1

我有一个注册更新、订购、后期操作的插件。在插件中,我对salesorderdetail 执行retrievemultiple。我遇到的问题是订单中有 3 种产品,但我从检索操作中返回了 5 行。我在测试过程中多次添加和删除相同的产品,我不确定这是否是导致问题的原因。我在想,从订单中删除产品后,它可能会设置一个标志并在之后被删除,但我没有看到状态代码或状态代码作为属性。为什么它会返回太多行?

这是我的代码...

// 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);
      }
 }

感谢您的帮助!!

4

2 回答 2

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);

这样,您将查询限制为仅针对给定订单的产品。

于 2013-03-16T09:55:13.457 回答
0

我不确定您的过滤是否已实施。这是一个关于如何查询SalesOrderDetail实体实例的最新消息,如果它链接到带有 guid orderId的订单,则获取fieldName1fieldName2字段的值。

QueryExpression query = new QueryExpression
{
  EntityName = "salesorderdetail",
  ColumnSet = new ColumnSet("fieldName1", "fieldName2"),
  Criteria = new FilterExpression
  {
    Conditions = 
    {
      new ConditionExpression 
      {
        AttributeName = "orderid",
        Operator = ConditionOperator.Equal,
        Values = { orderId }
      }
    }
  }
};
于 2013-03-16T12:36:56.640 回答