2012-12-19 15 views
5

Ho modificato il modulo InventTable in modo che gli utenti possano filtrare gli elementi in base al loro stato "Interrotto" nel modulo di impostazione delle impostazioni ordine predefinito . Ricevono un elenco degli articoli "acquistabili", "vendibili", di tutti gli articoli o degli articoli bloccati in vendita o in acquisto a seconda dei valori di due checkbox.Dynamics AX: Disabilita origine dati dal modulo nel codice pur essendo in grado di utilizzare l'opzione avanzata filtro/ordinamento

Ho aggiunto le origini dati InventItemSalesSetup e InventItemPurchSetup nel codice e le abilito o disabilitato quando l'utente controlla o deseleziona una casella di controllo.

Tutto funziona correttamente tranne quando una delle origini dati è disabilitata. Quindi l'opzione "Filtro/ordinamento avanzato" smette di funzionare. Ottengo l'errore: "L'origine dati non è abilitata".

L'errore deriva dal metodo "saveCueEnabled" del modulo SysQueryForm. Quando si chiama:

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

che chiama:

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; 
} 

Quando si ottiene il numero di origini dati nella query, il metodo del "dataSourceCount" restituisce anche il conteggio con le fonti di dati per disabili, e quando ottiene il QueryBuildDataSource delle origini dati disabilitate nel ciclo si ottiene un DS vuoto e si blocca quando controlla se si tratta di una tabella temporanea.

Ho risolto il problema aggiungendo un extra se sul codice "saveCueEnabled" ma mi chiedo se c'è un modo per abilitare/disabilitare le origini dati senza ottenere questo errore.

Spero di essermi spiegato bene, grazie!

risposta

4

L'unica soluzione che posso venire richiede di modificare canSaveQueryAsQue().

Questo aggiornamento al ciclo for è semplice e dovrebbe risolvere il problema.

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; 
} 

Non ho testato questo codice, ma ho utilizzato codice simile in altre situazioni. Spero possa aiutare!

+0

Penso che dovrebbe funzionare. Grazie, proverò se mai tornerò con questo problema. –

0

La modifica suggerita in realtà non funziona perché la variabile "ds" è ancora "veritiera" quando testata.

Quanto segue sembra funzionare:

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; 
    } 
} 

Aggiunta del '.enabled()' struttura al test consente il codice per saltare sopra le fonti di dati come richiesto disabili.