CacheLookupについて興味深い質問です
1424 ワード
今日は、COM Business Connectorを介してAxapta 3を呼び出す他のシステムと資材を同期するインタフェースを書きます.0の方法でデータを品目表に挿入し、中間に異常が発生し、トランザクションがロールバックし、再呼び出し時に異常が発生したばかりの品目がすでに存在していることを示すプロンプトが表示されますが、InventTableを表示してもこのレコードは表示されません.selectクエリーでこのレコードをクエリーできます.
資材キャッシュによるものと思われますが、再起動AOSが異常に消失しています.
InventTableのCacheLookup属性はFoundであり、データベースで照会されたレコードがAOSにキャッシュされている限り、次回の照会はAOSに存在する限りデータベースを照会しない.この論理ははっきりしているが、物事のロールバックに遭遇すると面倒で、以下のコードに似ている.
初めてクエリーinventTable Checkを実行すると、データベースにCacheLookupTestレコードがないので、正常に挿入され、inventTable Selectクエリーされ、Foundの論理に従って、今ではこの品目があるのでAOSにキャッシュすべきですが、次はttsabortがコミットではなく物事をロールバックするため、実行後、データベースにCacheLookupTestという品目は表示されませんが、AOSのキャッシュはありますか?それともありませんか?
テストの答えはAxapta 3です.0この場合、この品目はキャッシュされ、AX 2009はこの品目はキャッシュされません.明らかにAX 2009の論理は正常です.
Axapta 3のため.0バージョンが多く、具体的にどのバージョンにこの問題があるのか分からないし、私の環境だけがこの問題があるのか、いずれにしても面白いものなので、記録して調べてください.
資材キャッシュによるものと思われますが、再起動AOSが異常に消失しています.
InventTableのCacheLookup属性はFoundであり、データベースで照会されたレコードがAOSにキャッシュされている限り、次回の照会はAOSに存在する限りデータベースを照会しない.この論理ははっきりしているが、物事のロールバックに遭遇すると面倒で、以下のコードに似ている.
static void CacheLookupTest(Args _args)
{
InventTable inventTable,inventTableCheck,inventTableSelect;
;
ttsbegin;
inventTableCheck = InventTable::find("CacheLookupTest");
if(!inventTableCheck.RecId)
{
inventTable.ItemId = "CacheLookupTest";
inventTable.insert();
}
inventTableSelect = InventTable::find("CacheLookupTest");
ttsabort;
}
初めてクエリーinventTable Checkを実行すると、データベースにCacheLookupTestレコードがないので、正常に挿入され、inventTable Selectクエリーされ、Foundの論理に従って、今ではこの品目があるのでAOSにキャッシュすべきですが、次はttsabortがコミットではなく物事をロールバックするため、実行後、データベースにCacheLookupTestという品目は表示されませんが、AOSのキャッシュはありますか?それともありませんか?
テストの答えはAxapta 3です.0この場合、この品目はキャッシュされ、AX 2009はこの品目はキャッシュされません.明らかにAX 2009の論理は正常です.
Axapta 3のため.0バージョンが多く、具体的にどのバージョンにこの問題があるのか分からないし、私の環境だけがこの問題があるのか、いずれにしても面白いものなので、記録して調べてください.