मैगनेटो 2 फ़ील्डसेट.एक्सएलएम; बोली से ऑर्डर करने के लिए फ़ील्ड कॉपी करें


11

मैंने बोली से आदेश बनाने के लिए एक कस्टम मॉडल बनाया है; मैं ऑर्डर करने के लिए उद्धरण कस्टम कोड कॉपी करने के लिए fieldet.xml का उपयोग कर रहा हूं। मैंने मेल खाते फ़ील्ड के साथ बोली और ऑर्डर दोनों में कस्टम कॉलम बनाए हैं। जब ऑर्डर रखा जाता है तो मूल्य कस्टम फ़ील्ड में संग्रहीत किए जाते हैं लेकिन ऑर्डर करने के लिए कॉपी नहीं किया जाता है। नीचे मेरा फ़ील्डसेट .xml है

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="urn:magento:framework:DataObject/etc/fieldset.xsd">
<scope id="global">
    <!--quote convert to order-->
    <fieldset id="sales_convert_quote">            
        <field name="preorder_number">
            <aspect name="to_order" />
        </field>
        <field name="purchase_order_number">
            <aspect name="to_order" />
        </field>
        <field name="reference_number">
            <aspect name="to_order" />
        </field>
    </fieldset>
    <!--quote item convert to order item-->
    <fieldset id="quote_convert_item">
        <field name="preorder_number">
            <aspect name="to_order_item" />
        </field>
        <field name="purchase_order_number">
            <aspect name="to_order_item" />
        </field>
        <field name="reference_number">
            <aspect name="to_order_item" />
        </field>
    </fieldset>
</scope>

मुझे और क्या करने की आवश्यकता है?


क्या आपने कैश साफ़ किया?
मेरियस

हाँ, मैंने कैश और पीढ़ी दोनों को मंजूरी दे दी है, फिर कस्टम फ़ील्ड डेटा भी उद्धरण से ऑर्डर करने के लिए कॉपी नहीं कर रहे हैं
अभिमन्यु सिंह

इसके लिए कोई उपाय
अभिमन्यु सिंह

कृपया उस कोड में <? Xml संस्करण = "1.0";> को जोड़ें। मुझे याद आ रही है
रामकी

जवाबों:


10

आप वर्तमान magento2.1 कोड बेस पर एक नज़र डालें, तो आप देखेंगे कि में moduleName / आदि फ़ोल्डर वहाँ एक है fieldset.xml एक से दूसरे टेबल से जानकारी कॉपी करने के लिए आदेश के साथ। हालाँकि यह काम नहीं करता है। यदि आप करीब से देखते हैं, तो आप यह भी देखेंगे कि पर्यवेक्षक वही सटीक काम करता है। Https://github.com/magento/magento2/issues/5823 पर एक नज़र डालें

उद्धरण * से ऑर्डर करने के लिए * तालिका की प्रतिलिपि बनाने के लिए आपको एक पर्यवेक्षक और / या प्लगइन का उपयोग करना होगा।

अपने कस्टम मॉड्यूल घटनाओं में। Xml जोड़ें

 <event name="sales_model_service_quote_submit_before">
    <observer name="[moduelname]_sales_model_service_quote_submit_before" instance="Company\ModuleName\Observer\SaveOrderBeforeSalesModelQuoteObserver" />
</event>

फिर

<?php

namespace Company\ModuleName\Observer;

use Magento\Framework\Event\ObserverInterface;

class SaveOrderBeforeSalesModelQuoteObserver implements ObserverInterface
{

    /**
     * List of attributes that should be added to an order.
     *
     * @var array
     */
    private $attributes = [
        'field_1_name_here',
        'field_2_name_here',
        'field_...._here'
    ];


    /**

     *
     * @param \Magento\Framework\Event\Observer $observer
     * @return $this
     */
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        /* @var Magento\Sales\Model\Order $order */
        $order = $observer->getEvent()->getData('order');
        /* @var Magento\Quote\Model\Quote $quote */
        $quote = $observer->getEvent()->getData('quote');

        foreach ($this->attributes as $attribute) {
            if ($quote->hasData($attribute)) {
                $order->setData($attribute, $quote->getData($attribute));
            }
        }

        return $this;
    }
}

उद्धरण_आइटम से ऑर्डर_इटेम तक आइटम की प्रतिलिपि बनाने के लिए, मैगेंटो ने सबसे अच्छा पर्यवेक्षक को नौकरी पाने के लिए हटा दिया लगता है sales_convert_quote_item_to_order_item। इस उदाहरण पर एक नज़र डालें जो आपको quot_item से ऑर्डर_इटेम तालिका में फ़ील्ड की प्रतिलिपि बनाने में मदद करनी चाहिए। कस्टम इनपुट फ़ील्ड के साथ किसी उत्पाद को "कार्ट में कैसे जोड़ें" और इसे डेटाबेस में सहेजें?


यदि आपने इसे दूर कर लिया है, तो आप कॉपी सेवा का उपयोग भी कर सकते हैं ...
LM_Fielding

@ एलएम_फिल्डिंग में आप इसे मेरे जवाब में देख सकते हैं कि आप इसे कॉपी सर्विस के साथ कैसे इस्तेमाल कर सकते हैं
वॉच

यह आदेश पते का काम नहीं करता है। बनाया गया आदेश नए ऑर्डर एड्रेस ऑब्जेक्ट के लिए एक नई पंक्ति बनाएगा। मेरे कस्टम डेटा को बाहर निकालने के लिए आईडी 500 के साथ ऑर्डर एड्रेस डाला जाता है, नया ऑर्डर एड्रेस 501 का उपयोग करेगा।
डोनी विबवो

8

रेनॉन स्टीवर्ट के उत्तर से मुझे बहुत मदद मिली लेकिन मैं इसे आधिकारिक मैगनेटो डेवलपर दस्तावेज ( http://devdocs.magento.com/guides/v2.1/ext-best-practices/tutorials/copy-fitets.html ) से सुधार सकता था

अपने कस्टम मॉड्यूल घटनाओं में। Xml जोड़ें:

<event name="sales_model_service_quote_submit_before">
    <observer name="[moduelname]_sales_model_service_quote_submit_before" instance="Company\ModuleName\Observer\SaveOrderBeforeSalesModelQuoteObserver" />
</event>

और saveOrderBeforeSalesModelQuoteObserver.php में:

namespace Company\ModuleName\Observer;

use Magento\Framework\Event\ObserverInterface;

class SaveOrderBeforeSalesModelQuoteObserver implements ObserverInterface
{

    /**
     * @var \Magento\Framework\DataObject\Copy
     */
    protected $objectCopyService;


    /**
     * @param \Magento\Framework\DataObject\Copy $objectCopyService
     */
    public function __construct(
        \Magento\Framework\DataObject\Copy $objectCopyService
    )
    {
        $this->objectCopyService = $objectCopyService;
    }

    /**
     *
     * @param \Magento\Framework\Event\Observer $observer
     * @return $this
     */
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        /* @var Magento\Sales\Model\Order $order */
        $order = $observer->getEvent()->getData('order');
        /* @var Magento\Quote\Model\Quote $quote */
        $quote = $observer->getEvent()->getData('quote');

        $this->objectCopyService->copyFieldsetToTarget('sales_convert_quote', 'to_order', $quote, $order);

        return $this;
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.