グリッドコントロールでテーブルバッファを使用して、フォームのtempDBに初めて追加されたリアルタイムで(しかし、永続的であり、その後の追加はその後もうまくいった)。Dynamics AX 2012 - Grid Control linkPhysicalTableInstance to TempTable、最初に挿入されたレコードがグリッドに表示されない、後で正常に表示
ダイナミックコミュニティMSDNのDAX伝説のMartinDrábとBrandon Weiseの助けを借りて問題を解決しましたが、私は他人を助ける場合にはSOに投稿しています。 Dynamics AXのコンテンツをSOに追加することにコミュニティが傷つくと思います。また、物理テーブルがtempDBにどのようにリンクし、フォームのデータソースとの関係についていくつかの学習があります。
オリジナルスレッド:https://community.dynamics.com/ax/f/33/t/225120
問題:
- 私は、Grid Controlを含む、実行時に新しいフォームを生成ウィザードを持っています。
- ウィザードはtempテーブルの1つへの参照をフォームに渡します。このテーブルでは、ランタイムフォームのデータソースinit()メソッドでlinkPhysicalTableInstanceを使用します。
- GridControlには、レコードをtmpテーブル参照に挿入する新しいレコードボタンが追加されています。
- 新しいレコードが正しく参照一時テーブルに保存され、グリッドに表示ランタイムフォームが閉じているときとをリニューアルオープンしたが、すぐに挿入した後、グリッド内のない表示をしています。
- ランタイムフォームが作成された後、レコードが挿入されて閉じられると、後続のランタイムフォームは、再オープンする必要なく、すぐに新しいレコードの挿入を表示します。いくつかのコードスニペット。
なぜこの動作は、データが一時テーブルに挿入されるのは初めてですが、その後の実行時フォームの実行では正常に表示されるのはなぜですか?
args = new Args(formstr(RunTimeFormName));
formRun = classFactory.formRunClass(args);
formRun .parmRuntimeFormsGridTmpDS(sysWizard.ReferenceToWizardsTableTmp()); // Passing a reference for Wizards tmpTable to form
formRun .init();
formRun .run();
formRun .wait();
formRun .detach();
ランタイムフォームのparmDataSourceMethod:上記のように、最初の時間を
void clicked()
{
int64 numRows;
;
// Refresh records loaded in grid DS to ensure correct number of records for setting initial index number
// Note: SomeId is passed in Args() record, its passing fine as is the number of rows count - and replacing with a static value has no effect.
select count(RecId) from ReferenceToWizardsTableTmp
where ReferenceToWizardsTableTmp.SomeId == someId;
numRows = ReferenceToWizardsTableTmp.RecId;
ReferenceToWizardsTableTmp.Comment = "Comment " + int642str(numRows + 1);
ReferenceToWizardsTableTmp.Filename = "";
ReferenceToWizardsTableTmp.someId = someId;
ReferenceToWizardsTableTmp.insert();
element .Task(#TaskF5);
// super();
}
:
public void parmRuntimeFormsGridTmpDS(CommentsGridTmp _ReferenceToWizardsTableTmp)
{
ReferenceToWizardsTableTmp = _ReferenceToWizardsTableTmp;
}
DataSource init() method:
public void init()
{
super();
RuntimeFormsGridTmpDS.linkPhysicalTableInstance(ReferenceToWizardsTableTmp);
}
ランタイムフォームの新規作成]ボタンは、メソッドをクリックし、実行時のフォームの作成
実行時フォームが作成され、レコードが挿入されても表示されません。フォームを再度開くと、挿入されたデータが正常に表示されます。また、フォームを再度開いた後、挿入された新しいレコードがリアルタイムでグリッドに表示されます。 私は元々linkToPhysicalTableと何か関係があり、グリッドフィールドで表示するレコードを探す必要があると想定していました...
ちなみに、より良い回答や説明があれば、気軽に投稿してください。私は初期化するように作用する前にlinkPhysicalTableInstance動作にバッファの参照(delete_from tmptable文が同じ効果を持っており、安価である)、上のSELECT文を実行することにより、私は実用的なソリューションを持っている