ম্যাজেন্টো 2 ফিল্ডসেট.এক্সএমএল; অর্ডার থেকে উদ্ধৃতি ক্ষেত্রগুলি অনুলিপি করুন


11

উদ্ধৃতি থেকে শৃঙ্খলা তৈরি করতে আমি একটি কাস্টম মডেল তৈরি করেছি; অর্ডার করতে উদ্ধৃতি কাস্টম কোডগুলি অনুলিপি করতে ফিল্ডসেট.এক্সএমএল ব্যবহার করছি। আমি মিলের ক্ষেত্রগুলির সাথে উদ্ধৃতি এবং ক্রম দুটিতে কাস্টম কলাম তৈরি করেছি। অর্ডার স্থাপন করা হলে মানগুলি উদ্ধৃতি কাস্টম ক্ষেত্রগুলিতে সংরক্ষণ করা হয় তবে অর্ডার করতে অনুলিপি করা হয় না। নীচে আমার ফিল্ডসেট.এক্সএমএল রয়েছে

<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

আপনি যদি বর্তমান ম্যাজেন্টো ২.১ কোড বেসটি একবার খেয়াল করেন তবে লক্ষ্য করবেন যে মডিউলনাম / ইত্যাদি ফোল্ডারে একটি ফিল্ডসেট.এক্সএমএল রয়েছে যাতে এক টেবিল থেকে অন্য টেবিলে তথ্য অনুলিপি করতে হয় command তবে এটি কাজ করে না। আপনি যদি ঘনিষ্ঠভাবে নজর রাখেন তবে আপনি লক্ষ্য করবেন যে পর্যবেক্ষক রয়েছেন যা একই সঠিক কাজটি করে। 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। এই উদাহরণটি দেখুন যা আপনার উদ্ধৃতি_তেম থেকে অর্ডার_াইটেম সারণীতে ফিল্ড অনুলিপি করতে সহায়তা করবে। কাস্টম ইনপুট ক্ষেত্র সহ একটি পণ্য "কীভাবে যুক্ত করুন" এবং এটি ডেটাবেসে সংরক্ষণ করবেন?


যদি আপনি এ পর্যন্ত
পৌঁছে গেছেন

@ এলএম_ফিল্ডিং করে আপনি আমার উত্তরটিতে এটি দেখতে পারেন যে কীভাবে আপনি অনুলিপি পরিষেবার মাধ্যমে এটি ব্যবহার করতে পারেন
ওয়ার্ক

এটি অর্ডার ঠিকানার কাজ করে না। তৈরি করা অর্ডার একটি নতুন অর্ডার ঠিকানা বস্তুর জন্য একটি নতুন সারি তৈরি করবে। অসাধারণর জন্য আমার কাস্টম ডেটা 500 আইডি সহ ঠিকানা অর্ডার করতে isোকানো হয়েছে, নতুন আদেশটি 501 ঠিকানা ব্যবহার করবে
ডনি উইবোও

8

রেনন স্টুয়ার্টের উত্তর আমাকে অনেক সাহায্য করেছিল তবে আমি অফিসিয়াল ম্যাজেন্টো বিকাশকারী ডকুমেন্টেশন ( http://devdocs.magento.com/guides/v2.1/ext-best-practices/tutorials/copy-fieldsets.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>

এবং সেভআর্ডারবাটারফরস সেলসমোডেলকোটিওবেসারভার.এফপি:

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;
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.