2012-12-19 16 views
5

我修改了InventTable表單,因此用戶可以根據默認訂單設置設置窗體上的「已停止」狀態來過濾項目。他們根據兩個複選框的值獲得「可購買」商品,「可銷售」商品,所有商品或被封鎖商品的列表以供銷售或購買。Dynamics AX:能夠使用高級過濾器/排序選項從代碼中禁用數據源

我在代碼中添加了InventItemSalesSetup和InventItemPurchSetup數據源,並且在用戶選中或取消選中複選框時啓用或禁用它們。

除非其中一個數據源被禁用,否則一切正常。然後「高級過濾器/排序」選項停止工作。我收到錯誤:「數據源未啓用」。

錯誤來自SysQueryForm表單的「saveCueEnabled」方法。當它調用:

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

的呼叫:

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

當它得到查詢的數據源的數量,「dataSourceCount」方法也返回與禁用的數據源的數量,而當它會在循環中獲取被禁用的數據源的QueryBuildDataSource,您將得到一個空的DS,並且在檢查它是否是臨時表時會崩潰。

我已經解決了在「saveCueEnabled」代碼中增加一個額外的問題,但我不知道是否有一種方法來啓用/禁用數據源而不會出現此錯誤。

我希望我已經解釋好自己了,謝謝!

回答

4

我能想出的唯一解決方案需要您修改canSaveQueryAsQue()。

for循環的此更新很簡單,應該可以解決您的問題。

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

我還沒有測試過這個代碼,但我在其他情況下使用過類似的代碼。希望有所幫助!

+0

我認爲這應該工作。謝謝,我會嘗試如果我再次遇到這個問題。 –

0

建議的編輯實際上不起作用,因爲'ds'變量在測試時仍然是'truthy'。

以下似乎工作:

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

添加「.enabled()」屬性的測試允許的請求的代碼在禁用的數據源跳過。

相關問題