什么是电商平台的 anonymous cart
可以通过匿名购物车的 `guid` 定位,但需要注意:**LocalStorage 中的值是匿名购物车的 `guid`,通常不是购物车的 `code`**。SAP 官方的 OCC 约定也是:注册用户使用购物车 `code`,匿名用户使用购物车 `GUID` 作为 `{cartId}`。([SAP Help Portal][1]) ## 方法一:在 Backoffice 的购物车列表中搜索 进入 Backoffice 后,通常可以尝试下面的路径: ```text Backoffice → Orders → Carts ``` 不同项目的 Backoffice 导航配置可能略有不同,也可能显示为: ```text Order Management → Carts ``` 进入购物车列表后: 1. 打开高级搜索。 2. 查看搜索条件中是否有 `GUID` 或 `Guid` 字段。 3. 输入: ```text 4ba587d9-b428-4921-97b3-da4cdd53f462 ``` 4. 执行搜索。 这里不要优先把该值填入 `Code` 字段。匿名购物车的 `guid` 和 `code` 是两个不同属性。你在浏览器 LocalStorage 中看到的这个 UUID 形式的值,通常是 OCC 操作匿名购物车时使用的 `guid`。 不过,标准 Backoffice 的购物车高级搜索界面是否显示 `guid`,取决于当前版本、用户权限以及项目对 Backoffice 搜索配置的定制。很多项目的标准界面只暴露: * `code` * `user` * `site` * `store` * `date` * `status` 而没有直接暴露 `guid`。这种情况下,最可靠的做法是先通过 HAC 查出购物车的 `code` 或 `PK`,再回到 Backoffice 搜索。 ## 方法二:在 HAC 中使用 FlexibleSearch 查询 进入: ```text https:///hac ``` 选择: ```text Console → FlexibleSearch ``` 执行下面的查询: ```sql SELECT { c.pk }, { c.code }, { c.guid }, { c.creationtime }, { c.modifiedtime }, { c.user }, { c.site }, { c.store } FROM { Cart AS c } WHERE { c.guid } = '4ba587d9-b428-4921-97b3-da4cdd53f462' ``` SAP Commerce 的 FlexibleSearch 可以直接针对 Item Type 的属性值进行查询,因此用 `{c.guid}` 查找 `Cart` 是最直接的方法。([SAP Help Portal][2]) 为了避免 HAC 某些版本对换行格式显示不友好,也可以使用单行版本: ```sql SELECT {c.pk}, {c.code}, {c.guid}, {c.creationtime}, {c.modifiedtime}, {c.user}, {c.site}, {c.store} FROM {Cart AS c} WHERE {c.guid} = '4ba587d9-b428-4921-97b3-da4cdd53f462' ``` 查询结果中最值得关注的是: | 字段 | 含义 | | -------------- | ------------------------------------ | | `pk` | SAP Commerce 内部主键 | | `code` | Backoffice 中通常更容易搜索的购物车编号 | | `guid` | 匿名购物车通过 OCC 使用的标识 | | `user` | 购物车所属用户的 `PK`,匿名购物车通常属于 anonymous 用户 | | `site` | 所属 Base Site | | `store` | 所属 Base Store | | `creationtime` | 创建时间 | | `modifiedtime` | 最近修改时间 | 拿到 `code` 后,回到: ```text Backoffice → Orders → Carts ``` 使用 `Code` 搜索查询结果中的购物车编号即可。 ## 查询购物车所属用户、站点和商品明细 为了确认查到的确实是浏览器中的那辆购物车,可以执行更完整的查询: ```sql SELECT { c.pk }, { c.code }, { c.guid }, { u.uid }, { s.uid }, { bs.uid }, { c.creationtime }, { c.modifiedtime } FROM { Cart AS c LEFT JOIN User AS u ON { c.user } = { u.pk } LEFT JOIN BaseSite AS s ON { c.site } = { s.pk } LEFT JOIN BaseStore AS bs ON { c.store } = { bs.pk } } WHERE { c.guid } = '4ba587d9-b428-4921-97b3-da4cdd53f462' ``` 匿名购物车的用户通常会显示为: ```text anonymous ``` 再查询购物车中的商品: ```sql SELECT { c.code } AS cartCode, { c.guid } AS cartGuid, { e.entryNumber }, { p.code } AS productCode, { e.quantity }, { e.basePrice }, { e.totalPrice } FROM { Cart AS c JOIN CartEntry AS e ON { e.order } = { c.pk } JOIN Product AS p ON { e.product } = { p.pk } } WHERE { c.guid } = '4ba587d9-b428-4921-97b3-da4cdd53f462' ORDER BY { e.entryNumber } ``` 如果查询结果中的 `productCode` 正是你刚刚加入购物车的商品编号,就能确认这辆购物车没有找错。 ## 查询不到时重点检查什么 ### 1. LocalStorage 里的值可能已经过期 Composable Storefront 会在客户端保存活动购物车标识,但客户端仍然保留该值,并不必然意味着后台数据库中的购物车仍然存在。购物车可能已经因为以下原因被移除: * 执行了购物车清理 CronJob * 测试环境被重置 * 数据库发生刷新 * 购物车被显式删除 * 浏览器保存的是旧环境或旧 Base Site 的数据 ### 2. 当前查看的环境不一致 确认浏览器 Storefront 和 Backoffice、HAC 指向同一套环境。例如: ```text Storefront → Development Backoffice → Staging ``` 这种情况下当然无法找到。 SAP Commerce Cloud 中常见环境包括: * Development * Staging * Production 还需要检查 Storefront OCC 的 `baseUrl` 是否指向你正在查询的 Commerce 实例。 ### 3. 该购物车已经被合并或转换 如果匿名用户随后登录,SAP Commerce 可能执行购物车恢复或合并。此后可能出现: * 原匿名购物车仍然存在 * 原匿名购物车被移除 * 内容合并到登录用户的购物车 * 创建一辆新的登录用户购物车 * 购物车 `code`、所有者或活动状态发生变化 具体行为取决于项目采用的购物车合并策略和自定义实现。 如果用户完成下单,购物车数据通常会转换为订单语义,此时应同时检查 `Order`: ```sql SELECT { o.pk }, { o.code }, { o.guid }, { o.creationtime }, { o.user } FROM { Order AS o } WHERE { o.guid } = '4ba587d9-b428-4921-97b3-da4cdd53f462' ``` 不过,不要假设购物车和最终订单一定保留相同 `guid`。是否沿用或生成新的标识可能受下单流程及项目定制影响。 ### 4. Backoffice 用户没有查看购物车的权限 即使 HAC 能查到,Backoffice 中也可能看不到,原因包括: * 当前 Backoffice 用户缺少 `Cart` 类型的读取权限 * 搜索限制 `SearchRestriction` 隐藏了部分购物车 * Backoffice 的类型权限或导航节点被定制 * 当前角色只能查看订单,不能查看活动购物车 这时可以使用管理员账号验证,或者检查该用户组对以下类型的权限: ```text Cart CartEntry AbstractOrder AbstractOrderEntry ``` ## 最推荐的实际操作路径 直接在 HAC 执行: ```sql SELECT {c.pk}, {c.code}, {c.guid}, {c.creationtime}, {c.modifiedtime} FROM {Cart AS c} WHERE {c.guid} = '4ba587d9-b428-4921-97b3-da4cdd53f462' ``` 查到 `code` 后,再在 Backoffice 的 `Carts` 页面按 `Code` 搜索。 如果该查询返回零条记录,再依次检查: ```text 环境是否一致 → LocalStorage 是否为旧数据 → 是否发生登录后的购物车合并 → 是否已经下单 → 是否被购物车清理任务删除 ``` 从定位效率和准确性来看,**HAC 按 `Cart.guid` 查询是最可靠的入口,Backoffice 更适合在查到 `code` 后查看和操作购物车详情**。 [1]: https://help.sap.com/docs/SAP_COMMERCE_CLOUD_PUBLIC_CLOUD/8684f95315e24f52a22f3d9d16ef3af3/69fd037d06e34149863667df79d8ce8e.html?utm_source=chatgpt.com "OCC API Calls for Anonymous Users" [2]: https://help.sap.com/doc/02d5152884b34821a06408495ba0b771/1905/en-US/de/hybris/platform/jalo/flexiblesearch/FlexibleSearch.html?utm_source=chatgpt.com "FlexibleSearch (hybris Commerce Suite 1905)"