acumatica - 用户在对话框中确认后插入 SO 行
问题描述
输入客户后,我试图在“交易”网格中添加一行,但前提是用户接受它 - 会显示一个对话框以进行此确认。
我已将逻辑简化为非常简单的 SOLine 插入。
使用此代码,结果是成功的:
protected virtual void SOOrder_RowUpdated(PXCache sender, PXRowUpdatedEventArgs e)
{
if (e.Row == null)
{
return;
}
SOOrder record = (SOOrder)e.Row;
if (!sender.ObjectsEqual<SOOrder.customerID>(e.Row, e.OldRow)
&& record.CustomerID != null)
{
SOLine sOLineNewRow = new SOLine();
sOLineNewRow = this.Base.Transactions.Insert(sOLineNewRow);
SOLineExt sOLineExtRow = PXCache<SOLine>.GetExtension<SOLineExt>(sOLineNewRow);
sOLineNewRow.InventoryID = 311;
this.Base.Transactions.Update(sOLineNewRow);
sOLineNewRow.OrderQty = (decimal)7;
this.Base.Transactions.Update(sOLineNewRow);
sOLineNewRow.CuryUnitPrice = (decimal)8;
this.Base.Transactions.Update(sOLineNewRow);
}
}
但是,当我在 Ask() 方法中包含对话框时,不会执行逻辑。调试后,我注意到 if 运算符中的逻辑甚至没有被访问。
protected virtual void SOOrder_RowUpdated(PXCache sender, PXRowUpdatedEventArgs e)
{
if (e.Row == null)
{
return;
}
SOOrder record = (SOOrder)e.Row;
if (!sender.ObjectsEqual<SOOrder.customerID>(e.Row, e.OldRow)
&& record.CustomerID != null)
{
if (this.Base.Document.Ask("Confirmation",
"The selected customer will have the default line. Do you want to insert it?",
MessageButtons.YesNo,
MessageIcon.Question) == WebDialogResult.Yes)
{
SOLine sOLineNewRow = new SOLine();
sOLineNewRow = this.Base.Transactions.Insert(sOLineNewRow);
SOLineExt sOLineExtRow = PXCache<SOLine>.GetExtension<SOLineExt>(sOLineNewRow);
sOLineNewRow.InventoryID = 311;
this.Base.Transactions.Update(sOLineNewRow);
sOLineNewRow.OrderQty = (decimal)7;
this.Base.Transactions.Update(sOLineNewRow);
sOLineNewRow.CuryUnitPrice = (decimal)8;
this.Base.Transactions.Update(sOLineNewRow);
}
}
}
有谁知道为什么会发生这种情况?
更新的问题
我在 Action 中复制了逻辑,结果在那里成功:
public PXAction<SOOrder> ChangeAmount;
[PXUIField(DisplayName = "Action Test", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)]
[PXButton(CommitChanges = true)]
public virtual void changeAmount()
{
PXTrace.WriteInformation("BeforeAskAction");
if (this.Base.Document.Ask("Confirmation",
"The selected customer will have the default line. Do you want to insert it?",
MessageButtons.YesNo,
MessageIcon.Question) == WebDialogResult.Yes)
{
PXTrace.WriteInformation("AfterAskAction");
SOLine sOLineNewRow = new SOLine();
sOLineNewRow = this.Base.Transactions.Insert(sOLineNewRow);
sOLineNewRow.InventoryID = 311;
this.Base.Transactions.Update(sOLineNewRow);
sOLineNewRow.OrderQty = (decimal)7;
this.Base.Transactions.Update(sOLineNewRow);
sOLineNewRow.CuryUnitPrice = (decimal)8;
this.Base.Transactions.Update(sOLineNewRow);
}
}
记录了“BeforeAskAction”和“AfterAskAction”跟踪。
在我使用事件处理程序的原始场景中,只输入了“之前”跟踪。
我使用以下数据成员进行了测试: - Document - CurrentDocument - Transactions - 我使用 SOLine DAC 创建的虚拟 DM。在所有这些场景中,结果在操作中成功,但在事件处理程序中失败。
更新 2
最初,我在 SOOrder_CustomerID_FieldUpdated 中有逻辑。在这种情况下,记录被插入,但是我无法继续使用它,因为 CuryUnitPrice 没有分配代码中指示的数量。它分配了项目的默认价格。
我使用这篇文章作为参考(每隔一段时间更新一次销售价格),但结果仍然显示默认金额。当使用 RowUpdated 事件时 - 未实现 Ask() 方法 - 我的 CuryUnitPrice 金额已分配
解决方案
推荐阅读
- python - 将实例“计数”合并到加入字符串的列表中(Python3)
- r - 如何根据值列表拆分长字符串中的单词以在 R 中创建新数据框?
- cypress - 赛普拉斯游乐场找不到工作选择器
- java - Vert.X 微服务:多数据库访问或使用请求-回复
- image-processing - Tesseract 需要 10 秒来识别最简单的图像,我做错了什么?
- spring - 验证 RequestBody 和 Param 中的所有字符串字段
- java - Android 上的 Facebook 新闻源刷新
- c# - 无法从 xamarin android 调用 firebase 云功能
- java - Java中的Linked Map,如果键的顺序不同则不相等
- powershell - 在 Azure Runbooks 中克隆 Azure 存储库