/ / Comment identifier une requête avancée ou des jointures dynamiques à partir de la fenêtre de requête? - axapta, x ++, dynamic-ax-2012, dynamic-ax-2012-r2

Comment identifier une requête avancée ou des jointures dynamiques à partir de la fenêtre de requête? - axapta, x ++, dynamic-ax-2012, dynamic-ax-2012-r2

Dans la fenêtre de requête qui apparaît, si un droit d'utilisateurclique et choisit "1: n" et sélectionne une table, comment peut-on détecter et utiliser cette table? J'ai un bon exemple de travail et des captures d'écran qui devraient montrer ce que je suis en train d'accomplir.

J'ai écrit cet exemple de travail qui extrait les objets de la requête AOT, mais pas la table / plage / valeur jointe de manière dynamique.

static void InventSumQuery(Args _args)
{
Query               query = new Query(queryStr(InventDimPhys));
QueryRun            qr = new QueryRun(query);
QueryBuildRange     queryRange;

DictField           dictField;

int i, n;


if(qr.prompt())
{
for (n=1; n<=query.dataSourceCount(); n++)
{
for (i=1; i<=query.dataSourceNo(n).rangeCount(); i++)
{
queryRange = query.dataSourceNo(n).range(i);

dictField = new dictField(query.dataSourceNo(n).table(), fieldName2id(query.dataSourceNo(n).table(), queryRange.AOTname()));

info(strFmt("%1.%2", tableId2name(dictField.tableid()), dictField.name()));
}
}
}

info("Done");
}

Screen1

Screen2

Screen3

Réponses:

3 pour la réponse № 1

Bien sûr, je trouve ma propre réponse. Les objets de requête sont statiques et le formulaire de requête ne modifie en fait que la requête lorsque vous apportez la modification.

Vous devez donc modifier le code ci-dessus pour:

if(qr.prompt())
{
query = qr.query();

Cela obtient la requête modifiée. L'interrogation avancée n'est en réalité qu'une fonction de la forme elle-même qui modifie finalement l'interrogation.