Magento - список продажOrderShipmentList по order_increment_id - PullRequest
0 голосов
/ 03 февраля 2012

Мне нужно иметь возможность получить sales_order_shipment для sales_order по sales_order_increment_id. Согласно Полному руководству по 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 Неизвестный столбец 'order_increment_id' в 'предложении where'"}

Я могу нормально использовать другие фильтры (order_id, create_at и т. Д.), Но мне действительно нужно иметь возможность вернуть sales_order_shipment по order_increment_id, используя salesOrderShipmentList из API Magento.

Если вам нужна дополнительная информация, пожалуйста, спросите.

Ответы [ 4 ]

2 голосов
/ 28 февраля 2012

Вы ошибаетесь. Вы пытаетесь просмотреть отгрузки по номеру приращения заказа, но это значение недоступно. Ваше доступное значение - "order_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);
1 голос
/ 03 февраля 2012

Я не делал C # в течение 5 лет, но вот что вам нужно сделать, это не устанавливать 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"
);

РЕДАКТИРОВАТЬ: В PHP также работает непосредственная передача filterOrderId на вызов salesOrderShipmentList().

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

$client->salesOrderShipmentList($sessionId, $filterOrderId);
0 голосов
/ 19 марта 2012

/ ** * Обратная совместимость с коллекцией EAV * * @todo реализует функциональность объединения при необходимости

Я думаю, что это серьезная ошибка в magento!

Не выдает никакого предупреждения ??Где находится так называемая обратная совместимость?

Старые расширения, основанные на этой функции, работают неправильно, и это может произойти тихо

0 голосов
/ 03 февраля 2012

Какую версию magento вы используете?В моем CE 1.6 фильтрация отгрузок, кредитных нот, счетов-фактур и т. Д. По полям из заказа (кроме идентификатора заказа) еще не реализована.Если вы посмотрите на метод joinAttribute() в Mage_Sales_Model_Resource_Collection_Abstract, который является родительским классом для всех отправлений, кредитных нот и т. Д., Вы увидите:

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

Не знаю, может быть, в последнем CE1.6.2 уже исправлено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...