通过gsa模板将数据插入atg sql,错误时恢复

通过gsa模板将数据插入atg sql,错误时恢复,atg,Atg,我目前正试图通过xml(在TemplateParser中调用inputFiles)将大量数据插入我的存储库。但是,当单个记录抛出错误(如键约束)时,将不会处理更多的记录。我知道清理数据以便不插入坏行是很好的,但是因为我无法在测试环境中一致地控制我们的数据子集,所以我不能保证外部约束引用的表将具有一致的数据 如果将整个内容包装到事务中,则不会插入任何记录;如果使用导入项将其包装,则由于表上的null约束而失败(导入项尝试插入部分记录)。将每个元素包装到它自己的事务中不会捕获错误,它会将每一行插入到

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

如果将整个内容包装到事务中,则不会插入任何记录;如果使用导入项将其包装,则由于表上的null约束而失败(导入项尝试插入部分记录)。将每个元素包装到它自己的事务中不会捕获错误,它会将每一行插入到坏行中,但在坏行之后不会插入任何内容

在将数据导入存储库时,是否有另一种方法允许错误情况下恢复?还是在插入前检查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>

据我所知,如果不重载内部ATG方法,就不可能做到这一点。然而,我确实发现,将数据插入到存储库中会更容易处理坏数据、重复数据等。。。如果您在更新期间显式设置了项描述符,而不是允许存储库执行此操作

因此,在上述示例中,如果vendorSku的id字段为skuItem,则insert语句可以修改为:

<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>

这样,如果文件被多次添加,它将更新现有记录,而不是因为重复而抛出错误。对于相同的行为,还可以使用添加标志设置为true的
标记