Acumatica 在字段值更改后显示smartpanel-网格保持为空
在我的一个定制中,我需要在用户修改其中一个控件的值后直接显示一个弹出窗口(在本例中,是销售订单输入屏幕的SOLine中的一个自定义字段)。此弹出窗口显示网格中的一些附加值,用户在完成行之前必须选择这些值 使用标准流程将SmartPanel添加到屏幕 如果我从action/PXLookupButton调用它,弹出窗口将显示,网格将正确填充 如果将其移动到“FieldUpdate”或“RowSelected”事件,则会显示smartpanel,但网格始终为空。再次,如果我单击按钮,网格将保持为空,直到我取消修改并仅使用按钮重新输入 在这些事件中,我也尝试调用动作的press方法,但出现了相同的结果 通过观察SQL事件探查器和调试器事件,我可以看到BQL语句正在执行,并且返回了正确的行,但它没有显示在smartpanel的网格中 有可能处理这种类型的请求吗?我假设我需要将其移动到其他方法和/或传递一些附加值,但尚未找到正确的组合 这适用于Acumatica 5.3/6.1Acumatica 在字段值更改后显示smartpanel-网格保持为空,acumatica,Acumatica,在我的一个定制中,我需要在用户修改其中一个控件的值后直接显示一个弹出窗口(在本例中,是销售订单输入屏幕的SOLine中的一个自定义字段)。此弹出窗口显示网格中的一些附加值,用户在完成行之前必须选择这些值 使用标准流程将SmartPanel添加到屏幕 如果我从action/PXLookupButton调用它,弹出窗口将显示,网格将正确填充 如果将其移动到“FieldUpdate”或“RowSelected”事件,则会显示smartpanel,但网格始终为空。再次,如果我单击按钮,网格将保持为空,直
任何输入都将不胜感激。RowUpdate处理程序允许我实现请求的行为,并在字段值更改后显示SmartPanel 下面的示例依赖于为
SOLine
DAC声明的自定义未绑定触发器对话框字段。当用户选中或取消选中触发对话框标志时,系统将显示项目数量对话框,以更新所选SOLine记录的数量:
public class SOLineExt : PXCacheExtension<SOLine>
{
#region TriggerDialog
public abstract class triggerDialog : PX.Data.IBqlField
{
}
[PXBool]
[PXUIField(DisplayName = "Trigger Dialog")]
public virtual bool? TriggerDialog { get; set; }
#endregion
}
扩展类的另一部分是ChangeOk
操作,由SmartPanel调用,以更新文档详细信息网格中所选记录的数量。要从屏幕工具栏隐藏ChangeOk
操作,还需要将以下命令添加到PXDataSource.CallbackCommands
集合中:
<px:PXDSCallbackCommand Name="ChangeOk" Visible="False" />
public class SOOrderEntryExt : PXGraphExtension<SOOrderEntry>
{
[Serializable]
public class SOLineParams : IBqlTable
{
#region OrderQty
public abstract class orderQty : PX.Data.IBqlField
{
}
[PXDBDecimal]
[PXDefault(TypeCode.Decimal, "0.0")]
[PXUIField(DisplayName = "Quantity")]
public virtual decimal? OrderQty { get; set; }
#endregion
}
public PXFilter<SOLineParams> SOLineParam;
public PXAction<SOOrder> ChangeOk;
[PXUIField(DisplayName = "OK")]
[PXButton(CommitChanges = true)]
protected void changeOk()
{
var lineParams = SOLineParam.Current;
Base.Transactions.Cache.SetValue<SOLine.orderQty>(Base.Transactions.Current, lineParams.OrderQty);
SOLineParam.Cache.Clear();
}
public void SOLine_RowUpdated(PXCache sender, PXRowUpdatedEventArgs e)
{
if (!sender.ObjectsEqual<SOLineExt.triggerDialog>(e.Row, e.OldRow) && e.ExternalCall == true)
{
SOLineParam.AskExt();
}
}
}
<px:PXDSCallbackCommand Name="ChangeOk" Visible="False" />