2016-06-10 9 views
7

Mit Magento2.1.0-rc1 Zweig mit BeispieldatenMagento2: REST API: Sparen Produktbeschreibung pro Speicheransicht funktioniert nicht

Mit REST API catalogProductRepositoryV1 REF: http://devdocs.magento.com/swagger/index.html Get Key von Admin Token API und diesen Schlüssel verwenden in

POST/V1/Produkte

&

PUT/V1/products/{SKU}

mit Parameter sowohl mit einem Parameter versucht, durch eine

  • store_id = 0
  • storeId = 0 folgenden JSON Verwendung

{ 
 
    "saveOptions": "true", 
 
    "product": { 
 
     "name": "Test11_11", 
 
     "sku": "TESTOPP_111", 
 
     "attributeSetId": "15", 
 
     "price": "10", 
 
     "weight": "10", 
 
     "status": "1", 
 
     "visibility": "3", 
 
     "customAttributes": [ 
 
      { 
 
       "attributeCode": "manufacturer", 
 
       "value": "222" 
 
      }, 
 
      { 
 
       "attributeCode": "tax_class_id", 
 
       "value": "0" 
 
      }, 
 
      { 
 
       "attributeCode": "specialPrice", 
 
       "value": "10" 
 
      }, 
 
      { 
 
       "attributeCode": "description", 
 
       "value": "44332211" 
 
      }, 
 
      { 
 
       "attributeCode": "eco_collection", 
 
       "value": "1" 
 
      } 
 
     ], 
 
     "typeId": "simple" 
 
    } 
 
}

nicht unterstützt store_id/storeId Feld, aber die Informationen in Produkt nicht speichern zu speichern, es zu Standardspeicher ID

GET/V1/Produkte haben Parameter speichern StoreID gleiche i mit PUT & POST versucht hatte, aber nicht mit PUT & POST

Antwort

4

nach viel auf Magento2 Debuggen gefunden arbeiten, dass Magento2 keine Funktionalität wie p zum Speichern von Daten aus REST-API hat er StoreID getStore Funktion in Storemanager nur überprüfen, ob Speicher wird in der Sitzung sonst Rückkehr Standard existieren, weshalb alle REST API-Aufrufe in Standardspeicher-ID gespeichert sind

Ich habe über rided Magento \ Store \ Modell \ Storemanager wie nachstehend:

etc/di.xml

<?xml version="1.0"?> 
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> 
    <preference for="Magento\Store\Model\StoreManager" type="Emizentech\MobileAdmin\Model\EmizenStoreManager" /> 
</config> 

vim Modell/EmizenStoreManager.php

<?php 
namespace Emizentech\MobileAdmin\Model; 

use Magento\Store\Api\StoreResolverInterface; 
use Magento\Framework\App\RequestInterface; 

/** 
* @SuppressWarnings(PHPMD.CouplingBetweenObjects) 
*/ 
class EmizenStoreManager extends \Magento\Store\Model\StoreManager 
{ 
     /** 
    * Request instance 
    * 
    * @var \Magento\Framework\App\RequestInterface 
    */ 
    protected $_request; 

     /** 
    * @param \Magento\Store\Api\StoreRepositoryInterface $storeRepository 
    * @param \Magento\Store\Api\GroupRepositoryInterface $groupRepository 
    * @param \Magento\Store\Api\WebsiteRepositoryInterface $websiteRepository 
    * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig 
    * @param StoreResolverInterface $storeResolver 
    * @param \Magento\Framework\Cache\FrontendInterface $cache 
    * @param bool $isSingleStoreAllowed 
    */ 
    public function __construct(
     \Magento\Store\Api\StoreRepositoryInterface $storeRepository, 
     \Magento\Store\Api\GroupRepositoryInterface $groupRepository, 
     \Magento\Store\Api\WebsiteRepositoryInterface $websiteRepository, 
     \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, 
     StoreResolverInterface $storeResolver, 
     \Magento\Framework\Cache\FrontendInterface $cache, 
     RequestInterface $request, 
     $isSingleStoreAllowed = true 
    ) { 
     $this->storeRepository = $storeRepository; 
     $this->websiteRepository = $websiteRepository; 
     $this->groupRepository = $groupRepository; 
     $this->scopeConfig = $scopeConfig; 
     $this->storeResolver = $storeResolver; 
     $this->cache = $cache; 
     $this->_request = $request; 
     $this->isSingleStoreAllowed = $isSingleStoreAllowed; 
    } 
    /** 
    * {@inheritdoc} 
    */ 
    public function getStore($storeId = null) 
    { 

       if($this->_request->isPut() && strlen($this->_request->getParam('storeId'))) 
       { 
         return parent::getStore($this->_request->getParam('storeId')); 
       } 
       return parent::getStore($storeId); 
    } 

} 

in dieser Datei, dass ich überprüfen, ob Art Anfrage ist PUT und URL-Paramater StoreID existieren als Set, das sonst nennen speichern parent :: getStore()

und in REST API PUT Anruf, ich habe hinzugefügt storeId in allen Anfragen, in denen ich müssen Informationen wie StoreID gespeichert werden & es funktioniert wie ein Charme :) für Speicherwerte in Admin ich verwende StoreID = 0 ByDefault für alle Anfragen PUT.

5

Ich bin auf ein ähnliches Szenario gestoßen, wo ich Preise pro Website aktualisieren möchte. Also, um den Preis zu aktualisieren, habe ich

/rest/<store_code>/V1/products/<sku> 

Dies funktioniert gut.

Also ich nehme an, dass Sie dies verwenden können, um Produktdaten pro Geschäft zu aktualisieren.

4

/rest/<store_code>/V1/products/<sku>

Dieses funktioniert, Sie

  • alle
  • Standard

für Geschäftscodes

+1

Dank für diese Antwort nutzen können. Es wurde ein Problem (https://github.com/magento/magento2/issues/4952) gemeldet, aber dies scheint zu helfen. Um Ihre Frage zu verbessern: 'all' ist gleich store_id = 0 (admin), aber 'default' kann variabel sein. Es stimmt, in einer Neuinstallation ist es Standard, aber in Multistore kann dies 'en', 'de', 'fr' usw. sein. –