我需要将 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);
您在查询范围中使用表达式,我相信它需要位于字符串字段上。我猜
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
。
我没有你的确切数据,所以我是凭记忆输入的,没有智能感知,所以你可能需要调整它并进行实验。