0

現在、xml を介して大量のデータをリポジトリに挿入しようとしています (TemplateParser 内で inputFiles を呼び出します)。ただし、単一のレコードがキー制約などのエラーをスローすると、それ以上のレコードは処理されません。不正な行が挿入されないようにデータを消去するのが良いことは理解していますが、テスト環境でデータのサブセットを一貫して制御できないため、外部制約によって参照されるテーブルに一貫したデータがあることを保証できません.

コンテンツ全体をトランザクションでラップすると、レコードが挿入されません。インポート項目でラップすると、テーブルの null 制約のために失敗します (インポート項目は部分的なレコードを挿入しようとします)。各要素を独自のトランザクションでラップしてもエラーはトラップされず、各行が不良行まで挿入されますが、その後は何も挿入されません。

データをリポジトリにインポートする際に、エラー シナリオでの再開を可能にする別の方法はありますか? または、挿入する前に gsa-template 内の制約をチェックする方法はありますか?

参考ファイル

<?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 の場合、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>

このようにして、ファイルが複数回追加された場合、重複のためにエラーをスローするのではなく、既存のレコードを更新します。<update-item>add フラグを true に設定したタグを使用して、同じ動作を行うこともできます。

于 2013-01-23T23:15:27.960 に答える