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。
如果您需要任何其他信息,请询问。
你找错了。您正试图按订单增量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必要时实施加入功能
我认为这是一个严重的错误在马根托!
没有发出任何警告??所谓的向后兼容性在哪里?
依赖于此功能的旧扩展无法正常工作,这可能会在中静默发生