如何清除Smart Panel对话框(PXFilter)的输入并在每次打开时重置默认值
解决方案
1. 调整C#业务逻辑
在调用AskExt弹出Smart Panel之前,手动重置Filter缓存并插入初始化后的默认实例,修改你的AddFromStock方法如下:
protected virtual IEnumerable AddFromStock(PXAdapter adapter) { MyTag tag = Tags.Current; if (tag?.TranRefNbr != null) { throw new PXException(Messages.TagAlreadyReceived); } MyTagEntry graph = PXGraph.CreateInstance<MyTagEntry>(); // 新增:重置Filter缓存为默认值 stockparamfilter.Cache.Clear(); StockParamFilter newFilter = (StockParamFilter)stockparamfilter.Cache.CreateInstance(); stockparamfilter.Cache.SetDefaultExt(newFilter); stockparamfilter.Cache.Insert(newFilter); WebDialogResult dialogResult = stockparamfilter.AskExt(setStockStateFilter, true); if (dialogResult == WebDialogResult.OK || (IsContractBasedAPI && dialogResult == WebDialogResult.Yes)) { // 原有业务逻辑 } return adapter.Get(); }
同时调整setStockStateFilter方法,直接从传入的参数获取Filter缓存,避免读取到旧的上下文数据:
private void setStockStateFilter(PXGraph aGraph, string ViewName) { var filterCache = aGraph.Views[ViewName].Cache; StockParamFilter filter = filterCache.Current as StockParamFilter; // 你的校验逻辑,计算enableStockParams bool enableStockParams = /* 业务逻辑判断 */; checkStockParams.SetEnabled(enableStockParams); }
2. 调整ASPX页面配置
找到Smart Panel对应的PXFormView控件,添加AutoRefresh="True"属性,同时在DialogConfig节点设置KeepPreservedData="False",配置示例如下:
<px:PXFormView ID="frmStockParamFilter" runat="server" DataSourceID="ds" DataMember="stockparamfilter" AutoRefresh="True"> <DialogConfig KeepPreservedData="False" /> <Template> <!-- 原有面板字段配置 --> </Template> </px:PXFormView>
原理解释
你之前操作失效的核心原因是PXFilter类型视图属于单记录缓存,清空缓存后没有插入新的初始化实例,导致视图没有绑定的有效当前记录,面板的OK按钮事件找不到对应绑定数据就不会触发执行。设置KeepPreservedData="False"是告诉Acumatica框架关闭对话框后不要保留用户输入的临时数据,配合代码层面的缓存重置,就能保证每次打开面板都是默认值。
内容的提问来源于stack exchange,提问作者Brian Stevens
相关产品推荐
相关产品推荐

