无法找到setIsInProcess()函数定义

时间:2017-10-05 08:14:30

标签: php magento magento2 magento2.1

我正在尝试以编程方式为已经开具发票的订单创建货件,但我无法设法使其正常工作,在正确创建货件的情况下,订单中的所有商品,但订单状态仍然是'处理'而不是'完成'。

我发现装运产品存在问题,因为它们的数量在发货后保持为0。我已经问过这个,没有运气,所以我试图调试Magento核心函数以弄清楚发生了什么,但我找不到定义setIsInProcess()函数的位置。

我搜索过模块销售的所有类别,但没有运气。

有人可以告诉我在哪里可以找到这种方法吗?它由Sales\Order拥有并像$order->setIsInProcess(true)一样使用,但我无法找到function setIsInProcess(....)

我显然也在命令行的所有grep文件中搜索.php

任何线索?????请问我2天就挣扎了!

1 个答案:

答案 0 :(得分:1)

setIsInProcess($value)方法是相应模型的setData('is_in_process', $value)的别名。您可以在父类Magento\Framework\Model\AbstractExtensibleModelMagento\Framework\Model\AbstractModel中找到它的定义。 magic 方法在Magento\Framework\DataObject方法的父类(通常用于所有模型)__call中实现:

/**
 * Set/Get attribute wrapper
 *
 * @param   string $method
 * @param   array $args
 * @return  mixed
 * @throws \Magento\Framework\Exception\LocalizedException
 */
public function __call($method, $args)
{
    switch (substr($method, 0, 3)) {
        case 'get':
            $key = $this->_underscore(substr($method, 3));
            $index = isset($args[0]) ? $args[0] : null;
            return $this->getData($key, $index);
        case 'set':
            $key = $this->_underscore(substr($method, 3));
            $value = isset($args[0]) ? $args[0] : null;
            return $this->setData($key, $value);
        case 'uns':
            $key = $this->_underscore(substr($method, 3));
            return $this->unsetData($key);
        case 'has':
            $key = $this->_underscore(substr($method, 3));
            return isset($this->_data[$key]);
    }
    throw new \Magento\Framework\Exception\LocalizedException(
        new \Magento\Framework\Phrase('Invalid method %1::%2', [get_class($this), $method])
    );
}

magento 1中使用了类似的东西,我建议你阅读this article written by Ryan Street

PS :它只在一个地方使用:第41行Magento\Sales\Model\ResourceModel\Order\Handler\State::check‌​(Order $order)。我认为它与您的问题有关,因为此处订单状态和状态正在变为处理