限制Magento SOAP查询的结果集

时间:2012-10-26 13:51:10

标签: php api magento soap

如何为Magento SOAP查询指定最大结果集?

我通过SOAP API查询Magento以获取与给定状态匹配的订单列表。我们有一些远程主机需要太长时间才能返回列表,所以我想限制结果集但是我没有看到这个参数。

$orderListRaw = $proxy -> call ( $sessionId, 'sales_order.list', array ( array ( 'status' => array ( 'in' => $orderstatusarray ) ) ) );

我能够看到我们确实得到了数据(6分钟后),并且已经能够处理超时等,但更愿意强制使用最大结果集。

1 个答案:

答案 0 :(得分:1)

似乎不能使用limit来完成(加上你必须做一些复杂的分页逻辑来获取所有记录,因为你需要知道记录的总数而api没有方法为此)请参阅api通话清单@ http://www.magentocommerce.com/api/soap/sales/salesOrder/sales_order.list.html

但是你可以做的解决方法是使用复杂的过滤器,根据创建日期限制结果集。 (根据订单量调整为小时,天或周)。

此外,由于您使用的是状态类型(假设您排除了更多只是取消订单),您可能需要考虑获取所有订单并在本地跟踪order_id / status(仅处理具有上述顺序的那些)状态)和未进行的剩余部分将是稍后可能需要您注意的订单ID列表

伪代码示例

$params = array(array(
        'filter' => array(
            array(
                'key' => 'status',
                'value' => array(
                    'key' => 'in',
                    'value' => $orderstatusarray,
                ),
            ),
        ),
        'complex_filter' => array(
            array(
                'key' => 'created_at',
                'value' => array(
                    'key' => 'gteq',
                    'value' => '2012-11-25 12:00:00'
                ),
            ),
            array(
                'key' => 'created_at',
                'value' => array(
                    'key' => 'lteq',
                    'value' => '2012-11-26 11:59:59'
                ),
            ),
        )
    ));

    $orderListRaw = $proxy -> call ( $sessionId, 'sales_order.list', $params);

详细了解有关过滤@ http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-8-varien-data-collections

的信息