2012-12-19 6 views
5

Ich habe das InventTable-Formular so geändert, dass die Benutzer die Elemente abhängig vom Status "Gestoppt" im Standardformular für die Bestelleinstellungen filtern können . Sie erhalten eine Liste der "käuflichen" Artikel, "verkaufbaren" Artikel, aller Artikel oder blockierten Artikel zum Kauf oder Verkauf, abhängig von den Werten von zwei Kontrollkästchen.Dynamics AX: Deaktivieren der Datenquelle aus dem Formular im Code, während erweiterte Filter-/Sortieroptionen verwendet werden können

Ich habe die Datenquellen InventItemSalesSetup und InventItemPurchSetup im Code hinzugefügt und sie aktiviert oder deaktiviert sie, wenn der Benutzer ein Kontrollkästchen aktiviert oder deaktiviert.

Alles funktioniert gut, außer wenn eine der Datenquellen deaktiviert ist. Dann funktioniert die Option "Erweiterte Filter/Sortierung" nicht mehr. Ich erhalte den Fehler: "Die Datenquelle ist nicht aktiviert".

Der Fehler stammt von der Methode "saveCueEnabled" des SysQueryForm-Formulars. Wenn es nennt:

if (!CueRun::canSaveQueryAsCue(this.args().caller())) 
    return false; 

Welche Anrufe:

static boolean canSaveQueryAsCue(QueryRun qr) 
{ 
    int numOfDataSources, i; 
    QueryBuildDataSource ds; 
    Query q; 
    Common cursor; 
    ; 

    if (!qr) 
    return false; 

    q = qr.query(); 
    if (!q) 
     return false; 

    numOfDataSources = q.dataSourceCount(); 
    for(i = 1; i <= numOfDataSources; i++) 
    { 
     ds = q.dataSourceNo(i); 
     if(ds.dynalinkCount() > 0) 
      return false; 

     // Check if it is temp 
     cursor = qr.getNo(i); 
     if (cursor.dataSource() && cursor.isTmp()) 
      return false; 
    } 

    return true; 
} 

Wenn es um die Anzahl der Datenquellen in der Abfrage erhält, auch die „dataSourceCount“ Methode der Zählung mit den deaktivierten Datenquellen zurückgibt, und wenn Es ruft die QueryBuildDataSource der deaktivierten Datenquellen in der Schleife ab. Sie erhalten einen leeren DS und es stürzt ab, wenn überprüft wird, ob es sich um eine temporäre Tabelle handelt.

Ich habe das Problem gelöst, indem ich einen zusätzlichen Code auf dem "saveCueEnabled" Code hinzufüge, aber ich frage mich, ob es eine Möglichkeit gibt, die Datenquellen zu aktivieren/deaktivieren, ohne diesen Fehler zu bekommen.

Ich hoffe ich habe mich gut erklärt, danke!

Antwort

4

Die einzige Lösung, die ich finden kann, erfordert, dass Sie canSaveQueryAsQue() ändern.

Dieses Update für die for-Schleife ist einfach und sollte Ihr Problem lösen.

for(i = 1; i <= numOfDataSources; i++) 
{ 
    ds = q.dataSourceNo(i); 
    if(ds && ds.dynalinkCount() > 0) 
     return false; 

    // Check if it is temp 
    cursor = qr.getNo(i); 
    if (cursor.dataSource() && cursor.isTmp()) 
     return false; 
} 

Ich habe diesen Code nicht getestet, aber ich habe ähnlichen Code in anderen Situationen verwendet. Ich hoffe, das hilft!

+0

Ich denke, das sollte funktionieren. Danke, ich werde versuchen, ob ich jemals wieder mit diesem Problem komme. –

0

Die vorgeschlagene Änderung funktioniert nicht wirklich, weil die Variable 'ds' beim Test immer noch 'truthig' ist.

Die folgende scheint zu funktionieren:

for(i = 1; i <= numOfDataSources; i++) 
{ 
    ds = q.dataSourceNo(i); 
    if(ds.enabled() && ds.dynalinkCount() > 0) 
     return false; 

    // Check if it is temp 
    if(ds.enabled()) 
    { 
     cursor = qr.getNo(i); 
     if (cursor.dataSource() && cursor.isTmp()) 
      return false; 
    } 
} 

die ‚.Enabled()‘ Eigenschaft zum Test hinzufügen, können Sie den Code über die Behinderte Datenquellen überspringen, wie verlangt.

Verwandte Themen