0

我目前正在尝试通过 xml(在 TemplateParser 中调用 inputFiles)将大量数据插入到我的存储库中。但是,当单个记录引发错误(例如键约束)时,将不再处理任何记录。我知道清理数据以免插入错误的行会很好,但是因为我无法在测试环境中始终如一地控制我们的数据子集,所以我不能保证外部约束引用的表将具有一致的数据.

如果我将整个内容包装在事务中,则不会插入任何记录,如果我用 import-items 包装它,则由于表上的空约束(import-items 尝试插入部分记录)而失败。将每个元素包装在它自己的事务中不会捕获错误,它将每一行插入到坏行,但之后什么都没有。

在将数据导入存储库时,是否有另一种方法可以在错误情况下恢复?或者在插入之前检查 gsa 模板中的约束的方法?

参考文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE gsa-template SYSTEM "dynamosystemresource:/atg/dtds/gsa/gsa_1.0.dtd">
<gsa-template>
<transaction>
<add-item item-descriptor="vendorSku">
    <set-property name="skuItem"><![CDATA[0065-OC-OS]]></set-property>
    <set-property name="vendorSkuId"><![CDATA[853-6520]]></set-property>
    <set-property name="vendorItem"><![CDATA[781]]></set-property>
</add-item>
<add-item item-descriptor="vendorSku">
    <set-property name="skuItem"><![CDATA[0189-CRGONET-ONSI]]></set-property>
    <set-property name="vendorSkuId"><![CDATA[8007146]]></set-property>
    <set-property name="vendorItem"><![CDATA[76]]></set-property>
</add-item>
etc..
</gsa-template>
4

1 回答 1

0

据我目前所能找到的,如果不重载内部 ATG 方法,就不可能做到这一点。但是,我确实发现将数据插入存储库对不良数据、重复项等更具弹性……如果您在更新期间明确设置项目描述符而不是允许存储库执行此操作。

所以在上面的例子中,如果 vendorSku 的 id 字段是 skuItem 插入语句可以修改为:

<add-item item-descriptor="vendorSku" id="0189-CRGONET-ONSI">
    <set-property name="vendorSkuId"><![CDATA[8007146]]></set-property>
    <set-property name="vendorItem"><![CDATA[76]]></set-property>
</add-item>

这样,如果文件被多次添加,它将更新现有记录,而不是因为重复而引发错误。您还可以使用<update-item>将 add 标志设置为 true 的标记来实现相同的行为。

于 2013-01-23T23:15:27.960 回答