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 并尝试过滤数据时,上列的此选项被禁用,我认为这是由于该显示方法而发生的。有什么办法可以实现这个功能吗?

我是否应该尝试(右键单击)在那里添加另一个 MenuItem 并在新对话框的帮助下进行过滤(我将在其中写下项目名称),然后以某种方式刷新表单?

更新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 不是正确的方法。我想连接到通常的菜单并在那里添加新的查找和删除过滤器。并且..删除过滤器需要一段时间,我应该以某种方式发出信号,这样用户就不会惊慌。

4

2 回答 2

1

使用上下文菜单不是这样做的方法,不过是对这个想法的补充。

您需要做的是使用必填字段的数据源扩展表单。在这种情况下,它需要InventTable内连接到InventSumEcoResProduct内连接到InventTableEcoresProductTranslation内连接到EcoResProduct。将该字段添加EcoresProductTranslation.Name为网格中的字段。

您必须在首选语言上做一个范围。如果不存在对该语言的翻译,则不会有输出。

由于查询是按查询分组,因此您需要按 on 分组EcoresProductTranslation.Name。表单的代码相当复杂,因此使其工作可能会很痛苦。

于 2016-01-25T09:16:22.127 回答
1

我找到了这篇文章:

从 (EcoResProductTranslation ) 加入 ItemName

基本上,我们创建一个基于 InventTable、EcoResProduct 和 EcoResProductTranslation 的查询,以便从 InventTable 中的 Product 字段开始获取产品的名称。

在 InventSum 上添加了一个新关系:

在此处输入图像描述

在 InventOnHandItem > DataSources > InventSum > Methods > 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 中:

在此处输入图像描述

并将名称字段从该数据源拖到网格中。它对我来说很好。

于 2016-01-25T09:36:16.190 回答