AX界面中的下拉控件,主要通过下面几种方式实现,各有特长。
一、有限的下拉,控件用ComboBox,本方法的值不可手输,例如状态。
- 创建一个Enum,设置好下拉选项。
- 放置一个ComboBox控件,设置其EnumType等于刚建的Enum,即可实现下拉。
- 数据表中某个字段的EmumType设置为该Enum,该字段出现在任何地方都会自动实现下拉。
二、自动的下拉,本方法的值不可手输,例如客户编号。
- 创建一个ExtendedDataType对象,为其增加一条Relations关联记录。
- 被关联表的AutoLookup里,设置要下拉显示的字段。
- 单一控件下拉时用StringEdit,设置其ExtendedDataType=刚建的EDT对象即可。
- 若要在表格里显示下拉,找到表格的源表,给源表的目标字段设置其ExtendedDataType=刚建的EDT对象即可。
三、自动的有条件下拉,本方法的值不可手输,例如下拉某客户组的客户编号。
- 创建一个ExtendedDataType对象,为其增加一条Relations关联记录。
- 再为新对象增加一条RelatedFieldFixed,指定被关联表的要过滤字段和过滤值。
- 被关联表的AutoLookup里,设置要下拉显示的字段。
- 单一控件下拉时用StringEdit,设置其ExtendedDataType=刚建的EDT对象即可。
- 若要在表格里显示下拉,找到表格的源表,给源表的目标字段设置其ExtendedDataType=刚建的EDT对象即可。
四、动态创建下拉选项,本方法的值可以手输,例如勾选了排程的订单号用于下拉。
- 本方案适合单一控件(StringEdit)和表格控件的某一栏。
- 在该控件的内置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();
}
五、用临时表创建下拉选项,本方法的值可以手输,例如查询出符合条件的备注范本用于下拉。
- 本方案适合单一控件(StringEdit)和表格控件中的某一栏。
- 在该控件的内置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();
}
