2009-06-15 14 views
2

Magento API経由で製品をアップロードしていますが、フロントエンドに表示されません。私はバックエンドに入り、それらを開き、変更何も、製品を保存し、それが表示されます。Magento APIアップロードされた製品がフロントエンドに表示されない - バックエンドで再保存されない限り、

理由は何ですか?私はバックエンドでそれを保存する行為を想定し、DBにいくつかの余分なフラグを保存している、私はちょうど何を知らない。 @ 0120。ここではコードですが、私はバックエンドのインターフェイスが私にプロンプ​​トを表示するので、私は何かが欠けているとは思わない、その後私は製品のオープン。

public void Import(Product product) 
     { 
      var mageProduct = new catalogProductCreateEntity(); 
      mageProduct.name = product.Name; 
      mageProduct.description = product.Description; 
      mageProduct.price = product.Price.ToString(); 
      mageProduct.short_description = product.ShortDescription; 
      mageProduct.description = product.Description; 
      mageProduct.status = "1"; 
      mageProduct.weight = "0"; 
      mageProduct.tax_class_id = "2"; 

      mageProduct.gift_message_available = "0"; 


      var additionalattributes = new associativeEntity[4]; 

      var entity = new associativeEntity(); 
      entity.key = "ship_price"; 
      entity.value = product.PostageCost; 
      additionalattributes[0] = entity; 

      entity = new associativeEntity(); 
      entity.key = "depth_cm"; 
      entity.value = product.Depth; 
      additionalattributes[1] = entity; 

      entity = new associativeEntity(); 
      entity.key = "height_cm"; 
      entity.value = product.Height; 
      additionalattributes[2] = entity; 

      entity = new associativeEntity(); 
      entity.key = "width_cm"; 
      entity.value = product.Width; 
      additionalattributes[3] = entity; 

      mageProduct.additional_attributes = additionalattributes; 

      _m.catalogProductCreate(MageSessionProvider.GetSession(), "simple", "26", product.SKU, mageProduct); 

      var stock = new catalogInventoryStockItemUpdateEntity(); 
      stock.manage_stock = 0; 
      stock.qty = "0"; 

      _m.catalogInventoryStockItemUpdate(MageSessionProvider.GetSession(), product.SKU, stock); 
      Console.WriteLine(product.Name + " imported"); 
     } 
+0

ポストあなたの新製品をアップロードコード。それがなければ、あなたが重要な属性を欠いているかどうかを知ることは不可能です。 –

+0

コードは – Dan

答えて

3

私は何かがMagentoのに挿入された例をたくさん見てきましたが、手動でデータベース、またはAPIを介して、中に保存されたときに、何らかの理由で、デフォルト値に設定されている、という欠落した属性を持つことになりますMagento UI。 UIはデフォルト値を適切に設定していますが、APIやデータベースの挿入は属性を設定しません。

だから、あなたの場合には、デバッグの私の最初の行は

  1. 「アップロード」[原文](どのようなAPIメソッドあなたがAPIを持つ製品を使用している?それとも、カスタムAPIを使用しているだろうか? )
  2. は、その製品
  3. 保存その製品
  4. 差分#2、#4
  5. の属性値のスナップショットを取るMagentoのUI
  6. を経由して、製品の属性値のスナップショットを取ります
  7. あなたの[sic]この方法は、#4中に存在する任意の属性を設定し、「アップロード」ことを確認しなく#2

Magentoのは、データベースの柔軟性ではなくクエリに最適化Entity Attribute Valueモデリング方式を使用します。簡単に言えば、次のクエリを実行して、基本的な製品属性値を取得できます。

[3455]のすべてのインスタンスをデータベースの製品IDに置き換えたいとします。このIDは、Magento Admin UIのプロウードのURLを調べることで取得できます。クエリーのWHERE句なしで実行することはできますが、デフォルトのインデックス作成はこのユースケースに対して最適化されていません。データベースサイズに応じてクエリが遅くなります。

SELECT eav_attribute.frontend_label, eav_attribute.attribute_code, 
catalog_product_entity_varchar.value 
FROM catalog_product_entity 
LEFT JOIN catalog_product_entity_varchar ON catalog_product_entity.entity_id = catalog_product_entity_varchar.entity_id 
LEFT JOIN eav_attribute on catalog_product_entity_varchar.attribute_id = eav_attribute.attribute_id 
WHERE catalog_product_entity.entity_id = 3455 

UNION 

SELECT eav_attribute.frontend_label, eav_attribute.attribute_code, 
catalog_product_entity_text.value 
FROM catalog_product_entity 
LEFT JOIN catalog_product_entity_text ON catalog_product_entity.entity_id = catalog_product_entity_text.entity_id 
LEFT JOIN eav_attribute on catalog_product_entity_text.attribute_id = eav_attribute.attribute_id 
WHERE catalog_product_entity.entity_id = 3455 

UNION 

SELECT eav_attribute.frontend_label, eav_attribute.attribute_code, 
catalog_product_entity_datetime.value 
FROM catalog_product_entity 
LEFT JOIN catalog_product_entity_datetime ON catalog_product_entity.entity_id = catalog_product_entity_datetime.entity_id 
LEFT JOIN eav_attribute on catalog_product_entity_datetime.attribute_id = eav_attribute.attribute_id 
WHERE catalog_product_entity.entity_id = 3455 

UNION 

SELECT eav_attribute.frontend_label, eav_attribute.attribute_code, 
catalog_product_entity_decimal.value 
FROM catalog_product_entity 
LEFT JOIN catalog_product_entity_decimal ON catalog_product_entity.entity_id = catalog_product_entity_decimal.entity_id 
LEFT JOIN eav_attribute on catalog_product_entity_decimal.attribute_id = eav_attribute.attribute_id 
WHERE catalog_product_entity.entity_id = 3455 

UNION 

SELECT eav_attribute.frontend_label, eav_attribute.attribute_code, 
catalog_product_entity_gallery.value 
FROM catalog_product_entity 
LEFT JOIN catalog_product_entity_gallery ON catalog_product_entity.entity_id = catalog_product_entity_gallery.entity_id 
LEFT JOIN eav_attribute on catalog_product_entity_gallery.attribute_id = eav_attribute.attribute_id 
WHERE catalog_product_entity.entity_id = 3455 

UNION 

SELECT eav_attribute.frontend_label, eav_attribute.attribute_code, 
catalog_product_entity_int.value 
FROM catalog_product_entity 
LEFT JOIN catalog_product_entity_int ON catalog_product_entity.entity_id = catalog_product_entity_int.entity_id 
LEFT JOIN eav_attribute on catalog_product_entity_int.attribute_id = eav_attribute.attribute_id 
WHERE catalog_product_entity.entity_id = 3455; 
+0

に掲載されていますありがとうアラン!これを投稿するのは非常に親切です。これは非常にイライラしています。あなたが言うことをやり直し、結果​​を戻してください。 – Dan

+1

私はあなたのSQLを使って空の文字列で設定された余分なプロパティを比較しました。だから私はそれらのすべてを設定します。そして、それは効果があるように見えませんでした。 wendで私はmageProduct.websites = new [] {"base"}を設定しました。 – Dan

1

は、「私は空の文字列で設定されたかなりの数の余分な性質は。だから私はそれらのすべてを設定する場所が比較とするために、あなたのSQLを使用していました。そして、それは効果を持っていないようでした。でそれは=新しい[] {「ベース」} mageProduct.websitesを設定する私に煮詰め終了; - 午後2" 時12分にダン・6月16日

おかげでダン!これは私のために働いた。クラスコードのサンプルでは、​​mageProduct.websites = new [] {"0"};私はそれをmageProduct.websites = new [] {"base"}に変更しました。それは動作します。

1

このページは最も役立ちました。 CSVインポートを実行しているときに、 _product_websitesを追加して、インポートされた各製品のベースに設定されていることを確認しなければなりませんでした。また、is_in_stockのフィールドが1に設定されていることを確認してください。その後、正常にインポートされていることがわかりました。

私のために働いた最小フィールドのリストは以下のとおりです。 SKU、 はmsrp_enabled _store、 _attribute_set、 _type、 _category、 _root_category、 説明、 msrp_display_actual_price_type、 名、 SHORT_DESCRIPTION、 数量、 is_in_stock、 状況、 tax_class_id、 可視性、 価格、 重量、 _produ ct_websites

サンプルレコード:

ku,_store,_attribute_set,_type,_category,_root_category,description,msrp_display_actual_price_type,msrp_enabled,name,short_description,status,tax_class_id,visibility,price,weight,_product_websites,qty,is_in_stock 
CC0003,,Default,simple,Specialist Therapeutics,Products,Conn Test #3,Use config,Use config,Conn Test #3,ConnTest,1,0,4,0,1,base,3000,1 
関連する問題