Lookup窗体返回多个值

今天在MBSCN上看到有网友提到一个蛮好的问题,如何用Lookup窗体返回多个值。
默认的情况下,AX的Lookup窗体只能返回一个值,赋值给调用Lookup的控件,那么如何返回多个值那?这种情况还是蛮常见的,比如从客户表中选择数据,Lookup窗体中可以显示多个值,比如客户编码,客户名称,客户地址等,如果每次只返回一个值赋值给客户编码,显然不太好,因为用户可能还要同时看到客户名称和客户地址的值。
正如那位网友提到的,这个问题要分成两种类型来解决:
1.通过调用SysLookupTable类构造的Lookup窗体
2.通过直接调用Lookup Form(比如CustTableLookup),构造的Lookup窗体。
这两种方式返回多个值的方法是相同的(当然这是俺能想到的方法,可能还会有更多好方法),需要重载FormRun对象的closeSelect方法,在该方法中调用原窗体中特定的方法,给待赋值的控件赋值,类似于如下代码:
None.gif public   void  closeSelect(str _selectString)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
if(formhasMethod(callerForm,identifierstr(SetOtherValues)))
InBlock.gif        callerForm.SetOtherValues(element.dataSource(
1).cursor());
InBlock.gif    super(_selectString);
ExpandedBlockEnd.gif}
其中的SetOtherValues为在调用Lookup窗体的Form上定义的方法,类似于如下代码:
None.gif void  SetOtherValues(Common table)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    CustTable lookupCustTable;
InBlock.gif    ;
InBlock.gif    lookupCustTable 
= table;
InBlock.gif    
if(table.TableId == tableNum(custTable))
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        custName.text(lookupCustTable.Name);
InBlock.gif        address.text(lookupCustTable.Address);
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedBlockEnd.gif}
这个对于第二种类型的Lookup 窗体来说是很容易实现的,因为在AOT上有现成的Form,只要重载一下它的closeSelect方法就可以了。
对于第一种类型的Lookup窗体,问题可能会有些绕。因为第一种情况下,Lookup窗体是通过代码创建的,而X++没有事件机制,就没办法将原窗体的方法绑定到Lookup窗体的关闭事件上,不过可以变通实现,首先创建一个名为SysLookupTable的窗体,重载该窗体的closeSelect方法,在这个方法中写入上述代码,然后继承类SysLookupTable,重载其newParameter,Contructor和formRun方法,在formRun方法中new form时,将SysLookupTable做为参数传入,这样实际被实例化的是SysLookupTable这个窗体,这样当Lookup窗体关闭时就会自动调用SysLookupTable窗体中被重载的closeSelect方法,从而调用原窗体的方法,虽然绕的弯不小,不过总算可以实现,其实Runbase中的Dialog不也是这样玩的吗?
这里是根据上面的描述做的一个示例,用户在客户编码处选择后会直接将客户名称和客户地址赋值到对应的控件上。
感谢MBSCN网友jtlyr!

转载于:https://www.cnblogs.com/Farseer1215/archive/2007/01/23/628414.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值