AX lookup方法重载实例

  在之前已经提到过lookup方法是设置下拉框选项

public void lookup()
{

    SysTableLookup lookup = SysTableLookup::newParameters(tableNum(NumberSequenceTable), this);
    Query lookupQuery = new Query();
    QueryBuildDataSource lookupDataSource;
    DictRelation dr = new DictRelation(tableNum(NumberSequenceTable));


    lookupDataSource = lookupQuery.addDataSource(tableNum(NumberSequenceTable));

    lookupDataSource = lookupDataSource.addDataSource(tableNum(NumberSequenceScope));

    lookupDataSource.joinMode(JoinMode::InnerJoin);
    dr.loadTableRelation(tableNum(NumberSequenceScope));

    lookupDataSource.addRange(fieldNum(NumberSequenceScope, DataArea)).value(curext());

    lookupDataSource.addRelation(dr);

    lookup.parmQuery(lookupQuery);

    lookup.addLookupfield(fieldNum(NumberSequenceTable, NumberSequence), true);
    lookup.addLookupfield(fieldNum(NumberSequenceTable, Txt), true);

    lookup.performFormLookup();
}

  query的结构呢可以参考一下下图,注意datasource是层层嵌套的。

由于NumberSequenceTable表是与NumberSequenceScope有关系的,所以就在lookupDataSource NumberSequenceTable后面加了一个NumberSequenceScope

添加NumberSequenceScope是因为需要通过NumberSequenceScope的公司来锁定查询的范围,所以有了lookupDataSource.addRange(fieldNum(NumberSequenceScope, DataArea)).value(curext());的代码,用以就是根据当前公司查询。

 

其实lookup是根据一个字段来确定当前选择的内容的,所以如果控件的内容不是指定字段的值,那么在打开下拉框的时候光标就不会选择到该记录。那如果我显示的记录与我需要选择的记录不同该怎么办,我的处理方式是在performFormLookup()执行之前把控件的值设置成为指定字段的值,然后在performFormLookup()完之后通过关联关系将空间的值设置回我们想要的值。因为选择记录会刷新控件的内容,那么刷新的内容就是我们指定的值。

下面代码是一个实例

 

public void lookup()
{
    SysTableLookup lookup;
    Query lookupQuery = new Query();
    QueryBuildDataSource lookupDataSource;

    InventBuyerGroup inventBuyerGroup;

    select firstOnly inventBuyerGroup
            where inventBuyerGroup.Group == purchTable.ItemBuyerGroupId;

    this.text(inventBuyerGroup.Group);

    lookup = SysTableLookup::newParameters(tableNum(InventBuyerGroup), this);

    lookupDataSource = lookupQuery.addDataSource(tableNum(InventBuyerGroup));
    lookupDataSource.addOrderByField(fieldNum(InventBuyerGroup, Group));

    lookup.parmQuery(lookupQuery);

    lookup.addLookupfield(fieldNum(InventBuyerGroup, Group), true);
    lookup.addLookupfield(fieldNum(InventBuyerGroup, Description), false);

    lookup.performFormLookup();
    this.text(inventBuyerGroup.Description);
}

 

true false设置哪一个字段有效,之前第一个代码中都是true,以最后一个为准。

 

posted on 2016-04-26 11:14  クマ姫  阅读(234)  评论(0编辑  收藏  举报

导航