Axapta/Dynamics Ax (EmplTable) に 2 つのデータ ソース (EmplTable と HRMVirtualNetworkTable) を持つフォームがあり、2 番目のデータ ソース (HRMVirtualNetworkTable) は「遅延」リンク タイプで最初のデータ ソースにリンクされています。
リンク タイプを「InnerJoin」に変更せずに、2 番目のデータ ソースに基づいてレコードにフィルターを設定する方法はありますか?
Axapta/Dynamics Ax (EmplTable) に 2 つのデータ ソース (EmplTable と HRMVirtualNetworkTable) を持つフォームがあり、2 番目のデータ ソース (HRMVirtualNetworkTable) は「遅延」リンク タイプで最初のデータ ソースにリンクされています。
リンク タイプを「InnerJoin」に変更せずに、2 番目のデータ ソースに基づいてレコードにフィルターを設定する方法はありますか?
「Delayed」の代わりに「Outer join」を使用し、HRMVirtualNetworkTable でフィールドを検索するときにプログラムで結合モードを変更できます。
このメソッドをクラス SysQuery に追加します。
static void updateJoinMode(QueryBuildDataSource qds)
{
Counter r;
if (qds)
{
qds.joinMode(JoinMode::OuterJoin);
for (r = 1; r <= qds.rangeCount(); r++)
{
if (qds.range(r).value() && qds.range(r).status() == RangeStatus::Open)
{
qds.joinMode(JoinMode::InnerJoin);
break;
}
}
}
}
EmplTable データソースの executeQuery() で:
public void executeQuery()
{;
SysQuery::updateJoinMode(this.queryRun() ? this.queryRun().query().dataSourceTable(tableNum(HRMVirtualNetworkTable)) : this.query().dataSourceTable(tableNum(HRMVirtualNetworkTable)));
super();
}
this.queryRun() が null を返す場合があるため、代わりに this.query() を使用してください。
アップデート:
上記は、外部結合でクエリ フィルターを使用できる AX 2012 以降には関係ないことに注意してください。外部結合で QueryFilter クラスを使用する方法 を参照してください。
これは、QueryBuildDataSourceに参加するか、拡張フィルター(Alt + F3、datasorceを右クリック、1:n、sev \ condary DSを検索)によってプログラムで実行できます。