过滤 DirPartyTableListPage 表单中的记录

问题描述 投票:0回答:1

我需要将 ExistsJoin 和 RestrictionTable 应用于 DirPartyTable 中 InstanceRelation 值 = 123 的记录,而不是在表单的 init 方法中过滤其他记录。

我尝试了这个,但现在只有 InstanceRelationType == 123 的记录处于表单中,但我还需要保留其他记录。

QueryBuildDataSource            qbdsRestriction;
QueryBuildRange                 qbr;


qbdsRestriction = dirpartyTable_ds.queryBuildDataSource().addDataSource(tableNum(RestrictionTable));            
qbr = qbdsRestriction.addRange(fieldNum(RestrictionTable, Party));
qbr.value(strFmt("((%1.Party == %2.RecId) && (%2.InstanceRelationType == 123))", qbdsRestriction.name(), dirpartyTable_ds.queryBuildDataSource().name()));
qbdsRestriction.joinMode(JoinMode::ExistsJoin);
axapta x++ dynamics-ax-2012
1个回答
0
投票

您在查询范围中使用表达式,我相信它需要位于字符串字段上。我猜

RestrictionTable.Party
是一个 int64。选择其他一些任意字符串字段,看看是否可以解决该问题,但您可能应该在查询范围中使用表达式,并以传统方式使用查询对象。

当我这么说时,我的意思与此类似:

QueryBuildDataSource            qbdsRestriction;
QueryBuildRange                 qbr;
    
qbr = dirpartyTable_ds.queryBuildDataSource().addRange(fieldNum(DirPartyTable, InstanceRelationType));
qbr.value(queryValue("123"));

qbdsRestriction = dirpartyTable_ds.queryBuildDataSource().addDataSource(tableNum(RestrictionTable));
// qbdsRestriction.clearLinks(); // This may be needed

// Method 1 OR
qbdsRestriction.addLink(fieldNum(DirpartyTable, RecId), fieldNum(RestrictionTable, Party));

// Method 2
// qbdsRestriction.relations(true); // Only if you have a table relation

qbdsRestriction.joinMode(JoinMode::ExistsJoin);

如果您有表关系设置,则可以使用

qbdsRestriction.relations(true);
。如果您有表关系并且不想想要使用它们,则需要
false
。如果您根本没有表关系,那么就不需要它,您可以使用
// Method 1

我没有你的确切数据,所以我是凭记忆输入的,没有智能感知,所以你可能需要调整它并进行实验。

© www.soinside.com 2019 - 2024. All rights reserved.