【问题标题】:Shopware sync API fails with "Duplicate entry..."Shopware 同步 API 因“重复条目...”而失败
【发布时间】:2022-08-24 00:52:29
【问题描述】:

我们有一个正在运行的 Shopware 6.4.7,我们的 ERP 系统正在将产品导入其中。

其中一个 API 请求如下所示:

URL: https://www.example.com/api/_action/sync

additional header:
    single-operation -> 1
    indexing-behavior -> use-queue-indexing

{
    \"write-product-CONF-242732\": {
        \"entity\": \"product\",
        \"action\": \"upsert\",
        \"payload\": [...]
}

有效载荷包含

\"configuratorSettings\": [
    {
        \"optionId\": \"cbdaf832e70950ee5b9135fa6535e9a8\"
    },
    {
        \"optionId\": \"fa6549ff184c43be95d5db190d63ad8f\"
    },
    {
        \"optionId\": \"61f4ff3cdc394b489ff4ba90627bf43a\"
    }
],

并且请求失败并显示可怕的错误消息(由于多种编码)

{\"errors\":[{\"code\":\"0\",\"status\":\"500\",\"title\":\"Internal Server Error\",\"detail\":\"An exception occurred while executing \\u0027INSERT INTO product_configurator_setting (id, version_id, product_id, product_version_id, property_group_option_id, created_at) VALUES (\\u0027|F\\ufffd\\ufffdb\\\\u0022I\\u02bd\\ufffdS\\u0002\\ufffd(\\ufffd;\\u0027,\\u0027\\u000f\\ufffd\\u001c\\ufffd\\ufffdjK\\u00beK\\ufffd\\ufffdu,4%\\u0027,\\u0027\\u0228Z2\\u003C_C\\u0583\\ufffd\\ufffd\\ufffd\\u0001\\ufffdQ\\ufffd\\u0027,\\u0027\\u000f\\ufffd\\u001c\\ufffd\\ufffdjK\\u00beK\\ufffd\\ufffdu,4%\\u0027,\\u0027\\ufffd\\ufffd2\\ufffd\\tP\\ufffd[\\ufffd5\\ufffde5\\ufffd\\u0027,\\u00272022-04-13 11:01:23.653\\u0027);\\u0027:\\n\\nSQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry \\u0027\\xC8\\xA8Z2\\u003C_C\\xD6\\x83\\xE4\\xF4\\xC8\\x01\\x94Q\\xDF-\\x0F\\xA9\\x1C\\xE3\\\\u0027 for key \\u0027uniq.product_configurator_setting.prod_id.vers_id.prop_group_id\\u0027\"}]}

让我为你翻译一下: 键上的重复条目uniq.product_configurator_setting.prod_id.vers_id.prop_group_id

因此,从我的角度来看,Shopware 应该认识到,product_configurator_setting 中的条目已经存在,要么更新它,要么更好地跳过它,因为不需要更新。

所以重要的问题是:

  • 这是预期的行为吗?
  • 这是一个核心错误吗?
  • 我们的 ERP 系统是否需要以某种方式跟踪,为了避免这种情况已经导入了什么?

我有点不解,想,这有点坏了。我还没有深入挖掘,为什么会这样,因为希望有人已经这样做了:-)

    标签: shopware6 shopware6-api


    【解决方案1】:

    在这种情况下,所描述的识别实体并更新它的行为只会找到给定的产品并使用给定的有效负载更新它,在您的情况下是新的配置选项。我猜这是预期的行为。

    您可以:

    • 跟踪 ERP 中的选项并仅添加新选项
    • 请求现有配置并在您的 ERP 中进行差异化
    • 在请求之前删除该产品的所有条目。我想您可以通过添加删除操作来处理相同的请求。

    目前在我的手机上,手头没有更深入的例子。希望这已经有所帮助。

    【讨论】:

      【解决方案2】:

      我同意 Fabian 的观点,因为显然 Shopware 有责任决定是否应该执行更新或插入。

      那么为什么键上的重复条目(由插入引起)而 Shopware 确实应该足够聪明,宁愿执行更新?

      【讨论】:

        猜你喜欢
        • 2019-12-29
        • 1970-01-01
        • 2017-01-08
        • 2013-09-17
        • 2016-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-14
        相关资源
        最近更新 更多