AX的下拉控件

AX界面中的下拉控件,主要通过下面几种方式实现,各有特长。

一、有限的下拉,控件用ComboBox,本方法的值不可手输,例如状态。

  1. 创建一个Enum,设置好下拉选项。
  2. 放置一个ComboBox控件,设置其EnumType等于刚建的Enum,即可实现下拉。
  3. 数据表中某个字段的EmumType设置为该Enum,该字段出现在任何地方都会自动实现下拉。

二、自动的下拉,本方法的值不可手输,例如客户编号。

  1. 创建一个ExtendedDataType对象,为其增加一条Relations关联记录。
  2. 被关联表的AutoLookup里,设置要下拉显示的字段。
  3. 单一控件下拉时用StringEdit,设置其ExtendedDataType=刚建的EDT对象即可。
  4. 若要在表格里显示下拉,找到表格的源表,给源表的目标字段设置其ExtendedDataType=刚建的EDT对象即可。

三、自动的有条件下拉,本方法的值不可手输,例如下拉某客户组的客户编号。

  1. 创建一个ExtendedDataType对象,为其增加一条Relations关联记录。
  2. 再为新对象增加一条RelatedFieldFixed,指定被关联表的要过滤字段和过滤值。
  3. 被关联表的AutoLookup里,设置要下拉显示的字段。
  4. 单一控件下拉时用StringEdit,设置其ExtendedDataType=刚建的EDT对象即可。
  5. 若要在表格里显示下拉,找到表格的源表,给源表的目标字段设置其ExtendedDataType=刚建的EDT对象即可。

四、动态创建下拉选项,本方法的值可以手输,例如勾选了排程的订单号用于下拉。

  1. 本方案适合单一控件(StringEdit)和表格控件的某一栏。
  2. 在该控件的内置lookup方法中写代码:
public void lookup()
{
    SysTableLookup          SysTableLookUp ;
    Query                   query ;
    QueryBuilddatasource    qbds ;
    QueryBuildRange         R1;
    ;
    SysTableLookUp = SysTableLookUp::newParameters(TableNum(SPL_ScheduleTable),this) ;
    query = new Query();
    qbds = query.addDataSource(tableNum(SPL_ScheduleTable));
    R1 = qbds.addRange(fieldNum(SPL_ScheduleTable,Schedule));
    R1.value(queryValue(NoYes::Yes));
    SysTableLookUp.addLookupfield(fieldNum(SPL_ScheduleTable,SO));
    sysTableLookup.parmQuery(query);
    SysTableLookUp.performFormLookup();
}
或者
public void lookup()
{
    sysTableLookup  _lookup;
    Query           _query;
    QueryBuildDatasource _qbds;
    QueryBuildRange      _qbr;
    ;
    _query  = new Query();
    _qbds   = _query.addDataSource(tableNum(SPL_MarkList));
    _qbr    = _qbds.addRange(fieldNum(SPL_MarkList,MarkType));
    _qbr.value('B');
    _lookup = SysTableLookUp::newParameters(tableNum(SPL_MarkList),this);
    _lookup.parmQuery(_query);
    _lookup.addLookupfield(fieldNum(SPL_MarkList,SPL_Remark));
    _lookup.performFormLookup();
}
或者
public void lookup()
{
    SysTableLookup          SysTableLookUp ;
    Query                   query ;
    QueryBuilddatasource    qbds ;
    QueryBuildRange         R1;
    ;
    SysTableLookUp = SysTableLookUp::newParameters(TableNum(SalesLine),this) ;
    query = new Query();
    qbds = query.addDataSource(tableNum(SalesLine));
    R1 = qbds.addRange(fieldNum(SalesLine,salesID));
    R1.value(queryValue(SO.text()));
    SysTableLookUp.addLookupfield(fieldNum(SalesLine,ItemID));
    sysTableLookup.parmQuery(query);
    SysTableLookUp.performFormLookup();
}

五、用临时表创建下拉选项,本方法的值可以手输,例如查询出符合条件的备注范本用于下拉。

  1. 本方案适合单一控件(StringEdit)和表格控件中的某一栏。
  2. 在该控件的内置lookup方法中写代码:
public void lookup()
{
    SysTableLookup      _Lookup;
    SPL_tmpEnqTable     _tmpEnqTable;
    Query               _query = new Query();
    QueryBuildDataSource    _qbds;
    InventJournalTrans  _inventJournalTrans;
    ;
    StartLengthyOperation();
    while select TransDate from _inventJournalTrans Group by TransDate
                where   _inventJournalTrans.ItemId  == InventTransFilter.ItemId
                &&      _inventJournalTrans.JournalType == InventJournalType::Count
                &&      _inventJournalTrans.InventDimId == InventDim::findLocation(InventTransFilter.InventLocationId).inventDimId
                &&      _inventJournalTrans.Voucher
    {
        _tmpEnqTable.TransDate = _inventJournalTrans.TransDate;
        _tmpEnqTable.insert();
    }
    _Lookup = SysTableLookup::newParameters(tableNum(SPL_tmpEnqTable),this);
    _Lookup.parmTmpBuffer(_tmpEnqTable);
    _Lookup.addLookupfield(fieldNum(SPL_tmpEnqTable,TransDate));
    _qbds = _query.addDataSource(tableNum(SPL_tmpEnqTable));
    _qbds.addSortField(fieldNum(SPL_tmpEnqTable,TransDate),SortOrder::Descending);
    _Lookup.parmQuery(_query);
    _lookup.performFormLookup();
    EndLengthyOperation();
}

发表评论