0

據我所知,ProductName列通過顯示方法顯示。至少對於我的實現在這裏,並且此方法駐留在InventSum表:在 - 庫存管理/查詢/現場過濾項目名稱

display public ItemNameDisplay itemName() 
{ 
    // Fields might not have been selected on the specified buffers, or might have been updated since selection 
    this.checkInvalidFieldAccess(false); 

    if (this.InventDimId) 
    { 
     return this.inventTable().itemName(InventDim::find(this.InventDimId)); 
    } 
    return this.inventTable().itemName(); 
} 

當我按Ctrl + G,並嘗試對數據進行篩選,此選項將是上述列禁用,我覺得出現這種情況是由於該顯示方法。有什麼辦法可以實現這個功能嗎?

我應該嘗試(右單擊)以添加另一個菜單項那裏,做一個新的對話框(其中我會記下的項目名稱)的幫助下過濾,不知何故,然後在表格上的刷新?

更新1:

我發現和編輯這種做法對我的特殊情況:

public void context() 
{ 
    InventTable inventTable; 

    int selectedMenu; 
    real test; 
    formrun fr; 
    Args ag; 
    Itemname strtext; 
    querybuilddataSource qb1; 
    queryrun qr; 
    query q; 
    PopupMenu menu = new PopupMenu(element.hWnd()); 
    int a = menu.insertItem('Find'); 
    int c = menu.insertItem('Remove Filter'); 


    selectedMenu = menu.draw(); 

    switch (selectedMenu) 
    { 
     case -1: 
     break; 

     case a: 
     ag = new args('SysformSearch'); 
     fr = new formrun(ag); 
     fr.run(); 
     fr.wait(); 
     strtext = fr.design().controlName('FindEdit').valueStr(); 

     if(strtext) 
     { 
      select ItemId from inventTable 
      where inventTable.NameAlias == strtext; 

      InventSum_DS.filter(FieldNum(InventSum,ItemId),Sysquery::value(inventTable.ItemId)); 
     } 
     break; 

     case c : 
      InventSum_DS.removeFilter(); 
     break; 

     Default: 
     break; 
    } 
} 

不過我覺得不只是顯示一個新的PopupMenu的正確方法。我想鉤住通常的菜單,並在那裏添加新的查找和刪除過濾器。而..刪除過濾器需要一段時間,我應該以某種方式發信號,以便用戶不要驚慌。

+0

是否要按項目名稱(如問題中所述)或名稱別名(在更新1中實施)進行過濾?這兩個領域可能的解決方案是完全不同的。 –

+0

@ FH-Inway,我想過濾項目名稱。 –

+0

我似乎無法用這種方式控制事情。如果用戶想要獲得許多結果,我將不得不添加許多範圍,並執行strScan以某種方式檢查包含所需字符串的所有值,並且可能該字符串包含*或!等等..我去無處.. –

回答

1

我發現這篇文章:

Join ItemName from (EcoResProductTranslation)

基本上,我們創造才能得到的產品從產品領域的InventTable啓動名稱基於InventTable,EcoResProduct和EcoResProductTranslation查詢。

的新關係添加上InventSum:

enter image description here

在InventOnHandItem>數據源> InventSum>方法>的executeQuery我已經添加了新的DS:

element.inventDimSetupObject().modifyQuery(inventSum_DS,inventDim_DS, InventLookupView_ds); 

而且在類:

InventDimCtrl_Frm_OnHand> modifyQuery,我添加了這個參數:

FormDataSource _inventLookup = null 

所以現在我有這樣的:

public void modifyQuery(
    FormDataSource _inventSum_DS, 
    FormDataSource _inventDim_DS, 
    FormDataSource _inventLookup = null 
) 

查詢構建數據源實例:

QueryBuildDataSource qbsInventLookup; 

而這部分代碼:

if(_inventLookup) 
{ 
    qbsInventLookup = query.dataSourceName(_inventLookup.name()); 

    //filter current company language 
    //qbr = SysQuery::findOrCreateRange(qbsInventLookup, fieldnum(InventLookupView, LanguageId)); 
    //qbr.value(queryValue(CompanyInfo::languageId())); 

    qbsInventLookup.addGroupByField(fieldNum(InventLookupView, Name)); 
    //qbsInventLookup.addGroupByField(fieldNum(InventLookupView,NameAlias)); 
} 

新創建的視圖作爲InventSum中的數據源添加:

enter image description here

並將名稱字段從此數據源拖動到網格。它對我來說工作得很好。

1

使用上下文菜單並不是實現它的方法,但它是對這個想法的補充。

你需要做的是用數據源爲必填字段擴展表單。 在這種情況下,它需要InventTable內部連接到InventSum,EcoResProduct內部連接到InventTableEcoresProductTranslation內部連接到EcoResProduct。將字段EcoresProductTranslation.Name添加爲網格中的字段。

您必須對首選語言做一個範圍。如果不存在對該語言的翻譯,則不會有輸出。

由於查詢是按查詢分組,因此您需要在EcoresProductTranslation.Name上進行分組。 表單的代碼相當複雜,因此使其工作可能很痛苦。

+0

非常感謝您的答覆1月我已經得到它週五晚上工作..不能開始沒有這個週末..我認爲我的一邊缺少一些東西..我評論在語言部分爲了它的工作。 –