acumatica - 处理结果返回后无法触发取消按钮动作
问题描述
在 Acumatica 19.201.0070 框架中,我创建了一个自定义处理页面,该页面使用PXFilteredProcessing
旧式处理 UIpublic override bool IsProcessing => false;
我定义了一个取消按钮(如下),它将清除图形并设置处理过滤器的一些值。
public PXCancel<NPMasterSubGeneratorFilter> Cancel;
[PXCancelButton()]
protected virtual IEnumerable cancel(PXAdapter adapter)
{
NPMasterSubGeneratorFilter row = Filter.Current;
if (row != null)
{
this.Clear();
Filter.SetValueExt<NPMasterSubGeneratorFilter.segmentID>(Filter.Current, row.SegmentID);
if (!(row.NewSegment ?? false)) Filter.SetValueExt<NPMasterSubGeneratorFilter.segmentValue>(Filter.Current, row.SegmentValue);
}
return adapter.Get();
}
除了单个用例之外,这工作得非常好,如果用户按下取消按钮,则在显示处理结果后,相应的操作永远不会被击中。(我的同事办公室开发人员表示,核心 Acumatica 处理页面似乎运行相同。)
处理委托的设置在过滤器 RowSelected 事件中。
GeneratedSubs.SetProcessDelegate(list => CreateSubaccounts(list, row));
我已经实现了我的处理方法的一些迭代,但当前如下。
protected virtual void CreateSubaccounts(List<NPGeneratedSub> subs, NPMasterSubGeneratorFilter filter)
{
if (filter.NewSegment ?? false)
{
try
{
SegmentMaint segGraph = PXGraph.CreateInstance<SegmentMaint>();
segGraph.Segment.Update(segGraph.Segment.Search<Segment.dimensionID, Segment.segmentID>(AADimension.Subaccount, filter.SegmentID.Value));
SegmentValue value = segGraph.Values.Insert(new SegmentValue() { Value = filter.SegmentValue, Descr = filter.Description });
segGraph.Actions.PressSave();
}
catch
{
throw new PXOperationCompletedSingleErrorException(NonProfitPlusMessages.SegmentValueCannotCreate);
}
}
SubAccountMaint subGraph = PXGraph.CreateInstance<SubAccountMaint>();
NPSubAccountMaintExtension subGraphExt = subGraph.GetExtension<NPSubAccountMaintExtension>();
subGraphExt.save.ConfirmSaving = false;
Sub newSub;
bool errored = false;
foreach (NPGeneratedSub sub in subs)
{
PXProcessing<NPGeneratedSub>.SetCurrentItem(sub);
try
{
newSub = subGraph.SubRecords.Insert(new Sub() { SubCD = sub.SubCD, Description = sub.Description });
subGraph.Save.Press();
subGraph.Clear();
PXProcessing<NPGeneratedSub>.SetProcessed();
}
catch (Exception e)
{
PXProcessing<NPGeneratedSub>.SetError(e);
errored = true;
}
}
if (errored)
{
throw new PXOperationCompletedWithErrorException();
}
}
返回处理结果后,需要调整什么以允许在按下时触发按钮操作?
解决方案
单步执行 javascript 后,我发现当您在处理后单击此屏幕上的取消按钮时,它没有向服务器发送请求。原因是因为 SuppressActions 在 Cancel PXToolBarButton 上设置为 true。我将我在此屏幕上看到的内容与正常工作的屏幕上发生的情况进行了比较,并意识到 Acumatica 应该在 Schedule 下拉 PXToolBarButton 上将 SuppressActions 设置为 true 但由于某种原因,在此屏幕上,它错误地将其设置为在“计划”下拉按钮之后的任何按钮上都为 true。
我查看了 PX.Web.UI 中的代码,看起来当下拉按钮被禁用时他们将 SuppressActions 设置为 true,并且 PXProcessing 将 FieldSelecting 事件添加到 Schedule 按钮,该事件会在您单击进程后禁用该按钮。但是,我没有注意到为什么代码会将其设置在错误的 PXToolBarButton 上的任何明显问题,因此有人可能需要调试代码并查看发生了什么(我们无法在 PX.Web.UI 中调试代码.dll)。
我尝试在 aspx 文件中注释掉与 PXProcessing 视图无关的其他网格,这解决了问题。所以我的猜测是,在 PXProcessing 屏幕上有多个网格会以某种方式导致在错误的 PXToolBarButton 上设置 SuppressActions 的错误。但是,由于多个网格是业务需求,因此删除它们不是解决方案。相反,我建议将计划按钮之后的所有按钮移动到计划按钮之前。为此,只需在图中的 PXFilteredProcessing 视图之前声明 PXActions。
推荐阅读
- javascript - 如何在 ReactJS 中的组件之间共享数组的动态对象?
- javascript - 如何停止keydown事件被卡住?
- c# - 如何将 XML 加载到 C# WPF 树视图中
- twilio - 为什么 Twilio 呼叫转移与运营商呼叫转移的操作方式不同?
- linux - 无法将用户添加到 docker 组
- db2 - SQL 为日期传递表日期
- python - 我可以在测试用例中模拟我的函数的输入吗?
- python - 从 tf.TFRecordReader() 转移到 tf.data.TFRecordDataset 时出错
- excel - 查找某个文本,将文本下方的所有内容复制到另一个工作簿中的相同文本下
- python-3.x - 如何根据ggplot中的数据集按小时绘制活动?