2008-12-13 7 views
3

J'ai un formulaire dans Axapta/Dynamics Ax (EmplTable) qui a deux sources de données (EmplTable et HRMVirtualNetworkTable) où la deuxième source de données (HRMVirtualNetworkTable) est liée au premier avec " Retardé "type de lien.Filtrage sur table liée dans Axapta/Dynamics Axe

Existe-t-il un moyen de définir un filtre sur les enregistrements, basé sur la deuxième source de données, sans avoir à changer le type de lien à "InnerJoin"?

Répondre

5

Vous pouvez utiliser "jointure externe" au lieu de " Retardé "puis modifiez le mode de jointure par programmation lorsqu'il y a une recherche de champs sur HRMVirtualNetworkTable.

Ajouter cette méthode à la classe 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; 
      } 
     } 
    } 
} 

Dans le executeQuery() sur le EmplTable DataSource

public void executeQuery() 
{; 
    SysQuery::updateJoinMode(this.queryRun() ? this.queryRun().query().dataSourceTable(tableNum(HRMVirtualNetworkTable)) : this.query().dataSourceTable(tableNum(HRMVirtualNetworkTable)));  
    super(); 
} 

Parfois this.queryRun() return null Il faut donc utiliser this.query() au lieu.

Mise à jour:

Notez que ce qui précède n'est pas pertinent pour AX 2012 et plus tard, où vous pouvez utiliser des filtres de requête dans les jointures externes. Voir How to Use the QueryFilter Class with Outer Joins.

1

Vous pouvez le faire programmaticaly en se joignant QueryBuildDataSource ou par filtre étendu (Alt + F3, clic droit sur datasorce, 1: n et trouver SEV \ condaire DS)

Questions connexes