比如要在下拉框中显示ItemID,但是只显示ItemGroup='Group1' 且 ItemType='Bom'的物项,那么传统的使用扩展类型的方法就不使用了,因为扩展类型不能动态传递参数(Itemgroup和ITEMTYPE)。
第一步,在InventTable里建立一个方法,lookupItemByItemTypeGroup。
1 client static void lookupItemByItemTypeGroup(FormStringControl lookupCtrl,ItemGroupId ItemGroupId,ItemType _ItemTYpe=ItemType::BOM) 2 { 3 SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(InventTable), lookupCtrl); 4 //若使用方法2,则LookupCtrl 改为 this.代表当前控件 5 Query query = new Query(); 6 QueryBuildDataSource queryBuildDataSource = query.addDataSource(tableNum(InventTable)); 7 QueryBuildRange queryBuildRange = queryBuildDataSource.addRange(fieldNum(InventTable, ItemGroupId)); 8 QueryBuildRange queryBuildRange1 = queryBuildDataSource.addRange(fieldNum(InventTable, ItemType)); 9 ; 10 QueryBuildRange.value(ItemGroupId);//若值不是String,则需要用函数QueryValue()转换。 11 QueryBuildRange1.value(enum2str(_ItemTYpe)); 12 13 sysTableLookup.addLookupfield(fieldNum(InventTable, ItemId)); 14 sysTableLookup.addLookupfield(fieldNum(InventTable, ItemName)); 15 16 sysTableLookup.parmQuery(query); 17 sysTableLookup.performFormLookup(); 18 }
第二步,重载下拉框的lookup的方法。
1 public void lookup() 2 { 3 // super();//注意,一定要注释,意思是不执行父类的方法而执行当前类的方法,若不注释则出现两个下拉框。 4 ; 5 inventtable::lookupItemByItemTypeGroup(this, 'Group1', ItemType::BOM); 6 }
另一方法,就是直接在控件的lookup方法下写上面的代码,这样就没有扩展性,但是有的时候还是可以选择。
另外,值得注意的是:
当下拉框需要从多个表过滤条件时,上面的方法就不起作用了。这个时候,我们需要建立一个View,然后把view当作表使用上面的方法,就可以实现了。
比如我们要在下拉框中选择工单,条件是ITemGroupID是"Group1"的物项,这样就需要关联两个表,过滤Inventtable的ItemGroupID.
若有问题可以提问,我再回答,但是,只要自己思考一下的话,一般不是问题。