Shopware 同步 API 失败 "Duplicate entry..."
Shopware sync API fails with "Duplicate entry..."
我们有一个 运行 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 系统是否需要以某种方式跟踪已经导入的内容以避免这种情况?
我有点纳闷,心想,这个有点破。我还没有深入挖掘,为什么会这样,因为希望有人已经这样做了:-)
所描述的识别实体并更新它的行为在这种情况下只会找到给定的产品并使用给定的有效负载更新它,在您的情况下是新的配置选项。我猜这是有意为之的行为。
您可以:
- 跟踪您 ERP 中的选项,只添加新选项
- 请求现有配置并在您的 ERP 中创建差异
- 删除请求之前该产品的所有条目。我想您可以通过添加删除操作来使用相同的请求来做到这一点。
目前在我的phone,手头没有更深入的例子。希望这已经有所帮助。
我们有一个 运行 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 系统是否需要以某种方式跟踪已经导入的内容以避免这种情况?
我有点纳闷,心想,这个有点破。我还没有深入挖掘,为什么会这样,因为希望有人已经这样做了:-)
所描述的识别实体并更新它的行为在这种情况下只会找到给定的产品并使用给定的有效负载更新它,在您的情况下是新的配置选项。我猜这是有意为之的行为。
您可以:
- 跟踪您 ERP 中的选项,只添加新选项
- 请求现有配置并在您的 ERP 中创建差异
- 删除请求之前该产品的所有条目。我想您可以通过添加删除操作来使用相同的请求来做到这一点。
目前在我的phone,手头没有更深入的例子。希望这已经有所帮助。