SFCC - Помощь в экспорте всех продуктов из Salesforce Commerce Cloud (Demandware) в XML или CSV
Мы пытаемся перенести магазин из SFCC в Shopify, но у нас возникают проблемы с экспортом продуктов из Salesforce Commerce Cloud (ранее Demandware).
Я просмотрел довольно много документации от SFCC, но я не нашел простого экспорта продукта. Интересно, могу ли я неправильно понять их терминологию.
Он указал мне на "Импорт / экспорт объекта каталога"https://documentation.b2c.commercecloud.salesforce.com/DOC2/index.jsp?topic=%2Fcom.demandware.dochelp%2FImportExport%2FCatalogObjectImportExport.html
Когда я пытаюсь экспортировать свои продукты, мне не хватает многих атрибутов продукта в экспорте, например настраиваемых атрибутов. Как я могу получить эти данные?
2 ответа
См. Схему каталога sfcc из схем импорта и экспорта B2C Commerce:
Схема объяснит вам структуру каталога. Каталогу могут быть присвоены продукты или они могут принадлежать каталогу. В SFCC у нас обычно есть главный каталог, в котором представлены продукты. Владение означает, что в каталоге у вас есть определение продукта и все связанные данные о продукте, кроме изображений.
Следовательно, что вам нужно сделать, это попросить вашего клиента экспортировать в ваш главный каталог сайта, который вы хотите перенести. Такая деятельность не требует программирования или создания рабочих мест в SFCC. Вы можете сделать это из Бизнес-менеджера, выполнив этот проход:
- Инструменты продавца> Продукты и каталоги> Импорт и экспорт> Экспорт каталога - Шаг 1: выберите каталог
Обратите внимание, что продукты в Commerce Cloud имеют модель наследования атрибутов. Продукты, которые имеют несколько вариантов размера или цвета (или другие варианты), будут использовать отношение "Главный" -> "Вариант". Варианты наследуют значения атрибутов из основного продукта, если их собственные атрибуты пусты. Например, вы часто будете видетьname
атрибут определен только для основного продукта.
Я ежедневно экспортирую все продукты на SQL Server через задание C#. Ниже приведены важные части кода.
Используя OCAPI Data ProductSearch, вы сначала создаете запрос, чтобы узнать, сколько всего у вас продуктов. Вы можете получить только 200 продуктов за раз, поэтому вам нужно подсчитать общее количество вызовов API.
var countQuery = "{ \"query\": { \"term_query\": { \"fields\": [\"id\"], \"operator\": \"is_not_null\" }}}";
var countContent = new StringContent(countQuery, Encoding.UTF8, "application/json");
var urlUri = new Uri(url);
var countResponse = await client.PostAsync(urlUri, countContent);
string countResponseString = await countResponse.Content.ReadAsStringAsync();
dynamic countJson = JsonConvert.DeserializeObject(countResponseString);
int records = countJson["total"];
// determine number of times to call api, rounding up.
int calls = (records + (200 - 1)) / 200;
Вытягиваем изделия по 200 за раз в петлю. Мы используем это, чтобы сравнивать список новых и удаленных продуктов каждый день. Также хорошо сравнивать товары с изменением цен. Или просто для экспорта для других целей.
for (var i = 0; i < calls; i++)
{
var query = "{ \"query\": { \"term_query\": { \"fields\": [\"id\"], \"operator\": \"is_not_null\" } },\"select\":\"(**)\",\"expand\":[\"all\"], \"start\": " + i * 200 + ", \"count\": 200 }";
var content = new StringContent(query, Encoding.UTF8, "application/json");
var response = await client.PostAsync(urlUri, content);
string responseString = await response.Content.ReadAsStringAsync();
dynamic json = JsonConvert.DeserializeObject(responseString);
Console.WriteLine("DW products status: " + i * 200 + " records.");
foreach (var obj in json.hits)
{
// Do stuff (create csv, write to db, etc)
}
}