4

我们正在尝试将商店从 SFCC 迁移到 Shopify,但我们无法从 Salesforce Commerce Cloud(以前的 Demandware)导出产品。

我已经查看了来自 SFCC 的大量文档,但我没有找到简单的产品出口。我想知道我是否会误解他们的术语。

我找到了这个备忘单: https ://documentation.b2c.commercecloud.salesforce.com/DOC2/index.jsp?topic=%2Fcom.demandware.dochelp%2FImportExport%2FImportExportObjectCheatsheet.html&resultof=%22%70%72%6f%64 %75%63%74%22%20%22%65%78%70%6f%72%74%22%20

它指向“目录对象导入/导出” https://documentation.b2c.commercecloud.salesforce.com/DOC2/index.jsp?topic=%2Fcom.demandware.dochelp%2FImportExport%2FatalogObjectImportExport.html

当我尝试导出我的产品时,我错过了导出中的许多产品属性,例如自定义属性。我怎样才能得到这些数据呢?

4

2 回答 2

6

请参考B2C Commerce 导入和导出模式中的 sfcc 目录模式

模式将向您解释目录的结构。目录可以分配产品或目录可以拥有它们。在 SFCC 中,我们通常有一个拥有产品的主目录。拥有意味着在目录中您拥有产品定义和产品的所有相关数据,图像除外。

因此,您需要做的是要求您的客户为您希望迁移的站点的主目录导出。此类活动不需要在 SFCC 中进行编码或创造一些工作。您可以在此通行证后从 Business Manager 中进行:

  • 商家工具 > 产品和目录 > 导入和导出 > 目录导出 - 第 1 步:选择目录

目录导出

请注意,Commerce Cloud 中的产品具有属性继承模型。具有多个尺寸或颜色选项(或其他选项)的产品将使用 Master -> Variant 关系。如果变体自身的属性为空,则变体将从主产品继承属性值。例如,您经常会看到name仅为主产品定义的产品属性。

于 2019-10-11T02:39:18.160 回答
0

我每天通过 C# 作业将所有产品导出到 SQL Server。代码的重要部分如下。

使用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)
    }
}
于 2021-05-06T17:08:18.393 回答