Acumatica 21R1筛选器首次生效后续修改后返回值被冻结问题排查
问题原因
- BQL语句使用了
FromCurrent后缀取值,该参数只会在视图初始化时读取一次筛选器的值,后续筛选器变更不会同步更新查询参数。 - 带
Aggregate聚合的PXFilteredProcessing类视图默认开启了查询缓存,首次查询结果会被缓存复用,后续修改筛选条件也不会重新执行数据库查询。 - 筛选器字段未开启自动提交变更,修改筛选值后没有触发视图重新加载逻辑。
解决方法
- 替换BQL中所有
FromCurrent后缀为Current,让查询每次执行时都动态读取筛选器的最新值,同时给视图添加关闭查询缓存的特性,修改后的代码示例如下:
[PXViewSettings(EnableQueryCache = false)] public PXFilteredProcessingJoinGroupBy<APPayment, USRAPPaymentFilterTXT, InnerJoin<APAdjust, On<APPayment.docType, Equal<APAdjust.adjgDocType>, And<APPayment.refNbr, Equal<APAdjust.adjgRefNbr>>>>, InnerJoin<APRegister, On<APPayment.refNbr, Equal<APRegister.refNbr>, And<APPayment.docType, Equal<APRegister.docType>>>>, InnerJoin<APInvoice, On<APAdjust.adjdDocType, Equal<APInvoice.docType>, And<APAdjust.adjdRefNbr, Equal<APInvoice.refNbr>>>>>>, Where<APInvoice.paySel, Equal<True>, And<APPayment.cashAccountID, Equal<Current<USRAPPaymentFilterTXT.cashAccountID>> , And<APPayment.docDate, Between<Current<USRAPPaymentFilterTXT.from>, Current<USRAPPaymentFilterTXT.to>> , And<APRegister.status, Equal<APRegisterStatusBalanced>> > >>, Aggregate<GroupBy<APPayment.docType, GroupBy<APPayment.refNbr, Max<APPayment.curyOrigDocAmt>>>>>> txtgenerate;
- 在ASPX页面的筛选器字段配置中,给
cashAccountID、from、to三个字段添加CommitChanges="true"属性,每次修改筛选值后自动触发页面回发,重新执行查询。 - 若以上修改后仍有问题,可以在筛选器DAC的RowUpdated事件中手动触发视图刷新,示例代码如下:
protected virtual void USRAPPaymentFilterTXT_RowUpdated(PXCache cache, PXRowUpdatedEventArgs e) { if (e.Row is USRAPPaymentFilterTXT filter) { txtgenerate.View.RequestRefresh(); } }
内容的提问来源于stack exchange,提问作者Jorge Peruyero
相关产品推荐
相关产品推荐

