Magento - salesOrderShipmentList by order_increment_id

本文关键字:increment id order by salesOrderShipmentList Magento | 更新日期: 2023-09-27 18:22:26

我需要能够通过sales_order_increment_id检索sales_order的sales_order_formation。根据Magento的最终指南,我可以在方法的过滤器中使用order_increment_id作为密钥,但当我这样做时,我会收到一个错误,说明该密钥不受支持。

这是我正在使用的代码:

  // Construct filter.
  var filters = new filters();
  var filterOrderId = new complexFilter
  {
    key = "order_increment_id",
    value = new associativeEntity() { key = "eq", value = orderIcrementId.ToString() }        
  };
  filters.complex_filter = new[] { filterOrderId };
  var shipments = apiService.salesOrderShipmentList(sSessionId, filters);

错误消息:

{"SQLSTATE[42S22]:未找到列:1054"where clause"中的未知列"order_increment_id"}

我可以使用其他过滤器fine(order_id、created_at等),但我确实需要能够使用来自Magento API的salesOrderShipmentList,通过order_increment_id返回sales_order_rshipment。

如果您需要任何其他信息,请询问。

Magento - salesOrderShipmentList by order_increment_id

你找错了。您正试图按订单增量id查找发货,但该值不可用。您的可用值是"order_id"。你必须使用这个。

使用订单的增量id查找订单的id,然后根据该id筛选发货。

private void GetShipments()
    {
        // Create the filter array
        filters theFilters = new filters();
        // get the order's id from its incrementId
        salesOrderEntity theOrder = this.mageObject.MageService.salesOrderInfo(this.mageObject.MageSessionId, this.Session["orderID"] as string);
        // Create the "C#" version of the associative array using a generic list
        List<associativeEntity> theEntities = new List<associativeEntity>
            {
                new associativeEntity { key = "order_id", value = theOrder.order_id } 
            };
        // Make the generic list back into an array
        theFilters.filter = theEntities.ToArray();
        // Here are your sales orders
        salesOrderShipmentEntity[] x =
            this.mageObject.MageService.salesOrderShipmentList(this.mageObject.MageSessionId, theFilters);

我已经5年没有做C#了,但这里需要做的是不要将filterOrderId设置为complex_filter

这是相当于您的代码的PHP:

$filterOrderId = array(
    'key' => "order_increment_id",
    'value' => array("eq" => "100000044")
);
$filters = array(
    'complex_filter' => array($filterOrderId)
);
$client->salesOrderShipmentList($sessionId, $filters);

这会产生相同的错误。以下是一个有效的PHP调用,因此请尝试在C#中重现该数据结构:

$filterOrderId = array(
    'key' => "order_increment_id",
    'value' => array("eq" => "100000044")
);
$filters = array(0 => $filterOrderId);
// or: $filters = array($filterOrderId);
$client->salesOrderShipmentList($sessionId, $filters);

这是有效的。您可以进一步简化filterOrderId,但这不是问题的原因。

$filterOrderId = array(
    'key' => "order_increment_id",
    'value' => "100000044"
);

EDIT:在PHP中也可以直接将filterOrderId传递给salesOrderShipmentList()调用。

$filterOrderId = array(
    'key' => "order_increment_id",
    'value' => "100000044"
);
$client->salesOrderShipmentList($sessionId, $filterOrderId);

您使用的是哪个magento版本?在我的CE 1.6中,还没有实现按订单字段(订单id除外)过滤发货、贷项通知单、发票等。如果你看看Mage_Sales_Model_Resource_Collection_Abstract中的方法joinAttribute(),它是所有发货、贷项通知单等收款的父类,你会看到:

/**
 * Backward compatibility with EAV collection
 *
 * @todo implement join functionality if necessary
 *
 * @param string $alias
 * @param string $attribute
 * @param string $bind
 * @param string $filter
 * @param string $joinType
 * @param int $storeId
 * @return Mage_Sales_Model_Resource_Collection_Abstract
 */
public function joinAttribute($alias, $attribute, $bind, $filter = null, $joinType = 'inner', $storeId = null)
{
    return $this;
}

但不知道,也许在最新的CE 1.6.2中,它已经被修复了。

/***与EAV集合的向后兼容性**@todo必要时实施加入功能

我认为这是一个严重的错误在马根托!

没有发出任何警告??所谓的向后兼容性在哪里?

依赖于此功能的旧扩展无法正常工作,这可能会在中静默发生