Magento 2 API: एक्सटेंशन विशेषता द्वारा फ़िल्टर ऑर्डर


10

मेरे पास एक्सटेंशन के साथ एक एक्सटेंशन है order itemsजिसे कॉल किया गया है warehouse
मैं इस गुण को " extension_attributes" संपत्ति के अंतर्गत देख सकता हूं ।
मुझे इस विशेषता के आधार पर आदेशों को फ़िल्टर करने की आवश्यकता है। मैं यह कैसे करना है पर कोई दस्तावेज नहीं मिल सकता है।

उदाहरण API प्रतिक्रिया स्निपेट:

[items] => Array(
    [0] => Array(
        [extension_attributes] => Array(
            [warehouse] => MyWarehouse
        )
    )
)

निम्न फ़िल्टर एक आंतरिक त्रुटि उत्पन्न करता है:

searchCriteria[filter_groups][2][filters][0][field]=warehouse,searchCriteria[filter_groups][2][filters][0][value]=mywarehouse,searchCriteria[filter_groups][2][filters][0][condition_type]=eq

गोदाम विशेषता का उपयोग करके मैं किस प्रकार आदेशों को फ़िल्टर कर सकता हूं, इस पर कोई सुझाव API?

- इस सवाल पर अतिरिक्त बिंदु:

इस मामले में, यदि हम फोमन ब्लॉग का अनुसरण करेंगे। तो क्या हम एक्सटेंशन * विशेषता द्वारा संग्रह को फ़िल्टर कर सकते हैं ?

  • इस एक्सटेंशन द्वारा संग्रह फ़िल्टर विशेषता को तेज़ चलाया जाना चाहिए?
  • यदि हम इस एक्सटेंशन विशेषता तालिका को बचाने के लिए कस्टम db टेबल का उपयोग करते हैं तो फ़िल्टर कैसे कर सकते हैं? यह काम करना चाहिए Magento के दृश्यपटल और बैकएंड भी।
  • जहां संशोधन करने की आवश्यकता है और किस वर्ग को किसी भी संदर्भ ब्लॉग को जोड़ने की आवश्यकता है?

इस बिंदु पर अच्छे और प्रतीक्षा / संक्षिप्त उत्तर की प्रतीक्षा करें?


किसी ने जवाब नहीं दिया?
बनीम इंन

1
क्या आपने अपनी विशेषता घोषित की है Module>/etc/extension_attributes.xml?
थियागो लीमा

हां, यार, मैंने ऐसा नहीं किया।
अमित बेरा

2
आपने किया या नहीं? शायद यह मुद्दा है।
थियागो लीमा

जवाबों:


4

आप यह कोशिश कर सकते हैं

/rest/V1/orders?searchCriteria[filter_groups][0][filters][0][field]=warehouse&searchCriteria[filter_groups][0][filters][0][value]=MyWarehouse&searchCriteria[filter_groups][0][filters][0][condition_type]=eq

मेरा यह उत्तर :( नहीं दिया जाता है
अमित बेरा

कृपया संक्षेप में समझाना
अमित बेरा

@AmitBera आपको db के संगत तालिका में विशेषता को सहेजना होगा और तदनुसार एपीआई कॉल करना होगा, मेरे उत्तर की जांच करें।
विवेक कुमार

@AmitBera आप मुझे एक्सटेंशन विशेषताओं के बारे में या API में खोज मापदंड में एक्सटेंशन विशेषताओं का उपयोग करने के बारे में बताने के लिए कह रहे हैं
Agnes

मैं एपीआई में खोज मापदंड के बारे में पूछ रहा हूँ
अमित बेरा

1

SearchCriteria, db / संग्रह के बजाय API प्रतिक्रिया से परिणामों को फ़िल्टर नहीं करता है, अगर extension_attribute में कस्टम विशेषताएँ तालिका में एक स्तंभ के रूप में db में उपलब्ध नहीं हैं, जहाँ से डेटा लाया जा रहा है, तो वह प्रतिक्रिया में नहीं आएगा।

उदाहरण के लिए। मैं निम्नलिखित एपीआई कॉल करता हूं -

 http://example.com/rest/V1/orders?searchCriteria[filter_groups][0][filters][0][field]=random&searchCriteria[filter_groups][0][filters][0][value]=random&searchCriteria[filter_groups][0][filters][0][condition_type]=eq

तब जैसा कि sales_order तालिका में (जिसमें API API प्रतिक्रिया प्राप्त कर रहा है) यादृच्छिक नाम का कोई कॉलम नहीं है, मुझे निम्न त्रुटि मिलती है;

SQLSTATE [42S22]: कॉलम नहीं मिला: 1054 अज्ञात कॉलम में 'यादृच्छिक' 'जहां खंड', क्वेरी था: का चयन करें main_table। * से sales_orderके रूप में main_tableजहां (( random= 'यादृच्छिक'))

इसलिए, यदि आपको एपीआई में अपने कस्टम डेटा को कॉल करना है, तो आपको संबंधित कॉलम में एक नए कॉलम में सेव करना होगा, फिर आप इसे कॉलम नाम का उपयोग करके फिटर फील्ड के रूप में और अपने वांछित मूल्य के रूप में मान सकते हैं, नीचे;

 http://example.com/rest/V1/orders?searchCriteria[filter_groups][0][filters][0][field]=column_name&searchCriteria[filter_groups][0][filters][0][value]=desired_value&searchCriteria[filter_groups][0][filters][0][condition_type]=eq

मैंने खुद इसका परीक्षण किया है, मुझे आशा है कि आपके लिए भी यही काम करेगा।


1

इसे लिखने के समय (Magento 2.2), मुझे नहीं लगता कि एक्सटेंशन विशेषताओं पर फ़िल्टर करने का कोई तरीका है। यद्यपि वे अंतर्निहित संग्रह में मौजूद हैं selectयदि आप एक <join>में परिभाषित करते हैं extension_attributes.xml, तो ऐसा लगता है जैसे आप उस पर फ़िल्टर नहीं कर सकते।

एक्सटेंशन डेवलपर के लिए यह एक एक्सटेंशन विशेषता के मूल्यों पर फ़िल्टर करने का एक तरीका प्रदान करना है। आप अमेज़ॅन भुगतान मॉड्यूल में एक उदाहरण देख सकते हैं: https://github.com/amzn/amazon-payments-magento-2-plugin/blob/master/src/Login/Plugin/Customer.ollection.php#L51

उस प्लगइन में, आप देख सकते हैं कि वे कैसे उम्मीद करते हैं कि तालिका पहले से ही शामिल हो (जैसा कि यह परिभाषित है extension_attributes.xml), लेकिन मैन्युअल रूप से फ़िल्टर लागू करें।


0

@AmitBera मैं इसके लिए 100% निश्चित नहीं हूं और यह आपके सभी प्रश्न का उत्तर नहीं देता है, लेकिन मुझे लगता है कि पहले आपको मापदंड खोजने के लिए JoinProcessor का उपयोग करने की आवश्यकता है और फिर फाइलर का उपयोग करें। आप इसे इस http://devdocs.magento.com/guides/v2.2/extension-dev-guide/searching-with-repositories.html पर कैसे कर सकते हैं

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