2009-06-15 8 views
2

Je télécharge des produits via l'API Magento et ils n'apparaissent pas dans le frontend. Je dois aller dans le backend, les ouvrir, changer rien, enregistrer le produit, puis il apparaîtra.API Magento Les produits téléchargés n'apparaissent pas dans le frontend - À moins qu'ils ne soient réenregistrés dans le backend

Une idée pourquoi? Je suppose que l'acte de l'enregistrer dans le backend, est d'enregistrer des drapeaux supplémentaires dans la DB, je ne sais pas quoi.

@Steve Madsen. voici le code, je ne pense pas qu'il me manque quelque chose de crucial, car l'interface backend m'y inciterait, alors j'ouvre le produit.

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

Postez le code qui télécharge votre nouveau produit. Sans cela, il est impossible de savoir s'il vous manque un attribut important. –

+0

code posté ci-dessous – Dan

Répondre

3

J'ai vu beaucoup de cas où quelque chose inséré dans Magento bases de données manuellement ou via l'API, aura un attribut manquant qui, pour une raison quelconque, est réglé sur une valeur par défaut lors de l'enregistrement dans le Magento UI. L'interface utilisateur définit correctement les valeurs par défaut, tandis que l'API ou les insertions de base de données ne définissent pas l'attribut.

Ainsi, dans votre cas, ma première ligne de débogage serait

  1. « Upload » [sic] un produit avec l'API (quelles méthodes API utilisez-vous? Ou êtes-vous à l'aide d'une API personnalisée?)
  2. Prenez un aperçu des valeurs d'attributs pour ce produit
  3. Enregistrer le produit via l'interface utilisateur Magento
  4. Prenez un instantané des valeurs d'attributs pour ce produit
  5. Diff # 2 et # 4
  6. Assurez-vous que votre méthode « téléchargement » [sic] définit tous les attributs qui sont présents dans # 4 mais pas # 2

Magento utilise un schéma de modélisation Entity Attribute Value, qui en optimisant la flexibilité de la base de données plutôt que l'interrogation. Pour résumer, vous pouvez exécuter les requêtes suivantes pour obtenir les valeurs d'attribut de base de votre produit.

Vous devez remplacer chaque instance de [3455] par l'ID de produit de votre base de données. Vous pouvez obtenir cette identification en examinant l'URL d'un proudct dans l'interface d'administration de Magento. Vous pouvez exécuter la requête sans les clauses WHERE, bien que l'indexation par défaut ne soit pas optimisée pour ce cas d'utilisation, et vous obtiendrez une requête lente en fonction de la taille de votre base de données.

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

Merci Alan! C'est très gentil de votre part d'afficher ceci. Cela a été très frustrant, mauvais essayez ce que vous dites et revenez avec les résultats. – Dan

+1

J'ai utilisé votre SQL pour comparer et là où quelques propriétés supplémentaires ont été définies avec des chaînes vides. Donc, je les ai tous mis. Et cela n'a pas semblé avoir un effet. Dans le wend, il m'est arrivé de définir mageProduct.websites = new [] {"base"}; – Dan

1

« Je SQL pour comparer et là où un bon nombre de propriétés supplémentaires qui ont été définies avec des chaînes vides. Je me suis donc tous. Et cela ne semble pas avoir un effet. Dans la fin il s'est résumée à moi définissant mageProduct.websites = new [] {"base"}; - Dan Jun 16 à 14:12 "

Merci Dan! Cela a fonctionné pour moi. L'exemple de code de classe affiche mageProduct.websites = new [] {"0"}; ce qui est incorrect, je l'ai changé en mageProduct.websites = new [] {"base"}; et il fonctionne.

1

Cette page a été très utile. Tout en effectuant l'importation CSV, j'ai trouvé que je devais ajouter: _product_websites et m'assurer qu'il était réglé à la base pour chaque produit importé. Assurez-vous également que vous avez un champ pour is_in_stock mis à 1, après quoi j'ai trouvé que les importations fonctionnaient bien.

La liste des champs minimum qui ont travaillé pour moi: sku, _store, _attribute_set, _type, _category, _root_category, description , msrp_display_actual_price_type, msrp_enabled, nom , short_description, qté , is_in_stock, état, tax_class_id, visibilité , le prix , poids, _produ ct_websites

Exemple d'enregistrement:

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 
Questions connexes